From f7754e861f0dec2d4772d61102fa93252258f672 Mon Sep 17 00:00:00 2001 From: Aart Bik Date: Wed, 20 Sep 2017 10:33:06 -0700 Subject: Add more repeat support and register views. Rationale: This enables exhaustive testing of instructions that use various memory addressing modes and register views (full, half, quarter, etc.). Bug: 18380245 Bug: 18380559 Bug: 18380348 Test: assembler_x86[_64]_test Change-Id: I598c3e35a4791166ab629479ccb969ef3c6494b8 --- compiler/utils/x86/assembler_x86.cc | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'compiler/utils/x86/assembler_x86.cc') 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(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(addr.disp8()) - << "(%" << addr.base() << ",%" - << addr.index() << "," << (1 << addr.scale()) << ")"; + if (addr.rm() != ESP || addr.index() == ESP) { + return os << static_cast(addr.disp8()) << "(%" << addr.rm() << ")"; } - return os << static_cast(addr.disp8()) << "(%" << addr.rm() << ")"; + return os << static_cast(addr.disp8()) << "(%" << addr.base() << ",%" + << addr.index() << "," << (1 << addr.scale()) << ")"; case 2: - if (addr.rm() == ESP && addr.index() != ESP) { - return os << static_cast(addr.disp32()) - << "(%" << addr.base() << ",%" - << addr.index() << "," << (1 << addr.scale()) << ")"; + if (addr.rm() != ESP || addr.index() == ESP) { + return os << static_cast(addr.disp32()) << "(%" << addr.rm() << ")"; } - return os << static_cast(addr.disp32()) << "(%" << addr.rm() << ")"; + return os << static_cast(addr.disp32()) << "(%" << addr.base() << ",%" + << addr.index() << "," << (1 << addr.scale()) << ")"; default: return os << ""; } -- cgit v1.2.3-59-g8ed1b