Index: src/ia32/stub-cache-ia32.cc |
diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc |
index 710b232c6fb7ee0dd2bc4609a97e6cf79456e391..421f9eacbb171bf0244a5732b057c60e1795cf73 100644 |
--- a/src/ia32/stub-cache-ia32.cc |
+++ b/src/ia32/stub-cache-ia32.cc |
@@ -2769,13 +2769,21 @@ Handle<Code> KeyedStoreStubCompiler::CompileStoreElement( |
// -- esp[0] : return address |
// ----------------------------------- |
ElementsKind elements_kind = receiver_map->elements_kind(); |
- bool is_jsarray = receiver_map->instance_type() == JS_ARRAY_TYPE; |
- Handle<Code> stub = |
- KeyedStoreElementStub(is_jsarray, |
- elements_kind, |
- store_mode_).GetCode(isolate()); |
- |
- __ DispatchMap(edx, receiver_map, stub, DO_SMI_CHECK); |
+ bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; |
+ if (FLAG_compiled_keyed_stores && |
+ (receiver_map->has_fast_elements() || |
+ receiver_map->has_external_array_elements())) { |
+ Handle<Code> stub = KeyedStoreFastElementStub( |
+ is_js_array, |
+ elements_kind, |
+ store_mode_).GetCode(isolate()); |
+ __ DispatchMap(edx, receiver_map, stub, DO_SMI_CHECK); |
+ } else { |
+ Handle<Code> stub = |
+ KeyedStoreElementStub(is_js_array, elements_kind, |
+ store_mode_).GetCode(isolate()); |
+ __ DispatchMap(edx, receiver_map, stub, DO_SMI_CHECK); |
+ } |
TailCallBuiltin(masm(), MissBuiltin(kind())); |