1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 17:37:37 +00:00

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(LOCALS_ARRAY_BASE),
Assembler::Operand::Register(ARG2)); Assembler::Operand::Register(ARG2));
compiler.m_assembler.mov(
Assembler::Operand::Register(RUNNING_EXECUTION_CONTEXT_BASE),
Assembler::Operand::Register(ARG4));
compiler.reload_cached_accumulator(); compiler.reload_cached_accumulator();
Assembler::Label normal_entry {}; Assembler::Label normal_entry {};

View file

@ -38,6 +38,7 @@ private:
static constexpr auto REGISTER_ARRAY_BASE = Assembler::Reg::RBX; static constexpr auto REGISTER_ARRAY_BASE = Assembler::Reg::RBX;
static constexpr auto LOCALS_ARRAY_BASE = Assembler::Reg::R14; static constexpr auto LOCALS_ARRAY_BASE = Assembler::Reg::R14;
static constexpr auto CACHED_ACCUMULATOR = Assembler::Reg::R13; static constexpr auto CACHED_ACCUMULATOR = Assembler::Reg::R13;
static constexpr auto RUNNING_EXECUTION_CONTEXT_BASE = Assembler::Reg::R15;
# endif # endif
# define JS_ENUMERATE_COMMON_BINARY_OPS_WITHOUT_FAST_PATH(O) \ # 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); 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, ((JITCode)m_code)(vm,
vm.bytecode_interpreter().registers().data(), vm.bytecode_interpreter().registers().data(),
vm.running_execution_context().local_variables.data(), vm.running_execution_context().local_variables.data(),
entry_point_address); entry_point_address,
vm.running_execution_context());
} }
#if ARCH(X86_64) #if ARCH(X86_64)