Chromium Code Reviews| Index: src/code-stubs.h |
| diff --git a/src/code-stubs.h b/src/code-stubs.h |
| index 13f8e425134a9de3a85df02a1e9cda9d761ed3c0..b02f25d9dec60962f71236030dc63d8b5b1b2158 100644 |
| --- a/src/code-stubs.h |
| +++ b/src/code-stubs.h |
| @@ -69,6 +69,7 @@ namespace internal { |
| V(InternalArrayNoArgumentConstructor) \ |
| V(InternalArraySingleArgumentConstructor) \ |
| V(KeyedLoadGeneric) \ |
| + V(LoadGlobalContextField) \ |
| V(LoadDictionaryElement) \ |
| V(LoadFastElement) \ |
| V(MegamorphicLoad) \ |
| @@ -2020,6 +2021,48 @@ class DoubleToIStub : public PlatformCodeStub { |
| }; |
| +class LoadGlobalContextFieldStub : public HandlerStub { |
| + public: |
| + LoadGlobalContextFieldStub( |
| + Isolate* isolate, const GlobalContextTable::LookupResult* lookup_result) |
| + : HandlerStub(isolate) { |
| + DCHECK(Accepted(lookup_result)); |
| + set_sub_minor_key(ContextIndexBits::encode(lookup_result->context_index) | |
| + SlotIndexBits::encode(lookup_result->slot_index)); |
| + } |
| + |
| + int context_index() const { |
| + return ContextIndexBits::decode(sub_minor_key()); |
| + } |
| + |
| + int slot_index() const { return SlotIndexBits::decode(sub_minor_key()); } |
| + |
| + static bool Accepted(const GlobalContextTable::LookupResult* lookup_result) { |
| + return lookup_result->context_index >= 0 && |
|
Igor Sheludko
2014/11/11 09:49:51
Suggestion: there is a BitField::is_valid() method
Dmitry Lomov (no reviews)
2014/11/11 11:16:20
Done.
|
| + lookup_result->slot_index >= 0 && |
| + lookup_result->context_index < (1 << kContextIndexBits) && |
| + lookup_result->slot_index < (1 << kSlotIndexBits); |
| + } |
| + |
| + private: |
| + static const int kContextIndexBits = 13; |
| + static const int kSlotIndexBits = 13; |
| + class ContextIndexBits : public BitField<int, 0, kContextIndexBits> {}; |
| + class SlotIndexBits |
| + : public BitField<int, kContextIndexBits, kSlotIndexBits> {}; |
| + |
| + virtual Code::Kind kind() const { return Code::LOAD_IC; } |
| + virtual Code::StubType GetStubType() OVERRIDE { return Code::FAST; } |
| + |
| + |
| + virtual CallInterfaceDescriptor GetCallInterfaceDescriptor() OVERRIDE { |
| + return ContextOnlyDescriptor(isolate()); |
| + } |
| + |
| + DEFINE_HANDLER_CODE_STUB(LoadGlobalContextField, HandlerStub); |
| +}; |
| + |
| + |
| class LoadFastElementStub : public HydrogenCodeStub { |
| public: |
| LoadFastElementStub(Isolate* isolate, bool is_js_array, |