Add a slow stub for store ICs.

BUG=
R=ulan@chromium.org

Review URL: https://chromiumcodereview.appspot.com/26807003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17158 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
verwaest@chromium.org 2013-10-11 10:50:26 +00:00
parent faa0741bd6
commit 83a113482e
4 changed files with 30 additions and 8 deletions

View File

@ -1378,6 +1378,11 @@ static void Generate_StoreIC_Slow(MacroAssembler* masm) {
}
static void Generate_StoreIC_Slow_Strict(MacroAssembler* masm) {
StoreIC::GenerateSlow(masm);
}
static void Generate_StoreIC_Initialize(MacroAssembler* masm) {
StoreIC::GenerateInitialize(masm);
}
@ -1473,6 +1478,11 @@ static void Generate_KeyedStoreIC_Slow(MacroAssembler* masm) {
}
static void Generate_KeyedStoreIC_Slow_Strict(MacroAssembler* masm) {
KeyedStoreIC::GenerateSlow(masm);
}
static void Generate_KeyedStoreIC_Initialize(MacroAssembler* masm) {
KeyedStoreIC::GenerateInitialize(masm);
}

View File

@ -117,14 +117,10 @@ enum BuiltinExtraArguments {
Code::kNoExtraICState) \
V(StoreIC_Miss, BUILTIN, UNINITIALIZED, \
Code::kNoExtraICState) \
V(StoreIC_Slow, BUILTIN, UNINITIALIZED, \
Code::kNoExtraICState) \
V(KeyedStoreIC_Miss, BUILTIN, UNINITIALIZED, \
Code::kNoExtraICState) \
V(KeyedStoreIC_MissForceGeneric, BUILTIN, UNINITIALIZED, \
Code::kNoExtraICState) \
V(KeyedStoreIC_Slow, BUILTIN, UNINITIALIZED, \
Code::kNoExtraICState) \
V(LoadIC_Initialize, LOAD_IC, UNINITIALIZED, \
Code::kNoExtraICState) \
V(LoadIC_PreMonomorphic, LOAD_IC, PREMONOMORPHIC, \
@ -214,6 +210,10 @@ enum BuiltinExtraArguments {
#define BUILTIN_LIST_H(V) \
V(LoadIC_Slow, LOAD_IC, Code::kNoExtraICState) \
V(KeyedLoadIC_Slow, KEYED_LOAD_IC, Code::kNoExtraICState) \
V(StoreIC_Slow, STORE_IC, Code::kNoExtraICState) \
V(StoreIC_Slow_Strict, STORE_IC, kStrictMode) \
V(KeyedStoreIC_Slow, KEYED_STORE_IC, Code::kNoExtraICState)\
V(KeyedStoreIC_Slow_Strict, KEYED_STORE_IC, kStrictMode) \
V(LoadIC_Normal, LOAD_IC, Code::kNoExtraICState) \
V(StoreIC_Normal, STORE_IC, Code::kNoExtraICState) \
V(StoreIC_Normal_Strict, STORE_IC, kStrictMode)

View File

@ -1603,10 +1603,7 @@ void StoreIC::UpdateCaches(LookupResult* lookup,
ASSERT(!lookup->IsHandler());
Handle<Code> code = ComputeStoreHandler(lookup, receiver, name, value);
if (code.is_null()) {
set_target(*generic_stub());
return;
}
if (code.is_null()) code = slow_stub();
PatchCache(receiver, name, code);
TRACE_IC("StoreIC", name);

View File

@ -552,6 +552,14 @@ class StoreIC: public IC {
}
}
virtual Handle<Code> slow_stub() const {
if (strict_mode() == kStrictMode) {
return isolate()->builtins()->StoreIC_Slow_Strict();
} else {
return isolate()->builtins()->StoreIC_Slow();
}
}
virtual Handle<Code> pre_monomorphic_stub() {
return pre_monomorphic_stub(isolate(), strict_mode());
}
@ -670,6 +678,13 @@ class KeyedStoreIC: public StoreIC {
return isolate->builtins()->KeyedStoreIC_PreMonomorphic();
}
}
virtual Handle<Code> slow_stub() const {
if (strict_mode() == kStrictMode) {
return isolate()->builtins()->KeyedStoreIC_Slow_Strict();
} else {
return isolate()->builtins()->KeyedStoreIC_Slow();
}
}
virtual Handle<Code> megamorphic_stub() {
if (strict_mode() == kStrictMode) {
return isolate()->builtins()->KeyedStoreIC_Generic_Strict();