Index: src/mips/lithium-codegen-mips.cc |
diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc |
index db216ddbeeac0db1c821ed3b534a580109b3d05e..01550ddf4f8eba5b27d3d375a7b48c0f98795681 100644 |
--- a/src/mips/lithium-codegen-mips.cc |
+++ b/src/mips/lithium-codegen-mips.cc |
@@ -3644,7 +3644,10 @@ void LCodeGen::DoPower(LPower* instr) { |
ASSERT(ToDoubleRegister(instr->left()).is(f2)); |
ASSERT(ToDoubleRegister(instr->result()).is(f0)); |
- if (exponent_type.IsTagged()) { |
+ if (exponent_type.IsSmi()) { |
+ MathPowStub stub(MathPowStub::TAGGED); |
+ __ CallStub(&stub); |
+ } else if (exponent_type.IsTagged()) { |
Label no_deopt; |
__ JumpIfSmi(a2, &no_deopt); |
__ lw(t3, FieldMemOperand(a2, HeapObject::kMapOffset)); |
@@ -4648,22 +4651,6 @@ void LCodeGen::DoSmiUntag(LSmiUntag* instr) { |
__ And(scratch, input, Operand(kHeapObjectTag)); |
__ SmiUntag(result, input); |
DeoptimizeIf(ne, instr->environment(), scratch, Operand(zero_reg)); |
- } else if (instr->hydrogen()->value()->IsLoadKeyed()) { |
- HLoadKeyed* load = HLoadKeyed::cast(instr->hydrogen()->value()); |
- if (load->UsesMustHandleHole()) { |
- __ And(scratch, input, Operand(kHeapObjectTag)); |
- __ SmiUntag(result, input); |
- if (load->hole_mode() == ALLOW_RETURN_HOLE) { |
- Label done; |
- __ Branch(&done, eq, scratch, Operand(zero_reg)); |
- __ li(result, Operand(Smi::FromInt(0))); |
- __ bind(&done); |
- } else { |
- DeoptimizeIf(ne, instr->environment(), scratch, Operand(zero_reg)); |
- } |
- } else { |
- __ SmiUntag(result, input); |
- } |
} else { |
__ SmiUntag(result, input); |
} |