Index: src/x64/code-stubs-x64.cc |
diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc |
index 3dd2f45cbcc15c7fe858bbe870a582a98fa49c30..5bfa347a320820a8fae7a75c41d1bb635a371ca6 100644 |
--- a/src/x64/code-stubs-x64.cc |
+++ b/src/x64/code-stubs-x64.cc |
@@ -3172,13 +3172,21 @@ void CompareICStub::GenerateStrings(MacroAssembler* masm) { |
// Handle more complex cases in runtime. |
__ bind(&runtime); |
- __ PopReturnAddressTo(tmp1); |
- __ Push(left); |
- __ Push(right); |
- __ PushReturnAddressFrom(tmp1); |
if (equality) { |
- __ TailCallRuntime(Runtime::kStringEquals); |
+ { |
+ FrameScope scope(masm, StackFrame::INTERNAL); |
+ __ Push(left); |
+ __ Push(right); |
+ __ CallRuntime(Runtime::kStringEqual); |
+ } |
+ __ LoadRoot(rdx, Heap::kTrueValueRootIndex); |
+ __ subp(rax, rdx); |
+ __ Ret(); |
} else { |
+ __ PopReturnAddressTo(tmp1); |
+ __ Push(left); |
+ __ Push(right); |
+ __ PushReturnAddressFrom(tmp1); |
__ TailCallRuntime(Runtime::kStringCompare); |
} |