Index: src/mips/code-stubs-mips.cc |
diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc |
index af5f87d47645bf38ea7d26a0707402e44ca50e4b..107b0772c9d0df2403d5df4a2048c534f7061f49 100644 |
--- a/src/mips/code-stubs-mips.cc |
+++ b/src/mips/code-stubs-mips.cc |
@@ -546,23 +546,27 @@ void DoubleToIStub::Generate(MacroAssembler* masm) { |
GetRegisterThatIsNotOneOf(input_reg, result_reg, scratch); |
Register scratch3 = |
GetRegisterThatIsNotOneOf(input_reg, result_reg, scratch, scratch2); |
- DoubleRegister double_scratch = kLithiumScratchDouble.low(); |
- DoubleRegister double_input = f12; |
+ DoubleRegister double_scratch = kLithiumScratchDouble; |
__ Push(scratch, scratch2, scratch3); |
- __ ldc1(double_input, MemOperand(input_reg, double_offset)); |
- |
if (!skip_fastpath()) { |
+ // Load double input. |
+ __ ldc1(double_scratch, MemOperand(input_reg, double_offset)); |
+ |
// Clear cumulative exception flags and save the FCSR. |
__ cfc1(scratch2, FCSR); |
__ ctc1(zero_reg, FCSR); |
+ |
// Try a conversion to a signed integer. |
- __ trunc_w_d(double_scratch, double_input); |
+ __ Trunc_w_d(double_scratch, double_scratch); |
+ // Move the converted value into the result register. |
__ mfc1(result_reg, double_scratch); |
+ |
// Retrieve and restore the FCSR. |
__ cfc1(scratch, FCSR); |
__ ctc1(scratch2, FCSR); |
+ |
// Check for overflow and NaNs. |
__ And( |
scratch, scratch, |
@@ -575,7 +579,9 @@ void DoubleToIStub::Generate(MacroAssembler* masm) { |
// Load the double value and perform a manual truncation. |
Register input_high = scratch2; |
Register input_low = scratch3; |
- __ Move(input_low, input_high, double_input); |
+ |
+ __ lw(input_low, MemOperand(input_reg, double_offset)); |
+ __ lw(input_high, MemOperand(input_reg, double_offset + kIntSize)); |
Label normal_exponent, restore_sign; |
// Extract the biased exponent in result. |