diff --git a/Userland/Libraries/LibJS/JIT/Compiler.cpp b/Userland/Libraries/LibJS/JIT/Compiler.cpp index 10a9507982..c22c3eb43b 100644 --- a/Userland/Libraries/LibJS/JIT/Compiler.cpp +++ b/Userland/Libraries/LibJS/JIT/Compiler.cpp @@ -346,10 +346,6 @@ void Compiler::handle_exception() handle_exception.link(m_assembler); // if (unwind_context.handler) { - // accumulator = exception; - // exception = Value(); - // goto handler; - // } Assembler::Label no_handler {}; m_assembler.mov( Assembler::Operand::Register(GPR0), @@ -358,13 +354,24 @@ void Compiler::handle_exception() Assembler::Operand::Register(GPR0), Assembler::Operand::Imm(0), no_handler); + // accumulator = exception; load_vm_register(GPR1, Bytecode::Register::exception()); store_vm_register(Bytecode::Register::accumulator(), GPR1); + // exception = Value(); m_assembler.mov( Assembler::Operand::Register(GPR1), Assembler::Operand::Imm(Value().encoded())); store_vm_register(Bytecode::Register::exception(), GPR1); + // unwind_context.handler = nullptr; + m_assembler.mov( + Assembler::Operand::Register(GPR1), + Assembler::Operand::Imm(0)); + m_assembler.mov( + Assembler::Operand::Mem64BaseAndOffset(UNWIND_CONTEXT_BASE, 8), + Assembler::Operand::Register(GPR1)); + // goto handler; m_assembler.jump(Assembler::Operand::Register(GPR0)); + // } // no_handler: no_handler.link(m_assembler);