diff options
| author | 2014-10-24 15:13:16 +0000 | |
|---|---|---|
| committer | 2014-10-24 15:13:17 +0000 | |
| commit | dc9667e50f6adf99f2d4cfea27b4abcbf42e6a3f (patch) | |
| tree | 74402e683e1ab3e26f5f8476184742593bdd4de0 /compiler | |
| parent | 54efee55ccfc9eb411b9fde6742fe457016a391d (diff) | |
| parent | b5de00f1c8f53e6552f1778702673c6274a98bb3 (diff) | |
Merge "Fix encoding of imul in x86_64 assembler."
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/utils/x86_64/assembler_x86_64.cc | 2 | ||||
| -rw-r--r-- | compiler/utils/x86_64/assembler_x86_64_test.cc | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/compiler/utils/x86_64/assembler_x86_64.cc b/compiler/utils/x86_64/assembler_x86_64.cc index f164138168..bf58b16ce7 100644 --- a/compiler/utils/x86_64/assembler_x86_64.cc +++ b/compiler/utils/x86_64/assembler_x86_64.cc @@ -1222,7 +1222,7 @@ void X86_64Assembler::imull(CpuRegister dst, CpuRegister src) { void X86_64Assembler::imull(CpuRegister reg, const Immediate& imm) { AssemblerBuffer::EnsureCapacity ensured(&buffer_); - EmitOptionalRex32(reg); + EmitOptionalRex32(reg, reg); EmitUint8(0x69); EmitOperand(reg.LowBits(), Operand(reg)); EmitImmediate(imm); diff --git a/compiler/utils/x86_64/assembler_x86_64_test.cc b/compiler/utils/x86_64/assembler_x86_64_test.cc index 18c5cbcbc6..0e8ea5b3ee 100644 --- a/compiler/utils/x86_64/assembler_x86_64_test.cc +++ b/compiler/utils/x86_64/assembler_x86_64_test.cc @@ -186,6 +186,15 @@ TEST_F(AssemblerX86_64Test, Movw) { DriverStr(expected, "movw"); } +TEST_F(AssemblerX86_64Test, IMulImmediate) { + GetAssembler()->imull(x86_64::CpuRegister(x86_64::RAX), x86_64::Immediate(0x40000)); + GetAssembler()->imull(x86_64::CpuRegister(x86_64::R8), x86_64::Immediate(0x40000)); + const char* expected = + "imull $0x40000,%eax,%eax\n" + "imull $0x40000,%r8d,%r8d\n"; + DriverStr(expected, "imul"); +} + std::string setcc_test_fn(x86_64::X86_64Assembler* assembler) { // From Condition |