Index: src/arm/lithium-arm.cc |
diff --git a/src/arm/lithium-arm.cc b/src/arm/lithium-arm.cc |
index 6e6f1fa1e13b95d82b1547824de6cb54cf7f4158..d63024a3b315182e900d224302f9b2b76d10b41b 100644 |
--- a/src/arm/lithium-arm.cc |
+++ b/src/arm/lithium-arm.cc |
@@ -1237,12 +1237,15 @@ LInstruction* LChunkBuilder::DoDiv(HDiv* instr) { |
if (instr->representation().IsDouble()) { |
return DoArithmeticD(Token::DIV, instr); |
} else if (instr->representation().IsInteger32()) { |
- // The temporary operand is necessary to ensure that right is not allocated |
- // into edx. |
- FixedTemp(r1); |
+ // TODO(1042) The fixed register allocation |
+ // is needed because we call GenericBinaryOpStub from |
+ // the generated code, which requires registers r0 |
+ // and r1 to be used. We should remove that |
+ // when we provide a native implementation. |
LOperand* value = UseFixed(instr->left(), r0); |
- LOperand* divisor = UseRegister(instr->right()); |
- return AssignEnvironment(DefineFixed(new LDivI(value, divisor), r0)); |
+ LOperand* divisor = UseFixed(instr->right(), r1); |
+ return AssignEnvironment(AssignPointerMap( |
+ DefineFixed(new LDivI(value, divisor), r0))); |
} else { |
return DoArithmeticT(Token::DIV, instr); |
} |