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:
parent
faa0741bd6
commit
83a113482e
@ -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);
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
15
src/ic.h
15
src/ic.h
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user