Chromium Code Reviews| Index: src/compiler/ia32/code-generator-ia32.cc |
| diff --git a/src/compiler/ia32/code-generator-ia32.cc b/src/compiler/ia32/code-generator-ia32.cc |
| index 0f6d1c3a4a8ff7db2ed2a07436e3a96e542bbe16..dcfa898bf253154f47eeef3915e20a80f6173895 100644 |
| --- a/src/compiler/ia32/code-generator-ia32.cc |
| +++ b/src/compiler/ia32/code-generator-ia32.cc |
| @@ -760,6 +760,21 @@ class OutOfLineRecordWrite final : public OutOfLineCode { |
| __ add(esp, Immediate(kDoubleSize)); \ |
| } while (false) |
| +#define ASSEMBLE_BINOP(asm_instr) \ |
|
ahaas
2017/03/09 07:10:58
Is it worth to implement ASSEMBLE_BINOP as a macro
shiyu.zhang
2017/03/09 09:53:16
I use a macro here in order to be consistent with
ahaas
2017/03/10 12:02:50
I think it's fine like this for this CL, since it
|
| + do { \ |
| + if (AddressingModeField::decode(instr->opcode()) != kMode_None) { \ |
|
ahaas
2017/03/09 07:10:58
Can you pass in {instr} as a parameter to the macr
shiyu.zhang
2017/03/09 09:53:17
The usage of ASSEMBLE_BINOP is similar to ASSEMBLE
ahaas
2017/03/10 12:02:50
I think it's a bad style to assume implicitly in t
shiyu.zhang
2017/03/13 02:39:35
Sure. And I think {i} should also be passed in as
ahaas
2017/03/13 08:10:57
Oh, I was not aware that this code style is all ov
|
| + size_t index = 1; \ |
| + Operand right = i.MemoryOperand(&index); \ |
| + __ asm_instr(i.InputRegister(0), right); \ |
| + } else { \ |
| + if (HasImmediateInput(instr, 1)) { \ |
| + __ asm_instr(i.InputOperand(0), i.InputImmediate(1)); \ |
| + } else { \ |
| + __ asm_instr(i.InputRegister(0), i.InputOperand(1)); \ |
| + } \ |
| + } \ |
| + } while (0) |
| + |
| void CodeGenerator::AssembleDeconstructFrame() { |
| __ mov(esp, ebp); |
| __ pop(ebp); |
| @@ -1130,18 +1145,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
| ASSEMBLE_IEEE754_UNOP(tanh); |
| break; |
| case kIA32Add: |
| - if (HasImmediateInput(instr, 1)) { |
| - __ add(i.InputOperand(0), i.InputImmediate(1)); |
| - } else { |
| - __ add(i.InputRegister(0), i.InputOperand(1)); |
| - } |
| + ASSEMBLE_BINOP(add); |
| break; |
| case kIA32And: |
| - if (HasImmediateInput(instr, 1)) { |
| - __ and_(i.InputOperand(0), i.InputImmediate(1)); |
| - } else { |
| - __ and_(i.InputRegister(0), i.InputOperand(1)); |
| - } |
| + ASSEMBLE_BINOP(and_); |
| break; |
| case kIA32Cmp: |
| ASSEMBLE_COMPARE(cmp); |
| @@ -1189,25 +1196,13 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
| __ neg(i.OutputOperand()); |
| break; |
| case kIA32Or: |
| - if (HasImmediateInput(instr, 1)) { |
| - __ or_(i.InputOperand(0), i.InputImmediate(1)); |
| - } else { |
| - __ or_(i.InputRegister(0), i.InputOperand(1)); |
| - } |
| + ASSEMBLE_BINOP(or_); |
| break; |
| case kIA32Xor: |
| - if (HasImmediateInput(instr, 1)) { |
| - __ xor_(i.InputOperand(0), i.InputImmediate(1)); |
| - } else { |
| - __ xor_(i.InputRegister(0), i.InputOperand(1)); |
| - } |
| + ASSEMBLE_BINOP(xor_); |
| break; |
| case kIA32Sub: |
| - if (HasImmediateInput(instr, 1)) { |
| - __ sub(i.InputOperand(0), i.InputImmediate(1)); |
| - } else { |
| - __ sub(i.InputRegister(0), i.InputOperand(1)); |
| - } |
| + ASSEMBLE_BINOP(sub); |
| break; |
| case kIA32Shl: |
| if (HasImmediateInput(instr, 1)) { |