| Index: src/x64/stub-cache-x64.cc
|
| diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc
|
| index 1b8ed3848c2ff1aeb13e5f2c5286b367e2c47ac7..5721e9b373169180d64ce58f5734d5099d6274c6 100644
|
| --- a/src/x64/stub-cache-x64.cc
|
| +++ b/src/x64/stub-cache-x64.cc
|
| @@ -1434,32 +1434,17 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall(
|
| __ jmp(&fast_object);
|
| // In case of fast smi-only, convert to fast object, otherwise bail out.
|
| __ bind(¬_fast_object);
|
| - __ CheckFastSmiElements(rbx, &call_builtin);
|
| + __ CheckFastSmiOnlyElements(rbx, &call_builtin);
|
| // rdx: receiver
|
| // rbx: map
|
| -
|
| - Label try_holey_map;
|
| - __ LoadTransitionedArrayMapConditional(FAST_SMI_ELEMENTS,
|
| + __ movq(r9, rdi); // Backup rdi as it is going to be trashed.
|
| + __ LoadTransitionedArrayMapConditional(FAST_SMI_ONLY_ELEMENTS,
|
| FAST_ELEMENTS,
|
| rbx,
|
| rdi,
|
| - &try_holey_map);
|
| -
|
| - ElementsTransitionGenerator::
|
| - GenerateMapChangeElementsTransition(masm());
|
| - // Restore edi.
|
| - __ movq(rdi, FieldOperand(rdx, JSArray::kElementsOffset));
|
| - __ jmp(&fast_object);
|
| -
|
| - __ bind(&try_holey_map);
|
| - __ LoadTransitionedArrayMapConditional(FAST_HOLEY_SMI_ELEMENTS,
|
| - FAST_HOLEY_ELEMENTS,
|
| - rbx,
|
| - rdi,
|
| &call_builtin);
|
| - ElementsTransitionGenerator::
|
| - GenerateMapChangeElementsTransition(masm());
|
| - __ movq(rdi, FieldOperand(rdx, JSArray::kElementsOffset));
|
| + ElementsTransitionGenerator::GenerateSmiOnlyToObject(masm());
|
| + __ movq(rdi, r9);
|
| __ bind(&fast_object);
|
| } else {
|
| __ CheckFastObjectElements(rbx, &call_builtin);
|
| @@ -3384,11 +3369,8 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
|
| __ movsd(Operand(rbx, rdi, times_8, 0), xmm0);
|
| break;
|
| case FAST_ELEMENTS:
|
| - case FAST_SMI_ELEMENTS:
|
| + case FAST_SMI_ONLY_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();
|
| @@ -3453,11 +3435,8 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
|
| case EXTERNAL_FLOAT_ELEMENTS:
|
| case EXTERNAL_DOUBLE_ELEMENTS:
|
| case FAST_ELEMENTS:
|
| - case FAST_SMI_ELEMENTS:
|
| + case FAST_SMI_ONLY_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();
|
| @@ -3608,7 +3587,7 @@ void KeyedStoreStubCompiler::GenerateStoreFastElement(
|
| // Check that the key is a smi or a heap number convertible to a smi.
|
| GenerateSmiKeyCheck(masm, rcx, rbx, xmm0, xmm1, &miss_force_generic);
|
|
|
| - if (IsFastSmiElementsKind(elements_kind)) {
|
| + if (elements_kind == FAST_SMI_ONLY_ELEMENTS) {
|
| __ JumpIfNotSmi(rax, &transition_elements_kind);
|
| }
|
|
|
| @@ -3632,13 +3611,13 @@ void KeyedStoreStubCompiler::GenerateStoreFastElement(
|
| __ j(not_equal, &miss_force_generic);
|
|
|
| __ bind(&finish_store);
|
| - if (IsFastSmiElementsKind(elements_kind)) {
|
| + if (elements_kind == FAST_SMI_ONLY_ELEMENTS) {
|
| __ SmiToInteger32(rcx, rcx);
|
| __ movq(FieldOperand(rdi, rcx, times_pointer_size, FixedArray::kHeaderSize),
|
| rax);
|
| } else {
|
| // Do the store and update the write barrier.
|
| - ASSERT(IsFastObjectElementsKind(elements_kind));
|
| + ASSERT(elements_kind == FAST_ELEMENTS);
|
| __ SmiToInteger32(rcx, rcx);
|
| __ lea(rcx,
|
| FieldOperand(rdi, rcx, times_pointer_size, FixedArray::kHeaderSize));
|
|
|