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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_X87 | 7 #if V8_TARGET_ARCH_X87 |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
(...skipping 2956 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2967 masm, edi, edx, ecx, ebx, String::TWO_BYTE_ENCODING); | 2967 masm, edi, edx, ecx, ebx, String::TWO_BYTE_ENCODING); |
2968 __ IncrementCounter(counters->sub_string_native(), 1); | 2968 __ IncrementCounter(counters->sub_string_native(), 1); |
2969 __ ret(3 * kPointerSize); | 2969 __ ret(3 * kPointerSize); |
2970 | 2970 |
2971 // Drop pushed values on the stack before tail call. | 2971 // Drop pushed values on the stack before tail call. |
2972 __ bind(&runtime_drop_two); | 2972 __ bind(&runtime_drop_two); |
2973 __ Drop(2); | 2973 __ Drop(2); |
2974 | 2974 |
2975 // Just jump to runtime to create the sub string. | 2975 // Just jump to runtime to create the sub string. |
2976 __ bind(&runtime); | 2976 __ bind(&runtime); |
2977 __ TailCallRuntime(Runtime::kSubString, 3, 1); | 2977 __ TailCallRuntime(Runtime::kSubStringRT, 3, 1); |
2978 | 2978 |
2979 __ bind(&single_char); | 2979 __ bind(&single_char); |
2980 // eax: string | 2980 // eax: string |
2981 // ebx: instance type | 2981 // ebx: instance type |
2982 // ecx: sub string length (smi) | 2982 // ecx: sub string length (smi) |
2983 // edx: from index (smi) | 2983 // edx: from index (smi) |
2984 StringCharAtGenerator generator(eax, edx, ecx, eax, &runtime, &runtime, | 2984 StringCharAtGenerator generator(eax, edx, ecx, eax, &runtime, &runtime, |
2985 &runtime, STRING_INDEX_IS_NUMBER, | 2985 &runtime, STRING_INDEX_IS_NUMBER, |
2986 RECEIVER_IS_STRING); | 2986 RECEIVER_IS_STRING); |
2987 generator.GenerateFast(masm); | 2987 generator.GenerateFast(masm); |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3190 // Drop arguments from the stack. | 3190 // Drop arguments from the stack. |
3191 __ pop(ecx); | 3191 __ pop(ecx); |
3192 __ add(esp, Immediate(2 * kPointerSize)); | 3192 __ add(esp, Immediate(2 * kPointerSize)); |
3193 __ push(ecx); | 3193 __ push(ecx); |
3194 StringHelper::GenerateCompareFlatOneByteStrings(masm, edx, eax, ecx, ebx, | 3194 StringHelper::GenerateCompareFlatOneByteStrings(masm, edx, eax, ecx, ebx, |
3195 edi); | 3195 edi); |
3196 | 3196 |
3197 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) | 3197 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) |
3198 // tagged as a small integer. | 3198 // tagged as a small integer. |
3199 __ bind(&runtime); | 3199 __ bind(&runtime); |
3200 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); | 3200 __ TailCallRuntime(Runtime::kStringCompareRT, 2, 1); |
3201 } | 3201 } |
3202 | 3202 |
3203 | 3203 |
3204 void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) { | 3204 void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) { |
3205 // ----------- S t a t e ------------- | 3205 // ----------- S t a t e ------------- |
3206 // -- edx : left | 3206 // -- edx : left |
3207 // -- eax : right | 3207 // -- eax : right |
3208 // -- esp[0] : return address | 3208 // -- esp[0] : return address |
3209 // ----------------------------------- | 3209 // ----------------------------------- |
3210 | 3210 |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3474 | 3474 |
3475 // Handle more complex cases in runtime. | 3475 // Handle more complex cases in runtime. |
3476 __ bind(&runtime); | 3476 __ bind(&runtime); |
3477 __ pop(tmp1); // Return address. | 3477 __ pop(tmp1); // Return address. |
3478 __ push(left); | 3478 __ push(left); |
3479 __ push(right); | 3479 __ push(right); |
3480 __ push(tmp1); | 3480 __ push(tmp1); |
3481 if (equality) { | 3481 if (equality) { |
3482 __ TailCallRuntime(Runtime::kStringEquals, 2, 1); | 3482 __ TailCallRuntime(Runtime::kStringEquals, 2, 1); |
3483 } else { | 3483 } else { |
3484 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); | 3484 __ TailCallRuntime(Runtime::kStringCompareRT, 2, 1); |
3485 } | 3485 } |
3486 | 3486 |
3487 __ bind(&miss); | 3487 __ bind(&miss); |
3488 GenerateMiss(masm); | 3488 GenerateMiss(masm); |
3489 } | 3489 } |
3490 | 3490 |
3491 | 3491 |
3492 void CompareICStub::GenerateObjects(MacroAssembler* masm) { | 3492 void CompareICStub::GenerateObjects(MacroAssembler* masm) { |
3493 DCHECK(state() == CompareICState::OBJECT); | 3493 DCHECK(state() == CompareICState::OBJECT); |
3494 Label miss; | 3494 Label miss; |
(...skipping 1352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4847 ApiParameterOperand(2), kStackSpace, nullptr, | 4847 ApiParameterOperand(2), kStackSpace, nullptr, |
4848 Operand(ebp, 7 * kPointerSize), NULL); | 4848 Operand(ebp, 7 * kPointerSize), NULL); |
4849 } | 4849 } |
4850 | 4850 |
4851 | 4851 |
4852 #undef __ | 4852 #undef __ |
4853 | 4853 |
4854 } } // namespace v8::internal | 4854 } } // namespace v8::internal |
4855 | 4855 |
4856 #endif // V8_TARGET_ARCH_X87 | 4856 #endif // V8_TARGET_ARCH_X87 |
OLD | NEW |