diff options
| author | Alan Wu <XrXr@users.noreply.github.com> | 2025-07-22 22:54:54 -0400 |
|---|---|---|
| committer | Alan Wu <XrXr@users.noreply.github.com> | 2025-07-23 13:29:03 -0400 |
| commit | 41149a96efa27ad297ea71119d56d7861066b5ee (patch) | |
| tree | 840ad722fbcc64d9c6c03791a6aa4e8c3870498b /include/ruby | |
| parent | 5e5cec1b86837653b2106af377561045f4bbecef (diff) | |
ZJIT: Fix clobbering register for `self` in gen_entry_params()
Previously, for 8+ params we wound up clobbering the self param when
putting the last param in memory in the JIT entry point:
# ZJIT entry point: a@../test.rb:5
<snip>
ldur x0, [x19, #0x18]
# set method params: 8
ldur x1, [x21, #-0x58]
ldur x2, [x21, #-0x50]
ldur x3, [x21, #-0x48]
ldur x4, [x21, #-0x40]
ldur x5, [x21, #-0x38]
ldur x11, [x21, #-0x30]
ldur x12, [x21, #-0x28]
ldur x0, [x21, #-0x20]
stur x0, [sp, #-0x20]
bl #0x11e17018c
Doing the memcpys for parameters in memory first avoids this clobbering.
# set method params: 8
ldur x0, [x21, #-0x20]
stur x0, [sp, #-0x20]
ldur x12, [x21, #-0x28]
ldur x11, [x21, #-0x30]
ldur x5, [x21, #-0x38]
ldur x4, [x21, #-0x40]
ldur x3, [x21, #-0x48]
ldur x2, [x21, #-0x50]
ldur x1, [x21, #-0x58]
ldur x0, [x19, #0x18]
Diffstat (limited to 'include/ruby')
0 files changed, 0 insertions, 0 deletions
