summaryrefslogtreecommitdiff
path: root/deps/v8/src/builtins/arm64/builtins-arm64.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/builtins/arm64/builtins-arm64.cc')
-rw-r--r--deps/v8/src/builtins/arm64/builtins-arm64.cc39
1 files changed, 24 insertions, 15 deletions
diff --git a/deps/v8/src/builtins/arm64/builtins-arm64.cc b/deps/v8/src/builtins/arm64/builtins-arm64.cc
index f81a1955ee..bcee8f0b5d 100644
--- a/deps/v8/src/builtins/arm64/builtins-arm64.cc
+++ b/deps/v8/src/builtins/arm64/builtins-arm64.cc
@@ -1201,10 +1201,10 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
// 8-bit fields next to each other, so we could just optimize by writing a
// 16-bit. These static asserts guard our assumption is valid.
STATIC_ASSERT(BytecodeArray::kBytecodeAgeOffset ==
- BytecodeArray::kOSRNestingLevelOffset + kCharSize);
+ BytecodeArray::kOsrNestingLevelOffset + kCharSize);
STATIC_ASSERT(BytecodeArray::kNoAgeBytecodeAge == 0);
__ Strh(wzr, FieldMemOperand(kInterpreterBytecodeArrayRegister,
- BytecodeArray::kOSRNestingLevelOffset));
+ BytecodeArray::kOsrNestingLevelOffset));
// Load the initial bytecode offset.
__ Mov(kInterpreterBytecodeOffsetRegister,
@@ -1683,18 +1683,20 @@ void Generate_ContinueToBuiltinHelper(MacroAssembler* masm,
if (java_script_builtin) __ SmiUntag(kJavaScriptCallArgCountRegister);
- // Load builtin object.
+ // Load builtin index (stored as a Smi) and use it to get the builtin start
+ // address from the builtins table.
UseScratchRegisterScope temps(masm);
Register builtin = temps.AcquireX();
- __ Ldr(builtin,
- MemOperand(fp, BuiltinContinuationFrameConstants::kBuiltinOffset));
+ __ Ldr(
+ builtin,
+ MemOperand(fp, BuiltinContinuationFrameConstants::kBuiltinIndexOffset));
// Restore fp, lr.
__ Mov(sp, fp);
__ Pop(fp, lr);
- // Call builtin.
- __ JumpCodeObject(builtin);
+ __ LoadEntryFromBuiltinIndex(builtin);
+ __ Jump(builtin);
}
} // namespace
@@ -3400,16 +3402,23 @@ void CallApiFunctionAndReturn(MacroAssembler* masm, Register function_address,
DCHECK(function_address.is(x1) || function_address.is(x2));
- Label profiler_disabled;
- Label end_profiler_check;
+ Label profiler_enabled, end_profiler_check;
__ Mov(x10, ExternalReference::is_profiling_address(isolate));
__ Ldrb(w10, MemOperand(x10));
- __ Cbz(w10, &profiler_disabled);
- __ Mov(x3, thunk_ref);
- __ B(&end_profiler_check);
-
- __ Bind(&profiler_disabled);
- __ Mov(x3, function_address);
+ __ Cbnz(w10, &profiler_enabled);
+ __ Mov(x10, ExternalReference::address_of_runtime_stats_flag());
+ __ Ldrsw(w10, MemOperand(x10));
+ __ Cbnz(w10, &profiler_enabled);
+ {
+ // Call the api function directly.
+ __ Mov(x3, function_address);
+ __ B(&end_profiler_check);
+ }
+ __ Bind(&profiler_enabled);
+ {
+ // Additional parameter is the address of the actual callback.
+ __ Mov(x3, thunk_ref);
+ }
__ Bind(&end_profiler_check);
// Save the callee-save registers we are going to use.