Chromium Code Reviews| Index: src/ia32/stub-cache-ia32.cc |
| diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc |
| index e148e2f525c34959d492ba838e5666b392da9f33..7f666ad9aa4cb8b75a624ba2faf993649426f658 100644 |
| --- a/src/ia32/stub-cache-ia32.cc |
| +++ b/src/ia32/stub-cache-ia32.cc |
| @@ -1466,12 +1466,27 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall( |
| // edi: elements array |
| // edx: receiver |
| // ebx: map |
| - __ LoadTransitionedArrayMapConditional(FAST_SMI_ONLY_ELEMENTS, |
| + Label try_holey_map; |
| + __ LoadTransitionedArrayMapConditional(FAST_HOLEY_SMI_ELEMENTS, |
|
Jakob Kummerow
2012/05/13 21:55:27
Didn't you mean to check for packed FAST_SMI_ELEME
danno
2012/05/22 11:05:21
Done.
|
| + FAST_HOLEY_ELEMENTS, |
| + ebx, |
| + edi, |
| + &try_holey_map); |
| + |
| + ElementsTransitionGenerator:: |
| + GenerateMapChangeElementTransition(masm()); |
| + // Restore edi. |
| + __ mov(edi, FieldOperand(edx, JSArray::kElementsOffset)); |
| + __ jmp(&fast_object); |
| + |
| + __ bind(&try_holey_map); |
| + __ LoadTransitionedArrayMapConditional(FAST_SMI_ELEMENTS, |
| FAST_ELEMENTS, |
| ebx, |
| edi, |
| &call_builtin); |
| - ElementsTransitionGenerator::GenerateSmiOnlyToObject(masm()); |
| + ElementsTransitionGenerator:: |
| + GenerateMapChangeElementTransition(masm()); |
| // Restore edi. |
| __ mov(edi, FieldOperand(edx, JSArray::kElementsOffset)); |
| __ bind(&fast_object); |
| @@ -3818,7 +3833,7 @@ void KeyedStoreStubCompiler::GenerateStoreFastElement( |
| // Check that the key is a smi or a heap number convertible to a smi. |
| GenerateSmiKeyCheck(masm, ecx, ebx, xmm0, xmm1, &miss_force_generic); |
| - if (elements_kind == FAST_SMI_ONLY_ELEMENTS) { |
| + if (IsFastSmiElementsKind(elements_kind)) { |
| __ JumpIfNotSmi(eax, &transition_elements_kind); |
| } |
| @@ -3843,7 +3858,7 @@ void KeyedStoreStubCompiler::GenerateStoreFastElement( |
| __ j(not_equal, &miss_force_generic); |
| __ bind(&finish_store); |
| - if (elements_kind == FAST_SMI_ONLY_ELEMENTS) { |
| + if (IsFastSmiElementsKind(elements_kind)) { |
| // ecx is a smi, use times_half_pointer_size instead of |
| // times_pointer_size |
| __ mov(FieldOperand(edi, |
| @@ -3851,7 +3866,7 @@ void KeyedStoreStubCompiler::GenerateStoreFastElement( |
| times_half_pointer_size, |
| FixedArray::kHeaderSize), eax); |
| } else { |
| - ASSERT(elements_kind == FAST_ELEMENTS); |
| + ASSERT(IsFastObjectElementsKind(elements_kind)); |
| // Do the store and update the write barrier. |
| // ecx is a smi, use times_half_pointer_size instead of |
| // times_pointer_size |