summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2015-09-18 14:36:49 +0100
committer Nicolas Geoffray <ngeoffray@google.com> 2015-09-18 14:47:38 +0100
commit46fe0650be6a69f63b54c0967194350c6a145557 (patch)
tree951c08c8993ad0da72dd96a651617a00a00d102e /compiler
parent46aa836b632b5f01e8b4c8e5d8eed2199e8f35d0 (diff)
Fix x64's cmpw.
Change-Id: If700f2994990864c8b34aa52eb7a767153a1f917
Diffstat (limited to 'compiler')
-rw-r--r--compiler/utils/x86_64/assembler_x86_64.cc2
-rw-r--r--compiler/utils/x86_64/assembler_x86_64_test.cc26
2 files changed, 26 insertions, 2 deletions
diff --git a/compiler/utils/x86_64/assembler_x86_64.cc b/compiler/utils/x86_64/assembler_x86_64.cc
index 89d7915f04..6e7d74d528 100644
--- a/compiler/utils/x86_64/assembler_x86_64.cc
+++ b/compiler/utils/x86_64/assembler_x86_64.cc
@@ -1213,8 +1213,8 @@ void X86_64Assembler::xchgl(CpuRegister reg, const Address& address) {
void X86_64Assembler::cmpw(const Address& address, const Immediate& imm) {
AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+ EmitOperandSizeOverride();
EmitOptionalRex32(address);
- EmitUint8(0x66);
EmitComplex(7, address, imm);
}
diff --git a/compiler/utils/x86_64/assembler_x86_64_test.cc b/compiler/utils/x86_64/assembler_x86_64_test.cc
index 82378f724a..00bb5ca36b 100644
--- a/compiler/utils/x86_64/assembler_x86_64_test.cc
+++ b/compiler/utils/x86_64/assembler_x86_64_test.cc
@@ -755,10 +755,34 @@ TEST_F(AssemblerX86_64Test, Movl) {
TEST_F(AssemblerX86_64Test, Movw) {
GetAssembler()->movw(x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0),
x86_64::CpuRegister(x86_64::R9));
- const char* expected = "movw %R9w, 0(%RAX)\n";
+ GetAssembler()->movw(x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0),
+ x86_64::Immediate(0));
+ GetAssembler()->movw(x86_64::Address(x86_64::CpuRegister(x86_64::R9), 0),
+ x86_64::Immediate(0));
+ GetAssembler()->movw(x86_64::Address(x86_64::CpuRegister(x86_64::R14), 0),
+ x86_64::Immediate(0));
+ const char* expected =
+ "movw %R9w, 0(%RAX)\n"
+ "movw $0, 0(%RAX)\n"
+ "movw $0, 0(%R9)\n"
+ "movw $0, 0(%R14)\n";
DriverStr(expected, "movw");
}
+TEST_F(AssemblerX86_64Test, Cmpw) {
+ GetAssembler()->cmpw(x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0),
+ x86_64::Immediate(0));
+ GetAssembler()->cmpw(x86_64::Address(x86_64::CpuRegister(x86_64::R9), 0),
+ x86_64::Immediate(0));
+ GetAssembler()->cmpw(x86_64::Address(x86_64::CpuRegister(x86_64::R14), 0),
+ x86_64::Immediate(0));
+ const char* expected =
+ "cmpw $0, 0(%RAX)\n"
+ "cmpw $0, 0(%R9)\n"
+ "cmpw $0, 0(%R14)\n";
+ DriverStr(expected, "cmpw");
+}
+
TEST_F(AssemblerX86_64Test, MovqAddrImm) {
GetAssembler()->movq(x86_64::Address(x86_64::CpuRegister(x86_64::RAX), 0),
x86_64::Immediate(-5));