Chromium Code Reviews| Index: src/mips/code-stubs-mips.cc |
| diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc |
| index 88b0c70c7a9b75674adc76373d36aa7a51cacb4e..33d80e824908f5aac715ef162472d03ede631104 100644 |
| --- a/src/mips/code-stubs-mips.cc |
| +++ b/src/mips/code-stubs-mips.cc |
| @@ -21,45 +21,18 @@ |
| namespace v8 { |
| namespace internal { |
| +#define __ ACCESS_MASM(masm) |
| -static void InitializeArrayConstructorDescriptor( |
| - Isolate* isolate, CodeStubDescriptor* descriptor, |
| - int constant_stack_parameter_count) { |
| - Address deopt_handler = Runtime::FunctionForId( |
| - Runtime::kArrayConstructor)->entry; |
| - |
| - if (constant_stack_parameter_count == 0) { |
| - descriptor->Initialize(deopt_handler, constant_stack_parameter_count, |
| - JS_FUNCTION_STUB_MODE); |
| - } else { |
| - descriptor->Initialize(a0, deopt_handler, constant_stack_parameter_count, |
| - JS_FUNCTION_STUB_MODE); |
| - } |
| -} |
| - |
| - |
| -static void InitializeInternalArrayConstructorDescriptor( |
| - Isolate* isolate, CodeStubDescriptor* descriptor, |
| - int constant_stack_parameter_count) { |
| - Address deopt_handler = Runtime::FunctionForId( |
| - Runtime::kInternalArrayConstructor)->entry; |
| - |
| - if (constant_stack_parameter_count == 0) { |
| - descriptor->Initialize(deopt_handler, constant_stack_parameter_count, |
| - JS_FUNCTION_STUB_MODE); |
| - } else { |
| - descriptor->Initialize(a0, deopt_handler, constant_stack_parameter_count, |
| - JS_FUNCTION_STUB_MODE); |
| - } |
| -} |
| - |
| - |
| -void ArrayNArgumentsConstructorStub::InitializeDescriptor( |
| - CodeStubDescriptor* descriptor) { |
| - InitializeArrayConstructorDescriptor(isolate(), descriptor, -1); |
| +void ArrayNArgumentsConstructorStub::Generate(MacroAssembler* masm) { |
| + __ sll(t9, a0, kPointerSizeLog2); |
| + __ Addu(t9, sp, t9); |
| + __ sw(a1, MemOperand(t9, 0)); |
| + __ Push(a1); |
| + __ Push(a2); |
|
balazs.kilvady
2016/06/10 10:59:04
Push(a1, a2) could be used instead of the above tw
|
| + __ Addu(a0, a0, Operand(3)); |
| + __ TailCallRuntime(Runtime::kNewArray); |
| } |
| - |
| void FastArrayPushStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { |
| Address deopt_handler = Runtime::FunctionForId(Runtime::kArrayPush)->entry; |
| descriptor->Initialize(a0, deopt_handler, -1, JS_FUNCTION_STUB_MODE); |
| @@ -71,14 +44,6 @@ void FastFunctionBindStub::InitializeDescriptor( |
| descriptor->Initialize(a0, deopt_handler, -1, JS_FUNCTION_STUB_MODE); |
| } |
| -void InternalArrayNArgumentsConstructorStub::InitializeDescriptor( |
| - CodeStubDescriptor* descriptor) { |
| - InitializeInternalArrayConstructorDescriptor(isolate(), descriptor, -1); |
| -} |
| - |
| - |
| -#define __ ACCESS_MASM(masm) |
| - |
| static void EmitIdenticalObjectComparison(MacroAssembler* masm, Label* slow, |
| Condition cc); |
| static void EmitSmiNonsmiComparison(MacroAssembler* masm, |
| @@ -1015,7 +980,7 @@ void CodeStub::GenerateStubsAheadOfTime(Isolate* isolate) { |
| CEntryStub::GenerateAheadOfTime(isolate); |
| StoreBufferOverflowStub::GenerateFixedRegStubsAheadOfTime(isolate); |
| StubFailureTrampolineStub::GenerateAheadOfTime(isolate); |
| - ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); |
| + CommonArrayConstructorStub::GenerateStubsAheadOfTime(isolate); |
| CreateAllocationSiteStub::GenerateAheadOfTime(isolate); |
| CreateWeakCellStub::GenerateAheadOfTime(isolate); |
| BinaryOpICStub::GenerateAheadOfTime(isolate); |
| @@ -4370,19 +4335,13 @@ static void ArrayConstructorStubAheadOfTimeHelper(Isolate* isolate) { |
| } |
| } |
| - |
| -void ArrayConstructorStubBase::GenerateStubsAheadOfTime(Isolate* isolate) { |
| +void CommonArrayConstructorStub::GenerateStubsAheadOfTime(Isolate* isolate) { |
| ArrayConstructorStubAheadOfTimeHelper<ArrayNoArgumentConstructorStub>( |
| isolate); |
| ArrayConstructorStubAheadOfTimeHelper<ArraySingleArgumentConstructorStub>( |
| isolate); |
| - ArrayConstructorStubAheadOfTimeHelper<ArrayNArgumentsConstructorStub>( |
| - isolate); |
| -} |
| - |
| - |
| -void InternalArrayConstructorStubBase::GenerateStubsAheadOfTime( |
| - Isolate* isolate) { |
| + ArrayNArgumentsConstructorStub stub(isolate); |
| + stub.GetCode(); |
| ElementsKind kinds[2] = { FAST_ELEMENTS, FAST_HOLEY_ELEMENTS }; |
| for (int i = 0; i < 2; i++) { |
| // For internal arrays we only need a few things. |
| @@ -4390,8 +4349,6 @@ void InternalArrayConstructorStubBase::GenerateStubsAheadOfTime( |
| stubh1.GetCode(); |
| InternalArraySingleArgumentConstructorStub stubh2(isolate, kinds[i]); |
| stubh2.GetCode(); |
| - InternalArrayNArgumentsConstructorStub stubh3(isolate, kinds[i]); |
| - stubh3.GetCode(); |
| } |
| } |
| @@ -4410,13 +4367,15 @@ void ArrayConstructorStub::GenerateDispatchToArrayStub( |
| CreateArrayDispatchOneArgument(masm, mode); |
| __ bind(¬_one_case); |
| - CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm, mode); |
| + 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) { |
| - CreateArrayDispatch<ArrayNArgumentsConstructorStub>(masm, mode); |
| + ArrayNArgumentsConstructorStub stub(masm->isolate()); |
| + __ TailCallStub(&stub); |
| } else { |
| UNREACHABLE(); |
| } |
| @@ -4500,7 +4459,7 @@ void InternalArrayConstructorStub::GenerateCase( |
| InternalArrayNoArgumentConstructorStub stub0(isolate(), kind); |
| __ TailCallStub(&stub0, lo, a0, Operand(1)); |
| - InternalArrayNArgumentsConstructorStub stubN(isolate(), kind); |
| + ArrayNArgumentsConstructorStub stubN(isolate()); |
| __ TailCallStub(&stubN, hi, a0, Operand(1)); |
| if (IsFastPackedElementsKind(kind)) { |