| Index: src/code-stubs.cc
|
| diff --git a/src/code-stubs.cc b/src/code-stubs.cc
|
| index 8a0ca9d296e00f19c3f78e0df7aae7946f166bef..8acd1f8ec54b8a3eec889c1219b52fb02107e01f 100644
|
| --- a/src/code-stubs.cc
|
| +++ b/src/code-stubs.cc
|
| @@ -12,6 +12,7 @@
|
| #include "src/code-stub-assembler.h"
|
| #include "src/factory.h"
|
| #include "src/gdb-jit.h"
|
| +#include "src/ic/accessor-assembler.h"
|
| #include "src/ic/handler-compiler.h"
|
| #include "src/ic/ic.h"
|
| #include "src/macro-assembler.h"
|
| @@ -19,6 +20,7 @@
|
| namespace v8 {
|
| namespace internal {
|
|
|
| +using compiler::CodeAssemblerState;
|
|
|
| RUNTIME_FUNCTION(UnexpectedStubMiss) {
|
| FATAL("Unexpected deopt of a stub");
|
| @@ -430,174 +432,33 @@ Handle<Code> TurboFanCodeStub::GenerateCode() {
|
| return compiler::CodeAssembler::GenerateCode(&state);
|
| }
|
|
|
| -void LoadICTrampolineStub::GenerateAssembly(
|
| - compiler::CodeAssemblerState* state) const {
|
| - typedef compiler::Node Node;
|
| - CodeStubAssembler assembler(state);
|
| -
|
| - Node* receiver = assembler.Parameter(Descriptor::kReceiver);
|
| - Node* name = assembler.Parameter(Descriptor::kName);
|
| - Node* slot = assembler.Parameter(Descriptor::kSlot);
|
| - Node* context = assembler.Parameter(Descriptor::kContext);
|
| - Node* vector = assembler.LoadTypeFeedbackVectorForStub();
|
| -
|
| - CodeStubAssembler::LoadICParameters p(context, receiver, name, slot, vector);
|
| - assembler.LoadIC(&p);
|
| -}
|
| -
|
| -void LoadICStub::GenerateAssembly(compiler::CodeAssemblerState* state) const {
|
| - typedef compiler::Node Node;
|
| - CodeStubAssembler assembler(state);
|
| -
|
| - Node* receiver = assembler.Parameter(Descriptor::kReceiver);
|
| - Node* name = assembler.Parameter(Descriptor::kName);
|
| - Node* slot = assembler.Parameter(Descriptor::kSlot);
|
| - Node* vector = assembler.Parameter(Descriptor::kVector);
|
| - Node* context = assembler.Parameter(Descriptor::kContext);
|
| -
|
| - CodeStubAssembler::LoadICParameters p(context, receiver, name, slot, vector);
|
| - assembler.LoadIC(&p);
|
| -}
|
| -
|
| -void LoadICProtoArrayStub::GenerateAssembly(
|
| - compiler::CodeAssemblerState* state) const {
|
| - typedef compiler::Node Node;
|
| - CodeStubAssembler assembler(state);
|
| -
|
| - Node* receiver = assembler.Parameter(Descriptor::kReceiver);
|
| - Node* name = assembler.Parameter(Descriptor::kName);
|
| - Node* slot = assembler.Parameter(Descriptor::kSlot);
|
| - Node* vector = assembler.Parameter(Descriptor::kVector);
|
| - Node* handler = assembler.Parameter(Descriptor::kHandler);
|
| - Node* context = assembler.Parameter(Descriptor::kContext);
|
| -
|
| - CodeStubAssembler::LoadICParameters p(context, receiver, name, slot, vector);
|
| - assembler.LoadICProtoArray(&p, handler);
|
| -}
|
| -
|
| -void LoadGlobalICTrampolineStub::GenerateAssembly(
|
| - compiler::CodeAssemblerState* state) const {
|
| - typedef compiler::Node Node;
|
| - CodeStubAssembler assembler(state);
|
| -
|
| - Node* slot = assembler.Parameter(Descriptor::kSlot);
|
| - Node* context = assembler.Parameter(Descriptor::kContext);
|
| - Node* vector = assembler.LoadTypeFeedbackVectorForStub();
|
| -
|
| - CodeStubAssembler::LoadICParameters p(context, nullptr, nullptr, slot,
|
| - vector);
|
| - assembler.LoadGlobalIC(&p);
|
| -}
|
| -
|
| -void LoadGlobalICStub::GenerateAssembly(
|
| - compiler::CodeAssemblerState* state) const {
|
| - typedef compiler::Node Node;
|
| - CodeStubAssembler assembler(state);
|
| -
|
| - Node* slot = assembler.Parameter(Descriptor::kSlot);
|
| - Node* vector = assembler.Parameter(Descriptor::kVector);
|
| - Node* context = assembler.Parameter(Descriptor::kContext);
|
| -
|
| - CodeStubAssembler::LoadICParameters p(context, nullptr, nullptr, slot,
|
| - vector);
|
| - assembler.LoadGlobalIC(&p);
|
| -}
|
| -
|
| -void KeyedLoadICTrampolineTFStub::GenerateAssembly(
|
| - compiler::CodeAssemblerState* state) const {
|
| - typedef compiler::Node Node;
|
| - CodeStubAssembler assembler(state);
|
| -
|
| - Node* receiver = assembler.Parameter(Descriptor::kReceiver);
|
| - Node* name = assembler.Parameter(Descriptor::kName);
|
| - Node* slot = assembler.Parameter(Descriptor::kSlot);
|
| - Node* context = assembler.Parameter(Descriptor::kContext);
|
| - Node* vector = assembler.LoadTypeFeedbackVectorForStub();
|
| -
|
| - CodeStubAssembler::LoadICParameters p(context, receiver, name, slot, vector);
|
| - assembler.KeyedLoadIC(&p);
|
| -}
|
| -
|
| -void KeyedLoadICTFStub::GenerateAssembly(
|
| - compiler::CodeAssemblerState* state) const {
|
| - typedef compiler::Node Node;
|
| - CodeStubAssembler assembler(state);
|
| -
|
| - Node* receiver = assembler.Parameter(Descriptor::kReceiver);
|
| - Node* name = assembler.Parameter(Descriptor::kName);
|
| - Node* slot = assembler.Parameter(Descriptor::kSlot);
|
| - Node* vector = assembler.Parameter(Descriptor::kVector);
|
| - Node* context = assembler.Parameter(Descriptor::kContext);
|
| -
|
| - CodeStubAssembler::LoadICParameters p(context, receiver, name, slot, vector);
|
| - assembler.KeyedLoadIC(&p);
|
| -}
|
| -
|
| -void StoreICTrampolineStub::GenerateAssembly(
|
| - compiler::CodeAssemblerState* state) const {
|
| - typedef compiler::Node Node;
|
| - CodeStubAssembler assembler(state);
|
| -
|
| - Node* receiver = assembler.Parameter(Descriptor::kReceiver);
|
| - Node* name = assembler.Parameter(Descriptor::kName);
|
| - Node* value = assembler.Parameter(Descriptor::kValue);
|
| - Node* slot = assembler.Parameter(Descriptor::kSlot);
|
| - Node* context = assembler.Parameter(Descriptor::kContext);
|
| - Node* vector = assembler.LoadTypeFeedbackVectorForStub();
|
| -
|
| - CodeStubAssembler::StoreICParameters p(context, receiver, name, value, slot,
|
| - vector);
|
| - assembler.StoreIC(&p);
|
| -}
|
| -
|
| -void StoreICStub::GenerateAssembly(compiler::CodeAssemblerState* state) const {
|
| - typedef compiler::Node Node;
|
| - CodeStubAssembler assembler(state);
|
| +#define ACCESSOR_ASSEMBLER(Name) \
|
| + void Name##Stub::GenerateAssembly(CodeAssemblerState* state) const { \
|
| + AccessorAssembler::Generate##Name(state); \
|
| + }
|
|
|
| - Node* receiver = assembler.Parameter(Descriptor::kReceiver);
|
| - Node* name = assembler.Parameter(Descriptor::kName);
|
| - Node* value = assembler.Parameter(Descriptor::kValue);
|
| - Node* slot = assembler.Parameter(Descriptor::kSlot);
|
| - Node* vector = assembler.Parameter(Descriptor::kVector);
|
| - Node* context = assembler.Parameter(Descriptor::kContext);
|
| +ACCESSOR_ASSEMBLER(LoadIC)
|
| +ACCESSOR_ASSEMBLER(LoadICTrampoline)
|
| +ACCESSOR_ASSEMBLER(LoadICProtoArray)
|
| +ACCESSOR_ASSEMBLER(LoadGlobalIC)
|
| +ACCESSOR_ASSEMBLER(LoadGlobalICTrampoline)
|
| +ACCESSOR_ASSEMBLER(KeyedLoadICTF)
|
| +ACCESSOR_ASSEMBLER(KeyedLoadICTrampolineTF)
|
| +ACCESSOR_ASSEMBLER(StoreIC)
|
| +ACCESSOR_ASSEMBLER(StoreICTrampoline)
|
|
|
| - CodeStubAssembler::StoreICParameters p(context, receiver, name, value, slot,
|
| - vector);
|
| - assembler.StoreIC(&p);
|
| -}
|
| +#undef ACCESSOR_ASSEMBLER
|
|
|
| void KeyedStoreICTrampolineTFStub::GenerateAssembly(
|
| - compiler::CodeAssemblerState* state) const {
|
| - typedef compiler::Node Node;
|
| - CodeStubAssembler assembler(state);
|
| -
|
| - Node* receiver = assembler.Parameter(Descriptor::kReceiver);
|
| - Node* name = assembler.Parameter(Descriptor::kName);
|
| - Node* value = assembler.Parameter(Descriptor::kValue);
|
| - Node* slot = assembler.Parameter(Descriptor::kSlot);
|
| - Node* context = assembler.Parameter(Descriptor::kContext);
|
| - Node* vector = assembler.LoadTypeFeedbackVectorForStub();
|
| -
|
| - CodeStubAssembler::StoreICParameters p(context, receiver, name, value, slot,
|
| - vector);
|
| - assembler.KeyedStoreIC(&p, StoreICState::GetLanguageMode(GetExtraICState()));
|
| + CodeAssemblerState* state) const {
|
| + LanguageMode language_mode = StoreICState::GetLanguageMode(GetExtraICState());
|
| + AccessorAssembler::GenerateKeyedStoreICTrampolineTF(state, language_mode);
|
| }
|
|
|
| void KeyedStoreICTFStub::GenerateAssembly(
|
| compiler::CodeAssemblerState* state) const {
|
| - typedef compiler::Node Node;
|
| - CodeStubAssembler assembler(state);
|
| -
|
| - Node* receiver = assembler.Parameter(Descriptor::kReceiver);
|
| - Node* name = assembler.Parameter(Descriptor::kName);
|
| - Node* value = assembler.Parameter(Descriptor::kValue);
|
| - Node* slot = assembler.Parameter(Descriptor::kSlot);
|
| - Node* vector = assembler.Parameter(Descriptor::kVector);
|
| - Node* context = assembler.Parameter(Descriptor::kContext);
|
| -
|
| - CodeStubAssembler::StoreICParameters p(context, receiver, name, value, slot,
|
| - vector);
|
| - assembler.KeyedStoreIC(&p, StoreICState::GetLanguageMode(GetExtraICState()));
|
| + LanguageMode language_mode = StoreICState::GetLanguageMode(GetExtraICState());
|
| + AccessorAssembler::GenerateKeyedStoreICTF(state, language_mode);
|
| }
|
|
|
| void StoreMapStub::GenerateAssembly(compiler::CodeAssemblerState* state) const {
|
|
|