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 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 ExternalReference ref = ExternalReference( |
692 IC_Utility(IC::kLoadElementWithInterceptor), masm->isolate()); | 692 Runtime::FunctionForId(Runtime::kLoadElementWithInterceptor), |
| 693 masm->isolate()); |
693 __ TailCallExternalReference(ref, 2, 1); | 694 __ TailCallExternalReference(ref, 2, 1); |
694 | 695 |
695 __ bind(&slow); | 696 __ bind(&slow); |
696 PropertyAccessCompiler::TailCallBuiltin( | 697 PropertyAccessCompiler::TailCallBuiltin( |
697 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); | 698 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); |
698 } | 699 } |
699 | 700 |
700 | 701 |
701 void LoadIndexedStringStub::Generate(MacroAssembler* masm) { | 702 void LoadIndexedStringStub::Generate(MacroAssembler* masm) { |
702 // Return address is on the stack. | 703 // Return address is on the stack. |
(...skipping 1736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2439 | 2440 |
2440 void CallICStub::GenerateMiss(MacroAssembler* masm) { | 2441 void CallICStub::GenerateMiss(MacroAssembler* masm) { |
2441 FrameScope scope(masm, StackFrame::INTERNAL); | 2442 FrameScope scope(masm, StackFrame::INTERNAL); |
2442 | 2443 |
2443 // Push the function and feedback info. | 2444 // Push the function and feedback info. |
2444 __ push(edi); | 2445 __ push(edi); |
2445 __ push(ebx); | 2446 __ push(ebx); |
2446 __ push(edx); | 2447 __ push(edx); |
2447 | 2448 |
2448 // Call the entry. | 2449 // Call the entry. |
2449 IC::UtilityId id = GetICState() == DEFAULT ? IC::kCallIC_Miss | 2450 Runtime::FunctionId id = GetICState() == DEFAULT |
2450 : IC::kCallIC_Customization_Miss; | 2451 ? Runtime::kCallIC_Miss |
| 2452 : Runtime::kCallIC_Customization_Miss; |
2451 | 2453 |
2452 ExternalReference miss = ExternalReference(IC_Utility(id), masm->isolate()); | 2454 ExternalReference miss = |
| 2455 ExternalReference(Runtime::FunctionForId(id), masm->isolate()); |
2453 __ CallExternalReference(miss, 3); | 2456 __ CallExternalReference(miss, 3); |
2454 | 2457 |
2455 // Move result to edi and exit the internal frame. | 2458 // Move result to edi and exit the internal frame. |
2456 __ mov(edi, eax); | 2459 __ mov(edi, eax); |
2457 } | 2460 } |
2458 | 2461 |
2459 | 2462 |
2460 bool CEntryStub::NeedsImmovableCode() { | 2463 bool CEntryStub::NeedsImmovableCode() { |
2461 return false; | 2464 return false; |
2462 } | 2465 } |
(...skipping 1435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3898 __ ret(0); | 3901 __ ret(0); |
3899 | 3902 |
3900 __ bind(&miss); | 3903 __ bind(&miss); |
3901 GenerateMiss(masm); | 3904 GenerateMiss(masm); |
3902 } | 3905 } |
3903 | 3906 |
3904 | 3907 |
3905 void CompareICStub::GenerateMiss(MacroAssembler* masm) { | 3908 void CompareICStub::GenerateMiss(MacroAssembler* masm) { |
3906 { | 3909 { |
3907 // Call the runtime system in a fresh internal frame. | 3910 // Call the runtime system in a fresh internal frame. |
3908 ExternalReference miss = ExternalReference(IC_Utility(IC::kCompareIC_Miss), | 3911 ExternalReference miss = ExternalReference( |
3909 isolate()); | 3912 Runtime::FunctionForId(Runtime::kCompareIC_Miss), isolate()); |
3910 FrameScope scope(masm, StackFrame::INTERNAL); | 3913 FrameScope scope(masm, StackFrame::INTERNAL); |
3911 __ push(edx); // Preserve edx and eax. | 3914 __ push(edx); // Preserve edx and eax. |
3912 __ push(eax); | 3915 __ push(eax); |
3913 __ push(edx); // And also use them as the arguments. | 3916 __ push(edx); // And also use them as the arguments. |
3914 __ push(eax); | 3917 __ push(eax); |
3915 __ push(Immediate(Smi::FromInt(op()))); | 3918 __ push(Immediate(Smi::FromInt(op()))); |
3916 __ CallExternalReference(miss, 3); | 3919 __ CallExternalReference(miss, 3); |
3917 // Compute the entry point of the rewritten stub. | 3920 // Compute the entry point of the rewritten stub. |
3918 __ lea(edi, FieldOperand(eax, Code::kHeaderSize)); | 3921 __ lea(edi, FieldOperand(eax, Code::kHeaderSize)); |
3919 __ pop(eax); | 3922 __ pop(eax); |
(...skipping 1565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5485 Operand(ebp, 7 * kPointerSize), NULL); | 5488 Operand(ebp, 7 * kPointerSize), NULL); |
5486 } | 5489 } |
5487 | 5490 |
5488 | 5491 |
5489 #undef __ | 5492 #undef __ |
5490 | 5493 |
5491 } // namespace internal | 5494 } // namespace internal |
5492 } // namespace v8 | 5495 } // namespace v8 |
5493 | 5496 |
5494 #endif // V8_TARGET_ARCH_IA32 | 5497 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |