Index: src/compiler/x87/code-generator-x87.cc |
diff --git a/src/compiler/x87/code-generator-x87.cc b/src/compiler/x87/code-generator-x87.cc |
index 79215c38470ff0aa7def16cef264e165915b9df1..da7fdb481be90c60b97d29716cf96a428593b1ff 100644 |
--- a/src/compiler/x87/code-generator-x87.cc |
+++ b/src/compiler/x87/code-generator-x87.cc |
@@ -337,6 +337,33 @@ class OutOfLineRecordWrite final : public OutOfLineCode { |
__ bind(&done); \ |
} while (false) |
+#define ASSEMBLE_COMPARE(asm_instr) \ |
+ do { \ |
+ if (AddressingModeField::decode(instr->opcode()) != kMode_None) { \ |
+ size_t index = 0; \ |
+ Operand left = i.MemoryOperand(&index); \ |
+ if (HasImmediateInput(instr, index)) { \ |
+ __ asm_instr(left, i.InputImmediate(index)); \ |
+ } else { \ |
+ __ asm_instr(left, i.InputRegister(index)); \ |
+ } \ |
+ } 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) |
+ |
void CodeGenerator::AssembleDeconstructFrame() { |
__ mov(esp, ebp); |
__ pop(ebp); |
@@ -677,38 +704,22 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
} |
break; |
case kX87Cmp: |
- if (AddressingModeField::decode(instr->opcode()) != kMode_None) { |
- size_t index = 0; |
- Operand operand = i.MemoryOperand(&index); |
- if (HasImmediateInput(instr, index)) { |
- __ cmp(operand, i.InputImmediate(index)); |
- } else { |
- __ cmp(operand, i.InputRegister(index)); |
- } |
- } else { |
- if (HasImmediateInput(instr, 1)) { |
- __ cmp(i.InputOperand(0), i.InputImmediate(1)); |
- } else { |
- __ cmp(i.InputRegister(0), i.InputOperand(1)); |
- } |
- } |
+ ASSEMBLE_COMPARE(cmp); |
+ break; |
+ case kX87Cmp16: |
+ ASSEMBLE_COMPARE(cmpw); |
+ break; |
+ case kX87Cmp8: |
+ ASSEMBLE_COMPARE(cmpb); |
break; |
case kX87Test: |
- if (AddressingModeField::decode(instr->opcode()) != kMode_None) { |
- size_t index = 0; |
- Operand operand = i.MemoryOperand(&index); |
- if (HasImmediateInput(instr, index)) { |
- __ test(operand, i.InputImmediate(index)); |
- } else { |
- __ test(i.InputRegister(index), operand); |
- } |
- } else { |
- if (HasImmediateInput(instr, 1)) { |
- __ test(i.InputOperand(0), i.InputImmediate(1)); |
- } else { |
- __ test(i.InputRegister(0), i.InputOperand(1)); |
- } |
- } |
+ ASSEMBLE_COMPARE(test); |
+ break; |
+ case kX87Test16: |
+ ASSEMBLE_COMPARE(test_w); |
+ break; |
+ case kX87Test8: |
+ ASSEMBLE_COMPARE(test_b); |
break; |
case kX87Imul: |
if (HasImmediateInput(instr, 1)) { |