Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index 377d38bb2965dbaa238f7fe762cf17533db501c1..d5c0468c46a17cb54444ae76fc20ee6d00292229 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -3888,10 +3888,11 @@ void LCodeGen::DoPower(LPower* instr) { |
Representation exponent_type = instr->hydrogen()->right()->representation(); |
// Having marked this as a call, we can use any registers. |
// Just make sure that the input/output registers are the expected ones. |
+ Register tagged_exponent = MathPowTaggedDescriptor::exponent(); |
DCHECK(!instr->right()->IsDoubleRegister() || |
ToDoubleRegister(instr->right()).is(d1)); |
DCHECK(!instr->right()->IsRegister() || |
- ToRegister(instr->right()).is(r2)); |
+ ToRegister(instr->right()).is(tagged_exponent)); |
DCHECK(ToDoubleRegister(instr->left()).is(d0)); |
DCHECK(ToDoubleRegister(instr->result()).is(d2)); |
@@ -3900,8 +3901,9 @@ void LCodeGen::DoPower(LPower* instr) { |
__ CallStub(&stub); |
} else if (exponent_type.IsTagged()) { |
Label no_deopt; |
- __ JumpIfSmi(r2, &no_deopt); |
- __ ldr(r6, FieldMemOperand(r2, HeapObject::kMapOffset)); |
+ __ JumpIfSmi(tagged_exponent, &no_deopt); |
+ DCHECK(!r6.is(tagged_exponent)); |
+ __ ldr(r6, FieldMemOperand(tagged_exponent, HeapObject::kMapOffset)); |
__ LoadRoot(ip, Heap::kHeapNumberMapRootIndex); |
__ cmp(r6, Operand(ip)); |
DeoptimizeIf(ne, instr->environment()); |