diff --git a/Userland/Libraries/LibJS/JIT/Assembler.h b/Userland/Libraries/LibJS/JIT/Assembler.h index bb13c42ee9..122c698589 100644 --- a/Userland/Libraries/LibJS/JIT/Assembler.h +++ b/Userland/Libraries/LibJS/JIT/Assembler.h @@ -290,8 +290,18 @@ struct Assembler { } } + void enter() + { + push(Operand::Register(Reg::RBP)); + mov(Operand::Register(Reg::RBP), Operand::Register(Reg::RSP)); + sub(Operand::Register(Reg::RSP), Operand::Imm8(8)); + } + void exit() { + // leave + emit8(0xc9); + // ret emit8(0xc3); } diff --git a/Userland/Libraries/LibJS/JIT/Compiler.cpp b/Userland/Libraries/LibJS/JIT/Compiler.cpp index 530288d82b..d8981eeabd 100644 --- a/Userland/Libraries/LibJS/JIT/Compiler.cpp +++ b/Userland/Libraries/LibJS/JIT/Compiler.cpp @@ -179,6 +179,8 @@ OwnPtr Compiler::compile(Bytecode::Executable const& bytecode_ Compiler compiler; + compiler.m_assembler.enter(); + compiler.m_assembler.mov( Assembler::Operand::Register(REGISTER_ARRAY_BASE), Assembler::Operand::Register(ARG1));