| Index: src/mips/stub-cache-mips.cc
|
| diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc
|
| index b84aca74437b424c7b14d6342d391a0665cde8ec..18353b66961e7d93c92ea8216283a7a14405d5d6 100644
|
| --- a/src/mips/stub-cache-mips.cc
|
| +++ b/src/mips/stub-cache-mips.cc
|
| @@ -879,51 +879,31 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm,
|
| FrameScope frame_scope(masm, StackFrame::MANUAL);
|
| __ EnterExitFrame(false, kApiStackSpace);
|
|
|
| - // NOTE: the O32 abi requires a0 to hold a special pointer when returning a
|
| - // struct from the function (which is currently the case). This means we pass
|
| - // the first argument in a1 instead of a0, if returns_handle is true.
|
| - // CallApiFunctionAndReturn will set up a0.
|
| -
|
| - Address function_address = v8::ToCData<Address>(api_call_info->callback());
|
| - bool returns_handle =
|
| - !CallbackTable::ReturnsVoid(masm->isolate(), function_address);
|
| -
|
| - Register first_arg = returns_handle ? a1 : a0;
|
| - Register second_arg = returns_handle ? a2 : a1;
|
| -
|
| - // first_arg = v8::Arguments&
|
| + // a0 = v8::Arguments&
|
| // Arguments is built at sp + 1 (sp is a reserved spot for ra).
|
| - __ Addu(first_arg, sp, kPointerSize);
|
| + __ Addu(a0, sp, kPointerSize);
|
|
|
| // v8::Arguments::implicit_args_
|
| - __ sw(a2, MemOperand(first_arg, 0 * kPointerSize));
|
| + __ sw(a2, MemOperand(a0, 0 * kPointerSize));
|
| // v8::Arguments::values_
|
| __ Addu(t0, a2, Operand(argc * kPointerSize));
|
| - __ sw(t0, MemOperand(first_arg, 1 * kPointerSize));
|
| + __ sw(t0, MemOperand(a0, 1 * kPointerSize));
|
| // v8::Arguments::length_ = argc
|
| __ li(t0, Operand(argc));
|
| - __ sw(t0, MemOperand(first_arg, 2 * kPointerSize));
|
| + __ sw(t0, MemOperand(a0, 2 * kPointerSize));
|
| // v8::Arguments::is_construct_call = 0
|
| - __ sw(zero_reg, MemOperand(first_arg, 3 * kPointerSize));
|
| + __ sw(zero_reg, MemOperand(a0, 3 * kPointerSize));
|
|
|
| const int kStackUnwindSpace = argc + kFastApiCallArguments + 1;
|
| + Address function_address = v8::ToCData<Address>(api_call_info->callback());
|
| ApiFunction fun(function_address);
|
| - ExternalReference::Type type =
|
| - returns_handle ?
|
| - ExternalReference::DIRECT_API_CALL :
|
| - ExternalReference::DIRECT_API_CALL_NEW;
|
| + ExternalReference::Type type = ExternalReference::DIRECT_API_CALL;
|
| ExternalReference ref =
|
| ExternalReference(&fun,
|
| type,
|
| masm->isolate());
|
| -
|
| - Address thunk_address = returns_handle
|
| - ? FUNCTION_ADDR(&InvokeInvocationCallback)
|
| - : FUNCTION_ADDR(&InvokeFunctionCallback);
|
| - ExternalReference::Type thunk_type =
|
| - returns_handle ?
|
| - ExternalReference::PROFILING_API_CALL :
|
| - ExternalReference::PROFILING_API_CALL_NEW;
|
| + Address thunk_address = FUNCTION_ADDR(&InvokeFunctionCallback);
|
| + ExternalReference::Type thunk_type = ExternalReference::PROFILING_API_CALL;
|
| ApiFunction thunk_fun(thunk_address);
|
| ExternalReference thunk_ref = ExternalReference(&thunk_fun, thunk_type,
|
| masm->isolate());
|
| @@ -932,9 +912,8 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm,
|
| __ CallApiFunctionAndReturn(ref,
|
| function_address,
|
| thunk_ref,
|
| - second_arg,
|
| + a1,
|
| kStackUnwindSpace,
|
| - returns_handle,
|
| kFastApiCallArguments + 1);
|
| }
|
|
|
| @@ -1419,21 +1398,8 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
|
| __ sw(scratch4(), MemOperand(sp, 1 * kPointerSize));
|
| __ sw(name(), MemOperand(sp, 0 * kPointerSize));
|
|
|
| - Address getter_address = v8::ToCData<Address>(callback->getter());
|
| - bool returns_handle =
|
| - !CallbackTable::ReturnsVoid(isolate(), getter_address);
|
| -
|
| - Register first_arg = returns_handle ? a1 : a0;
|
| - Register second_arg = returns_handle ? a2 : a1;
|
| - Register third_arg = returns_handle ? a3 : a2;
|
| -
|
| __ mov(a2, scratch2()); // Saved in case scratch2 == a1.
|
| - __ mov(first_arg, sp); // (first argument - see note below) = Handle<Name>
|
| -
|
| - // NOTE: the O32 abi requires a0 to hold a special pointer when returning a
|
| - // struct from the function (which is currently the case). This means we pass
|
| - // the arguments in a1-a2 instead of a0-a1, if returns_handle is true.
|
| - // CallApiFunctionAndReturn will set up a0.
|
| + __ mov(a0, sp); // (first argument - a0) = Handle<Name>
|
|
|
| const int kApiStackSpace = 1;
|
| FrameScope frame_scope(masm(), StackFrame::MANUAL);
|
| @@ -1442,34 +1408,26 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
|
| // Create AccessorInfo instance on the stack above the exit frame with
|
| // scratch2 (internal::Object** args_) as the data.
|
| __ sw(a2, MemOperand(sp, kPointerSize));
|
| - // (second argument - see note above) = AccessorInfo&
|
| - __ Addu(second_arg, sp, kPointerSize);
|
| + // (second argument - a1) = AccessorInfo&
|
| + __ Addu(a1, sp, kPointerSize);
|
|
|
| const int kStackUnwindSpace = kFastApiCallArguments + 1;
|
| -
|
| + Address getter_address = v8::ToCData<Address>(callback->getter());
|
| ApiFunction fun(getter_address);
|
| - ExternalReference::Type type =
|
| - returns_handle ?
|
| - ExternalReference::DIRECT_GETTER_CALL :
|
| - ExternalReference::DIRECT_GETTER_CALL_NEW;
|
| + ExternalReference::Type type = ExternalReference::DIRECT_GETTER_CALL;
|
| ExternalReference ref = ExternalReference(&fun, type, isolate());
|
|
|
| - Address thunk_address = returns_handle
|
| - ? FUNCTION_ADDR(&InvokeAccessorGetter)
|
| - : FUNCTION_ADDR(&InvokeAccessorGetterCallback);
|
| + Address thunk_address = FUNCTION_ADDR(&InvokeAccessorGetterCallback);
|
| ExternalReference::Type thunk_type =
|
| - returns_handle ?
|
| - ExternalReference::PROFILING_GETTER_CALL :
|
| - ExternalReference::PROFILING_GETTER_CALL_NEW;
|
| + ExternalReference::PROFILING_GETTER_CALL;
|
| ApiFunction thunk_fun(thunk_address);
|
| ExternalReference thunk_ref = ExternalReference(&thunk_fun, thunk_type,
|
| isolate());
|
| __ CallApiFunctionAndReturn(ref,
|
| getter_address,
|
| thunk_ref,
|
| - third_arg,
|
| + a2,
|
| kStackUnwindSpace,
|
| - returns_handle,
|
| 5);
|
| }
|
|
|
| @@ -1803,25 +1761,25 @@ Handle<Code> CallStubCompiler::CompileArrayPushCall(
|
| &call_builtin,
|
| DONT_DO_SMI_CHECK);
|
|
|
| - // Get the array's length into r0 and calculate new length.
|
| - __ lw(a0, FieldMemOperand(receiver, JSArray::kLengthOffset));
|
| + // Get the array's length into v0 and calculate new length.
|
| + __ lw(v0, FieldMemOperand(receiver, JSArray::kLengthOffset));
|
| STATIC_ASSERT(kSmiTagSize == 1);
|
| STATIC_ASSERT(kSmiTag == 0);
|
| - __ Addu(a0, a0, Operand(Smi::FromInt(argc)));
|
| + __ Addu(v0, v0, Operand(Smi::FromInt(argc)));
|
|
|
| // Get the elements' length.
|
| __ lw(t0, FieldMemOperand(elements, FixedArray::kLengthOffset));
|
|
|
| // Check if we could survive without allocation.
|
| - __ Branch(&call_builtin, gt, a0, Operand(t0));
|
| + __ Branch(&call_builtin, gt, v0, Operand(t0));
|
|
|
| __ lw(t0, MemOperand(sp, (argc - 1) * kPointerSize));
|
| __ StoreNumberToDoubleElements(
|
| - t0, a0, elements, a3, t1, a2, t5,
|
| + t0, v0, elements, a3, t1, a2,
|
| &call_builtin, argc * kDoubleSize);
|
|
|
| // Save new length.
|
| - __ sw(a0, FieldMemOperand(receiver, JSArray::kLengthOffset));
|
| + __ sw(v0, FieldMemOperand(receiver, JSArray::kLengthOffset));
|
|
|
| // Check for a smi.
|
| __ DropAndRet(argc + 1);
|
|
|