Messages in this thread | | | Date | Mon, 7 Aug 2023 15:06:51 +0200 | From | Jakub Jelinek <> | Subject | Re: [PATCH v2 1/3] compiler_types: Introduce the Clang __preserve_most function attribute |
| |
On Mon, Aug 07, 2023 at 02:43:39PM +0200, Florian Weimer wrote: > > On Mon, Aug 07, 2023 at 02:24:26PM +0200, Marco Elver wrote: > >> > | If the arguments are passed in callee-saved registers, then they will > >> > | be preserved by the callee across the call. This doesn’t apply for > >> > | values returned in callee-saved registers. > >> > | > >> > | · On X86-64 the callee preserves all general purpose registers, except > >> > | for R11. R11 can be used as a scratch register. Floating-point > >> > | registers (XMMs/YMMs) are not preserved and need to be saved by the > >> > | caller. > >> > | > >> > | · On AArch64 the callee preserve all general purpose registers, except > >> > | X0-X8 and X16-X18. > >> > > >> > Ideally, this would be documented in the respective psABI supplement. > >> > I filled in some gaps and filed: > >> > > >> > Document the ABI for __preserve_most__ function calls > >> > <https://gitlab.com/x86-psABIs/x86-64-ABI/-/merge_requests/45> > >> > >> Good idea. I had already created > >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110899, and we need > >> better spec to proceed for GCC anyway. > > > > "Registers used for passing arguments > > are preserved by the called function, but registers used for > > returning results are not." > > > > You mean just GPRs or also vector SSE or MMX registers? > > I think this is pretty clear for x86-64: > > | Floating-point registers (XMMs/YMMs) are not preserved and need to be > | saved by the caller.
The above wording conflicts with that, so it should be clarified.
Jakub
| |