Index: src/arm64/code-stubs-arm64.cc |
diff --git a/src/arm64/code-stubs-arm64.cc b/src/arm64/code-stubs-arm64.cc |
index 0b9706c4deff71b127f484fae265e9b8a66d90b1..14cbb5d96dafbec80fa71e58f8e1bf156182ba2b 100644 |
--- a/src/arm64/code-stubs-arm64.cc |
+++ b/src/arm64/code-stubs-arm64.cc |
@@ -2011,8 +2011,6 @@ void CallICStub::HandleArrayCase(MacroAssembler* masm, Label* miss) { |
__ Cmp(function, scratch); |
__ B(ne, miss); |
- __ Mov(x0, Operand(arg_count())); |
- |
// Increment the call count for monomorphic function calls. |
IncrementCallCount(masm, feedback_vector, index); |
@@ -2021,7 +2019,8 @@ void CallICStub::HandleArrayCase(MacroAssembler* masm, Label* miss) { |
Register new_target_arg = index; |
__ Mov(allocation_site_arg, allocation_site); |
__ Mov(new_target_arg, function); |
- ArrayConstructorStub stub(masm->isolate(), arg_count()); |
+ __ Mov(x0, Operand(arg_count())); |
+ ArrayConstructorStub stub(masm->isolate()); |
__ TailCallStub(&stub); |
} |
@@ -3895,33 +3894,22 @@ void ArrayConstructorStub::GenerateDispatchToArrayStub( |
MacroAssembler* masm, |
AllocationSiteOverrideMode mode) { |
Register argc = x0; |
- if (argument_count() == ANY) { |
- Label zero_case, n_case; |
- __ Cbz(argc, &zero_case); |
- __ Cmp(argc, 1); |
- __ B(ne, &n_case); |
- |
- // One argument. |
- CreateArrayDispatchOneArgument(masm, mode); |
- |
- __ Bind(&zero_case); |
- // No arguments. |
- CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm, mode); |
- |
- __ Bind(&n_case); |
- // N arguments. |
- ArrayNArgumentsConstructorStub stub(masm->isolate()); |
- __ TailCallStub(&stub); |
- } else if (argument_count() == NONE) { |
- CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm, mode); |
- } else if (argument_count() == ONE) { |
- CreateArrayDispatchOneArgument(masm, mode); |
- } else if (argument_count() == MORE_THAN_ONE) { |
- ArrayNArgumentsConstructorStub stub(masm->isolate()); |
- __ TailCallStub(&stub); |
- } else { |
- UNREACHABLE(); |
- } |
+ Label zero_case, n_case; |
+ __ Cbz(argc, &zero_case); |
+ __ Cmp(argc, 1); |
+ __ B(ne, &n_case); |
+ |
+ // One argument. |
+ CreateArrayDispatchOneArgument(masm, mode); |
+ |
+ __ Bind(&zero_case); |
+ // No arguments. |
+ CreateArrayDispatch<ArrayNoArgumentConstructorStub>(masm, mode); |
+ |
+ __ Bind(&n_case); |
+ // N arguments. |
+ ArrayNArgumentsConstructorStub stub(masm->isolate()); |
+ __ TailCallStub(&stub); |
} |
@@ -3981,21 +3969,8 @@ void ArrayConstructorStub::Generate(MacroAssembler* masm) { |
// Subclassing support. |
__ Bind(&subclassing); |
- switch (argument_count()) { |
- case ANY: |
- case MORE_THAN_ONE: |
- __ Poke(constructor, Operand(x0, LSL, kPointerSizeLog2)); |
- __ Add(x0, x0, Operand(3)); |
- break; |
- case NONE: |
- __ Poke(constructor, 0 * kPointerSize); |
- __ Mov(x0, Operand(3)); |
- break; |
- case ONE: |
- __ Poke(constructor, 1 * kPointerSize); |
- __ Mov(x0, Operand(4)); |
- break; |
- } |
+ __ Poke(constructor, Operand(x0, LSL, kPointerSizeLog2)); |
+ __ Add(x0, x0, Operand(3)); |
__ Push(new_target, allocation_site); |
__ JumpToExternalReference(ExternalReference(Runtime::kNewArray, isolate())); |
} |