From: mvstanton@chromium.org Date: Mon, 2 Dec 2013 11:59:44 +0000 (+0000) Subject: Removed pieces of extra_ic_state scattered around the stub compiler class hierarchy... X-Git-Tag: upstream/4.7.83~11471 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=30c77be7719086b01116a6958ca70783e2417c72;p=platform%2Fupstream%2Fv8.git Removed pieces of extra_ic_state scattered around the stub compiler class hierarchy, and pushed down to a extra_ic_state in the base class. R=verwaest@chromium.org Review URL: https://codereview.chromium.org/98853002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18185 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc index 60c28da..265265d 100644 --- a/src/arm/stub-cache-arm.cc +++ b/src/arm/stub-cache-arm.cc @@ -1547,7 +1547,7 @@ void CallStubCompiler::GenerateMissBranch() { Handle code = isolate()->stub_cache()->ComputeCallMiss(arguments().immediate(), kind_, - extra_state_); + extra_state()); __ Jump(code, RelocInfo::CODE_TARGET); } @@ -1938,7 +1938,7 @@ Handle CallStubCompiler::CompileStringCharCodeAtCall( Label* index_out_of_range_label = &index_out_of_range; if (kind_ == Code::CALL_IC && - (CallICBase::StringStubState::decode(extra_state_) == + (CallICBase::StringStubState::decode(extra_state()) == DEFAULT_STRING_STUB)) { index_out_of_range_label = &miss; } @@ -2004,7 +2004,7 @@ Handle CallStubCompiler::CompileStringCharAtCall( Label index_out_of_range; Label* index_out_of_range_label = &index_out_of_range; if (kind_ == Code::CALL_IC && - (CallICBase::StringStubState::decode(extra_state_) == + (CallICBase::StringStubState::decode(extra_state()) == DEFAULT_STRING_STUB)) { index_out_of_range_label = &miss; } @@ -2466,7 +2466,7 @@ Handle CallStubCompiler::CompileCallInterceptor(Handle object, // Get the receiver from the stack. __ ldr(r1, MemOperand(sp, argc * kPointerSize)); - CallInterceptorCompiler compiler(this, arguments(), r2, extra_state_); + CallInterceptorCompiler compiler(this, arguments(), r2, extra_state()); compiler.Compile(masm(), object, holder, name, &lookup, r1, r3, r4, r0, &miss); diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc index ba57d7e..f4f3b2b 100644 --- a/src/ia32/stub-cache-ia32.cc +++ b/src/ia32/stub-cache-ia32.cc @@ -1639,7 +1639,7 @@ void CallStubCompiler::GenerateMissBranch() { Handle code = isolate()->stub_cache()->ComputeCallMiss(arguments().immediate(), kind_, - extra_state_); + extra_state()); __ jmp(code, RelocInfo::CODE_TARGET); } @@ -2033,7 +2033,7 @@ Handle CallStubCompiler::CompileStringCharCodeAtCall( Label* index_out_of_range_label = &index_out_of_range; if (kind_ == Code::CALL_IC && - (CallICBase::StringStubState::decode(extra_state_) == + (CallICBase::StringStubState::decode(extra_state()) == DEFAULT_STRING_STUB)) { index_out_of_range_label = &miss; } @@ -2099,7 +2099,7 @@ Handle CallStubCompiler::CompileStringCharAtCall( Label* index_out_of_range_label = &index_out_of_range; if (kind_ == Code::CALL_IC && - (CallICBase::StringStubState::decode(extra_state_) == + (CallICBase::StringStubState::decode(extra_state()) == DEFAULT_STRING_STUB)) { index_out_of_range_label = &miss; } @@ -2589,7 +2589,7 @@ Handle CallStubCompiler::CompileCallInterceptor(Handle object, // Get the receiver from the stack. __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); - CallInterceptorCompiler compiler(this, arguments(), ecx, extra_state_); + CallInterceptorCompiler compiler(this, arguments(), ecx, extra_state()); compiler.Compile(masm(), object, holder, name, &lookup, edx, ebx, edi, eax, &miss); diff --git a/src/ic.cc b/src/ic.cc index 6ee728a..33ce188 100644 --- a/src/ic.cc +++ b/src/ic.cc @@ -1205,7 +1205,7 @@ Handle LoadIC::CompileHandler(LookupResult* lookup, Handle type = CurrentTypeOf(object, isolate()); Handle holder(lookup->holder()); - LoadStubCompiler compiler(isolate(), cache_holder, kind()); + LoadStubCompiler compiler(isolate(), kNoExtraICState, cache_holder, kind()); switch (lookup->type()) { case FIELD: { diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc index ea1c9a5..3d4617a 100644 --- a/src/mips/stub-cache-mips.cc +++ b/src/mips/stub-cache-mips.cc @@ -1533,7 +1533,7 @@ void CallStubCompiler::GenerateMissBranch() { Handle code = isolate()->stub_cache()->ComputeCallMiss(arguments().immediate(), kind_, - extra_state_); + extra_state()); __ Jump(code, RelocInfo::CODE_TARGET); } @@ -1923,7 +1923,7 @@ Handle CallStubCompiler::CompileStringCharCodeAtCall( Label* index_out_of_range_label = &index_out_of_range; if (kind_ == Code::CALL_IC && - (CallICBase::StringStubState::decode(extra_state_) == + (CallICBase::StringStubState::decode(extra_state()) == DEFAULT_STRING_STUB)) { index_out_of_range_label = &miss; } @@ -1987,7 +1987,7 @@ Handle CallStubCompiler::CompileStringCharAtCall( Label index_out_of_range; Label* index_out_of_range_label = &index_out_of_range; if (kind_ == Code::CALL_IC && - (CallICBase::StringStubState::decode(extra_state_) == + (CallICBase::StringStubState::decode(extra_state()) == DEFAULT_STRING_STUB)) { index_out_of_range_label = &miss; } @@ -2463,7 +2463,7 @@ Handle CallStubCompiler::CompileCallInterceptor(Handle object, // Get the receiver from the stack. __ lw(a1, MemOperand(sp, argc * kPointerSize)); - CallInterceptorCompiler compiler(this, arguments(), a2, extra_state_); + CallInterceptorCompiler compiler(this, arguments(), a2, extra_state()); compiler.Compile(masm(), object, holder, name, &lookup, a1, a3, t0, a0, &miss); diff --git a/src/stub-cache.cc b/src/stub-cache.cc index cb68b89..eec5baf 100644 --- a/src/stub-cache.cc +++ b/src/stub-cache.cc @@ -152,13 +152,13 @@ Handle StubCache::ComputeMonomorphicIC( KeyedLoadStubCompiler ic_compiler(isolate(), flag); ic = ic_compiler.CompileMonomorphicIC(type, handler, name); } else if (kind == Code::STORE_IC) { - StrictModeFlag strict_mode = StoreIC::GetStrictMode(extra_ic_state); - StoreStubCompiler ic_compiler(isolate(), strict_mode); + StoreStubCompiler ic_compiler(isolate(), extra_ic_state); ic = ic_compiler.CompileMonomorphicIC(type, handler, name); } else { ASSERT(kind == Code::KEYED_STORE_IC); - StrictModeFlag strict_mode = StoreIC::GetStrictMode(extra_ic_state); - KeyedStoreStubCompiler ic_compiler(isolate(), strict_mode, STANDARD_STORE); + ASSERT(STANDARD_STORE == + KeyedStoreIC::GetKeyedAccessStoreMode(extra_ic_state)); + KeyedStoreStubCompiler ic_compiler(isolate(), extra_ic_state); ic = ic_compiler.CompileMonomorphicIC(type, handler, name); } @@ -236,7 +236,7 @@ Handle StubCache::ComputeKeyedStoreElement( Handle probe(receiver_map->FindInCodeCache(*name, flags), isolate_); if (probe->IsCode()) return Handle::cast(probe); - KeyedStoreStubCompiler compiler(isolate(), strict_mode, store_mode); + KeyedStoreStubCompiler compiler(isolate(), extra_state); Handle code = compiler.CompileStoreElement(receiver_map); Map::UpdateCodeCache(receiver_map, name, code); @@ -647,7 +647,7 @@ Handle StubCache::ComputeStoreElementPolymorphic( Handle probe = cache->Lookup(receiver_maps, flags); if (probe->IsCode()) return Handle::cast(probe); - KeyedStoreStubCompiler compiler(isolate_, strict_mode, store_mode); + KeyedStoreStubCompiler compiler(isolate_, extra_state); Handle code = compiler.CompileStoreElementPolymorphic(receiver_maps); PolymorphicCodeCache::Update(cache, receiver_maps, flags, code); return code; @@ -1129,7 +1129,7 @@ void StubCompiler::LookupPostInterceptor(Handle holder, CallKind CallStubCompiler::call_kind() { - return CallICBase::Contextual::decode(extra_state_) + return CallICBase::Contextual::decode(extra_state()) ? CALL_AS_FUNCTION : CALL_AS_METHOD; } @@ -1577,11 +1577,11 @@ Handle KeyedStoreStubCompiler::CompileStoreElement( stub = KeyedStoreFastElementStub( is_jsarray, elements_kind, - store_mode_).GetCode(isolate()); + store_mode()).GetCode(isolate()); } else { stub = KeyedStoreElementStub(is_jsarray, elements_kind, - store_mode_).GetCode(isolate()); + store_mode()).GetCode(isolate()); } __ DispatchMap(receiver(), scratch1(), receiver_map, stub, DO_SMI_CHECK); @@ -1707,19 +1707,19 @@ Handle KeyedStoreStubCompiler::CompileStoreElementPolymorphic( elements_kind, transitioned_map->elements_kind(), is_js_array, - store_mode_).GetCode(isolate()); + store_mode()).GetCode(isolate()); } else { if (receiver_map->has_fast_elements() || receiver_map->has_external_array_elements()) { cached_stub = KeyedStoreFastElementStub( is_js_array, elements_kind, - store_mode_).GetCode(isolate()); + store_mode()).GetCode(isolate()); } else { cached_stub = KeyedStoreElementStub( is_js_array, elements_kind, - store_mode_).GetCode(isolate()); + store_mode()).GetCode(isolate()); } } ASSERT(!cached_stub.is_null()); @@ -1746,10 +1746,9 @@ CallStubCompiler::CallStubCompiler(Isolate* isolate, Code::Kind kind, ExtraICState extra_state, InlineCacheHolderFlag cache_holder) - : StubCompiler(isolate), + : StubCompiler(isolate, extra_state), arguments_(argc), kind_(kind), - extra_state_(extra_state), cache_holder_(cache_holder) { } @@ -1817,7 +1816,7 @@ Handle CallStubCompiler::GetCode(Code::StubType type, Handle name) { int argc = arguments_.immediate(); Code::Flags flags = Code::ComputeMonomorphicFlags( - kind_, extra_state_, cache_holder_, type, argc); + kind_, extra_state(), cache_holder_, type, argc); return GetCodeWithFlags(flags, name); } diff --git a/src/stub-cache.h b/src/stub-cache.h index c70b1ff..ebf0bd3 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 GetCodeWithFlags(Code::Flags flags, const char* name); Handle GetCodeWithFlags(Code::Flags flags, Handle 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, Handle 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 CompileLoadField(Handle 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 CompileLoadElement(Handle 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 CompileStoreElement(Handle 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, 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_; }; diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc index e7bbe27..9bf6e9f 100644 --- a/src/x64/stub-cache-x64.cc +++ b/src/x64/stub-cache-x64.cc @@ -1572,7 +1572,7 @@ void CallStubCompiler::GenerateMissBranch() { Handle code = isolate()->stub_cache()->ComputeCallMiss(arguments().immediate(), kind_, - extra_state_); + extra_state()); __ Jump(code, RelocInfo::CODE_TARGET); } @@ -1957,7 +1957,7 @@ Handle CallStubCompiler::CompileStringCharCodeAtCall( Label index_out_of_range; Label* index_out_of_range_label = &index_out_of_range; if (kind_ == Code::CALL_IC && - (CallICBase::StringStubState::decode(extra_state_) == + (CallICBase::StringStubState::decode(extra_state()) == DEFAULT_STRING_STUB)) { index_out_of_range_label = &miss; } @@ -2024,7 +2024,7 @@ Handle CallStubCompiler::CompileStringCharAtCall( Label index_out_of_range; Label* index_out_of_range_label = &index_out_of_range; if (kind_ == Code::CALL_IC && - (CallICBase::StringStubState::decode(extra_state_) == + (CallICBase::StringStubState::decode(extra_state()) == DEFAULT_STRING_STUB)) { index_out_of_range_label = &miss; } @@ -2497,7 +2497,7 @@ Handle CallStubCompiler::CompileCallInterceptor(Handle object, StackArgumentsAccessor args(rsp, arguments()); __ movq(rdx, args.GetReceiverOperand()); - CallInterceptorCompiler compiler(this, arguments(), rcx, extra_state_); + CallInterceptorCompiler compiler(this, arguments(), rcx, extra_state()); compiler.Compile(masm(), object, holder, name, &lookup, rdx, rbx, rdi, rax, &miss);