summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2018-02-13 13:46:15 +0000
committer Vladimir Marko <vmarko@google.com> 2018-02-13 14:03:55 +0000
commit29a8d8478ee4a3386b715c2a1086b190c57f0aa4 (patch)
tree3a6ae60ce31b47723b73e2fb369301a7d88666cd /compiler
parent522c5ce170796bac858bcfbd84158e621d61d40e (diff)
x86/x86-64: Fix cmpw() for 9-16 bit immediates.
Test: assembler_x86_test assembler_x86_64_test Bug: 71853552 Change-Id: I0d05a5f461557122fffa89a1ba054886dd70ef12
Diffstat (limited to 'compiler')
-rw-r--r--compiler/utils/x86/assembler_x86.cc2
-rw-r--r--compiler/utils/x86/assembler_x86_test.cc4
-rw-r--r--compiler/utils/x86_64/assembler_x86_64.cc2
-rw-r--r--compiler/utils/x86_64/assembler_x86_64_test.cc5
4 files changed, 5 insertions, 8 deletions
diff --git a/compiler/utils/x86/assembler_x86.cc b/compiler/utils/x86/assembler_x86.cc
index 8640e2db0e..ea160c8993 100644
--- a/compiler/utils/x86/assembler_x86.cc
+++ b/compiler/utils/x86/assembler_x86.cc
@@ -1914,7 +1914,7 @@ void X86Assembler::cmpb(const Address& address, const Immediate& imm) {
void X86Assembler::cmpw(const Address& address, const Immediate& imm) {
AssemblerBuffer::EnsureCapacity ensured(&buffer_);
EmitUint8(0x66);
- EmitComplex(7, address, imm);
+ EmitComplex(7, address, imm, /* is_16_op */ true);
}
diff --git a/compiler/utils/x86/assembler_x86_test.cc b/compiler/utils/x86/assembler_x86_test.cc
index 937dd80c4e..2fd1b27182 100644
--- a/compiler/utils/x86/assembler_x86_test.cc
+++ b/compiler/utils/x86/assembler_x86_test.cc
@@ -921,9 +921,7 @@ TEST_F(AssemblerX86Test, Cmpb) {
}
TEST_F(AssemblerX86Test, Cmpw) {
- DriverStr(RepeatAI(&x86::X86Assembler::cmpw,
- /*imm_bytes*/ 1U,
- "cmpw ${imm}, {mem}"), "cmpw"); // TODO: only imm8?
+ DriverStr(RepeatAI(&x86::X86Assembler::cmpw, /*imm_bytes*/ 2U, "cmpw ${imm}, {mem}"), "cmpw");
}
} // namespace art
diff --git a/compiler/utils/x86_64/assembler_x86_64.cc b/compiler/utils/x86_64/assembler_x86_64.cc
index feabf260af..ff5a357c5e 100644
--- a/compiler/utils/x86_64/assembler_x86_64.cc
+++ b/compiler/utils/x86_64/assembler_x86_64.cc
@@ -2199,7 +2199,7 @@ void X86_64Assembler::cmpw(const Address& address, const Immediate& imm) {
CHECK(imm.is_int32());
EmitOperandSizeOverride();
EmitOptionalRex32(address);
- EmitComplex(7, address, imm);
+ EmitComplex(7, address, imm, /* is_16_op */ true);
}
diff --git a/compiler/utils/x86_64/assembler_x86_64_test.cc b/compiler/utils/x86_64/assembler_x86_64_test.cc
index 5e6c83396a..6b1e53c35a 100644
--- a/compiler/utils/x86_64/assembler_x86_64_test.cc
+++ b/compiler/utils/x86_64/assembler_x86_64_test.cc
@@ -967,9 +967,8 @@ TEST_F(AssemblerX86_64Test, MovbStore) {
}
TEST_F(AssemblerX86_64Test, Cmpw) {
- DriverStr(RepeatAI(&x86_64::X86_64Assembler::cmpw,
- /*imm_bytes*/ 1U,
- "cmpw ${imm}, {mem}"), "cmpw"); // TODO: only imm8?
+ DriverStr(
+ RepeatAI(&x86_64::X86_64Assembler::cmpw, /*imm_bytes*/ 2U, "cmpw ${imm}, {mem}"), "cmpw");
}
TEST_F(AssemblerX86_64Test, MovqAddrImm) {