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_X64 | 7 #if V8_TARGET_ARCH_X64 |
8 | 8 |
9 #include "src/code-factory.h" | 9 #include "src/code-factory.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 1147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1158 Register vector = LoadWithVectorDescriptor::VectorRegister(); | 1158 Register vector = LoadWithVectorDescriptor::VectorRegister(); |
1159 | 1159 |
1160 // Copy all arguments from the array to the stack. | 1160 // Copy all arguments from the array to the stack. |
1161 Label entry, loop; | 1161 Label entry, loop; |
1162 __ movp(key, Operand(rbp, indexOffset)); | 1162 __ movp(key, Operand(rbp, indexOffset)); |
1163 __ jmp(&entry); | 1163 __ jmp(&entry); |
1164 __ bind(&loop); | 1164 __ bind(&loop); |
1165 __ movp(receiver, Operand(rbp, argumentsOffset)); // load arguments | 1165 __ movp(receiver, Operand(rbp, argumentsOffset)); // load arguments |
1166 | 1166 |
1167 // Use inline caching to speed up access to arguments. | 1167 // Use inline caching to speed up access to arguments. |
1168 FeedbackVectorSpec spec(0, Code::KEYED_LOAD_IC); | 1168 Code::Kind kinds[] = {Code::KEYED_LOAD_IC}; |
| 1169 FeedbackVectorSpec spec(0, 1, kinds); |
1169 Handle<TypeFeedbackVector> feedback_vector = | 1170 Handle<TypeFeedbackVector> feedback_vector = |
1170 masm->isolate()->factory()->NewTypeFeedbackVector(&spec); | 1171 masm->isolate()->factory()->NewTypeFeedbackVector(&spec); |
1171 int index = feedback_vector->GetIndex(FeedbackVectorICSlot(0)); | 1172 int index = feedback_vector->GetIndex(FeedbackVectorICSlot(0)); |
1172 __ Move(slot, Smi::FromInt(index)); | 1173 __ Move(slot, Smi::FromInt(index)); |
1173 __ Move(vector, feedback_vector); | 1174 __ Move(vector, feedback_vector); |
1174 Handle<Code> ic = | 1175 Handle<Code> ic = |
1175 KeyedLoadICStub(masm->isolate(), LoadICState(kNoExtraICState)).GetCode(); | 1176 KeyedLoadICStub(masm->isolate(), LoadICState(kNoExtraICState)).GetCode(); |
1176 __ Call(ic, RelocInfo::CODE_TARGET); | 1177 __ Call(ic, RelocInfo::CODE_TARGET); |
1177 // It is important that we do not have a test instruction after the | 1178 // It is important that we do not have a test instruction after the |
1178 // call. A test instruction after the call is used to indicate that | 1179 // call. A test instruction after the call is used to indicate that |
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1832 __ ret(0); | 1833 __ ret(0); |
1833 } | 1834 } |
1834 | 1835 |
1835 | 1836 |
1836 #undef __ | 1837 #undef __ |
1837 | 1838 |
1838 } // namespace internal | 1839 } // namespace internal |
1839 } // namespace v8 | 1840 } // namespace v8 |
1840 | 1841 |
1841 #endif // V8_TARGET_ARCH_X64 | 1842 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |