| Index: src/mips/stub-cache-mips.cc
|
| diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc
|
| index 9458c5e249a85f806dd2e433102b3f5f78720535..df779ff6a6cc0d9cf5a465511692f646b08d11a8 100644
|
| --- a/src/mips/stub-cache-mips.cc
|
| +++ b/src/mips/stub-cache-mips.cc
|
| @@ -879,49 +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());
|
| - // TODO(dcarney): fix signatures using returns_handle
|
| - const bool returns_handle = false;
|
| -
|
| - 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 = FUNCTION_ADDR(&InvokeFunctionCallback);
|
| - ExternalReference::Type thunk_type =
|
| - returns_handle ?
|
| - ExternalReference::PROFILING_API_CALL :
|
| - ExternalReference::PROFILING_API_CALL_NEW;
|
| + ExternalReference::Type thunk_type = ExternalReference::PROFILING_API_CALL;
|
| ApiFunction thunk_fun(thunk_address);
|
| ExternalReference thunk_ref = ExternalReference(&thunk_fun, thunk_type,
|
| masm->isolate());
|
| @@ -930,9 +912,8 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm,
|
| __ CallApiFunctionAndReturn(ref,
|
| function_address,
|
| thunk_ref,
|
| - second_arg,
|
| + a1,
|
| kStackUnwindSpace,
|
| - returns_handle,
|
| kFastApiCallArguments + 1);
|
| }
|
|
|
| @@ -1417,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());
|
| - // TODO(dcarney): fix signatures using returns_handle
|
| - const bool returns_handle = false;
|
| -
|
| - 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);
|
| @@ -1440,30 +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 = FUNCTION_ADDR(&InvokeAccessorGetterCallback);
|
| ExternalReference::Type thunk_type =
|
| - 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);
|
| }
|
|
|
|
|