summaryrefslogtreecommitdiff
path: root/include/ruby
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2025-08-01 14:54:52 -0400
committerAlan Wu <XrXr@users.noreply.github.com>2025-08-01 17:56:15 -0400
commitafac22647852439e7b3563216afac7b9491eaa0b (patch)
tree6f86b675b047f6822b90b8007570d3414901ab24 /include/ruby
parentf58fca7de0120394d5530902f694b12d260dd14e (diff)
ZJIT: Fix side-exit panicking when there's too many locals
Previously, ARM64 panicked due to compiled_side_exits() when the memory displacement got large enough to exceed the 9 bits limit. Usually, we split these kind of memory operands, but compiled_side_exits() runs after split. Using scratch registers, implement `Insn::Store` on ARM such that it can handle large displacements without split(). Do this for x86 as well, and remove arch specific code from compiled_side_exits(). We can now run `TestKeywordArguments`. Since `Insn::Store` doesn't need splitting now, users enjoy lower register pressure. Downside is, using `Assembler::SCRATCH_REG` as a base register is now sometimes an error, depending on whether `Insn::Store` also needs to use the register. It seems a fair trade off since `SCRATCH_REG` is not often used, and we don't put it as a base register anywhere at the moment.
Diffstat (limited to 'include/ruby')
0 files changed, 0 insertions, 0 deletions