OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/type-feedback-vector.h" | 5 #include "src/type-feedback-vector.h" |
6 | 6 |
7 #include "src/code-stubs.h" | 7 #include "src/code-stubs.h" |
8 #include "src/ic/ic.h" | 8 #include "src/ic/ic.h" |
9 #include "src/ic/ic-state.h" | 9 #include "src/ic/ic-state.h" |
10 #include "src/objects.h" | 10 #include "src/objects.h" |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 | 119 |
120 Handle<TypeFeedbackVector> vector = Handle<TypeFeedbackVector>::cast(array); | 120 Handle<TypeFeedbackVector> vector = Handle<TypeFeedbackVector>::cast(array); |
121 for (int i = 0; i < ic_slot_count; i++) { | 121 for (int i = 0; i < ic_slot_count; i++) { |
122 vector->SetKind(FeedbackVectorICSlot(i), spec->GetKind(i)); | 122 vector->SetKind(FeedbackVectorICSlot(i), spec->GetKind(i)); |
123 } | 123 } |
124 return vector; | 124 return vector; |
125 } | 125 } |
126 | 126 |
127 | 127 |
128 // static | 128 // static |
| 129 int TypeFeedbackVector::PushAppliedArgumentsIndex() { |
| 130 const int index_count = VectorICComputer::word_count(1); |
| 131 return kReservedIndexCount + index_count; |
| 132 } |
| 133 |
| 134 |
| 135 // static |
| 136 Handle<TypeFeedbackVector> TypeFeedbackVector::CreatePushAppliedArgumentsVector( |
| 137 Isolate* isolate) { |
| 138 Code::Kind kinds[] = {Code::KEYED_LOAD_IC}; |
| 139 FeedbackVectorSpec spec(0, 1, kinds); |
| 140 Handle<TypeFeedbackVector> feedback_vector = |
| 141 isolate->factory()->NewTypeFeedbackVector(&spec); |
| 142 DCHECK(PushAppliedArgumentsIndex() == |
| 143 feedback_vector->GetIndex(FeedbackVectorICSlot(0))); |
| 144 return feedback_vector; |
| 145 } |
| 146 |
| 147 |
| 148 // static |
129 Handle<TypeFeedbackVector> TypeFeedbackVector::Copy( | 149 Handle<TypeFeedbackVector> TypeFeedbackVector::Copy( |
130 Isolate* isolate, Handle<TypeFeedbackVector> vector) { | 150 Isolate* isolate, Handle<TypeFeedbackVector> vector) { |
131 Handle<TypeFeedbackVector> result; | 151 Handle<TypeFeedbackVector> result; |
132 result = Handle<TypeFeedbackVector>::cast( | 152 result = Handle<TypeFeedbackVector>::cast( |
133 isolate->factory()->CopyFixedArray(Handle<FixedArray>::cast(vector))); | 153 isolate->factory()->CopyFixedArray(Handle<FixedArray>::cast(vector))); |
134 return result; | 154 return result; |
135 } | 155 } |
136 | 156 |
137 | 157 |
138 bool TypeFeedbackVector::SpecDiffersFrom( | 158 bool TypeFeedbackVector::SpecDiffersFrom( |
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
787 return mode; | 807 return mode; |
788 } | 808 } |
789 | 809 |
790 | 810 |
791 IcCheckType KeyedStoreICNexus::GetKeyType() const { | 811 IcCheckType KeyedStoreICNexus::GetKeyType() const { |
792 // The structure of the vector slots tells us the type. | 812 // The structure of the vector slots tells us the type. |
793 return GetFeedback()->IsName() ? PROPERTY : ELEMENT; | 813 return GetFeedback()->IsName() ? PROPERTY : ELEMENT; |
794 } | 814 } |
795 } // namespace internal | 815 } // namespace internal |
796 } // namespace v8 | 816 } // namespace v8 |
OLD | NEW |