Index: src/compiler/mips/code-generator-mips.cc |
diff --git a/src/compiler/mips/code-generator-mips.cc b/src/compiler/mips/code-generator-mips.cc |
index c85569b1a980029d865998d5154bbaba86d79f22..ba02093ce6737a07aacdeec07dd08691d1fc7094 100644 |
--- a/src/compiler/mips/code-generator-mips.cc |
+++ b/src/compiler/mips/code-generator-mips.cc |
@@ -1332,9 +1332,19 @@ |
case kMipsFloat64InsertHighWord32: |
__ FmoveHigh(i.OutputDoubleRegister(), i.InputRegister(1)); |
break; |
- case kMipsFloat64SilenceNaN: |
- __ FPUCanonicalizeNaN(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); |
- break; |
+ case kMipsFloat64SilenceNaN: { |
+ FPURegister value = i.InputDoubleRegister(0); |
+ FPURegister result = i.OutputDoubleRegister(); |
+ Register scratch0 = i.TempRegister(0); |
+ Label is_nan, not_nan; |
+ __ BranchF(NULL, &is_nan, eq, value, value); |
+ __ Branch(¬_nan); |
+ __ bind(&is_nan); |
+ __ LoadRoot(scratch0, Heap::kNanValueRootIndex); |
+ __ ldc1(result, FieldMemOperand(scratch0, HeapNumber::kValueOffset)); |
+ __ bind(¬_nan); |
+ break; |
+ } |
// ... more basic instructions ... |