Index: src/ia32/lithium-codegen-ia32.cc |
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
index 3e237638d78e7481d43e14973bb251fd396a5a83..3d0457431c218c79f2f585b0c3df4c29928c5f84 100644 |
--- a/src/ia32/lithium-codegen-ia32.cc |
+++ b/src/ia32/lithium-codegen-ia32.cc |
@@ -3934,7 +3934,10 @@ void LCodeGen::DoPower(LPower* instr) { |
ASSERT(ToDoubleRegister(instr->left()).is(xmm2)); |
ASSERT(ToDoubleRegister(instr->result()).is(xmm3)); |
- if (exponent_type.IsTagged()) { |
+ if (exponent_type.IsSmi()) { |
+ MathPowStub stub(MathPowStub::TAGGED); |
+ __ CallStub(&stub); |
+ } else if (exponent_type.IsTagged()) { |
Label no_deopt; |
__ JumpIfSmi(eax, &no_deopt); |
__ CmpObjectType(eax, HEAP_NUMBER_TYPE, ecx); |
@@ -5057,21 +5060,6 @@ void LCodeGen::DoSmiUntag(LSmiUntag* instr) { |
if (instr->needs_check()) { |
__ test(result, Immediate(kSmiTagMask)); |
DeoptimizeIf(not_zero, instr->environment()); |
- } else if (instr->hydrogen()->value()->IsLoadKeyed()) { |
- HLoadKeyed* load = HLoadKeyed::cast(instr->hydrogen()->value()); |
- if (load->UsesMustHandleHole()) { |
- __ test(result, Immediate(kSmiTagMask)); |
- if (load->hole_mode() == ALLOW_RETURN_HOLE) { |
- Label done; |
- __ j(equal, &done); |
- __ xor_(result, result); |
- __ bind(&done); |
- } else { |
- DeoptimizeIf(not_zero, instr->environment()); |
- } |
- } else { |
- __ AssertSmi(result); |
- } |
} else { |
__ AssertSmi(result); |
} |