OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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_X64 | 7 #if V8_TARGET_ARCH_X64 |
8 | 8 |
9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
881 STATIC_ASSERT(kSmiValueSize <= 32); | 881 STATIC_ASSERT(kSmiValueSize <= 32); |
882 __ JumpUnlessNonNegativeSmi(key, &slow); | 882 __ JumpUnlessNonNegativeSmi(key, &slow); |
883 | 883 |
884 // Everything is fine, call runtime. | 884 // Everything is fine, call runtime. |
885 __ PopReturnAddressTo(scratch); | 885 __ PopReturnAddressTo(scratch); |
886 __ Push(receiver); // receiver | 886 __ Push(receiver); // receiver |
887 __ Push(key); // key | 887 __ Push(key); // key |
888 __ PushReturnAddressFrom(scratch); | 888 __ PushReturnAddressFrom(scratch); |
889 | 889 |
890 // Perform tail call to the entry. | 890 // Perform tail call to the entry. |
891 __ TailCallExternalReference( | 891 __ TailCallRuntime(Runtime::kLoadElementWithInterceptor, 2, 1); |
892 ExternalReference(IC_Utility(IC::kLoadElementWithInterceptor), | |
893 masm->isolate()), | |
894 2, 1); | |
895 | 892 |
896 __ bind(&slow); | 893 __ bind(&slow); |
897 PropertyAccessCompiler::TailCallBuiltin( | 894 PropertyAccessCompiler::TailCallBuiltin( |
898 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); | 895 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); |
899 } | 896 } |
900 | 897 |
901 | 898 |
902 void LoadIndexedStringStub::Generate(MacroAssembler* masm) { | 899 void LoadIndexedStringStub::Generate(MacroAssembler* masm) { |
903 // Return address is on the stack. | 900 // Return address is on the stack. |
904 Label miss; | 901 Label miss; |
(...skipping 1418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2323 void CallICStub::GenerateMiss(MacroAssembler* masm) { | 2320 void CallICStub::GenerateMiss(MacroAssembler* masm) { |
2324 FrameScope scope(masm, StackFrame::INTERNAL); | 2321 FrameScope scope(masm, StackFrame::INTERNAL); |
2325 | 2322 |
2326 // Push the receiver and the function and feedback info. | 2323 // Push the receiver and the function and feedback info. |
2327 __ Push(rdi); | 2324 __ Push(rdi); |
2328 __ Push(rbx); | 2325 __ Push(rbx); |
2329 __ Integer32ToSmi(rdx, rdx); | 2326 __ Integer32ToSmi(rdx, rdx); |
2330 __ Push(rdx); | 2327 __ Push(rdx); |
2331 | 2328 |
2332 // Call the entry. | 2329 // Call the entry. |
2333 IC::UtilityId id = GetICState() == DEFAULT ? IC::kCallIC_Miss | 2330 Runtime::FunctionId id = GetICState() == DEFAULT |
2334 : IC::kCallIC_Customization_Miss; | 2331 ? Runtime::kCallIC_Miss |
2335 | 2332 : Runtime::kCallIC_Customization_Miss; |
2336 ExternalReference miss = ExternalReference(IC_Utility(id), masm->isolate()); | 2333 __ CallRuntime(id, 3); |
2337 __ CallExternalReference(miss, 3); | |
2338 | 2334 |
2339 // Move result to edi and exit the internal frame. | 2335 // Move result to edi and exit the internal frame. |
2340 __ movp(rdi, rax); | 2336 __ movp(rdi, rax); |
2341 } | 2337 } |
2342 | 2338 |
2343 | 2339 |
2344 bool CEntryStub::NeedsImmovableCode() { | 2340 bool CEntryStub::NeedsImmovableCode() { |
2345 return false; | 2341 return false; |
2346 } | 2342 } |
2347 | 2343 |
(...skipping 1505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3853 __ ret(0); | 3849 __ ret(0); |
3854 | 3850 |
3855 __ bind(&miss); | 3851 __ bind(&miss); |
3856 GenerateMiss(masm); | 3852 GenerateMiss(masm); |
3857 } | 3853 } |
3858 | 3854 |
3859 | 3855 |
3860 void CompareICStub::GenerateMiss(MacroAssembler* masm) { | 3856 void CompareICStub::GenerateMiss(MacroAssembler* masm) { |
3861 { | 3857 { |
3862 // Call the runtime system in a fresh internal frame. | 3858 // Call the runtime system in a fresh internal frame. |
3863 ExternalReference miss = | |
3864 ExternalReference(IC_Utility(IC::kCompareIC_Miss), isolate()); | |
3865 | |
3866 FrameScope scope(masm, StackFrame::INTERNAL); | 3859 FrameScope scope(masm, StackFrame::INTERNAL); |
3867 __ Push(rdx); | 3860 __ Push(rdx); |
3868 __ Push(rax); | 3861 __ Push(rax); |
3869 __ Push(rdx); | 3862 __ Push(rdx); |
3870 __ Push(rax); | 3863 __ Push(rax); |
3871 __ Push(Smi::FromInt(op())); | 3864 __ Push(Smi::FromInt(op())); |
3872 __ CallExternalReference(miss, 3); | 3865 __ CallRuntime(Runtime::kCompareIC_Miss, 3); |
3873 | 3866 |
3874 // Compute the entry point of the rewritten stub. | 3867 // Compute the entry point of the rewritten stub. |
3875 __ leap(rdi, FieldOperand(rax, Code::kHeaderSize)); | 3868 __ leap(rdi, FieldOperand(rax, Code::kHeaderSize)); |
3876 __ Pop(rax); | 3869 __ Pop(rax); |
3877 __ Pop(rdx); | 3870 __ Pop(rdx); |
3878 } | 3871 } |
3879 | 3872 |
3880 // Do a tail call to the rewritten stub. | 3873 // Do a tail call to the rewritten stub. |
3881 __ jmp(rdi); | 3874 __ jmp(rdi); |
3882 } | 3875 } |
(...skipping 1549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5432 kStackSpace, nullptr, return_value_operand, NULL); | 5425 kStackSpace, nullptr, return_value_operand, NULL); |
5433 } | 5426 } |
5434 | 5427 |
5435 | 5428 |
5436 #undef __ | 5429 #undef __ |
5437 | 5430 |
5438 } // namespace internal | 5431 } // namespace internal |
5439 } // namespace v8 | 5432 } // namespace v8 |
5440 | 5433 |
5441 #endif // V8_TARGET_ARCH_X64 | 5434 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |