Index: src/compiler/x64/code-generator-x64.cc |
diff --git a/src/compiler/x64/code-generator-x64.cc b/src/compiler/x64/code-generator-x64.cc |
index 1a96a3a4c7950bdc9abbace94c806af4e1fdd954..34e8de42780f8c4904a70319ab352a690105ad2c 100644 |
--- a/src/compiler/x64/code-generator-x64.cc |
+++ b/src/compiler/x64/code-generator-x64.cc |
@@ -331,22 +331,27 @@ void EmitOOLTrapIfNeeded(Zone* zone, CodeGenerator* codegen, |
} \ |
} while (0) |
- |
-#define ASSEMBLE_BINOP(asm_instr) \ |
- do { \ |
- if (HasImmediateInput(instr, 1)) { \ |
- if (instr->InputAt(0)->IsRegister()) { \ |
- __ asm_instr(i.InputRegister(0), i.InputImmediate(1)); \ |
- } else { \ |
- __ asm_instr(i.InputOperand(0), i.InputImmediate(1)); \ |
- } \ |
- } else { \ |
- if (instr->InputAt(1)->IsRegister()) { \ |
- __ asm_instr(i.InputRegister(0), i.InputRegister(1)); \ |
- } else { \ |
- __ asm_instr(i.InputRegister(0), i.InputOperand(1)); \ |
- } \ |
- } \ |
+#define ASSEMBLE_BINOP(asm_instr) \ |
+ do { \ |
+ if (AddressingModeField::decode(instr->opcode()) != kMode_None) { \ |
+ size_t index = 1; \ |
+ Operand right = i.MemoryOperand(&index); \ |
+ __ asm_instr(i.InputRegister(0), right); \ |
+ } else { \ |
+ if (HasImmediateInput(instr, 1)) { \ |
+ if (instr->InputAt(0)->IsRegister()) { \ |
+ __ asm_instr(i.InputRegister(0), i.InputImmediate(1)); \ |
+ } else { \ |
+ __ asm_instr(i.InputOperand(0), i.InputImmediate(1)); \ |
+ } \ |
+ } else { \ |
+ if (instr->InputAt(1)->IsRegister()) { \ |
+ __ asm_instr(i.InputRegister(0), i.InputRegister(1)); \ |
+ } else { \ |
+ __ asm_instr(i.InputRegister(0), i.InputOperand(1)); \ |
+ } \ |
+ } \ |
+ } \ |
} while (0) |
#define ASSEMBLE_COMPARE(asm_instr) \ |