OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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/ic/accessor-assembler.h" | 5 #include "src/ic/accessor-assembler.h" |
6 #include "src/ic/accessor-assembler-impl.h" | 6 #include "src/ic/accessor-assembler-impl.h" |
7 | 7 |
8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/ic/handler-configuration.h" | 10 #include "src/ic/handler-configuration.h" |
(...skipping 1152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1163 LoadFixedArrayElement(p->vector, p->slot, kPointerSize, SMI_PARAMETERS); | 1163 LoadFixedArrayElement(p->vector, p->slot, kPointerSize, SMI_PARAMETERS); |
1164 GotoIf(WordEqual(handler, LoadRoot(Heap::kuninitialized_symbolRootIndex)), | 1164 GotoIf(WordEqual(handler, LoadRoot(Heap::kuninitialized_symbolRootIndex)), |
1165 &miss); | 1165 &miss); |
1166 | 1166 |
1167 // In this case {handler} must be a Code object. | 1167 // In this case {handler} must be a Code object. |
1168 CSA_ASSERT(this, HasInstanceType(handler, CODE_TYPE)); | 1168 CSA_ASSERT(this, HasInstanceType(handler, CODE_TYPE)); |
1169 LoadWithVectorDescriptor descriptor(isolate()); | 1169 LoadWithVectorDescriptor descriptor(isolate()); |
1170 Node* native_context = LoadNativeContext(p->context); | 1170 Node* native_context = LoadNativeContext(p->context); |
1171 Node* receiver = | 1171 Node* receiver = |
1172 LoadContextElement(native_context, Context::EXTENSION_INDEX); | 1172 LoadContextElement(native_context, Context::EXTENSION_INDEX); |
1173 Node* fake_name = IntPtrConstant(0); | 1173 TailCallStub(descriptor, handler, p->context, receiver, p->name, p->slot, |
1174 TailCallStub(descriptor, handler, p->context, receiver, fake_name, p->slot, | |
1175 p->vector); | 1174 p->vector); |
1176 } | 1175 } |
1177 Bind(&miss); | 1176 Bind(&miss); |
1178 { | 1177 { |
1179 TailCallRuntime(Runtime::kLoadGlobalIC_Miss, p->context, p->slot, | 1178 TailCallRuntime(Runtime::kLoadGlobalIC_Miss, p->context, p->slot, |
1180 p->vector); | 1179 p->vector); |
1181 } | 1180 } |
1182 } | 1181 } |
1183 | 1182 |
1184 void AccessorAssemblerImpl::KeyedLoadIC(const LoadICParameters* p) { | 1183 void AccessorAssemblerImpl::KeyedLoadIC(const LoadICParameters* p) { |
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1562 Node* handler = Parameter(Descriptor::kHandler); | 1561 Node* handler = Parameter(Descriptor::kHandler); |
1563 Node* context = Parameter(Descriptor::kContext); | 1562 Node* context = Parameter(Descriptor::kContext); |
1564 | 1563 |
1565 LoadICParameters p(context, receiver, name, slot, vector); | 1564 LoadICParameters p(context, receiver, name, slot, vector); |
1566 LoadICProtoArray(&p, handler); | 1565 LoadICProtoArray(&p, handler); |
1567 } | 1566 } |
1568 | 1567 |
1569 void AccessorAssemblerImpl::GenerateLoadGlobalIC() { | 1568 void AccessorAssemblerImpl::GenerateLoadGlobalIC() { |
1570 typedef LoadGlobalICStub::Descriptor Descriptor; | 1569 typedef LoadGlobalICStub::Descriptor Descriptor; |
1571 | 1570 |
| 1571 Node* name = Parameter(Descriptor::kName); |
1572 Node* slot = Parameter(Descriptor::kSlot); | 1572 Node* slot = Parameter(Descriptor::kSlot); |
1573 Node* vector = Parameter(Descriptor::kVector); | 1573 Node* vector = Parameter(Descriptor::kVector); |
1574 Node* context = Parameter(Descriptor::kContext); | 1574 Node* context = Parameter(Descriptor::kContext); |
1575 | 1575 |
1576 LoadICParameters p(context, nullptr, nullptr, slot, vector); | 1576 LoadICParameters p(context, nullptr, name, slot, vector); |
1577 LoadGlobalIC(&p); | 1577 LoadGlobalIC(&p); |
1578 } | 1578 } |
1579 | 1579 |
1580 void AccessorAssemblerImpl::GenerateLoadGlobalICTrampoline() { | 1580 void AccessorAssemblerImpl::GenerateLoadGlobalICTrampoline() { |
1581 typedef LoadGlobalICTrampolineStub::Descriptor Descriptor; | 1581 typedef LoadGlobalICTrampolineStub::Descriptor Descriptor; |
1582 | 1582 |
| 1583 Node* name = Parameter(Descriptor::kName); |
1583 Node* slot = Parameter(Descriptor::kSlot); | 1584 Node* slot = Parameter(Descriptor::kSlot); |
1584 Node* context = Parameter(Descriptor::kContext); | 1585 Node* context = Parameter(Descriptor::kContext); |
1585 Node* vector = LoadTypeFeedbackVectorForStub(); | 1586 Node* vector = LoadTypeFeedbackVectorForStub(); |
1586 | 1587 |
1587 LoadICParameters p(context, nullptr, nullptr, slot, vector); | 1588 LoadICParameters p(context, nullptr, name, slot, vector); |
1588 LoadGlobalIC(&p); | 1589 LoadGlobalIC(&p); |
1589 } | 1590 } |
1590 | 1591 |
1591 void AccessorAssemblerImpl::GenerateKeyedLoadICTF() { | 1592 void AccessorAssemblerImpl::GenerateKeyedLoadICTF() { |
1592 typedef KeyedLoadICTFStub::Descriptor Descriptor; | 1593 typedef KeyedLoadICTFStub::Descriptor Descriptor; |
1593 | 1594 |
1594 Node* receiver = Parameter(Descriptor::kReceiver); | 1595 Node* receiver = Parameter(Descriptor::kReceiver); |
1595 Node* name = Parameter(Descriptor::kName); | 1596 Node* name = Parameter(Descriptor::kName); |
1596 Node* slot = Parameter(Descriptor::kSlot); | 1597 Node* slot = Parameter(Descriptor::kSlot); |
1597 Node* vector = Parameter(Descriptor::kVector); | 1598 Node* vector = Parameter(Descriptor::kVector); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1704 void AccessorAssembler::GenerateKeyedStoreICTrampolineTF( | 1705 void AccessorAssembler::GenerateKeyedStoreICTrampolineTF( |
1705 CodeAssemblerState* state, LanguageMode language_mode) { | 1706 CodeAssemblerState* state, LanguageMode language_mode) { |
1706 AccessorAssemblerImpl assembler(state); | 1707 AccessorAssemblerImpl assembler(state); |
1707 assembler.GenerateKeyedStoreICTrampolineTF(language_mode); | 1708 assembler.GenerateKeyedStoreICTrampolineTF(language_mode); |
1708 } | 1709 } |
1709 | 1710 |
1710 #undef ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE | 1711 #undef ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE |
1711 | 1712 |
1712 } // namespace internal | 1713 } // namespace internal |
1713 } // namespace v8 | 1714 } // namespace v8 |
OLD | NEW |