| Index: runtime/vm/assembler_x64.cc
|
| diff --git a/runtime/vm/assembler_x64.cc b/runtime/vm/assembler_x64.cc
|
| index 5511c60f72a300710e44a0d120a620027ee5d54b..cc93724b70a936b0f439b9fa66a68e5c47ad2b17 100644
|
| --- a/runtime/vm/assembler_x64.cc
|
| +++ b/runtime/vm/assembler_x64.cc
|
| @@ -1671,9 +1671,14 @@ void Assembler::addq(Register reg, const Immediate& imm) {
|
|
|
|
|
| void Assembler::addq(const Address& address, const Immediate& imm) {
|
| - // TODO(srdjan): Implement shorter version for imm32.
|
| - movq(TMP, imm);
|
| - addq(address, TMP);
|
| + if (imm.is_int32()) {
|
| + AssemblerBuffer::EnsureCapacity ensured(&buffer_);
|
| + EmitOperandREX(0, address, REX_W);
|
| + EmitComplex(0, Operand(address), imm);
|
| + } else {
|
| + movq(TMP, imm);
|
| + addq(address, TMP);
|
| + }
|
| }
|
|
|
|
|
| @@ -1835,9 +1840,14 @@ void Assembler::subq(const Address& address, Register reg) {
|
|
|
|
|
| void Assembler::subq(const Address& address, const Immediate& imm) {
|
| - // TODO(srdjan): Implement shorter version for imm32.
|
| - movq(TMP, imm);
|
| - subq(address, TMP);
|
| + if (imm.is_int32()) {
|
| + AssemblerBuffer::EnsureCapacity ensured(&buffer_);
|
| + EmitOperandREX(0, address, REX_W);
|
| + EmitComplex(5, Operand(address), imm);
|
| + } else {
|
| + movq(TMP, imm);
|
| + subq(address, TMP);
|
| + }
|
| }
|
|
|
|
|
|
|