diff options
| author | Alan Wu <XrXr@users.noreply.github.com> | 2025-07-30 19:13:24 -0400 |
|---|---|---|
| committer | Alan Wu <XrXr@users.noreply.github.com> | 2025-07-31 13:45:20 -0400 |
| commit | da0de3cb872ce212ce70a7a6f8516356e97bcb2c (patch) | |
| tree | 37f8c536b80a11eb17abdecf0b3e8599ee0f7755 /include/ruby/encoding.h | |
| parent | 0aabbbe31d14fa851ca466291cb77f44a59b2910 (diff) | |
ZJIT: A64: Fix splitting for large memory displacements
On the ruby side, this fixes a crash for methods with 39 or more
parameters. We used to miscomp those entry points due to Insn::Lea
picking ADDS which cannot reference SP:
# set method params: 40
mov x0, #0xfee8
movk x0, #0xffff, lsl #16
movk x0, #0xffff, lsl #32
movk x0, #0xffff, lsl #48
adds x0, xzr, x0
Have Lea work for all i32 displacements and avoid involving the split
pass. Previously, direct use of Insn::Lea directly from the user (as
opposed to generated by the split pass for some memory operations)
wasn't split, so being able to handle the whole range in arm64_emit()
was implicitly required. Also, not going through split reduces register
pressure.
Diffstat (limited to 'include/ruby/encoding.h')
0 files changed, 0 insertions, 0 deletions
