aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/builtins/mips64/builtins-mips64.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/builtins/mips64/builtins-mips64.cc')
-rw-r--r--deps/v8/src/builtins/mips64/builtins-mips64.cc37
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.