diff options
author | 2017-09-21 16:09:17 +0000 | |
---|---|---|
committer | 2017-09-21 16:09:17 +0000 | |
commit | 1c8ac50fa9f62c7b78fc04faacbd854eac75c75a (patch) | |
tree | 00f8ee80169ad75b5ef98c93fce731a2043a3ae9 /compiler/utils/x86/assembler_x86.cc | |
parent | 20e9a7f4ac3b61c1a81653276036e124b19cb8d4 (diff) | |
parent | f7754e861f0dec2d4772d61102fa93252258f672 (diff) |
Merge "Add more repeat support and register views."
Diffstat (limited to 'compiler/utils/x86/assembler_x86.cc')
-rw-r--r-- | compiler/utils/x86/assembler_x86.cc | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/compiler/utils/x86/assembler_x86.cc b/compiler/utils/x86/assembler_x86.cc index 3162a32994..9fcede5e97 100644 --- a/compiler/utils/x86/assembler_x86.cc +++ b/compiler/utils/x86/assembler_x86.cc @@ -35,25 +35,25 @@ std::ostream& operator<<(std::ostream& os, const X87Register& reg) { std::ostream& operator<<(std::ostream& os, const Address& addr) { switch (addr.mod()) { case 0: - if (addr.rm() == ESP && addr.index() != ESP) { - return os << "(%" << addr.base() << ",%" - << addr.index() << "," << (1 << addr.scale()) << ")"; + if (addr.rm() != ESP || addr.index() == ESP) { + return os << "(%" << addr.rm() << ")"; + } else if (addr.base() == EBP) { + return os << static_cast<int>(addr.disp32()) << "(,%" << addr.index() + << "," << (1 << addr.scale()) << ")"; } - return os << "(%" << addr.rm() << ")"; + return os << "(%" << addr.base() << ",%" << addr.index() << "," << (1 << addr.scale()) << ")"; case 1: - if (addr.rm() == ESP && addr.index() != ESP) { - return os << static_cast<int>(addr.disp8()) - << "(%" << addr.base() << ",%" - << addr.index() << "," << (1 << addr.scale()) << ")"; + if (addr.rm() != ESP || addr.index() == ESP) { + return os << static_cast<int>(addr.disp8()) << "(%" << addr.rm() << ")"; } - return os << static_cast<int>(addr.disp8()) << "(%" << addr.rm() << ")"; + return os << static_cast<int>(addr.disp8()) << "(%" << addr.base() << ",%" + << addr.index() << "," << (1 << addr.scale()) << ")"; case 2: - if (addr.rm() == ESP && addr.index() != ESP) { - return os << static_cast<int>(addr.disp32()) - << "(%" << addr.base() << ",%" - << addr.index() << "," << (1 << addr.scale()) << ")"; + if (addr.rm() != ESP || addr.index() == ESP) { + return os << static_cast<int>(addr.disp32()) << "(%" << addr.rm() << ")"; } - return os << static_cast<int>(addr.disp32()) << "(%" << addr.rm() << ")"; + return os << static_cast<int>(addr.disp32()) << "(%" << addr.base() << ",%" + << addr.index() << "," << (1 << addr.scale()) << ")"; default: return os << "<address?>"; } |