diff options
| author | Alan Wu <XrXr@users.noreply.github.com> | 2025-08-01 14:54:52 -0400 |
|---|---|---|
| committer | Alan Wu <XrXr@users.noreply.github.com> | 2025-08-01 17:56:15 -0400 |
| commit | afac22647852439e7b3563216afac7b9491eaa0b (patch) | |
| tree | 6f86b675b047f6822b90b8007570d3414901ab24 /include/ruby/thread_native.h | |
| parent | f58fca7de0120394d5530902f694b12d260dd14e (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/thread_native.h')
0 files changed, 0 insertions, 0 deletions
