Index: src/compiler/arm/code-generator-arm.cc |
diff --git a/src/compiler/arm/code-generator-arm.cc b/src/compiler/arm/code-generator-arm.cc |
index 2c6224a2ac81c5301a7b74c19c20adccff2f9adc..c371d411b4b991fe806bd0ddd16e5768190cdd8d 100644 |
--- a/src/compiler/arm/code-generator-arm.cc |
+++ b/src/compiler/arm/code-generator-arm.cc |
@@ -125,13 +125,16 @@ class ArmOperandConverter final : public InstructionOperandConverter { |
case kMode_Operand2_R: |
case kMode_Operand2_R_ASR_I: |
case kMode_Operand2_R_ASR_R: |
- case kMode_Operand2_R_LSL_I: |
case kMode_Operand2_R_LSL_R: |
case kMode_Operand2_R_LSR_I: |
case kMode_Operand2_R_LSR_R: |
case kMode_Operand2_R_ROR_I: |
case kMode_Operand2_R_ROR_R: |
break; |
+ case kMode_Operand2_R_LSL_I: |
+ *first_index += 3; |
+ return MemOperand(InputRegister(index + 0), InputRegister(index + 1), |
+ LSL, InputInt32(index + 2)); |
case kMode_Offset_RI: |
*first_index += 2; |
return MemOperand(InputRegister(index + 0), InputInt32(index + 1)); |
@@ -1117,59 +1120,44 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
__ ldrsb(i.OutputRegister(), i.InputOffset()); |
DCHECK_EQ(LeaveCC, i.OutputSBit()); |
break; |
- case kArmStrb: { |
- size_t index = 0; |
- MemOperand operand = i.InputOffset(&index); |
- __ strb(i.InputRegister(index), operand); |
+ case kArmStrb: |
+ __ strb(i.InputRegister(0), i.InputOffset(1)); |
DCHECK_EQ(LeaveCC, i.OutputSBit()); |
break; |
- } |
case kArmLdrh: |
__ ldrh(i.OutputRegister(), i.InputOffset()); |
break; |
case kArmLdrsh: |
__ ldrsh(i.OutputRegister(), i.InputOffset()); |
break; |
- case kArmStrh: { |
- size_t index = 0; |
- MemOperand operand = i.InputOffset(&index); |
- __ strh(i.InputRegister(index), operand); |
+ case kArmStrh: |
+ __ strh(i.InputRegister(0), i.InputOffset(1)); |
DCHECK_EQ(LeaveCC, i.OutputSBit()); |
break; |
- } |
case kArmLdr: |
__ ldr(i.OutputRegister(), i.InputOffset()); |
break; |
- case kArmStr: { |
- size_t index = 0; |
- MemOperand operand = i.InputOffset(&index); |
- __ str(i.InputRegister(index), operand); |
+ case kArmStr: |
+ __ str(i.InputRegister(0), i.InputOffset(1)); |
DCHECK_EQ(LeaveCC, i.OutputSBit()); |
break; |
- } |
case kArmVldrF32: { |
__ vldr(i.OutputFloat32Register(), i.InputOffset()); |
DCHECK_EQ(LeaveCC, i.OutputSBit()); |
break; |
} |
- case kArmVstrF32: { |
- size_t index = 0; |
- MemOperand operand = i.InputOffset(&index); |
- __ vstr(i.InputFloat32Register(index), operand); |
+ case kArmVstrF32: |
+ __ vstr(i.InputFloat32Register(0), i.InputOffset(1)); |
DCHECK_EQ(LeaveCC, i.OutputSBit()); |
break; |
- } |
case kArmVldrF64: |
__ vldr(i.OutputFloat64Register(), i.InputOffset()); |
DCHECK_EQ(LeaveCC, i.OutputSBit()); |
break; |
- case kArmVstrF64: { |
- size_t index = 0; |
- MemOperand operand = i.InputOffset(&index); |
- __ vstr(i.InputFloat64Register(index), operand); |
+ case kArmVstrF64: |
+ __ vstr(i.InputFloat64Register(0), i.InputOffset(1)); |
DCHECK_EQ(LeaveCC, i.OutputSBit()); |
break; |
- } |
case kArmFloat32Max: { |
CpuFeatureScope scope(masm(), ARMv8); |
// (b < a) ? a : b |