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

LibJS/JIT: Resolve the GetCalleeAndThisFromEnvironment cache at JIT time

This commit is contained in:
Andreas Kling 2023-11-10 13:00:36 +01:00
parent 8f4966fc5c
commit 2520c46224
4 changed files with 17 additions and 15 deletions

View file

@ -1544,13 +1544,13 @@ void Compiler::compile_get_variable(Bytecode::Op::GetVariable const& op)
end.link(m_assembler);
}
static Value cxx_get_callee_and_this_from_environment(VM& vm, DeprecatedFlyString const& name, u32 cache_index, Bytecode::Register callee_reg, Bytecode::Register this_reg)
static Value cxx_get_callee_and_this_from_environment(VM& vm, DeprecatedFlyString const& name, Bytecode::Register callee_reg, Bytecode::Register this_reg, Bytecode::EnvironmentVariableCache& cache)
{
auto& bytecode_interpreter = vm.bytecode_interpreter();
auto callee_and_this = TRY_OR_SET_EXCEPTION(Bytecode::get_callee_and_this_from_environment(
bytecode_interpreter,
name,
cache_index));
cache));
bytecode_interpreter.reg(callee_reg) = callee_and_this.callee;
bytecode_interpreter.reg(this_reg) = callee_and_this.this_value;
@ -1564,13 +1564,13 @@ void Compiler::compile_get_callee_and_this_from_environment(Bytecode::Op::GetCal
Assembler::Operand::Imm(bit_cast<u64>(&m_bytecode_executable.get_identifier(op.identifier()))));
m_assembler.mov(
Assembler::Operand::Register(ARG2),
Assembler::Operand::Imm(op.cache_index()));
m_assembler.mov(
Assembler::Operand::Register(ARG3),
Assembler::Operand::Imm(op.callee().index()));
m_assembler.mov(
Assembler::Operand::Register(ARG4),
Assembler::Operand::Register(ARG3),
Assembler::Operand::Imm(op.this_().index()));
m_assembler.mov(
Assembler::Operand::Register(ARG4),
Assembler::Operand::Imm(bit_cast<u64>(&m_bytecode_executable.environment_variable_caches[op.cache_index()])));
native_call((void*)cxx_get_callee_and_this_from_environment);
check_exception();
}