[clang] [llvm] [BPF] Support Stack Arguments (PR #189060)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 7 16:25:34 PDT 2026
4ast wrote:
both archs have:
callq foo
addq $32, %rsp
after the call,
and arm64 does 'sub sp, sp, #48' before the call.
while x86 does implicit rsp adjustment via push before the call.
Should we do r12 -= const before the call and corresponding r12 += const after?
That will help JIT a bit.
Then both arg-in and arg-out will be accessed via [r12 + 0], [r12 + 8] which has its pros and cons.
Consider the case when 7th incoming arg needs to be passed as 7th outgoing.
With the current patch the compiler can emit it as:
r1 = *(u64 *)(r12 + 16)
*(u64 *)(r12 - 8) = r1
with explicit r12 adjustment:
r1 = *(u64 *)(r12 + 16)
r12 += 16
*(u64 *)(r12 +16) = r1
but without explicit r12 adjustment JIT would need to insert it somewhere, and if the sequence is:
r1 = *(u64 *)(r12 + 16)
*(u64 *)(r12 - 8) = r1
r1 = *(u64 *)(r12 + 8)
*(u64 *)(r12 - 16) = r1
there is no place for JIT to insert it unless it maps r12 with positive offset to, say, %rsp,
and r12 with negative offset as %rbp ?
the might be other gotchas with and without explicit r12. Something to think through.
https://github.com/llvm/llvm-project/pull/189060
More information about the cfe-commits
mailing list