| Index: src/mips/code-stubs-mips.cc
 | 
| diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc
 | 
| index 4717847a21e962863ee740c66e99f6f2b4e429d4..a928dc0aeb5c942ffb130999aa96881705fa6753 100644
 | 
| --- a/src/mips/code-stubs-mips.cc
 | 
| +++ b/src/mips/code-stubs-mips.cc
 | 
| @@ -6785,15 +6785,15 @@ void ICCompareStub::GenerateHeapNumbers(MacroAssembler* masm) {
 | 
|    ASSERT(state_ == CompareIC::HEAP_NUMBERS);
 | 
|  
 | 
|    Label generic_stub;
 | 
| -  Label unordered;
 | 
| +  Label unordered, maybe_undefined1, maybe_undefined2;
 | 
|    Label miss;
 | 
|    __ And(a2, a1, Operand(a0));
 | 
|    __ JumpIfSmi(a2, &generic_stub);
 | 
|  
 | 
|    __ GetObjectType(a0, a2, a2);
 | 
| -  __ Branch(&miss, ne, a2, Operand(HEAP_NUMBER_TYPE));
 | 
| +  __ Branch(&maybe_undefined1, ne, a2, Operand(HEAP_NUMBER_TYPE));
 | 
|    __ GetObjectType(a1, a2, a2);
 | 
| -  __ Branch(&miss, ne, a2, Operand(HEAP_NUMBER_TYPE));
 | 
| +  __ Branch(&maybe_undefined2, ne, a2, Operand(HEAP_NUMBER_TYPE));
 | 
|  
 | 
|    // Inlining the double comparison and falling back to the general compare
 | 
|    // stub if NaN is involved or FPU is unsupported.
 | 
| @@ -6825,14 +6825,29 @@ void ICCompareStub::GenerateHeapNumbers(MacroAssembler* masm) {
 | 
|      __ bind(&fpu_lt);
 | 
|      __ Ret(USE_DELAY_SLOT);
 | 
|      __ li(v0, Operand(LESS));  // In delay slot.
 | 
| -
 | 
| -    __ bind(&unordered);
 | 
|    }
 | 
|  
 | 
| +  __ bind(&unordered);
 | 
| +
 | 
|    CompareStub stub(GetCondition(), strict(), NO_COMPARE_FLAGS, a1, a0);
 | 
|    __ bind(&generic_stub);
 | 
|    __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET);
 | 
|  
 | 
| +  __ bind(&maybe_undefined1);
 | 
| +  if (Token::IsOrderedRelationalCompareOp(op_)) {
 | 
| +    __ LoadRoot(at, Heap::kUndefinedValueRootIndex);
 | 
| +    __ Branch(&miss, ne, a0, Operand(at));
 | 
| +    __ GetObjectType(a1, a2, a2);
 | 
| +    __ Branch(&maybe_undefined2, ne, a2, Operand(HEAP_NUMBER_TYPE));
 | 
| +    __ jmp(&unordered);
 | 
| +  }
 | 
| +
 | 
| +  __ bind(&maybe_undefined2);
 | 
| +  if (Token::IsOrderedRelationalCompareOp(op_)) {
 | 
| +    __ LoadRoot(at, Heap::kUndefinedValueRootIndex);
 | 
| +    __ Branch(&unordered, eq, a1, Operand(at));
 | 
| +  }
 | 
| +
 | 
|    __ bind(&miss);
 | 
|    GenerateMiss(masm);
 | 
|  }
 | 
| 
 |