| Index: src/ia32/code-stubs-ia32.cc
|
| diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc
|
| index 79f75fadf21d1a982e55502bd87c01f649e4edce..2565c45d310f7b0bf5196d0065aba0a7d00a71ac 100644
|
| --- a/src/ia32/code-stubs-ia32.cc
|
| +++ b/src/ia32/code-stubs-ia32.cc
|
| @@ -1442,24 +1442,21 @@
|
| }
|
| __ bind(&runtime_call);
|
|
|
| + // Push arguments below the return address.
|
| + __ pop(ecx);
|
| + __ push(edx);
|
| + __ push(eax);
|
| +
|
| + // Figure out which native to call and setup the arguments.
|
| if (cc == equal) {
|
| - {
|
| - FrameScope scope(masm, StackFrame::INTERNAL);
|
| - __ Push(edx);
|
| - __ Push(eax);
|
| - __ CallRuntime(strict() ? Runtime::kStrictEqual : Runtime::kEqual);
|
| - }
|
| - // Turn true into 0 and false into some non-zero value.
|
| - STATIC_ASSERT(EQUAL == 0);
|
| - __ sub(eax, Immediate(isolate()->factory()->true_value()));
|
| - __ Ret();
|
| + __ push(ecx);
|
| + __ TailCallRuntime(strict() ? Runtime::kStrictEquals : Runtime::kEquals);
|
| } else {
|
| - // Push arguments below the return address.
|
| - __ pop(ecx);
|
| - __ push(edx);
|
| - __ push(eax);
|
| __ push(Immediate(Smi::FromInt(NegativeComparisonResult(cc))));
|
| +
|
| + // Restore return address on the stack.
|
| __ push(ecx);
|
| +
|
| // Call the native; it returns -1 (less), 0 (equal), or 1 (greater)
|
| // tagged as a small integer.
|
| __ TailCallRuntime(Runtime::kCompare);
|
|
|