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)) { |