| 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_IA32 | 7 #if V8_TARGET_ARCH_IA32 |
| 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 769 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 __ neg(edx); | 780 __ neg(edx); |
| 781 __ mov(eax, Operand(ebx, edx, times_2, kDisplacement)); | 781 __ mov(eax, Operand(ebx, edx, times_2, kDisplacement)); |
| 782 __ ret(0); | 782 __ ret(0); |
| 783 | 783 |
| 784 // Slow-case: Handle non-smi or out-of-bounds access to arguments | 784 // Slow-case: Handle non-smi or out-of-bounds access to arguments |
| 785 // by calling the runtime system. | 785 // by calling the runtime system. |
| 786 __ bind(&slow); | 786 __ bind(&slow); |
| 787 __ pop(ebx); // Return address. | 787 __ pop(ebx); // Return address. |
| 788 __ push(edx); | 788 __ push(edx); |
| 789 __ push(ebx); | 789 __ push(ebx); |
| 790 __ TailCallRuntime(Runtime::kGetArgumentsProperty, 1, 1); | 790 __ TailCallRuntime(Runtime::kArguments, 1, 1); |
| 791 } | 791 } |
| 792 | 792 |
| 793 | 793 |
| 794 void ArgumentsAccessStub::GenerateNewSloppySlow(MacroAssembler* masm) { | 794 void ArgumentsAccessStub::GenerateNewSloppySlow(MacroAssembler* masm) { |
| 795 // esp[0] : return address | 795 // esp[0] : return address |
| 796 // esp[4] : number of parameters | 796 // esp[4] : number of parameters |
| 797 // esp[8] : receiver displacement | 797 // esp[8] : receiver displacement |
| 798 // esp[12] : function | 798 // esp[12] : function |
| 799 | 799 |
| 800 // Check if the calling frame is an arguments adaptor frame. | 800 // Check if the calling frame is an arguments adaptor frame. |
| (...skipping 2527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3328 masm, edi, edx, ecx, ebx, String::TWO_BYTE_ENCODING); | 3328 masm, edi, edx, ecx, ebx, String::TWO_BYTE_ENCODING); |
| 3329 __ IncrementCounter(counters->sub_string_native(), 1); | 3329 __ IncrementCounter(counters->sub_string_native(), 1); |
| 3330 __ ret(3 * kPointerSize); | 3330 __ ret(3 * kPointerSize); |
| 3331 | 3331 |
| 3332 // Drop pushed values on the stack before tail call. | 3332 // Drop pushed values on the stack before tail call. |
| 3333 __ bind(&runtime_drop_two); | 3333 __ bind(&runtime_drop_two); |
| 3334 __ Drop(2); | 3334 __ Drop(2); |
| 3335 | 3335 |
| 3336 // Just jump to runtime to create the sub string. | 3336 // Just jump to runtime to create the sub string. |
| 3337 __ bind(&runtime); | 3337 __ bind(&runtime); |
| 3338 __ TailCallRuntime(Runtime::kSubStringRT, 3, 1); | 3338 __ TailCallRuntime(Runtime::kSubString, 3, 1); |
| 3339 | 3339 |
| 3340 __ bind(&single_char); | 3340 __ bind(&single_char); |
| 3341 // eax: string | 3341 // eax: string |
| 3342 // ebx: instance type | 3342 // ebx: instance type |
| 3343 // ecx: sub string length (smi) | 3343 // ecx: sub string length (smi) |
| 3344 // edx: from index (smi) | 3344 // edx: from index (smi) |
| 3345 StringCharAtGenerator generator(eax, edx, ecx, eax, &runtime, &runtime, | 3345 StringCharAtGenerator generator(eax, edx, ecx, eax, &runtime, &runtime, |
| 3346 &runtime, STRING_INDEX_IS_NUMBER, | 3346 &runtime, STRING_INDEX_IS_NUMBER, |
| 3347 RECEIVER_IS_STRING); | 3347 RECEIVER_IS_STRING); |
| 3348 generator.GenerateFast(masm); | 3348 generator.GenerateFast(masm); |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3551 // Drop arguments from the stack. | 3551 // Drop arguments from the stack. |
| 3552 __ pop(ecx); | 3552 __ pop(ecx); |
| 3553 __ add(esp, Immediate(2 * kPointerSize)); | 3553 __ add(esp, Immediate(2 * kPointerSize)); |
| 3554 __ push(ecx); | 3554 __ push(ecx); |
| 3555 StringHelper::GenerateCompareFlatOneByteStrings(masm, edx, eax, ecx, ebx, | 3555 StringHelper::GenerateCompareFlatOneByteStrings(masm, edx, eax, ecx, ebx, |
| 3556 edi); | 3556 edi); |
| 3557 | 3557 |
| 3558 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) | 3558 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater) |
| 3559 // tagged as a small integer. | 3559 // tagged as a small integer. |
| 3560 __ bind(&runtime); | 3560 __ bind(&runtime); |
| 3561 __ TailCallRuntime(Runtime::kStringCompareRT, 2, 1); | 3561 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); |
| 3562 } | 3562 } |
| 3563 | 3563 |
| 3564 | 3564 |
| 3565 void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) { | 3565 void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) { |
| 3566 // ----------- S t a t e ------------- | 3566 // ----------- S t a t e ------------- |
| 3567 // -- edx : left | 3567 // -- edx : left |
| 3568 // -- eax : right | 3568 // -- eax : right |
| 3569 // -- esp[0] : return address | 3569 // -- esp[0] : return address |
| 3570 // ----------------------------------- | 3570 // ----------------------------------- |
| 3571 | 3571 |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3863 | 3863 |
| 3864 // Handle more complex cases in runtime. | 3864 // Handle more complex cases in runtime. |
| 3865 __ bind(&runtime); | 3865 __ bind(&runtime); |
| 3866 __ pop(tmp1); // Return address. | 3866 __ pop(tmp1); // Return address. |
| 3867 __ push(left); | 3867 __ push(left); |
| 3868 __ push(right); | 3868 __ push(right); |
| 3869 __ push(tmp1); | 3869 __ push(tmp1); |
| 3870 if (equality) { | 3870 if (equality) { |
| 3871 __ TailCallRuntime(Runtime::kStringEquals, 2, 1); | 3871 __ TailCallRuntime(Runtime::kStringEquals, 2, 1); |
| 3872 } else { | 3872 } else { |
| 3873 __ TailCallRuntime(Runtime::kStringCompareRT, 2, 1); | 3873 __ TailCallRuntime(Runtime::kStringCompare, 2, 1); |
| 3874 } | 3874 } |
| 3875 | 3875 |
| 3876 __ bind(&miss); | 3876 __ bind(&miss); |
| 3877 GenerateMiss(masm); | 3877 GenerateMiss(masm); |
| 3878 } | 3878 } |
| 3879 | 3879 |
| 3880 | 3880 |
| 3881 void CompareICStub::GenerateObjects(MacroAssembler* masm) { | 3881 void CompareICStub::GenerateObjects(MacroAssembler* masm) { |
| 3882 DCHECK(state() == CompareICState::OBJECT); | 3882 DCHECK(state() == CompareICState::OBJECT); |
| 3883 Label miss; | 3883 Label miss; |
| (...skipping 1774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5658 Operand(ebp, 7 * kPointerSize), NULL); | 5658 Operand(ebp, 7 * kPointerSize), NULL); |
| 5659 } | 5659 } |
| 5660 | 5660 |
| 5661 | 5661 |
| 5662 #undef __ | 5662 #undef __ |
| 5663 | 5663 |
| 5664 } // namespace internal | 5664 } // namespace internal |
| 5665 } // namespace v8 | 5665 } // namespace v8 |
| 5666 | 5666 |
| 5667 #endif // V8_TARGET_ARCH_IA32 | 5667 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |