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 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 __ neg(edx); | 481 __ neg(edx); |
482 __ mov(eax, Operand(ebx, edx, times_2, kDisplacement)); | 482 __ mov(eax, Operand(ebx, edx, times_2, kDisplacement)); |
483 __ ret(0); | 483 __ ret(0); |
484 | 484 |
485 // Slow-case: Handle non-smi or out-of-bounds access to arguments | 485 // Slow-case: Handle non-smi or out-of-bounds access to arguments |
486 // by calling the runtime system. | 486 // by calling the runtime system. |
487 __ bind(&slow); | 487 __ bind(&slow); |
488 __ pop(ebx); // Return address. | 488 __ pop(ebx); // Return address. |
489 __ push(edx); | 489 __ push(edx); |
490 __ push(ebx); | 490 __ push(ebx); |
491 __ TailCallRuntime(Runtime::kGetArgumentsProperty, 1, 1); | 491 __ TailCallRuntime(Runtime::kArguments, 1, 1); |
492 } | 492 } |
493 | 493 |
494 | 494 |
495 void ArgumentsAccessStub::GenerateNewSloppySlow(MacroAssembler* masm) { | 495 void ArgumentsAccessStub::GenerateNewSloppySlow(MacroAssembler* masm) { |
496 // esp[0] : return address | 496 // esp[0] : return address |
497 // esp[4] : number of parameters | 497 // esp[4] : number of parameters |
498 // esp[8] : receiver displacement | 498 // esp[8] : receiver displacement |
499 // esp[12] : function | 499 // esp[12] : function |
500 | 500 |
501 // Check if the calling frame is an arguments adaptor frame. | 501 // Check if the calling frame is an arguments adaptor frame. |
(...skipping 2536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3038 masm, edi, edx, ecx, ebx, String::TWO_BYTE_ENCODING); | 3038 masm, edi, edx, ecx, ebx, String::TWO_BYTE_ENCODING); |
3039 __ IncrementCounter(counters->sub_string_native(), 1); | 3039 __ IncrementCounter(counters->sub_string_native(), 1); |
3040 __ ret(3 * kPointerSize); | 3040 __ ret(3 * kPointerSize); |
3041 | 3041 |
3042 // Drop pushed values on the stack before tail call. | 3042 // Drop pushed values on the stack before tail call. |
3043 __ bind(&runtime_drop_two); | 3043 __ bind(&runtime_drop_two); |
3044 __ Drop(2); | 3044 __ Drop(2); |
3045 | 3045 |
3046 // Just jump to runtime to create the sub string. | 3046 // Just jump to runtime to create the sub string. |
3047 __ bind(&runtime); | 3047 __ bind(&runtime); |
3048 __ TailCallRuntime(Runtime::kSubStringRT, 3, 1); | 3048 __ TailCallRuntime(Runtime::kSubString, 3, 1); |
3049 | 3049 |
3050 __ bind(&single_char); | 3050 __ bind(&single_char); |
3051 // eax: string | 3051 // eax: string |
3052 // ebx: instance type | 3052 // ebx: instance type |
3053 // ecx: sub string length (smi) | 3053 // ecx: sub string length (smi) |
3054 // edx: from index (smi) | 3054 // edx: from index (smi) |
3055 StringCharAtGenerator generator(eax, edx, ecx, eax, &runtime, &runtime, | 3055 StringCharAtGenerator generator(eax, edx, ecx, eax, &runtime, &runtime, |
3056 &runtime, STRING_INDEX_IS_NUMBER, | 3056 &runtime, STRING_INDEX_IS_NUMBER, |
3057 RECEIVER_IS_STRING); | 3057 RECEIVER_IS_STRING); |
3058 generator.GenerateFast(masm); | 3058 generator.GenerateFast(masm); |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3261 // Drop arguments from the stack. | 3261 // Drop arguments from the stack. |
3262 __ pop(ecx); | 3262 __ pop(ecx); |
3263 __ add(esp, Immediate(2 * kPointerSize)); | 3263 __ add(esp, Immediate(2 * kPointerSize)); |
3264 __ push(ecx); | 3264 __ push(ecx); |
3265 StringHelper::GenerateCompareFlatOneByteStrings(masm, edx, eax, ecx, ebx, | 3265 StringHelper::GenerateCompareFlatOneByteStrings(masm, edx, eax, ecx, ebx, |
3266 edi); | 3266 edi); |
3267 | 3267 |
3268 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) | 3268 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) |
3269 // tagged as a small integer. | 3269 // tagged as a small integer. |
3270 __ bind(&runtime); | 3270 __ bind(&runtime); |
3271 __ TailCallRuntime(Runtime::kStringCompareRT, 2, 1); | 3271 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); |
3272 } | 3272 } |
3273 | 3273 |
3274 | 3274 |
3275 void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) { | 3275 void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) { |
3276 // ----------- S t a t e ------------- | 3276 // ----------- S t a t e ------------- |
3277 // -- edx : left | 3277 // -- edx : left |
3278 // -- eax : right | 3278 // -- eax : right |
3279 // -- esp[0] : return address | 3279 // -- esp[0] : return address |
3280 // ----------------------------------- | 3280 // ----------------------------------- |
3281 | 3281 |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3545 | 3545 |
3546 // Handle more complex cases in runtime. | 3546 // Handle more complex cases in runtime. |
3547 __ bind(&runtime); | 3547 __ bind(&runtime); |
3548 __ pop(tmp1); // Return address. | 3548 __ pop(tmp1); // Return address. |
3549 __ push(left); | 3549 __ push(left); |
3550 __ push(right); | 3550 __ push(right); |
3551 __ push(tmp1); | 3551 __ push(tmp1); |
3552 if (equality) { | 3552 if (equality) { |
3553 __ TailCallRuntime(Runtime::kStringEquals, 2, 1); | 3553 __ TailCallRuntime(Runtime::kStringEquals, 2, 1); |
3554 } else { | 3554 } else { |
3555 __ TailCallRuntime(Runtime::kStringCompareRT, 2, 1); | 3555 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); |
3556 } | 3556 } |
3557 | 3557 |
3558 __ bind(&miss); | 3558 __ bind(&miss); |
3559 GenerateMiss(masm); | 3559 GenerateMiss(masm); |
3560 } | 3560 } |
3561 | 3561 |
3562 | 3562 |
3563 void CompareICStub::GenerateObjects(MacroAssembler* masm) { | 3563 void CompareICStub::GenerateObjects(MacroAssembler* masm) { |
3564 DCHECK(state() == CompareICState::OBJECT); | 3564 DCHECK(state() == CompareICState::OBJECT); |
3565 Label miss; | 3565 Label miss; |
(...skipping 1772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5338 Operand(ebp, 7 * kPointerSize), NULL); | 5338 Operand(ebp, 7 * kPointerSize), NULL); |
5339 } | 5339 } |
5340 | 5340 |
5341 | 5341 |
5342 #undef __ | 5342 #undef __ |
5343 | 5343 |
5344 } // namespace internal | 5344 } // namespace internal |
5345 } // namespace v8 | 5345 } // namespace v8 |
5346 | 5346 |
5347 #endif // V8_TARGET_ARCH_X87 | 5347 #endif // V8_TARGET_ARCH_X87 |
OLD | NEW |