Index: src/ic/ic.cc |
diff --git a/src/ic/ic.cc b/src/ic/ic.cc |
index 0324d992144247bba016d8eb01e4cb0faeb85a81..88520029132b9daedba28ae1e5650b3994a1f078 100644 |
--- a/src/ic/ic.cc |
+++ b/src/ic/ic.cc |
@@ -1619,21 +1619,6 @@ Handle<Code> StoreIC::megamorphic_stub() { |
} |
-Handle<Code> StoreIC::generic_stub() const { |
- if (kind() == Code::STORE_IC) { |
- return PropertyICCompiler::ComputeStore(isolate(), GENERIC, |
- extra_ic_state()); |
- } else { |
- DCHECK(kind() == Code::KEYED_STORE_IC); |
- if (strict_mode() == STRICT) { |
- return isolate()->builtins()->KeyedStoreIC_Generic_Strict(); |
- } else { |
- return isolate()->builtins()->KeyedStoreIC_Generic(); |
- } |
- } |
-} |
- |
- |
Handle<Code> StoreIC::slow_stub() const { |
if (kind() == Code::STORE_IC) { |
return isolate()->builtins()->StoreIC_Slow(); |
@@ -1801,7 +1786,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver, |
// and so the stubs can't be harvested for the object needed for a map check. |
if (target()->type() != Code::NORMAL) { |
TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "non-NORMAL target type"); |
- return generic_stub(); |
+ return megamorphic_stub(); |
} |
Handle<Map> receiver_map(receiver->map(), isolate()); |
@@ -1865,11 +1850,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver, |
if (!map_added) { |
// If the miss wasn't due to an unseen map, a polymorphic stub |
- // won't help. In theory we should use the generic stub, but in |
- // practice there are a number of hard-to-avoid reasons why this |
- // can happen occasionally, and where the additional logic in the |
- // megamorphic stub is beneficial because it can handle most cases |
- // without calling into the runtime. |
+ // won't help, use the megamorphic stub which can handle everything. |
TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "same map added twice"); |
return megamorphic_stub(); |
} |
@@ -1881,20 +1862,20 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver, |
} |
// Make sure all polymorphic handlers have the same store mode, otherwise the |
- // generic stub must be used. |
+ // megamorphic stub must be used. |
store_mode = GetNonTransitioningStoreMode(store_mode); |
if (old_store_mode != STANDARD_STORE) { |
if (store_mode == STANDARD_STORE) { |
store_mode = old_store_mode; |
} else if (store_mode != old_store_mode) { |
TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "store mode mismatch"); |
- return generic_stub(); |
+ return megamorphic_stub(); |
} |
} |
// If the store mode isn't the standard mode, make sure that all polymorphic |
// receivers are either external arrays, or all "normal" arrays. Otherwise, |
- // use the generic stub. |
+ // use the megamorphic stub. |
if (store_mode != STANDARD_STORE) { |
int external_arrays = 0; |
for (int i = 0; i < target_receiver_maps.length(); ++i) { |
@@ -1907,7 +1888,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver, |
external_arrays != target_receiver_maps.length()) { |
TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", |
"unsupported combination of external and normal arrays"); |
- return generic_stub(); |
+ return megamorphic_stub(); |
} |
} |
@@ -2052,7 +2033,7 @@ MaybeHandle<Object> KeyedStoreIC::Store(Handle<Object> object, |
key = TryConvertKey(key, isolate()); |
Handle<Object> store_handle; |
- Handle<Code> stub = generic_stub(); |
+ Handle<Code> stub = megamorphic_stub(); |
if (key->IsInternalizedString()) { |
ASSIGN_RETURN_ON_EXCEPTION( |
@@ -2126,8 +2107,8 @@ MaybeHandle<Object> KeyedStoreIC::Store(Handle<Object> object, |
} |
DCHECK(!is_target_set()); |
- Code* generic = *generic_stub(); |
- if (*stub == generic) { |
+ Code* megamorphic = *megamorphic_stub(); |
+ if (*stub == megamorphic) { |
TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "set generic"); |
} |
if (*stub == *slow_stub()) { |
@@ -2141,13 +2122,6 @@ MaybeHandle<Object> KeyedStoreIC::Store(Handle<Object> object, |
} |
-// static |
-void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm, |
- StrictMode strict_mode) { |
- PropertyICCompiler::GenerateRuntimeSetProperty(masm, strict_mode); |
-} |
- |
- |
bool CallIC::DoCustomHandler(Handle<Object> receiver, Handle<Object> function, |
const CallICState& callic_state) { |
DCHECK(FLAG_use_ic && function->IsJSFunction()); |