OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #if V8_TARGET_ARCH_X87 | 5 #if V8_TARGET_ARCH_X87 |
6 | 6 |
7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
8 #include "src/bootstrapper.h" | 8 #include "src/bootstrapper.h" |
9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 2907 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2918 if (equality) { | 2918 if (equality) { |
2919 StringHelper::GenerateFlatOneByteStringEquals(masm, left, right, tmp1, | 2919 StringHelper::GenerateFlatOneByteStringEquals(masm, left, right, tmp1, |
2920 tmp2); | 2920 tmp2); |
2921 } else { | 2921 } else { |
2922 StringHelper::GenerateCompareFlatOneByteStrings(masm, left, right, tmp1, | 2922 StringHelper::GenerateCompareFlatOneByteStrings(masm, left, right, tmp1, |
2923 tmp2, tmp3); | 2923 tmp2, tmp3); |
2924 } | 2924 } |
2925 | 2925 |
2926 // Handle more complex cases in runtime. | 2926 // Handle more complex cases in runtime. |
2927 __ bind(&runtime); | 2927 __ bind(&runtime); |
2928 __ pop(tmp1); // Return address. | |
2929 __ push(left); | |
2930 __ push(right); | |
2931 __ push(tmp1); | |
2932 if (equality) { | 2928 if (equality) { |
2933 __ TailCallRuntime(Runtime::kStringEquals); | 2929 { |
| 2930 FrameScope scope(masm, StackFrame::INTERNAL); |
| 2931 __ Push(left); |
| 2932 __ Push(right); |
| 2933 __ CallRuntime(Runtime::kStringEqual); |
| 2934 } |
| 2935 __ sub(eax, Immediate(masm->isolate()->factory()->true_value())); |
| 2936 __ Ret(); |
2934 } else { | 2937 } else { |
| 2938 __ pop(tmp1); // Return address. |
| 2939 __ push(left); |
| 2940 __ push(right); |
| 2941 __ push(tmp1); |
2935 __ TailCallRuntime(Runtime::kStringCompare); | 2942 __ TailCallRuntime(Runtime::kStringCompare); |
2936 } | 2943 } |
2937 | 2944 |
2938 __ bind(&miss); | 2945 __ bind(&miss); |
2939 GenerateMiss(masm); | 2946 GenerateMiss(masm); |
2940 } | 2947 } |
2941 | 2948 |
2942 | 2949 |
2943 void CompareICStub::GenerateReceivers(MacroAssembler* masm) { | 2950 void CompareICStub::GenerateReceivers(MacroAssembler* masm) { |
2944 DCHECK_EQ(CompareICState::RECEIVER, state()); | 2951 DCHECK_EQ(CompareICState::RECEIVER, state()); |
(...skipping 2646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5591 return_value_operand, NULL); | 5598 return_value_operand, NULL); |
5592 } | 5599 } |
5593 | 5600 |
5594 | 5601 |
5595 #undef __ | 5602 #undef __ |
5596 | 5603 |
5597 } // namespace internal | 5604 } // namespace internal |
5598 } // namespace v8 | 5605 } // namespace v8 |
5599 | 5606 |
5600 #endif // V8_TARGET_ARCH_X87 | 5607 #endif // V8_TARGET_ARCH_X87 |
OLD | NEW |