| Index: src/x64/code-stubs-x64.cc
 | 
| diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc
 | 
| index 4b3d02841b28341dc8332c9d1568034a787f8773..d879c7096149b9bac17214a9acd5acd65be83a46 100644
 | 
| --- a/src/x64/code-stubs-x64.cc
 | 
| +++ b/src/x64/code-stubs-x64.cc
 | 
| @@ -1320,16 +1320,23 @@ void CompareICStub::GenerateGeneric(MacroAssembler* masm) {
 | 
|    }
 | 
|    __ bind(&runtime_call);
 | 
|  
 | 
| -  // Push arguments below the return address to prepare jump to builtin.
 | 
| -  __ PopReturnAddressTo(rcx);
 | 
| -  __ Push(rdx);
 | 
| -  __ Push(rax);
 | 
| -
 | 
| -  // Figure out which native to call and setup the arguments.
 | 
|    if (cc == equal) {
 | 
| -    __ PushReturnAddressFrom(rcx);
 | 
| -    __ TailCallRuntime(strict() ? Runtime::kStrictEquals : Runtime::kEquals);
 | 
| +    {
 | 
| +      FrameScope scope(masm, StackFrame::INTERNAL);
 | 
| +      __ Push(rdx);
 | 
| +      __ Push(rax);
 | 
| +      __ CallRuntime(strict() ? Runtime::kStrictEquals : Runtime::kEquals);
 | 
| +    }
 | 
| +    // Turn true into 0 and false into some non-zero value.
 | 
| +    STATIC_ASSERT(EQUAL == 0);
 | 
| +    __ LoadRoot(rdx, Heap::kTrueValueRootIndex);
 | 
| +    __ subp(rax, rdx);
 | 
| +    __ Ret();
 | 
|    } else {
 | 
| +    // Push arguments below the return address to prepare jump to builtin.
 | 
| +    __ PopReturnAddressTo(rcx);
 | 
| +    __ Push(rdx);
 | 
| +    __ Push(rax);
 | 
|      __ Push(Smi::FromInt(NegativeComparisonResult(cc)));
 | 
|      __ PushReturnAddressFrom(rcx);
 | 
|      __ TailCallRuntime(Runtime::kCompare);
 | 
| 
 |