Index: src/stub-cache.cc |
diff --git a/src/stub-cache.cc b/src/stub-cache.cc |
index b4e3bdf61af73d9adfff32825a42e7d2613f0fc5..b83a5e142017b6cbe5b37b0e256b9ac7373f73fa 100644 |
--- a/src/stub-cache.cc |
+++ b/src/stub-cache.cc |
@@ -195,7 +195,7 @@ Handle<Code> StubCache::ComputeLoadNonexistent(Handle<Name> name, |
cache_name, stub_holder, Code::LOAD_IC, flag); |
if (!handler.is_null()) return handler; |
- LoadStubCompiler compiler(isolate_, flag); |
+ LoadStubCompiler compiler(isolate_, kNoExtraICState, flag); |
handler = compiler.CompileLoadNonexistent(type, last, cache_name); |
Map::UpdateCodeCache(stub_holder, cache_name, handler); |
return handler; |
@@ -247,163 +247,7 @@ Handle<Code> StubCache::ComputeKeyedStoreElement( |
} |
-#define CALL_LOGGER_TAG(kind, type) \ |
- (kind == Code::CALL_IC ? Logger::type : Logger::KEYED_##type) |
- |
-Handle<Code> StubCache::ComputeCallConstant(int argc, |
- Code::Kind kind, |
- ExtraICState extra_state, |
- Handle<Name> name, |
- Handle<Object> object, |
- Handle<JSObject> holder, |
- Handle<JSFunction> function) { |
- // Compute the check type and the map. |
- InlineCacheHolderFlag cache_holder = IC::GetCodeCacheForObject(*object); |
- Handle<HeapObject> stub_holder(IC::GetCodeCacheHolder( |
- isolate_, *object, cache_holder)); |
- |
- // Compute check type based on receiver/holder. |
- CheckType check = RECEIVER_MAP_CHECK; |
- if (object->IsString()) { |
- check = STRING_CHECK; |
- } else if (object->IsSymbol()) { |
- check = SYMBOL_CHECK; |
- } else if (object->IsNumber()) { |
- check = NUMBER_CHECK; |
- } else if (object->IsBoolean()) { |
- check = BOOLEAN_CHECK; |
- } |
- |
- if (check != RECEIVER_MAP_CHECK && |
- !function->IsBuiltin() && |
- function->shared()->is_classic_mode()) { |
- // Calling non-strict non-builtins with a value as the receiver |
- // requires boxing. |
- return Handle<Code>::null(); |
- } |
- |
- Code::Flags flags = Code::ComputeMonomorphicFlags( |
- kind, extra_state, cache_holder, Code::FAST, argc); |
- Handle<Object> probe(stub_holder->map()->FindInCodeCache(*name, flags), |
- isolate_); |
- if (probe->IsCode()) return Handle<Code>::cast(probe); |
- |
- CallStubCompiler compiler(isolate_, argc, kind, extra_state, cache_holder); |
- Handle<Code> code = |
- compiler.CompileCallConstant(object, holder, name, check, function); |
- code->set_check_type(check); |
- ASSERT(flags == code->flags()); |
- PROFILE(isolate_, |
- CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name)); |
- GDBJIT(AddCode(GDBJITInterface::CALL_IC, *name, *code)); |
- |
- HeapObject::UpdateMapCodeCache(stub_holder, name, code); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCache::ComputeCallField(int argc, |
- Code::Kind kind, |
- ExtraICState extra_state, |
- Handle<Name> name, |
- Handle<Object> object, |
- Handle<JSObject> holder, |
- PropertyIndex index) { |
- // Compute the check type and the map. |
- InlineCacheHolderFlag cache_holder = IC::GetCodeCacheForObject(*object); |
- Handle<HeapObject> stub_holder(IC::GetCodeCacheHolder( |
- isolate_, *object, cache_holder)); |
- |
- // TODO(1233596): We cannot do receiver map check for non-JS objects |
- // because they may be represented as immediates without a |
- // map. Instead, we check against the map in the holder. |
- if (object->IsNumber() || object->IsSymbol() || |
- object->IsBoolean() || object->IsString()) { |
- object = holder; |
- } |
- |
- Code::Flags flags = Code::ComputeMonomorphicFlags( |
- kind, extra_state, cache_holder, Code::FAST, argc); |
- Handle<Object> probe(stub_holder->map()->FindInCodeCache(*name, flags), |
- isolate_); |
- if (probe->IsCode()) return Handle<Code>::cast(probe); |
- |
- CallStubCompiler compiler(isolate_, argc, kind, extra_state, cache_holder); |
- Handle<Code> code = |
- compiler.CompileCallField(Handle<JSObject>::cast(object), |
- holder, index, name); |
- ASSERT(flags == code->flags()); |
- PROFILE(isolate_, |
- CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name)); |
- GDBJIT(AddCode(GDBJITInterface::CALL_IC, *name, *code)); |
- HeapObject::UpdateMapCodeCache(stub_holder, name, code); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCache::ComputeCallInterceptor(int argc, |
- Code::Kind kind, |
- ExtraICState extra_state, |
- Handle<Name> name, |
- Handle<Object> object, |
- Handle<JSObject> holder) { |
- // Compute the check type and the map. |
- InlineCacheHolderFlag cache_holder = IC::GetCodeCacheForObject(*object); |
- Handle<HeapObject> stub_holder(IC::GetCodeCacheHolder( |
- isolate_, *object, cache_holder)); |
- |
- // TODO(1233596): We cannot do receiver map check for non-JS objects |
- // because they may be represented as immediates without a |
- // map. Instead, we check against the map in the holder. |
- if (object->IsNumber() || object->IsSymbol() || |
- object->IsBoolean() || object->IsString()) { |
- object = holder; |
- } |
- |
- Code::Flags flags = Code::ComputeMonomorphicFlags( |
- kind, extra_state, cache_holder, Code::FAST, argc); |
- Handle<Object> probe(stub_holder->map()->FindInCodeCache(*name, flags), |
- isolate_); |
- if (probe->IsCode()) return Handle<Code>::cast(probe); |
- |
- CallStubCompiler compiler(isolate(), argc, kind, extra_state, cache_holder); |
- Handle<Code> code = |
- compiler.CompileCallInterceptor(Handle<JSObject>::cast(object), |
- holder, name); |
- ASSERT(flags == code->flags()); |
- PROFILE(isolate(), |
- CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name)); |
- GDBJIT(AddCode(GDBJITInterface::CALL_IC, *name, *code)); |
- HeapObject::UpdateMapCodeCache(stub_holder, name, code); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCache::ComputeCallGlobal(int argc, |
- Code::Kind kind, |
- ExtraICState extra_state, |
- Handle<Name> name, |
- Handle<JSObject> receiver, |
- Handle<GlobalObject> holder, |
- Handle<PropertyCell> cell, |
- Handle<JSFunction> function) { |
- Code::Flags flags = Code::ComputeMonomorphicFlags( |
- kind, extra_state, OWN_MAP, Code::NORMAL, argc); |
- Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags), |
- isolate_); |
- if (probe->IsCode()) return Handle<Code>::cast(probe); |
- |
- CallStubCompiler compiler(isolate(), argc, kind, extra_state); |
- Handle<Code> code = |
- compiler.CompileCallGlobal(receiver, holder, cell, function, name); |
- ASSERT(flags == code->flags()); |
- PROFILE(isolate(), |
- CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), *code, *name)); |
- GDBJIT(AddCode(GDBJITInterface::CALL_IC, *name, *code)); |
- HeapObject::UpdateMapCodeCache(receiver, name, code); |
- return code; |
-} |
- |
+#define CALL_LOGGER_TAG(kind, type) (Logger::KEYED_##type) |
static void FillCache(Isolate* isolate, Handle<Code> code) { |
Handle<UnseededNumberDictionary> dictionary = |
@@ -414,20 +258,6 @@ static void FillCache(Isolate* isolate, Handle<Code> code) { |
} |
-Code* StubCache::FindCallInitialize(int argc, Code::Kind kind) { |
- Code::Flags flags = Code::ComputeFlags( |
- kind, UNINITIALIZED, kNoExtraICState, Code::NORMAL, argc); |
- UnseededNumberDictionary* dictionary = |
- isolate()->heap()->non_monomorphic_cache(); |
- int entry = dictionary->FindEntry(isolate(), flags); |
- ASSERT(entry != -1); |
- Object* code = dictionary->ValueAt(entry); |
- // This might be called during the marking phase of the collector |
- // hence the unchecked cast. |
- return reinterpret_cast<Code*>(code); |
-} |
- |
- |
Code* StubCache::FindPreMonomorphicIC(Code::Kind kind, ExtraICState state) { |
Code::Flags flags = Code::ComputeFlags(kind, PREMONOMORPHIC, state); |
UnseededNumberDictionary* dictionary = |
@@ -441,101 +271,6 @@ Code* StubCache::FindPreMonomorphicIC(Code::Kind kind, ExtraICState state) { |
} |
-Handle<Code> StubCache::ComputeCallInitialize(int argc, Code::Kind kind) { |
- Code::Flags flags = Code::ComputeFlags( |
- kind, UNINITIALIZED, kNoExtraICState, Code::NORMAL, argc); |
- Handle<UnseededNumberDictionary> cache = |
- isolate_->factory()->non_monomorphic_cache(); |
- int entry = cache->FindEntry(isolate_, flags); |
- if (entry != -1) return Handle<Code>(Code::cast(cache->ValueAt(entry))); |
- |
- StubCompiler compiler(isolate_); |
- Handle<Code> code = compiler.CompileCallInitialize(flags); |
- FillCache(isolate_, code); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCache::ComputeCallInitialize(int argc) { |
- return ComputeCallInitialize(argc, Code::CALL_IC); |
-} |
- |
- |
-Handle<Code> StubCache::ComputeKeyedCallInitialize(int argc) { |
- return ComputeCallInitialize(argc, Code::KEYED_CALL_IC); |
-} |
- |
- |
-Handle<Code> StubCache::ComputeCallPreMonomorphic( |
- int argc, |
- Code::Kind kind, |
- ExtraICState extra_state) { |
- Code::Flags flags = |
- Code::ComputeFlags(kind, PREMONOMORPHIC, extra_state, Code::NORMAL, argc); |
- Handle<UnseededNumberDictionary> cache = |
- isolate_->factory()->non_monomorphic_cache(); |
- int entry = cache->FindEntry(isolate_, flags); |
- if (entry != -1) return Handle<Code>(Code::cast(cache->ValueAt(entry))); |
- |
- StubCompiler compiler(isolate_); |
- Handle<Code> code = compiler.CompileCallPreMonomorphic(flags); |
- FillCache(isolate_, code); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCache::ComputeCallNormal(int argc, |
- Code::Kind kind, |
- ExtraICState extra_state) { |
- Code::Flags flags = |
- Code::ComputeFlags(kind, MONOMORPHIC, extra_state, Code::NORMAL, argc); |
- Handle<UnseededNumberDictionary> cache = |
- isolate_->factory()->non_monomorphic_cache(); |
- int entry = cache->FindEntry(isolate_, flags); |
- if (entry != -1) return Handle<Code>(Code::cast(cache->ValueAt(entry))); |
- |
- StubCompiler compiler(isolate_); |
- Handle<Code> code = compiler.CompileCallNormal(flags); |
- FillCache(isolate_, code); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCache::ComputeCallArguments(int argc) { |
- Code::Flags flags = |
- Code::ComputeFlags(Code::KEYED_CALL_IC, MEGAMORPHIC, |
- kNoExtraICState, Code::NORMAL, argc); |
- Handle<UnseededNumberDictionary> cache = |
- isolate_->factory()->non_monomorphic_cache(); |
- int entry = cache->FindEntry(isolate_, flags); |
- if (entry != -1) return Handle<Code>(Code::cast(cache->ValueAt(entry))); |
- |
- StubCompiler compiler(isolate_); |
- Handle<Code> code = compiler.CompileCallArguments(flags); |
- FillCache(isolate_, code); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCache::ComputeCallMegamorphic( |
- int argc, |
- Code::Kind kind, |
- ExtraICState extra_state) { |
- Code::Flags flags = |
- Code::ComputeFlags(kind, MEGAMORPHIC, extra_state, |
- Code::NORMAL, argc); |
- Handle<UnseededNumberDictionary> cache = |
- isolate_->factory()->non_monomorphic_cache(); |
- int entry = cache->FindEntry(isolate_, flags); |
- if (entry != -1) return Handle<Code>(Code::cast(cache->ValueAt(entry))); |
- |
- StubCompiler compiler(isolate_); |
- Handle<Code> code = compiler.CompileCallMegamorphic(flags); |
- FillCache(isolate_, code); |
- return code; |
-} |
- |
- |
Handle<Code> StubCache::ComputeLoad(InlineCacheState ic_state, |
ExtraICState extra_state) { |
Code::Flags flags = Code::ComputeFlags(Code::LOAD_IC, ic_state, extra_state); |
@@ -587,26 +322,6 @@ Handle<Code> StubCache::ComputeStore(InlineCacheState ic_state, |
} |
-Handle<Code> StubCache::ComputeCallMiss(int argc, |
- Code::Kind kind, |
- ExtraICState extra_state) { |
- // MONOMORPHIC_PROTOTYPE_FAILURE state is used to make sure that miss stubs |
- // and monomorphic stubs are not mixed up together in the stub cache. |
- Code::Flags flags = |
- Code::ComputeFlags(kind, MONOMORPHIC_PROTOTYPE_FAILURE, extra_state, |
- Code::NORMAL, argc, OWN_MAP); |
- Handle<UnseededNumberDictionary> cache = |
- isolate_->factory()->non_monomorphic_cache(); |
- int entry = cache->FindEntry(isolate_, flags); |
- if (entry != -1) return Handle<Code>(Code::cast(cache->ValueAt(entry))); |
- |
- StubCompiler compiler(isolate_); |
- Handle<Code> code = compiler.CompileCallMiss(flags); |
- FillCache(isolate_, code); |
- return code; |
-} |
- |
- |
Handle<Code> StubCache::ComputeCompareNil(Handle<Map> receiver_map, |
CompareNilICStub& stub) { |
Handle<String> name(isolate_->heap()->empty_string()); |
@@ -701,46 +416,6 @@ Handle<Code> StubCache::ComputeStoreElementPolymorphic( |
} |
-#ifdef ENABLE_DEBUGGER_SUPPORT |
-Handle<Code> StubCache::ComputeCallDebugBreak(int argc, |
- Code::Kind kind) { |
- // Extra IC state is irrelevant for debug break ICs. They jump to |
- // the actual call ic to carry out the work. |
- Code::Flags flags = |
- Code::ComputeFlags(kind, DEBUG_STUB, DEBUG_BREAK, |
- Code::NORMAL, argc); |
- Handle<UnseededNumberDictionary> cache = |
- isolate_->factory()->non_monomorphic_cache(); |
- int entry = cache->FindEntry(isolate_, flags); |
- if (entry != -1) return Handle<Code>(Code::cast(cache->ValueAt(entry))); |
- |
- StubCompiler compiler(isolate_); |
- Handle<Code> code = compiler.CompileCallDebugBreak(flags); |
- FillCache(isolate_, code); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCache::ComputeCallDebugPrepareStepIn(int argc, |
- Code::Kind kind) { |
- // Extra IC state is irrelevant for debug break ICs. They jump to |
- // the actual call ic to carry out the work. |
- Code::Flags flags = |
- Code::ComputeFlags(kind, DEBUG_STUB, DEBUG_PREPARE_STEP_IN, |
- Code::NORMAL, argc); |
- Handle<UnseededNumberDictionary> cache = |
- isolate_->factory()->non_monomorphic_cache(); |
- int entry = cache->FindEntry(isolate_, flags); |
- if (entry != -1) return Handle<Code>(Code::cast(cache->ValueAt(entry))); |
- |
- StubCompiler compiler(isolate_); |
- Handle<Code> code = compiler.CompileCallDebugPrepareStepIn(flags); |
- FillCache(isolate_, code); |
- return code; |
-} |
-#endif |
- |
- |
void StubCache::Clear() { |
Code* empty = isolate_->builtins()->builtin(Builtins::kIllegal); |
for (int i = 0; i < kPrimaryTableSize; i++) { |
@@ -994,83 +669,6 @@ RUNTIME_FUNCTION(MaybeObject*, KeyedLoadPropertyWithInterceptor) { |
} |
-Handle<Code> StubCompiler::CompileCallInitialize(Code::Flags flags) { |
- int argc = Code::ExtractArgumentsCountFromFlags(flags); |
- Code::Kind kind = Code::ExtractKindFromFlags(flags); |
- ExtraICState extra_state = Code::ExtractExtraICStateFromFlags(flags); |
- if (kind == Code::CALL_IC) { |
- CallIC::GenerateInitialize(masm(), argc, extra_state); |
- } else { |
- KeyedCallIC::GenerateInitialize(masm(), argc); |
- } |
- Handle<Code> code = GetCodeWithFlags(flags, "CompileCallInitialize"); |
- isolate()->counters()->call_initialize_stubs()->Increment(); |
- PROFILE(isolate(), |
- CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_INITIALIZE_TAG), |
- *code, code->arguments_count())); |
- GDBJIT(AddCode(GDBJITInterface::CALL_INITIALIZE, *code)); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCompiler::CompileCallPreMonomorphic(Code::Flags flags) { |
- int argc = Code::ExtractArgumentsCountFromFlags(flags); |
- // The code of the PreMonomorphic stub is the same as the code |
- // of the Initialized stub. They just differ on the code object flags. |
- Code::Kind kind = Code::ExtractKindFromFlags(flags); |
- ExtraICState extra_state = Code::ExtractExtraICStateFromFlags(flags); |
- if (kind == Code::CALL_IC) { |
- CallIC::GenerateInitialize(masm(), argc, extra_state); |
- } else { |
- KeyedCallIC::GenerateInitialize(masm(), argc); |
- } |
- Handle<Code> code = GetCodeWithFlags(flags, "CompileCallPreMonomorphic"); |
- isolate()->counters()->call_premonomorphic_stubs()->Increment(); |
- PROFILE(isolate(), |
- CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_PRE_MONOMORPHIC_TAG), |
- *code, code->arguments_count())); |
- GDBJIT(AddCode(GDBJITInterface::CALL_PRE_MONOMORPHIC, *code)); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCompiler::CompileCallNormal(Code::Flags flags) { |
- int argc = Code::ExtractArgumentsCountFromFlags(flags); |
- Code::Kind kind = Code::ExtractKindFromFlags(flags); |
- if (kind == Code::CALL_IC) { |
- CallIC::GenerateNormal(masm(), argc); |
- } else { |
- KeyedCallIC::GenerateNormal(masm(), argc); |
- } |
- Handle<Code> code = GetCodeWithFlags(flags, "CompileCallNormal"); |
- isolate()->counters()->call_normal_stubs()->Increment(); |
- PROFILE(isolate(), |
- CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_NORMAL_TAG), |
- *code, code->arguments_count())); |
- GDBJIT(AddCode(GDBJITInterface::CALL_NORMAL, *code)); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCompiler::CompileCallMegamorphic(Code::Flags flags) { |
- int argc = Code::ExtractArgumentsCountFromFlags(flags); |
- Code::Kind kind = Code::ExtractKindFromFlags(flags); |
- ExtraICState extra_state = Code::ExtractExtraICStateFromFlags(flags); |
- if (kind == Code::CALL_IC) { |
- CallIC::GenerateMegamorphic(masm(), argc, extra_state); |
- } else { |
- KeyedCallIC::GenerateMegamorphic(masm(), argc); |
- } |
- Handle<Code> code = GetCodeWithFlags(flags, "CompileCallMegamorphic"); |
- isolate()->counters()->call_megamorphic_stubs()->Increment(); |
- PROFILE(isolate(), |
- CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MEGAMORPHIC_TAG), |
- *code, code->arguments_count())); |
- GDBJIT(AddCode(GDBJITInterface::CALL_MEGAMORPHIC, *code)); |
- return code; |
-} |
- |
- |
Handle<Code> StubCompiler::CompileLoadInitialize(Code::Flags flags) { |
LoadIC::GenerateInitialize(masm()); |
Handle<Code> code = GetCodeWithFlags(flags, "CompileLoadInitialize"); |
@@ -1146,71 +744,6 @@ Handle<Code> StubCompiler::CompileStoreMegamorphic(Code::Flags flags) { |
} |
-Handle<Code> StubCompiler::CompileCallArguments(Code::Flags flags) { |
- int argc = Code::ExtractArgumentsCountFromFlags(flags); |
- KeyedCallIC::GenerateNonStrictArguments(masm(), argc); |
- Handle<Code> code = GetCodeWithFlags(flags, "CompileCallArguments"); |
- PROFILE(isolate(), |
- CodeCreateEvent(CALL_LOGGER_TAG(Code::ExtractKindFromFlags(flags), |
- CALL_MEGAMORPHIC_TAG), |
- *code, code->arguments_count())); |
- GDBJIT(AddCode(GDBJITInterface::CALL_MEGAMORPHIC, *code)); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCompiler::CompileCallMiss(Code::Flags flags) { |
- int argc = Code::ExtractArgumentsCountFromFlags(flags); |
- Code::Kind kind = Code::ExtractKindFromFlags(flags); |
- ExtraICState extra_state = Code::ExtractExtraICStateFromFlags(flags); |
- if (kind == Code::CALL_IC) { |
- CallIC::GenerateMiss(masm(), argc, extra_state); |
- } else { |
- KeyedCallIC::GenerateMiss(masm(), argc); |
- } |
- Handle<Code> code = GetCodeWithFlags(flags, "CompileCallMiss"); |
- isolate()->counters()->call_megamorphic_stubs()->Increment(); |
- PROFILE(isolate(), |
- CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_MISS_TAG), |
- *code, code->arguments_count())); |
- GDBJIT(AddCode(GDBJITInterface::CALL_MISS, *code)); |
- return code; |
-} |
- |
- |
-#ifdef ENABLE_DEBUGGER_SUPPORT |
-Handle<Code> StubCompiler::CompileCallDebugBreak(Code::Flags flags) { |
- Debug::GenerateCallICDebugBreak(masm()); |
- Handle<Code> code = GetCodeWithFlags(flags, "CompileCallDebugBreak"); |
- PROFILE(isolate(), |
- CodeCreateEvent(CALL_LOGGER_TAG(Code::ExtractKindFromFlags(flags), |
- CALL_DEBUG_BREAK_TAG), |
- *code, code->arguments_count())); |
- return code; |
-} |
- |
- |
-Handle<Code> StubCompiler::CompileCallDebugPrepareStepIn(Code::Flags flags) { |
- // Use the same code for the the step in preparations as we do for the |
- // miss case. |
- int argc = Code::ExtractArgumentsCountFromFlags(flags); |
- Code::Kind kind = Code::ExtractKindFromFlags(flags); |
- if (kind == Code::CALL_IC) { |
- // For the debugger extra ic state is irrelevant. |
- CallIC::GenerateMiss(masm(), argc, kNoExtraICState); |
- } else { |
- KeyedCallIC::GenerateMiss(masm(), argc); |
- } |
- Handle<Code> code = GetCodeWithFlags(flags, "CompileCallDebugPrepareStepIn"); |
- PROFILE(isolate(), |
- CodeCreateEvent( |
- CALL_LOGGER_TAG(kind, CALL_DEBUG_PREPARE_STEP_IN_TAG), |
- *code, |
- code->arguments_count())); |
- return code; |
-} |
-#endif // ENABLE_DEBUGGER_SUPPORT |
- |
#undef CALL_LOGGER_TAG |
@@ -1251,53 +784,6 @@ void StubCompiler::LookupPostInterceptor(Handle<JSObject> holder, |
#define __ ACCESS_MASM(masm()) |
-void CallStubCompiler::HandlerFrontendFooter(Label* miss) { |
- __ bind(miss); |
- GenerateMissBranch(); |
-} |
- |
- |
-void CallStubCompiler::GenerateJumpFunctionIgnoreReceiver( |
- Handle<JSFunction> function) { |
- ParameterCount expected(function); |
- __ InvokeFunction(function, expected, arguments(), |
- JUMP_FUNCTION, NullCallWrapper()); |
-} |
- |
- |
-void CallStubCompiler::GenerateJumpFunction(Handle<Object> object, |
- Handle<JSFunction> function) { |
- PatchImplicitReceiver(object); |
- GenerateJumpFunctionIgnoreReceiver(function); |
-} |
- |
- |
-void CallStubCompiler::GenerateJumpFunction(Handle<Object> object, |
- Register actual_closure, |
- Handle<JSFunction> function) { |
- PatchImplicitReceiver(object); |
- ParameterCount expected(function); |
- __ InvokeFunction(actual_closure, expected, arguments(), |
- JUMP_FUNCTION, NullCallWrapper()); |
-} |
- |
- |
-Handle<Code> CallStubCompiler::CompileCallConstant( |
- Handle<Object> object, |
- Handle<JSObject> holder, |
- Handle<Name> name, |
- CheckType check, |
- Handle<JSFunction> function) { |
- Label miss; |
- HandlerFrontendHeader(object, holder, name, check, &miss); |
- GenerateJumpFunction(object, function); |
- HandlerFrontendFooter(&miss); |
- |
- // Return the generated code. |
- return GetCode(function); |
-} |
- |
- |
Register LoadStubCompiler::HandlerFrontendHeader( |
Handle<HeapType> type, |
Register object_reg, |
@@ -1422,15 +908,9 @@ Handle<Code> LoadStubCompiler::CompileLoadField( |
Handle<Name> name, |
PropertyIndex field, |
Representation representation) { |
- Label miss; |
- |
- Register reg = HandlerFrontendHeader(type, receiver(), holder, name, &miss); |
- |
+ Register reg = HandlerFrontend(type, receiver(), holder, name); |
GenerateLoadField(reg, holder, field, representation); |
- __ bind(&miss); |
- TailCallBuiltin(masm(), MissBuiltin(kind())); |
- |
// Return the generated code. |
return GetCode(kind(), Code::FAST, name); |
} |
@@ -1856,36 +1336,6 @@ void KeyedStoreStubCompiler::GenerateStoreDictionaryElement( |
} |
-CallStubCompiler::CallStubCompiler(Isolate* isolate, |
- int argc, |
- Code::Kind kind, |
- ExtraICState extra_state, |
- InlineCacheHolderFlag cache_holder) |
- : StubCompiler(isolate, extra_state), |
- arguments_(argc), |
- kind_(kind), |
- cache_holder_(cache_holder) { |
-} |
- |
- |
-Handle<Code> CallStubCompiler::GetCode(Code::StubType type, |
- Handle<Name> name) { |
- int argc = arguments_.immediate(); |
- Code::Flags flags = Code::ComputeMonomorphicFlags( |
- kind_, extra_state(), cache_holder_, type, argc); |
- return GetCodeWithFlags(flags, name); |
-} |
- |
- |
-Handle<Code> CallStubCompiler::GetCode(Handle<JSFunction> function) { |
- Handle<String> function_name; |
- if (function->shared()->name()->IsString()) { |
- function_name = Handle<String>(String::cast(function->shared()->name())); |
- } |
- return GetCode(Code::FAST, function_name); |
-} |
- |
- |
CallOptimization::CallOptimization(LookupResult* lookup) { |
if (lookup->IsFound() && |
lookup->IsCacheable() && |