| Index: src/stub-cache.h
|
| diff --git a/src/stub-cache.h b/src/stub-cache.h
|
| index c70b1ff6187e1057d3abad95a08decbf04769899..ebf0bd3c917b5e06ba80f0a4bedb5bd1703def23 100644
|
| --- a/src/stub-cache.h
|
| +++ b/src/stub-cache.h
|
| @@ -364,8 +364,10 @@ enum IcCheckType { ELEMENT, PROPERTY };
|
| // The stub compilers compile stubs for the stub cache.
|
| class StubCompiler BASE_EMBEDDED {
|
| public:
|
| - explicit StubCompiler(Isolate* isolate)
|
| - : isolate_(isolate), masm_(isolate, NULL, 256), failure_(NULL) { }
|
| + explicit StubCompiler(Isolate* isolate,
|
| + ExtraICState extra_ic_state = kNoExtraICState)
|
| + : isolate_(isolate), extra_ic_state_(extra_ic_state),
|
| + masm_(isolate, NULL, 256), failure_(NULL) { }
|
|
|
| // Functions to compile either CallIC or KeyedCallIC. The specific kind
|
| // is extracted from the code flags.
|
| @@ -489,6 +491,8 @@ class StubCompiler BASE_EMBEDDED {
|
| Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name);
|
| Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<Name> name);
|
|
|
| + ExtraICState extra_state() { return extra_ic_state_; }
|
| +
|
| MacroAssembler* masm() { return &masm_; }
|
| void set_failure(Failure* failure) { failure_ = failure; }
|
|
|
| @@ -504,6 +508,7 @@ class StubCompiler BASE_EMBEDDED {
|
|
|
| private:
|
| Isolate* isolate_;
|
| + const ExtraICState extra_ic_state_;
|
| MacroAssembler masm_;
|
| Failure* failure_;
|
| };
|
| @@ -516,8 +521,11 @@ class BaseLoadStoreStubCompiler: public StubCompiler {
|
| public:
|
| BaseLoadStoreStubCompiler(Isolate* isolate,
|
| Code::Kind kind,
|
| + ExtraICState extra_ic_state = kNoExtraICState,
|
| InlineCacheHolderFlag cache_holder = OWN_MAP)
|
| - : StubCompiler(isolate), kind_(kind), cache_holder_(cache_holder) {
|
| + : StubCompiler(isolate, extra_ic_state),
|
| + kind_(kind),
|
| + cache_holder_(cache_holder) {
|
| InitializeRegisters();
|
| }
|
| virtual ~BaseLoadStoreStubCompiler() { }
|
| @@ -589,7 +597,6 @@ class BaseLoadStoreStubCompiler: public StubCompiler {
|
| }
|
| void JitEvent(Handle<Name> name, Handle<Code> code);
|
|
|
| - virtual ExtraICState extra_state() { return kNoExtraICState; }
|
| virtual Register receiver() = 0;
|
| virtual Register name() = 0;
|
| virtual Register scratch1() = 0;
|
| @@ -609,9 +616,11 @@ class BaseLoadStoreStubCompiler: public StubCompiler {
|
| class LoadStubCompiler: public BaseLoadStoreStubCompiler {
|
| public:
|
| LoadStubCompiler(Isolate* isolate,
|
| + ExtraICState extra_ic_state = kNoExtraICState,
|
| InlineCacheHolderFlag cache_holder = OWN_MAP,
|
| Code::Kind kind = Code::LOAD_IC)
|
| - : BaseLoadStoreStubCompiler(isolate, kind, cache_holder) { }
|
| + : BaseLoadStoreStubCompiler(isolate, kind, extra_ic_state,
|
| + cache_holder) { }
|
| virtual ~LoadStubCompiler() { }
|
|
|
| Handle<Code> CompileLoadField(Handle<Type> type,
|
| @@ -708,8 +717,10 @@ class LoadStubCompiler: public BaseLoadStoreStubCompiler {
|
| class KeyedLoadStubCompiler: public LoadStubCompiler {
|
| public:
|
| KeyedLoadStubCompiler(Isolate* isolate,
|
| + ExtraICState extra_ic_state = kNoExtraICState,
|
| InlineCacheHolderFlag cache_holder = OWN_MAP)
|
| - : LoadStubCompiler(isolate, cache_holder, Code::KEYED_LOAD_IC) { }
|
| + : LoadStubCompiler(isolate, extra_ic_state, cache_holder,
|
| + Code::KEYED_LOAD_IC) { }
|
|
|
| Handle<Code> CompileLoadElement(Handle<Map> receiver_map);
|
|
|
| @@ -732,10 +743,9 @@ class KeyedLoadStubCompiler: public LoadStubCompiler {
|
| class StoreStubCompiler: public BaseLoadStoreStubCompiler {
|
| public:
|
| StoreStubCompiler(Isolate* isolate,
|
| - StrictModeFlag strict_mode,
|
| + ExtraICState extra_ic_state,
|
| Code::Kind kind = Code::STORE_IC)
|
| - : BaseLoadStoreStubCompiler(isolate, kind),
|
| - strict_mode_(strict_mode) { }
|
| + : BaseLoadStoreStubCompiler(isolate, kind, extra_ic_state) {}
|
|
|
| virtual ~StoreStubCompiler() { }
|
|
|
| @@ -826,16 +836,11 @@ class StoreStubCompiler: public BaseLoadStoreStubCompiler {
|
| virtual Register scratch1() { return registers_[3]; }
|
| virtual Register scratch2() { return registers_[4]; }
|
| virtual Register scratch3() { return registers_[5]; }
|
| - StrictModeFlag strict_mode() { return strict_mode_; }
|
| - virtual ExtraICState extra_state() {
|
| - return StoreIC::ComputeExtraICState(strict_mode_);
|
| - }
|
|
|
| protected:
|
| static Register* registers();
|
|
|
| private:
|
| - StrictModeFlag strict_mode_;
|
| friend class BaseLoadStoreStubCompiler;
|
| };
|
|
|
| @@ -843,10 +848,8 @@ class StoreStubCompiler: public BaseLoadStoreStubCompiler {
|
| class KeyedStoreStubCompiler: public StoreStubCompiler {
|
| public:
|
| KeyedStoreStubCompiler(Isolate* isolate,
|
| - StrictModeFlag strict_mode,
|
| - KeyedAccessStoreMode store_mode)
|
| - : StoreStubCompiler(isolate, strict_mode, Code::KEYED_STORE_IC),
|
| - store_mode_(store_mode) { }
|
| + ExtraICState extra_ic_state)
|
| + : StoreStubCompiler(isolate, extra_ic_state, Code::KEYED_STORE_IC) {}
|
|
|
| Handle<Code> CompileStoreElement(Handle<Map> receiver_map);
|
|
|
| @@ -859,11 +862,12 @@ class KeyedStoreStubCompiler: public StoreStubCompiler {
|
| static void GenerateStoreDictionaryElement(MacroAssembler* masm);
|
|
|
| protected:
|
| - virtual ExtraICState extra_state() {
|
| - return KeyedStoreIC::ComputeExtraICState(strict_mode(), store_mode_);
|
| - }
|
| static Register* registers();
|
|
|
| + KeyedAccessStoreMode store_mode() {
|
| + return KeyedStoreIC::GetKeyedAccessStoreMode(extra_state());
|
| + }
|
| +
|
| private:
|
| Register transition_map() {
|
| return registers()[3];
|
| @@ -872,7 +876,6 @@ class KeyedStoreStubCompiler: public StoreStubCompiler {
|
| virtual void GenerateNameCheck(Handle<Name> name,
|
| Register name_reg,
|
| Label* miss);
|
| - KeyedAccessStoreMode store_mode_;
|
| friend class BaseLoadStoreStubCompiler;
|
| };
|
|
|
| @@ -1000,7 +1003,6 @@ class CallStubCompiler: public StubCompiler {
|
|
|
| const ParameterCount arguments_;
|
| const Code::Kind kind_;
|
| - const ExtraICState extra_state_;
|
| const InlineCacheHolderFlag cache_holder_;
|
| };
|
|
|
|
|