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