Index: src/ppc/code-stubs-ppc.cc |
diff --git a/src/ppc/code-stubs-ppc.cc b/src/ppc/code-stubs-ppc.cc |
index 3734f1f6e60a64b74b3e65560d3e3dbd636a23c0..a99519f0b0dc01c19163d9736b6ae17c68433df6 100644 |
--- a/src/ppc/code-stubs-ppc.cc |
+++ b/src/ppc/code-stubs-ppc.cc |
@@ -698,11 +698,19 @@ void CompareICStub::GenerateGeneric(MacroAssembler* masm) { |
__ bind(&slow); |
- __ Push(lhs, rhs); |
- // Figure out which native to call and setup the arguments. |
if (cc == eq) { |
- __ TailCallRuntime(strict() ? Runtime::kStrictEquals : Runtime::kEquals); |
+ { |
+ FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); |
+ __ Push(lhs, rhs); |
+ __ CallRuntime(strict() ? Runtime::kStrictEquals : Runtime::kEquals); |
+ } |
+ // Turn true into 0 and false into some non-zero value. |
+ STATIC_ASSERT(EQUAL == 0); |
+ __ LoadRoot(r4, Heap::kTrueValueRootIndex); |
+ __ sub(r3, r3, r4); |
+ __ Ret(); |
} else { |
+ __ Push(lhs, rhs); |
int ncr; // NaN compare result |
if (cc == lt || cc == le) { |
ncr = GREATER; |