LibJS/JIT: Store the running ExecutionContext& in a dedicated register

This commit is contained in:
Andreas Kling 2023-11-06 15:22:45 +01:00
parent 5479bb6ac9
commit e1e7e696ac
3 changed files with 8 additions and 2 deletions

View file

@ -2061,6 +2061,10 @@ OwnPtr<NativeExecutable> Compiler::compile(Bytecode::Executable& bytecode_execut
Assembler::Operand::Register(LOCALS_ARRAY_BASE),
Assembler::Operand::Register(ARG2));
compiler.m_assembler.mov(
Assembler::Operand::Register(RUNNING_EXECUTION_CONTEXT_BASE),
Assembler::Operand::Register(ARG4));
compiler.reload_cached_accumulator();
Assembler::Label normal_entry {};

View file

@ -38,6 +38,7 @@ private:
static constexpr auto REGISTER_ARRAY_BASE = Assembler::Reg::RBX;
static constexpr auto LOCALS_ARRAY_BASE = Assembler::Reg::R14;
static constexpr auto CACHED_ACCUMULATOR = Assembler::Reg::R13;
static constexpr auto RUNNING_EXECUTION_CONTEXT_BASE = Assembler::Reg::R15;
# endif
# define JS_ENUMERATE_COMMON_BINARY_OPS_WITHOUT_FAST_PATH(O) \

View file

@ -43,11 +43,12 @@ void NativeExecutable::run(VM& vm, size_t entry_point) const
VERIFY(entry_point_address != 0);
}
typedef void (*JITCode)(VM&, Value* registers, Value* locals, FlatPtr entry_point_address);
typedef void (*JITCode)(VM&, Value* registers, Value* locals, FlatPtr entry_point_address, ExecutionContext&);
((JITCode)m_code)(vm,
vm.bytecode_interpreter().registers().data(),
vm.running_execution_context().local_variables.data(),
entry_point_address);
entry_point_address,
vm.running_execution_context());
}
#if ARCH(X86_64)