Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index b175c58d07d62cbd3c76107c3126afba6d728309..a857e1488dbb8ebc43f6ca7b0c2cdfb385ffcc29 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -3951,7 +3951,10 @@ void LCodeGen::DoPower(LPower* instr) { |
ASSERT(ToDoubleRegister(instr->left()).is(d1)); |
ASSERT(ToDoubleRegister(instr->result()).is(d3)); |
- if (exponent_type.IsTagged()) { |
+ if (exponent_type.IsSmi()) { |
+ MathPowStub stub(MathPowStub::TAGGED); |
+ __ CallStub(&stub); |
+ } else if (exponent_type.IsTagged()) { |
Label no_deopt; |
__ JumpIfSmi(r2, &no_deopt); |
__ ldr(r7, FieldMemOperand(r2, HeapObject::kMapOffset)); |
@@ -4939,21 +4942,6 @@ void LCodeGen::DoSmiUntag(LSmiUntag* instr) { |
// If the input is a HeapObject, SmiUntag will set the carry flag. |
__ SmiUntag(result, input, SetCC); |
DeoptimizeIf(cs, instr->environment()); |
- } else if (instr->hydrogen()->value()->IsLoadKeyed()) { |
- HLoadKeyed* load = HLoadKeyed::cast(instr->hydrogen()->value()); |
- if (load->UsesMustHandleHole()) { |
- __ SmiUntag(result, input, SetCC); |
- if (load->hole_mode() == ALLOW_RETURN_HOLE) { |
- Label done; |
- __ b(cc, &done); |
- __ mov(result, Operand(Smi::FromInt(0))); |
- __ bind(&done); |
- } else { |
- DeoptimizeIf(cs, instr->environment()); |
- } |
- } else { |
- __ SmiUntag(result, input); |
- } |
} else { |
__ SmiUntag(result, input); |
} |