| Index: src/arm/stub-cache-arm.cc
|
| diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc
|
| index 49c09823015668fbd68e86001294db807ba8b227..f1c3a9792b6e816016a272b07fc6121259853184 100644
|
| --- a/src/arm/stub-cache-arm.cc
|
| +++ b/src/arm/stub-cache-arm.cc
|
| @@ -1581,16 +1581,27 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall(
|
| __ jmp(&fast_object);
|
| // In case of fast smi-only, convert to fast object, otherwise bail out.
|
| __ bind(¬_fast_object);
|
| - __ CheckFastSmiOnlyElements(r3, r7, &call_builtin);
|
| + __ CheckFastSmiElements(r3, r7, &call_builtin);
|
| // edx: receiver
|
| // r3: map
|
| - __ LoadTransitionedArrayMapConditional(FAST_SMI_ONLY_ELEMENTS,
|
| + Label try_holey_map;
|
| + __ LoadTransitionedArrayMapConditional(FAST_SMI_ELEMENTS,
|
| FAST_ELEMENTS,
|
| r3,
|
| r7,
|
| + &try_holey_map);
|
| + __ mov(r2, receiver);
|
| + ElementsTransitionGenerator::GenerateMapChangeElementTransition(masm());
|
| + __ jmp(&fast_object);
|
| +
|
| + __ bind(&try_holey_map);
|
| + __ LoadTransitionedArrayMapConditional(FAST_HOLEY_SMI_ELEMENTS,
|
| + FAST_HOLEY_ELEMENTS,
|
| + r3,
|
| + r7,
|
| &call_builtin);
|
| __ mov(r2, receiver);
|
| - ElementsTransitionGenerator::GenerateSmiOnlyToObject(masm());
|
| + ElementsTransitionGenerator::GenerateMapChangeElementTransition(masm());
|
| __ bind(&fast_object);
|
| } else {
|
| __ CheckFastObjectElements(r3, r3, &call_builtin);
|
| @@ -3372,8 +3383,11 @@ static bool IsElementTypeSigned(ElementsKind elements_kind) {
|
| case EXTERNAL_FLOAT_ELEMENTS:
|
| case EXTERNAL_DOUBLE_ELEMENTS:
|
| case FAST_ELEMENTS:
|
| - case FAST_SMI_ONLY_ELEMENTS:
|
| + case FAST_SMI_ELEMENTS:
|
| case FAST_DOUBLE_ELEMENTS:
|
| + case FAST_HOLEY_ELEMENTS:
|
| + case FAST_HOLEY_SMI_ELEMENTS:
|
| + case FAST_HOLEY_DOUBLE_ELEMENTS:
|
| case DICTIONARY_ELEMENTS:
|
| case NON_STRICT_ARGUMENTS_ELEMENTS:
|
| UNREACHABLE();
|
| @@ -3497,8 +3511,11 @@ void KeyedLoadStubCompiler::GenerateLoadExternalArray(
|
| }
|
| break;
|
| case FAST_ELEMENTS:
|
| - case FAST_SMI_ONLY_ELEMENTS:
|
| + case FAST_SMI_ELEMENTS:
|
| case FAST_DOUBLE_ELEMENTS:
|
| + case FAST_HOLEY_ELEMENTS:
|
| + case FAST_HOLEY_SMI_ELEMENTS:
|
| + case FAST_HOLEY_DOUBLE_ELEMENTS:
|
| case DICTIONARY_ELEMENTS:
|
| case NON_STRICT_ARGUMENTS_ELEMENTS:
|
| UNREACHABLE();
|
| @@ -3838,8 +3855,11 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
|
| }
|
| break;
|
| case FAST_ELEMENTS:
|
| - case FAST_SMI_ONLY_ELEMENTS:
|
| + case FAST_SMI_ELEMENTS:
|
| case FAST_DOUBLE_ELEMENTS:
|
| + case FAST_HOLEY_ELEMENTS:
|
| + case FAST_HOLEY_SMI_ELEMENTS:
|
| + case FAST_HOLEY_DOUBLE_ELEMENTS:
|
| case DICTIONARY_ELEMENTS:
|
| case NON_STRICT_ARGUMENTS_ELEMENTS:
|
| UNREACHABLE();
|
| @@ -3902,8 +3922,11 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
|
| case EXTERNAL_FLOAT_ELEMENTS:
|
| case EXTERNAL_DOUBLE_ELEMENTS:
|
| case FAST_ELEMENTS:
|
| - case FAST_SMI_ONLY_ELEMENTS:
|
| + case FAST_SMI_ELEMENTS:
|
| case FAST_DOUBLE_ELEMENTS:
|
| + case FAST_HOLEY_ELEMENTS:
|
| + case FAST_HOLEY_SMI_ELEMENTS:
|
| + case FAST_HOLEY_DOUBLE_ELEMENTS:
|
| case DICTIONARY_ELEMENTS:
|
| case NON_STRICT_ARGUMENTS_ELEMENTS:
|
| UNREACHABLE();
|
| @@ -4042,8 +4065,11 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
|
| case EXTERNAL_FLOAT_ELEMENTS:
|
| case EXTERNAL_DOUBLE_ELEMENTS:
|
| case FAST_ELEMENTS:
|
| - case FAST_SMI_ONLY_ELEMENTS:
|
| + case FAST_SMI_ELEMENTS:
|
| case FAST_DOUBLE_ELEMENTS:
|
| + case FAST_HOLEY_ELEMENTS:
|
| + case FAST_HOLEY_SMI_ELEMENTS:
|
| + case FAST_HOLEY_DOUBLE_ELEMENTS:
|
| case DICTIONARY_ELEMENTS:
|
| case NON_STRICT_ARGUMENTS_ELEMENTS:
|
| UNREACHABLE();
|
| @@ -4225,7 +4251,7 @@ void KeyedStoreStubCompiler::GenerateStoreFastElement(
|
| // Check that the key is a smi or a heap number convertible to a smi.
|
| GenerateSmiKeyCheck(masm, key_reg, r4, r5, d1, &miss_force_generic);
|
|
|
| - if (elements_kind == FAST_SMI_ONLY_ELEMENTS) {
|
| + if (IsFastSmiElementsKind(elements_kind)) {
|
| __ JumpIfNotSmi(value_reg, &transition_elements_kind);
|
| }
|
|
|
| @@ -4253,7 +4279,7 @@ void KeyedStoreStubCompiler::GenerateStoreFastElement(
|
| DONT_DO_SMI_CHECK);
|
|
|
| __ bind(&finish_store);
|
| - if (elements_kind == FAST_SMI_ONLY_ELEMENTS) {
|
| + if (IsFastSmiElementsKind(elements_kind)) {
|
| __ add(scratch,
|
| elements_reg,
|
| Operand(FixedArray::kHeaderSize - kHeapObjectTag));
|
| @@ -4263,7 +4289,7 @@ void KeyedStoreStubCompiler::GenerateStoreFastElement(
|
| Operand(key_reg, LSL, kPointerSizeLog2 - kSmiTagSize));
|
| __ str(value_reg, MemOperand(scratch));
|
| } else {
|
| - ASSERT(elements_kind == FAST_ELEMENTS);
|
| + ASSERT(IsFastObjectElementsKind(elements_kind));
|
| __ add(scratch,
|
| elements_reg,
|
| Operand(FixedArray::kHeaderSize - kHeapObjectTag));
|
|
|