diff options
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?>"; } |