Andreas Kling
9d35016284
LibJS/JIT: Add Assembler::jump(Operand) and verify_not_reached()
...
Yet another jump() overload, and also a way to crash if we end up
somewhere we shouldn't be while in jitted code.
2023-10-27 19:07:22 +02:00
Andreas Kling
e3560c2545
LibJS/JIT: Propagate exceptions in the simplest case :^)
...
We now establish a stack of "unwind contexts" similar to what the
bytecode interpreter does, but here, it's a stack of structs with
addresses to the catch and finally blocks.
Unwind contexts also have a "valid" flag, and the root unwind context
(always present, pushed on JIT code entry) has valid=false, which we
interpret in check_exception() as "return and let our caller deal with
the exception".
Anything in Compiler that may generate an exception should now also
call check_exception() ASAP to emit the code for handling this.
2023-10-27 19:07:22 +02:00
Andreas Kling
3523f9f722
LibJS/JIT: Add patchable absolute references to basic blocks
2023-10-27 19:07:22 +02:00
Andreas Kling
2e6c02f088
LibJS/JIT: Support Imm32 operands in Assembler::push()
2023-10-27 19:07:22 +02:00
Andreas Kling
71e41418f6
LibJS/JIT: Do "enter & leave" sequence in x86_64 machine code
...
This ensures that the stack pointer is restored before we return from
the jitted code.
2023-10-27 19:07:22 +02:00
Andreas Kling
814b07a9c2
LibJS/JIT: Add Assembler::jump_if_equal()
...
And also factor out cmp() so we don't have to repeat it.
2023-10-27 19:07:22 +02:00
Andreas Kling
a7bad26b63
LibJS/JIT: Add missing unistd.h include (fixes Clang build)
2023-10-27 19:07:22 +02:00
Andreas Kling
c21978ead6
LibJS/JIT: Remove unused functions from Assembler
2023-10-27 19:07:22 +02:00
Andreas Kling
1e8c6d3b06
LibJS/JIT: Use mov() helper in Assembler::native_call()
2023-10-27 19:07:22 +02:00
Andreas Kling
e7ce3d271a
LibJS/JIT: Add Assembler::add() and sub() helpers
2023-10-27 19:07:22 +02:00
Andreas Kling
10dcb4d53a
LibJS/JIT: Add Assembler::push() and pop() helpers
2023-10-27 19:07:22 +02:00
Andreas Kling
acece9057e
LibJS/JIT: Make Assembler::Reg represent X86 registers
...
And move the generic register aliases to JIT::Compiler.
2023-10-27 19:07:22 +02:00
Andreas Kling
f9041c7b31
LibJS/JIT: Fast path for boolean JS::Value in compile_to_boolean()
2023-10-27 19:07:22 +02:00
Andreas Kling
babdc0a25b
LibJS: Work-in-progress JIT compiler :^)
2023-10-27 19:07:22 +02:00