diff options
Diffstat (limited to 'deps/v8/src/builtins/mips64/builtins-mips64.cc')
-rw-r--r-- | deps/v8/src/builtins/mips64/builtins-mips64.cc | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/deps/v8/src/builtins/mips64/builtins-mips64.cc b/deps/v8/src/builtins/mips64/builtins-mips64.cc index ee0e5238b8..bba01d5668 100644 --- a/deps/v8/src/builtins/mips64/builtins-mips64.cc +++ b/deps/v8/src/builtins/mips64/builtins-mips64.cc @@ -2979,32 +2979,27 @@ void CallApiFunctionAndReturn(MacroAssembler* masm, Register function_address, void Builtins::Generate_CallApiCallback(MacroAssembler* masm) { // ----------- S t a t e ------------- - // -- cp : kTargetContext - // -- a1 : kApiFunctionAddress - // -- a2 : kArgc + // -- cp : context + // -- a1 : api function address + // -- a2 : arguments count (not including the receiver) + // -- a3 : call data + // -- a0 : holder // -- // -- sp[0] : last argument // -- ... // -- sp[(argc - 1) * 8] : first argument // -- sp[(argc + 0) * 8] : receiver - // -- sp[(argc + 1) * 8] : kHolder - // -- sp[(argc + 2) * 8] : kCallData // ----------------------------------- Register api_function_address = a1; Register argc = a2; + Register call_data = a3; + Register holder = a0; Register scratch = t0; Register base = t1; // For addressing MemOperands on the stack. - DCHECK(!AreAliased(api_function_address, argc, scratch, base)); - - // Stack offsets (without argc). - static constexpr int kReceiverOffset = 0 * kPointerSize; - static constexpr int kHolderOffset = kReceiverOffset + kPointerSize; - static constexpr int kCallDataOffset = kHolderOffset + kPointerSize; - - // Extra stack arguments are: the receiver, kHolder, kCallData. - static constexpr int kExtraStackArgumentCount = 3; + DCHECK(!AreAliased(api_function_address, argc, call_data, + holder, scratch, base)); typedef FunctionCallbackArguments FCA; @@ -3034,22 +3029,22 @@ void Builtins::Generate_CallApiCallback(MacroAssembler* masm) { __ Dsubu(sp, sp, Operand(FCA::kArgsLength * kPointerSize)); // kHolder. - __ Ld(scratch, MemOperand(base, kHolderOffset)); - __ Sd(scratch, MemOperand(sp, 0 * kPointerSize)); + __ Sd(holder, MemOperand(sp, 0 * kPointerSize)); // kIsolate. __ li(scratch, ExternalReference::isolate_address(masm->isolate())); __ Sd(scratch, MemOperand(sp, 1 * kPointerSize)); - // kReturnValueDefaultValue, kReturnValue, and kNewTarget. + // kReturnValueDefaultValue and kReturnValue. __ LoadRoot(scratch, RootIndex::kUndefinedValue); __ Sd(scratch, MemOperand(sp, 2 * kPointerSize)); __ Sd(scratch, MemOperand(sp, 3 * kPointerSize)); - __ Sd(scratch, MemOperand(sp, 5 * kPointerSize)); // kData. - __ Ld(scratch, MemOperand(base, kCallDataOffset)); - __ Sd(scratch, MemOperand(sp, 4 * kPointerSize)); + __ Sd(call_data, MemOperand(sp, 4 * kPointerSize)); + + // kNewTarget. + __ Sd(scratch, MemOperand(sp, 5 * kPointerSize)); // Keep a pointer to kHolder (= implicit_args) in a scratch register. // We use it below to set up the FunctionCallbackInfo object. @@ -3082,7 +3077,7 @@ void Builtins::Generate_CallApiCallback(MacroAssembler* masm) { // from the API function here. // Note: Unlike on other architectures, this stores the number of slots to // drop, not the number of bytes. - __ Daddu(scratch, argc, Operand(FCA::kArgsLength + kExtraStackArgumentCount)); + __ Daddu(scratch, argc, Operand(FCA::kArgsLength + 1 /* receiver */)); __ Sd(scratch, MemOperand(sp, 4 * kPointerSize)); // v8::InvocationCallback's argument. |