Index: src/mips/lithium-codegen-mips.cc |
diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc |
index e19caf34c2a901be98b7a9eb414fcb59c9e10c35..dde2ba1c16b65c51e182d0940025d2cb9d20721f 100644 |
--- a/src/mips/lithium-codegen-mips.cc |
+++ b/src/mips/lithium-codegen-mips.cc |
@@ -3264,22 +3264,19 @@ void LCodeGen::DoMathAbs(LUnaryMathOperation* instr) { |
void LCodeGen::DoMathFloor(LUnaryMathOperation* instr) { |
DoubleRegister input = ToDoubleRegister(instr->value()); |
Register result = ToRegister(instr->result()); |
- FPURegister single_scratch = double_scratch0().low(); |
Register scratch1 = scratch0(); |
Register except_flag = ToRegister(instr->temp()); |
__ EmitFPUTruncate(kRoundToMinusInf, |
- single_scratch, |
+ result, |
input, |
scratch1, |
+ double_scratch0(), |
except_flag); |
// Deopt if the operation did not succeed. |
DeoptimizeIf(ne, instr->environment(), except_flag, Operand(zero_reg)); |
- // Load the result. |
- __ mfc1(result, single_scratch); |
- |
if (instr->hydrogen()->CheckFlag(HValue::kBailoutOnMinusZero)) { |
// Test for -0. |
Label done; |
@@ -3295,6 +3292,7 @@ void LCodeGen::DoMathFloor(LUnaryMathOperation* instr) { |
void LCodeGen::DoMathRound(LUnaryMathOperation* instr) { |
DoubleRegister input = ToDoubleRegister(instr->value()); |
Register result = ToRegister(instr->result()); |
+ DoubleRegister double_scratch1 = ToDoubleRegister(instr->temp()); |
Register scratch = scratch0(); |
Label done, check_sign_on_zero; |
@@ -3346,17 +3344,15 @@ void LCodeGen::DoMathRound(LUnaryMathOperation* instr) { |
} |
Register except_flag = scratch; |
- |
__ EmitFPUTruncate(kRoundToMinusInf, |
- double_scratch0().low(), |
- double_scratch0(), |
result, |
+ double_scratch0(), |
+ at, |
+ double_scratch1, |
except_flag); |
DeoptimizeIf(ne, instr->environment(), except_flag, Operand(zero_reg)); |
- __ mfc1(result, double_scratch0().low()); |
- |
if (instr->hydrogen()->CheckFlag(HValue::kBailoutOnMinusZero)) { |
// Test for -0. |
__ Branch(&done, ne, result, Operand(zero_reg)); |
@@ -4393,7 +4389,7 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr) { |
Register scratch1 = scratch0(); |
Register scratch2 = ToRegister(instr->temp()); |
DoubleRegister double_scratch = double_scratch0(); |
- FPURegister single_scratch = double_scratch.low(); |
+ DoubleRegister double_scratch2 = ToDoubleRegister(instr->temp3()); |
ASSERT(!scratch1.is(input_reg) && !scratch1.is(scratch2)); |
ASSERT(!scratch2.is(input_reg) && !scratch2.is(scratch1)); |
@@ -4409,7 +4405,7 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr) { |
if (instr->truncating()) { |
Register scratch3 = ToRegister(instr->temp2()); |
- DoubleRegister double_scratch2 = ToDoubleRegister(instr->temp3()); |
+ FPURegister single_scratch = double_scratch.low(); |
ASSERT(!scratch3.is(input_reg) && |
!scratch3.is(scratch1) && |
!scratch3.is(scratch2)); |
@@ -4444,18 +4440,16 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr) { |
Register except_flag = scratch2; |
__ EmitFPUTruncate(kRoundToZero, |
- single_scratch, |
+ input_reg, |
double_scratch, |
scratch1, |
+ double_scratch2, |
except_flag, |
kCheckForInexactConversion); |
// Deopt if the operation did not succeed. |
DeoptimizeIf(ne, instr->environment(), except_flag, Operand(zero_reg)); |
- // Load the result. |
- __ mfc1(input_reg, single_scratch); |
- |
if (instr->hydrogen()->CheckFlag(HValue::kBailoutOnMinusZero)) { |
__ Branch(&done, ne, input_reg, Operand(zero_reg)); |
@@ -4517,10 +4511,10 @@ void LCodeGen::DoDoubleToI(LDoubleToI* instr) { |
Register scratch1 = scratch0(); |
Register scratch2 = ToRegister(instr->temp()); |
DoubleRegister double_input = ToDoubleRegister(instr->value()); |
- FPURegister single_scratch = double_scratch0().low(); |
if (instr->truncating()) { |
Register scratch3 = ToRegister(instr->temp2()); |
+ FPURegister single_scratch = double_scratch0().low(); |
__ EmitECMATruncate(result_reg, |
double_input, |
single_scratch, |
@@ -4531,17 +4525,15 @@ void LCodeGen::DoDoubleToI(LDoubleToI* instr) { |
Register except_flag = scratch2; |
__ EmitFPUTruncate(kRoundToMinusInf, |
- single_scratch, |
+ result_reg, |
double_input, |
scratch1, |
+ double_scratch0(), |
except_flag, |
kCheckForInexactConversion); |
// Deopt if the operation did not succeed (except_flag != 0). |
DeoptimizeIf(ne, instr->environment(), except_flag, Operand(zero_reg)); |
- |
- // Load the result. |
- __ mfc1(result_reg, single_scratch); |
} |
} |