Andreas Kling
5b198ccf32
LibJS+LibJIT: Don't turn patchable movs into xors with self
...
If a mov instruction is meant to be patchable, we don't want to rewrite
it as a xor, since that removes the slot where we'd patch in the right
value later.
Also, make sure to set both size bits in the REX prefix for xoring a
register with itself.
2023-10-27 19:07:22 +02:00
Andreas Kling
6f0baea594
LibJIT: Add jump_if_zero() and jump_if_not_zero() to Assembler
...
These can use test reg,reg on x86 which gives us a shorter encoding.
2023-10-27 19:07:22 +02:00
Andreas Kling
fb483f1950
LibJIT: Emit 8-bit displacement variants for mov when possible
2023-10-27 19:07:22 +02:00
Andreas Kling
d09bc54586
LibJIT: Encode mov(reg, 0) as xor(reg, reg)
...
This uses less space for the same result. :^)
2023-10-27 19:07:22 +02:00
Andreas Kling
5b87d26027
LibJIT+LibJS: Move JIT::Assembler into a new LibJIT library
...
This will allow other parts of the system to generate machine code
at runtime. :^)
2023-10-27 19:07:22 +02:00