| Index: src/mips64/code-stubs-mips64.cc
|
| diff --git a/src/mips64/code-stubs-mips64.cc b/src/mips64/code-stubs-mips64.cc
|
| index 751da944024cb0638ea7c466e248c16793259bc2..3cfe0bca80f173edc2289338fcc9ee2cc4037902 100644
|
| --- a/src/mips64/code-stubs-mips64.cc
|
| +++ b/src/mips64/code-stubs-mips64.cc
|
| @@ -5607,34 +5607,41 @@ void CallApiAccessorStub::Generate(MacroAssembler* masm) {
|
|
|
| void CallApiGetterStub::Generate(MacroAssembler* masm) {
|
| // ----------- S t a t e -------------
|
| - // -- sp[0] : name
|
| - // -- sp[4 - kArgsLength*4] : PropertyCallbackArguments object
|
| + // -- sp[0] : name
|
| + // -- sp[8 .. (8 + kArgsLength*8)] : v8::PropertyCallbackInfo::args_
|
| // -- ...
|
| - // -- a2 : api_function_address
|
| + // -- a2 : api_function_address
|
| // -----------------------------------
|
|
|
| Register api_function_address = ApiGetterDescriptor::function_address();
|
| DCHECK(api_function_address.is(a2));
|
|
|
| - __ mov(a0, sp); // a0 = Handle<Name>
|
| - __ Daddu(a1, a0, Operand(1 * kPointerSize)); // a1 = PCA
|
| + // v8::PropertyCallbackInfo::args_ array and name handle.
|
| + const int kStackUnwindSpace = PropertyCallbackArguments::kArgsLength + 1;
|
| +
|
| + // Load address of v8::PropertyAccessorInfo::args_ array and name handle.
|
| + __ mov(a0, sp); // a0 = Handle<Name>
|
| + __ Daddu(a1, a0, Operand(1 * kPointerSize)); // a1 = v8::PCI::args_
|
|
|
| const int kApiStackSpace = 1;
|
| FrameScope frame_scope(masm, StackFrame::MANUAL);
|
| __ EnterExitFrame(false, kApiStackSpace);
|
|
|
| - // Create PropertyAccessorInfo instance on the stack above the exit frame with
|
| - // a1 (internal::Object** args_) as the data.
|
| + // Create v8::PropertyCallbackInfo object on the stack and initialize
|
| + // it's args_ field.
|
| __ sd(a1, MemOperand(sp, 1 * kPointerSize));
|
| - __ Daddu(a1, sp, Operand(1 * kPointerSize)); // a1 = AccessorInfo&
|
| -
|
| - const int kStackUnwindSpace = PropertyCallbackArguments::kArgsLength + 1;
|
| + __ Daddu(a1, sp, Operand(1 * kPointerSize));
|
| + // a1 = v8::PropertyCallbackInfo&
|
|
|
| ExternalReference thunk_ref =
|
| ExternalReference::invoke_accessor_getter_callback(isolate());
|
| +
|
| + // +3 is to skip prolog, return address and name handle.
|
| + MemOperand return_value_operand(
|
| + fp, (PropertyCallbackArguments::kReturnValueOffset + 3) * kPointerSize);
|
| CallApiFunctionAndReturn(masm, api_function_address, thunk_ref,
|
| kStackUnwindSpace, kInvalidStackOffset,
|
| - MemOperand(fp, 6 * kPointerSize), NULL);
|
| + return_value_operand, NULL);
|
| }
|
|
|
|
|
|
|