Alan Wu 2025-12-16 19:53:31 +0000 (Tue, 16 Dec 2025)
New Revision: f3d1557d5c
https://github.com/ruby/ruby/commit/f3d1557d5c
Log:
Revert "ZJIT: Allow ccalls above 7 arguments"
This reverts commit 2f151e76b5dc578026706b31f054d5caf5374b05.
The SP decrement (push) before the call do not match up with
the pops after the call, so registers were restored incorrectly.
Code from:
./miniruby --zjit-call-threshold=1 --zjit-dump-disasm -e 'p Time.new(1992, 9, 23, 23, 0, 0, :std)'
str x11, [sp, #-0x10]!
str x12, [sp, #-0x10]!
stur x7, [sp] # last argument
mov x0, x20
mov x7, x6
mov x6, x5
mov x5, x4
mov x4, x3
mov x3, x2
mov x2, x1
ldur x1, [x29, #-0x20]
mov x16, #0xccfc
movk x16, #0x2e7, lsl #16
movk x16, #1, lsl #32
blr x16
ldr x12, [sp], #0x10 # supposed to match str x12, [sp, #-0x10]!, but got last argument
ldr x11, [sp], #0x10
Modified files:
zjit/src/asm/arm64/
opnd.rs
zjit/src/backend/arm64/
mod.rs
zjit/src/backend/
lir.rs
zjit/src/backend/x86_64/
mod.rs
zjit/src/
codegen.rs