| Index: src/mips64/code-stubs-mips64.cc
|
| diff --git a/src/mips64/code-stubs-mips64.cc b/src/mips64/code-stubs-mips64.cc
|
| index ac5ac433b65ddb20ccc5da933fd0299179a16e88..4ae802724e120a2991dd44010b2e7720b49a7c1d 100644
|
| --- a/src/mips64/code-stubs-mips64.cc
|
| +++ b/src/mips64/code-stubs-mips64.cc
|
| @@ -18,7 +18,7 @@ namespace internal {
|
|
|
| void FastNewClosureStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a2 };
|
| + Register registers[] = { cp, a2 };
|
| descriptor->Initialize(
|
| ARRAY_SIZE(registers), registers,
|
| Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry);
|
| @@ -27,21 +27,21 @@ void FastNewClosureStub::InitializeInterfaceDescriptor(
|
|
|
| void FastNewContextStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a1 };
|
| + Register registers[] = { cp, a1 };
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers);
|
| }
|
|
|
|
|
| void ToNumberStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a0 };
|
| + Register registers[] = { cp, a0 };
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers);
|
| }
|
|
|
|
|
| void NumberToStringStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a0 };
|
| + Register registers[] = { cp, a0 };
|
| descriptor->Initialize(
|
| ARRAY_SIZE(registers), registers,
|
| Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry);
|
| @@ -50,9 +50,10 @@ void NumberToStringStub::InitializeInterfaceDescriptor(
|
|
|
| void FastCloneShallowArrayStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a3, a2, a1 };
|
| + Register registers[] = { cp, a3, a2, a1 };
|
| Representation representations[] = {
|
| Representation::Tagged(),
|
| + Representation::Tagged(),
|
| Representation::Smi(),
|
| Representation::Tagged() };
|
| descriptor->Initialize(
|
| @@ -64,7 +65,7 @@ void FastCloneShallowArrayStub::InitializeInterfaceDescriptor(
|
|
|
| void FastCloneShallowObjectStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a3, a2, a1, a0 };
|
| + Register registers[] = { cp, a3, a2, a1, a0 };
|
| descriptor->Initialize(
|
| ARRAY_SIZE(registers), registers,
|
| Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry);
|
| @@ -73,14 +74,14 @@ void FastCloneShallowObjectStub::InitializeInterfaceDescriptor(
|
|
|
| void CreateAllocationSiteStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a2, a3 };
|
| + Register registers[] = { cp, a2, a3 };
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers);
|
| }
|
|
|
|
|
| void RegExpConstructResultStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a2, a1, a0 };
|
| + Register registers[] = { cp, a2, a1, a0 };
|
| descriptor->Initialize(
|
| ARRAY_SIZE(registers), registers,
|
| Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry);
|
| @@ -89,7 +90,7 @@ void RegExpConstructResultStub::InitializeInterfaceDescriptor(
|
|
|
| void TransitionElementsKindStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a0, a1 };
|
| + Register registers[] = { cp, a0, a1 };
|
| Address entry =
|
| Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry;
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers,
|
| @@ -99,7 +100,7 @@ void TransitionElementsKindStub::InitializeInterfaceDescriptor(
|
|
|
| void CompareNilICStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a0 };
|
| + Register registers[] = { cp, a0 };
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers,
|
| FUNCTION_ADDR(CompareNilIC_Miss));
|
| descriptor->SetMissHandler(
|
| @@ -107,10 +108,14 @@ void CompareNilICStub::InitializeInterfaceDescriptor(
|
| }
|
|
|
|
|
| +const Register InterfaceDescriptor::ContextRegister() { return cp; }
|
| +
|
| +
|
| static void InitializeArrayConstructorDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor,
|
| int constant_stack_parameter_count) {
|
| // register state
|
| + // cp -- context
|
| // a0 -- number of arguments
|
| // a1 -- function
|
| // a2 -- allocation site with elements kind
|
| @@ -118,7 +123,7 @@ static void InitializeArrayConstructorDescriptor(
|
| Runtime::kArrayConstructor)->entry;
|
|
|
| if (constant_stack_parameter_count == 0) {
|
| - Register registers[] = { a1, a2 };
|
| + Register registers[] = { cp, a1, a2 };
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers,
|
| deopt_handler,
|
| NULL,
|
| @@ -126,10 +131,11 @@ static void InitializeArrayConstructorDescriptor(
|
| JS_FUNCTION_STUB_MODE);
|
| } else {
|
| // stack param count needs (constructor pointer, and single argument)
|
| - Register registers[] = { a1, a2, a0 };
|
| + Register registers[] = { cp, a1, a2, a0 };
|
| Representation representations[] = {
|
| Representation::Tagged(),
|
| Representation::Tagged(),
|
| + Representation::Tagged(),
|
| Representation::Integer32() };
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers,
|
| a0,
|
| @@ -146,13 +152,14 @@ static void InitializeInternalArrayConstructorDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor,
|
| int constant_stack_parameter_count) {
|
| // register state
|
| + // cp -- context
|
| // a0 -- number of arguments
|
| // a1 -- constructor function
|
| Address deopt_handler = Runtime::FunctionForId(
|
| Runtime::kInternalArrayConstructor)->entry;
|
|
|
| if (constant_stack_parameter_count == 0) {
|
| - Register registers[] = { a1 };
|
| + Register registers[] = { cp, a1 };
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers,
|
| deopt_handler,
|
| NULL,
|
| @@ -160,9 +167,10 @@ static void InitializeInternalArrayConstructorDescriptor(
|
| JS_FUNCTION_STUB_MODE);
|
| } else {
|
| // stack param count needs (constructor pointer, and single argument)
|
| - Register registers[] = { a1, a0 };
|
| + Register registers[] = { cp, a1, a0 };
|
| Representation representations[] = {
|
| Representation::Tagged(),
|
| + Representation::Tagged(),
|
| Representation::Integer32() };
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers,
|
| a0,
|
| @@ -195,7 +203,7 @@ void ArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor(
|
|
|
| void ToBooleanStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a0 };
|
| + Register registers[] = { cp, a0 };
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers,
|
| FUNCTION_ADDR(ToBooleanIC_Miss));
|
| descriptor->SetMissHandler(
|
| @@ -223,7 +231,7 @@ void InternalArrayNArgumentsConstructorStub::InitializeInterfaceDescriptor(
|
|
|
| void BinaryOpICStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a1, a0 };
|
| + Register registers[] = { cp, a1, a0 };
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers,
|
| FUNCTION_ADDR(BinaryOpIC_Miss));
|
| descriptor->SetMissHandler(
|
| @@ -233,7 +241,7 @@ void BinaryOpICStub::InitializeInterfaceDescriptor(
|
|
|
| void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a2, a1, a0 };
|
| + Register registers[] = { cp, a2, a1, a0 };
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers,
|
| FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite));
|
| }
|
| @@ -241,7 +249,7 @@ void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor(
|
|
|
| void StringAddStub::InitializeInterfaceDescriptor(
|
| CodeStubInterfaceDescriptor* descriptor) {
|
| - Register registers[] = { a1, a0 };
|
| + Register registers[] = { cp, a1, a0 };
|
| descriptor->Initialize(
|
| ARRAY_SIZE(registers), registers,
|
| Runtime::FunctionForId(Runtime::kStringAdd)->entry);
|
| @@ -252,14 +260,14 @@ void CallDescriptors::InitializeForIsolate(Isolate* isolate) {
|
| {
|
| CallInterfaceDescriptor* descriptor =
|
| isolate->call_descriptor(Isolate::ArgumentAdaptorCall);
|
| - Register registers[] = { a1, // JSFunction
|
| - cp, // context
|
| + Register registers[] = { cp, // context
|
| + a1, // JSFunction
|
| a0, // actual number of arguments
|
| a2, // expected number of arguments
|
| };
|
| Representation representations[] = {
|
| - Representation::Tagged(), // JSFunction
|
| Representation::Tagged(), // context
|
| + Representation::Tagged(), // JSFunction
|
| Representation::Integer32(), // actual number of arguments
|
| Representation::Integer32(), // expected number of arguments
|
| };
|
| @@ -304,18 +312,18 @@ void CallDescriptors::InitializeForIsolate(Isolate* isolate) {
|
| {
|
| CallInterfaceDescriptor* descriptor =
|
| isolate->call_descriptor(Isolate::ApiFunctionCall);
|
| - Register registers[] = { a0, // callee
|
| + Register registers[] = { cp, // context
|
| + a0, // callee
|
| a4, // call_data
|
| a2, // holder
|
| a1, // api_function_address
|
| - cp, // context
|
| };
|
| Representation representations[] = {
|
| + Representation::Tagged(), // context
|
| Representation::Tagged(), // callee
|
| Representation::Tagged(), // call_data
|
| Representation::Tagged(), // holder
|
| Representation::External(), // api_function_address
|
| - Representation::Tagged(), // context
|
| };
|
| descriptor->Initialize(ARRAY_SIZE(registers), registers, representations);
|
| }
|
| @@ -344,21 +352,21 @@ void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) {
|
| isolate()->counters()->code_stubs()->Increment();
|
|
|
| CodeStubInterfaceDescriptor* descriptor = GetInterfaceDescriptor();
|
| - int param_count = descriptor->register_param_count();
|
| + int param_count = descriptor->GetEnvironmentParameterCount();
|
| {
|
| // Call the runtime system in a fresh internal frame.
|
| FrameScope scope(masm, StackFrame::INTERNAL);
|
| - ASSERT(descriptor->register_param_count() == 0 ||
|
| - a0.is(descriptor->GetParameterRegister(param_count - 1)));
|
| + ASSERT((param_count == 0) ||
|
| + a0.is(descriptor->GetEnvironmentParameterRegister(param_count - 1)));
|
| // Push arguments, adjust sp.
|
| __ Dsubu(sp, sp, Operand(param_count * kPointerSize));
|
| for (int i = 0; i < param_count; ++i) {
|
| // Store argument to stack.
|
| - __ sd(descriptor->GetParameterRegister(i),
|
| + __ sd(descriptor->GetEnvironmentParameterRegister(i),
|
| MemOperand(sp, (param_count-1-i) * kPointerSize));
|
| }
|
| ExternalReference miss = descriptor->miss_handler();
|
| - __ CallExternalReference(miss, descriptor->register_param_count());
|
| + __ CallExternalReference(miss, param_count);
|
| }
|
|
|
| __ Ret();
|
|
|