Index: src/ia32/lithium-codegen-ia32.cc |
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
index d9504c7592ea670deb7c65b221338d8d5f5fea03..27952f34014e5ec74602be20b3b0f6012e25dada 100644 |
--- a/src/ia32/lithium-codegen-ia32.cc |
+++ b/src/ia32/lithium-codegen-ia32.cc |
@@ -3797,10 +3797,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(xmm1)); |
DCHECK(!instr->right()->IsRegister() || |
- ToRegister(instr->right()).is(eax)); |
+ ToRegister(instr->right()).is(tagged_exponent)); |
DCHECK(ToDoubleRegister(instr->left()).is(xmm2)); |
DCHECK(ToDoubleRegister(instr->result()).is(xmm3)); |
@@ -3809,8 +3810,9 @@ void LCodeGen::DoPower(LPower* instr) { |
__ CallStub(&stub); |
} else if (exponent_type.IsTagged()) { |
Label no_deopt; |
- __ JumpIfSmi(eax, &no_deopt); |
- __ CmpObjectType(eax, HEAP_NUMBER_TYPE, ecx); |
+ __ JumpIfSmi(tagged_exponent, &no_deopt); |
+ DCHECK(!ecx.is(tagged_exponent)); |
+ __ CmpObjectType(tagged_exponent, HEAP_NUMBER_TYPE, ecx); |
DeoptimizeIf(not_equal, instr->environment()); |
__ bind(&no_deopt); |
MathPowStub stub(isolate(), MathPowStub::TAGGED); |