| 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 { | 
|  |