Index: src/x64/lithium-codegen-x64.cc |
diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc |
index 44d056fe135ab5dbc48396f820ea4b354567d9e5..f97b7fcf73e0f33c94983fab4d48ccea0d164f3e 100644 |
--- a/src/x64/lithium-codegen-x64.cc |
+++ b/src/x64/lithium-codegen-x64.cc |
@@ -3647,7 +3647,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(exponent, &no_deopt); |
__ CmpObjectType(exponent, HEAP_NUMBER_TYPE, rcx); |
@@ -4643,21 +4646,6 @@ void LCodeGen::DoSmiUntag(LSmiUntag* instr) { |
if (instr->needs_check()) { |
Condition is_smi = __ CheckSmi(input); |
DeoptimizeIf(NegateCondition(is_smi), instr->environment()); |
- } else if (instr->hydrogen()->value()->IsLoadKeyed()) { |
- HLoadKeyed* load = HLoadKeyed::cast(instr->hydrogen()->value()); |
- if (load->UsesMustHandleHole()) { |
- Condition cc = masm()->CheckSmi(input); |
- if (load->hole_mode() == ALLOW_RETURN_HOLE) { |
- Label done; |
- __ j(cc, &done); |
- __ xor_(input, input); |
- __ bind(&done); |
- } else { |
- DeoptimizeIf(NegateCondition(cc), instr->environment()); |
- } |
- } else { |
- __ AssertSmi(input); |
- } |
} else { |
__ AssertSmi(input); |
} |