| 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 670 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 __ test(key, Immediate(kSmiTagMask | kSmiSignMask)); | 681 __ test(key, Immediate(kSmiTagMask | kSmiSignMask)); |
| 682 __ j(not_zero, &slow); | 682 __ j(not_zero, &slow); |
| 683 | 683 |
| 684 // Everything is fine, call runtime. | 684 // Everything is fine, call runtime. |
| 685 __ pop(scratch); | 685 __ pop(scratch); |
| 686 __ push(receiver); // receiver | 686 __ push(receiver); // receiver |
| 687 __ push(key); // key | 687 __ push(key); // key |
| 688 __ push(scratch); // return address | 688 __ push(scratch); // return address |
| 689 | 689 |
| 690 // Perform tail call to the entry. | 690 // Perform tail call to the entry. |
| 691 ExternalReference ref = ExternalReference( | 691 __ TailCallRuntime(Runtime::kLoadElementWithInterceptor, 2, 1); |
| 692 IC_Utility(IC::kLoadElementWithInterceptor), masm->isolate()); | |
| 693 __ TailCallExternalReference(ref, 2, 1); | |
| 694 | 692 |
| 695 __ bind(&slow); | 693 __ bind(&slow); |
| 696 PropertyAccessCompiler::TailCallBuiltin( | 694 PropertyAccessCompiler::TailCallBuiltin( |
| 697 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); | 695 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); |
| 698 } | 696 } |
| 699 | 697 |
| 700 | 698 |
| 701 void LoadIndexedStringStub::Generate(MacroAssembler* masm) { | 699 void LoadIndexedStringStub::Generate(MacroAssembler* masm) { |
| 702 // Return address is on the stack. | 700 // Return address is on the stack. |
| 703 Label miss; | 701 Label miss; |
| (...skipping 1735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2439 | 2437 |
| 2440 void CallICStub::GenerateMiss(MacroAssembler* masm) { | 2438 void CallICStub::GenerateMiss(MacroAssembler* masm) { |
| 2441 FrameScope scope(masm, StackFrame::INTERNAL); | 2439 FrameScope scope(masm, StackFrame::INTERNAL); |
| 2442 | 2440 |
| 2443 // Push the function and feedback info. | 2441 // Push the function and feedback info. |
| 2444 __ push(edi); | 2442 __ push(edi); |
| 2445 __ push(ebx); | 2443 __ push(ebx); |
| 2446 __ push(edx); | 2444 __ push(edx); |
| 2447 | 2445 |
| 2448 // Call the entry. | 2446 // Call the entry. |
| 2449 IC::UtilityId id = GetICState() == DEFAULT ? IC::kCallIC_Miss | 2447 Runtime::FunctionId id = GetICState() == DEFAULT |
| 2450 : IC::kCallIC_Customization_Miss; | 2448 ? Runtime::kCallIC_Miss |
| 2451 | 2449 : Runtime::kCallIC_Customization_Miss; |
| 2452 ExternalReference miss = ExternalReference(IC_Utility(id), masm->isolate()); | 2450 __ CallRuntime(id, 3); |
| 2453 __ CallExternalReference(miss, 3); | |
| 2454 | 2451 |
| 2455 // Move result to edi and exit the internal frame. | 2452 // Move result to edi and exit the internal frame. |
| 2456 __ mov(edi, eax); | 2453 __ mov(edi, eax); |
| 2457 } | 2454 } |
| 2458 | 2455 |
| 2459 | 2456 |
| 2460 bool CEntryStub::NeedsImmovableCode() { | 2457 bool CEntryStub::NeedsImmovableCode() { |
| 2461 return false; | 2458 return false; |
| 2462 } | 2459 } |
| 2463 | 2460 |
| (...skipping 1434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3898 __ ret(0); | 3895 __ ret(0); |
| 3899 | 3896 |
| 3900 __ bind(&miss); | 3897 __ bind(&miss); |
| 3901 GenerateMiss(masm); | 3898 GenerateMiss(masm); |
| 3902 } | 3899 } |
| 3903 | 3900 |
| 3904 | 3901 |
| 3905 void CompareICStub::GenerateMiss(MacroAssembler* masm) { | 3902 void CompareICStub::GenerateMiss(MacroAssembler* masm) { |
| 3906 { | 3903 { |
| 3907 // Call the runtime system in a fresh internal frame. | 3904 // Call the runtime system in a fresh internal frame. |
| 3908 ExternalReference miss = ExternalReference(IC_Utility(IC::kCompareIC_Miss), | |
| 3909 isolate()); | |
| 3910 FrameScope scope(masm, StackFrame::INTERNAL); | 3905 FrameScope scope(masm, StackFrame::INTERNAL); |
| 3911 __ push(edx); // Preserve edx and eax. | 3906 __ push(edx); // Preserve edx and eax. |
| 3912 __ push(eax); | 3907 __ push(eax); |
| 3913 __ push(edx); // And also use them as the arguments. | 3908 __ push(edx); // And also use them as the arguments. |
| 3914 __ push(eax); | 3909 __ push(eax); |
| 3915 __ push(Immediate(Smi::FromInt(op()))); | 3910 __ push(Immediate(Smi::FromInt(op()))); |
| 3916 __ CallExternalReference(miss, 3); | 3911 __ CallRuntime(Runtime::kCompareIC_Miss, 3); |
| 3917 // Compute the entry point of the rewritten stub. | 3912 // Compute the entry point of the rewritten stub. |
| 3918 __ lea(edi, FieldOperand(eax, Code::kHeaderSize)); | 3913 __ lea(edi, FieldOperand(eax, Code::kHeaderSize)); |
| 3919 __ pop(eax); | 3914 __ pop(eax); |
| 3920 __ pop(edx); | 3915 __ pop(edx); |
| 3921 } | 3916 } |
| 3922 | 3917 |
| 3923 // Do a tail call to the rewritten stub. | 3918 // Do a tail call to the rewritten stub. |
| 3924 __ jmp(edi); | 3919 __ jmp(edi); |
| 3925 } | 3920 } |
| 3926 | 3921 |
| (...skipping 1558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5485 Operand(ebp, 7 * kPointerSize), NULL); | 5480 Operand(ebp, 7 * kPointerSize), NULL); |
| 5486 } | 5481 } |
| 5487 | 5482 |
| 5488 | 5483 |
| 5489 #undef __ | 5484 #undef __ |
| 5490 | 5485 |
| 5491 } // namespace internal | 5486 } // namespace internal |
| 5492 } // namespace v8 | 5487 } // namespace v8 |
| 5493 | 5488 |
| 5494 #endif // V8_TARGET_ARCH_IA32 | 5489 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |