| Index: src/ia32/ic-ia32.cc
|
| ===================================================================
|
| --- src/ia32/ic-ia32.cc (revision 12603)
|
| +++ src/ia32/ic-ia32.cc (working copy)
|
| @@ -747,12 +747,13 @@
|
| }
|
|
|
|
|
| -static void KeyedStoreGenerateGenericHelper(MacroAssembler* masm,
|
| - Label* fast_object,
|
| - Label* fast_double,
|
| - Label* slow,
|
| - bool check_map,
|
| - bool increment_length) {
|
| +static void KeyedStoreGenerateGenericHelper(
|
| + MacroAssembler* masm,
|
| + Label* fast_object,
|
| + Label* fast_double,
|
| + Label* slow,
|
| + KeyedStoreCheckMap check_map,
|
| + KeyedStoreIncrementLength increment_length) {
|
| Label transition_smi_elements;
|
| Label finish_object_store, non_double_value, transition_double_elements;
|
| Label fast_double_without_map_check;
|
| @@ -763,7 +764,7 @@
|
| // edi: receiver map
|
| // Fast case: Do the store, could either Object or double.
|
| __ bind(fast_object);
|
| - if (check_map) {
|
| + if (check_map == kCheckMap) {
|
| __ mov(edi, FieldOperand(ebx, HeapObject::kMapOffset));
|
| __ cmp(edi, masm->isolate()->factory()->fixed_array_map());
|
| __ j(not_equal, fast_double);
|
| @@ -771,7 +772,7 @@
|
| // Smi stores don't require further checks.
|
| Label non_smi_value;
|
| __ JumpIfNotSmi(eax, &non_smi_value);
|
| - if (increment_length) {
|
| + if (increment_length == kIncrementLength) {
|
| // Add 1 to receiver->length.
|
| __ add(FieldOperand(edx, JSArray::kLengthOffset),
|
| Immediate(Smi::FromInt(1)));
|
| @@ -787,7 +788,7 @@
|
|
|
| // Fast elements array, store the value to the elements backing store.
|
| __ bind(&finish_object_store);
|
| - if (increment_length) {
|
| + if (increment_length == kIncrementLength) {
|
| // Add 1 to receiver->length.
|
| __ add(FieldOperand(edx, JSArray::kLengthOffset),
|
| Immediate(Smi::FromInt(1)));
|
| @@ -800,7 +801,7 @@
|
| __ ret(0);
|
|
|
| __ bind(fast_double);
|
| - if (check_map) {
|
| + if (check_map == kCheckMap) {
|
| // Check for fast double array case. If this fails, call through to the
|
| // runtime.
|
| __ cmp(edi, masm->isolate()->factory()->fixed_double_array_map());
|
| @@ -811,7 +812,7 @@
|
| __ bind(&fast_double_without_map_check);
|
| __ StoreNumberToDoubleElements(eax, ebx, ecx, edi, xmm0,
|
| &transition_double_elements, false);
|
| - if (increment_length) {
|
| + if (increment_length == kIncrementLength) {
|
| // Add 1 to receiver->length.
|
| __ add(FieldOperand(edx, JSArray::kLengthOffset),
|
| Immediate(Smi::FromInt(1)));
|
| @@ -947,10 +948,10 @@
|
| __ cmp(ecx, FieldOperand(edx, JSArray::kLengthOffset)); // Compare smis.
|
| __ j(above_equal, &extra);
|
|
|
| - KeyedStoreGenerateGenericHelper(masm, &fast_object, &fast_double, &slow,
|
| - true, false);
|
| + KeyedStoreGenerateGenericHelper(masm, &fast_object, &fast_double,
|
| + &slow, kCheckMap, kDontIncrementLength);
|
| KeyedStoreGenerateGenericHelper(masm, &fast_object_grow, &fast_double_grow,
|
| - &slow, false, true);
|
| + &slow, kDontCheckMap, kIncrementLength);
|
| }
|
|
|
|
|
|
|