rust/compiler
Matthias Krüger 5023691213
Rollup merge of #141538 - folkertdev:systemv-x86_64-va_arg, r=workingjubilee
implement `va_arg` for x86_64 systemv

tracking issue: https://github.com/rust-lang/rust/issues/44930

Turns out LLVM's `va_arg` is also unreliable for this target.

https://github.com/llvm/llvm-project/issues/141361

So, like clang, we implement our own. I used

- the spec at https://gitlab.com/x86-psABIs/x86-64-ABI
- the clang implementation at 9a440f8477/clang/lib/CodeGen/Targets/X86.cpp (L3041)

We can take a bunch of shortcuts because the return type of `va_list` must implement `VaArgSafe`. I also extended some of the tests, because up to 11 floats can be stored in the `reg_safe_area` for this calling convention.

r? `@workingjubilee`
`@rustbot` label +F-c_variadic

try-job: x86_64-apple-1
2025-05-30 07:01:30 +02:00
..
2025-05-27 11:14:47 +00:00
2025-05-28 15:14:34 +01:00
2025-05-27 14:11:14 +03:00
2025-05-28 15:14:34 +01:00
2025-05-27 14:11:14 +03:00
2025-05-29 12:10:50 +02:00
2025-05-27 11:14:45 +00:00
2025-05-27 11:14:45 +00:00
2025-05-24 15:06:53 +08:00