Chromium Code Reviews| Index: src/code-stubs.h |
| diff --git a/src/code-stubs.h b/src/code-stubs.h |
| index e4cbe1863a2c117db9916c950c7f1ae9e924bcc9..14781799c59db971f2f6afc476f479c9c3661890 100644 |
| --- a/src/code-stubs.h |
| +++ b/src/code-stubs.h |
| @@ -84,7 +84,8 @@ namespace internal { |
| V(KeyedStoreElement) \ |
| V(DebuggerStatement) \ |
| V(NameDictionaryLookup) \ |
| - V(ElementsTransitionAndStore) \ |
| + V(ElementsTransitionAndStoreStrict) \ |
| + V(ElementsTransitionAndStoreNonStrict) \ |
|
danno
2013/07/10 12:33:44
I had another look at KeyedStoreIC_Miss and KeyedS
Benedikt Meurer
2013/07/10 13:23:45
Done.
|
| V(TransitionElementsKind) \ |
| V(StoreArrayLiteralElement) \ |
| V(StubFailureTrampoline) \ |
| @@ -2210,47 +2211,97 @@ class ToBooleanStub: public HydrogenCodeStub { |
| }; |
| -class ElementsTransitionAndStoreStub : public PlatformCodeStub { |
| +class ElementsTransitionAndStoreStub : public HydrogenCodeStub { |
| public: |
| + ElementsKind from() const { return from_; } |
| + ElementsKind to() const { return to_; } |
| + bool is_jsarray() const { return is_jsarray_; } |
| + KeyedAccessStoreMode store_mode() const { return store_mode_; } |
| + |
| + Handle<Code> GenerateCode(); |
| + |
| + void InitializeInterfaceDescriptor( |
| + Isolate* isolate, |
| + CodeStubInterfaceDescriptor* descriptor); |
| + |
| + protected: |
| ElementsTransitionAndStoreStub(ElementsKind from, |
| ElementsKind to, |
| bool is_jsarray, |
| - StrictModeFlag strict_mode, |
| KeyedAccessStoreMode store_mode) |
| : from_(from), |
| to_(to), |
| is_jsarray_(is_jsarray), |
| - strict_mode_(strict_mode), |
| - store_mode_(store_mode) {} |
| + store_mode_(store_mode) { |
| + ASSERT(!IsFastHoleyElementsKind(from) || IsFastHoleyElementsKind(to)); |
| + } |
| + |
| + virtual Address GetDeoptimizationHandler() const = 0; |
| private: |
| - class FromBits: public BitField<ElementsKind, 0, 8> {}; |
| - class ToBits: public BitField<ElementsKind, 8, 8> {}; |
| - class IsJSArrayBits: public BitField<bool, 16, 1> {}; |
| - class StrictModeBits: public BitField<StrictModeFlag, 17, 1> {}; |
| + class FromBits: public BitField<ElementsKind, 0, 8> {}; |
| + class ToBits: public BitField<ElementsKind, 8, 8> {}; |
| + class IsJSArrayBits: public BitField<bool, 16, 1> {}; |
| class StoreModeBits: public BitField<KeyedAccessStoreMode, 18, 4> {}; |
| - Major MajorKey() { return ElementsTransitionAndStore; } |
| - int MinorKey() { |
| - return FromBits::encode(from_) | |
| - ToBits::encode(to_) | |
| - IsJSArrayBits::encode(is_jsarray_) | |
| - StrictModeBits::encode(strict_mode_) | |
| - StoreModeBits::encode(store_mode_); |
| + int NotMissMinorKey() { |
| + return FromBits::encode(from()) | |
| + ToBits::encode(to()) | |
| + IsJSArrayBits::encode(is_jsarray()) | |
| + StoreModeBits::encode(store_mode()); |
| } |
| - void Generate(MacroAssembler* masm); |
| - |
| ElementsKind from_; |
| ElementsKind to_; |
| bool is_jsarray_; |
| - StrictModeFlag strict_mode_; |
| KeyedAccessStoreMode store_mode_; |
| DISALLOW_COPY_AND_ASSIGN(ElementsTransitionAndStoreStub); |
| }; |
| +class ElementsTransitionAndStoreNonStrictStub |
| + : public ElementsTransitionAndStoreStub { |
| + public: |
| + ElementsTransitionAndStoreNonStrictStub(ElementsKind from, |
| + ElementsKind to, |
| + bool is_jsarray, |
| + KeyedAccessStoreMode store_mode) |
| + : ElementsTransitionAndStoreStub(from, to, is_jsarray, store_mode) { } |
| + |
| + private: |
| + Address GetDeoptimizationHandler() const { |
| + return Runtime::FunctionForId( |
| + Runtime::kElementsTransitionAndStoreNonStrict)->entry; |
| + } |
| + |
| + Major MajorKey() { return ElementsTransitionAndStoreNonStrict; } |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ElementsTransitionAndStoreNonStrictStub); |
| +}; |
| + |
| + |
| +class ElementsTransitionAndStoreStrictStub |
| + : public ElementsTransitionAndStoreStub { |
| + public: |
| + ElementsTransitionAndStoreStrictStub(ElementsKind from, |
| + ElementsKind to, |
| + bool is_jsarray, |
| + KeyedAccessStoreMode store_mode) |
| + : ElementsTransitionAndStoreStub(from, to, is_jsarray, store_mode) { } |
| + |
| + private: |
| + Address GetDeoptimizationHandler() const { |
| + return Runtime::FunctionForId( |
| + Runtime::kElementsTransitionAndStoreStrict)->entry; |
| + } |
| + |
| + Major MajorKey() { return ElementsTransitionAndStoreStrict; } |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ElementsTransitionAndStoreStrictStub); |
| +}; |
| + |
| + |
| class StoreArrayLiteralElementStub : public PlatformCodeStub { |
| public: |
| StoreArrayLiteralElementStub() |