Chromium Code Reviews| Index: src/code-stubs.h | 
| diff --git a/src/code-stubs.h b/src/code-stubs.h | 
| index 7f35e98414b754c4d31ac4ec4bdf603fb9bac47d..94758f9d3286903ac910b8a7d3d562eff8f43b1b 100644 | 
| --- a/src/code-stubs.h | 
| +++ b/src/code-stubs.h | 
| @@ -149,6 +149,8 @@ namespace internal { | 
| V(LoadConstant) \ | 
| V(LoadFastElement) \ | 
| V(LoadField) \ | 
| + V(LoadICMiss) \ | 
| + V(LoadICSlow) \ | 
| V(LoadIndexedInterceptor) \ | 
| V(StoreField) \ | 
| V(StoreGlobal) \ | 
| @@ -404,6 +406,13 @@ class CodeStub BASE_EMBEDDED { | 
| void GenerateAssembly(CodeStubAssembler* assembler) const override; \ | 
| DEFINE_CODE_STUB(NAME, SUPER) | 
| +#define DEFINE_TURBOFAN_HANDLER_CODE_STUB(NAME, EXTRA_IC_STATE) \ | 
| + public: \ | 
| + Code::Kind GetCodeKind() const override { return Code::HANDLER; } \ | 
| + ExtraICState GetExtraICState() const override { return EXTRA_IC_STATE; } \ | 
| 
 
Toon Verwaest
2016/06/06 13:01:32
EXTRA_IC_STATE -> KIND?
 
 | 
| + InlineCacheState GetICState() const override { return MONOMORPHIC; } \ | 
| + DEFINE_TURBOFAN_CODE_STUB(NAME, TurboFanCodeStub) | 
| + | 
| #define DEFINE_TURBOFAN_BINARY_OP_CODE_STUB(NAME, SUPER) \ | 
| public: \ | 
| static compiler::Node* Generate(CodeStubAssembler* assembler, \ | 
| @@ -693,12 +702,8 @@ class StringLengthStub : public TurboFanCodeStub { | 
| public: | 
| explicit StringLengthStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} | 
| - Code::Kind GetCodeKind() const override { return Code::HANDLER; } | 
| - InlineCacheState GetICState() const override { return MONOMORPHIC; } | 
| - ExtraICState GetExtraICState() const override { return Code::LOAD_IC; } | 
| - | 
| DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); | 
| - DEFINE_TURBOFAN_CODE_STUB(StringLength, TurboFanCodeStub); | 
| + DEFINE_TURBOFAN_HANDLER_CODE_STUB(StringLength, Code::LOAD_IC); | 
| }; | 
| class AddStub final : public TurboFanCodeStub { | 
| @@ -959,14 +964,24 @@ class StoreInterceptorStub : public TurboFanCodeStub { | 
| public: | 
| explicit StoreInterceptorStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} | 
| - void GenerateAssembly(CodeStubAssembler* assember) const override; | 
| + DEFINE_CALL_INTERFACE_DESCRIPTOR(Store); | 
| + DEFINE_TURBOFAN_HANDLER_CODE_STUB(StoreInterceptor, Code::STORE_IC); | 
| +}; | 
| - Code::Kind GetCodeKind() const override { return Code::HANDLER; } | 
| - ExtraICState GetExtraICState() const override { return Code::STORE_IC; } | 
| - InlineCacheState GetICState() const override { return MONOMORPHIC; } | 
| +class LoadICMissStub : public TurboFanCodeStub { | 
| + public: | 
| + explicit LoadICMissStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} | 
| - DEFINE_CALL_INTERFACE_DESCRIPTOR(Store); | 
| - DEFINE_CODE_STUB(StoreInterceptor, TurboFanCodeStub); | 
| + DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); | 
| + DEFINE_TURBOFAN_HANDLER_CODE_STUB(LoadICMiss, Code::LOAD_IC); | 
| 
 
Toon Verwaest
2016/06/06 13:01:32
This is not a HANDLER but a STUB. We should probab
 
 | 
| +}; | 
| + | 
| +class LoadICSlowStub : public TurboFanCodeStub { | 
| + public: | 
| + explicit LoadICSlowStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} | 
| + | 
| + DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); | 
| + DEFINE_TURBOFAN_HANDLER_CODE_STUB(LoadICSlow, Code::LOAD_IC); | 
| }; | 
| class LoadIndexedInterceptorStub : public TurboFanCodeStub { | 
| @@ -974,12 +989,9 @@ class LoadIndexedInterceptorStub : public TurboFanCodeStub { | 
| explicit LoadIndexedInterceptorStub(Isolate* isolate) | 
| : TurboFanCodeStub(isolate) {} | 
| - Code::Kind GetCodeKind() const override { return Code::HANDLER; } | 
| - ExtraICState GetExtraICState() const override { return Code::KEYED_LOAD_IC; } | 
| - InlineCacheState GetICState() const override { return MONOMORPHIC; } | 
| - | 
| DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); | 
| - DEFINE_TURBOFAN_CODE_STUB(LoadIndexedInterceptor, TurboFanCodeStub); | 
| + DEFINE_TURBOFAN_HANDLER_CODE_STUB(LoadIndexedInterceptor, | 
| + Code::KEYED_LOAD_IC); | 
| }; | 
| // ES6 section 12.10.3 "in" operator evaluation. | 
| @@ -1542,10 +1554,6 @@ class LoadApiGetterStub : public TurboFanCodeStub { | 
| ReceiverIsHolderBits::encode(receiver_is_holder); | 
| } | 
| - Code::Kind GetCodeKind() const override { return Code::HANDLER; } | 
| - ExtraICState GetExtraICState() const override { return Code::LOAD_IC; } | 
| - InlineCacheState GetICState() const override { return MONOMORPHIC; } | 
| - | 
| int index() const { return IndexBits::decode(minor_key_); } | 
| bool receiver_is_holder() const { | 
| return ReceiverIsHolderBits::decode(minor_key_); | 
| @@ -1556,7 +1564,7 @@ class LoadApiGetterStub : public TurboFanCodeStub { | 
| class IndexBits : public BitField<int, 1, kDescriptorIndexBitCount> {}; | 
| DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); | 
| - DEFINE_TURBOFAN_CODE_STUB(LoadApiGetter, TurboFanCodeStub); | 
| + DEFINE_TURBOFAN_HANDLER_CODE_STUB(LoadApiGetter, Code::LOAD_IC); | 
| }; | 
| class StoreFieldStub : public HandlerStub { |