[Bug target/125297] What calling convention should be used with __attribute__ ((preserve_none, ms_abi))?
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Jul 21 03:30:59 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125297
--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by H.J. Lu <hjl@gcc.gnu.org>:
https://gcc.gnu.org/g:336f25a0ad83cc74b6a18137ffd177eefa4a81b0
commit r17-2578-g336f25a0ad83cc74b6a18137ffd177eefa4a81b0
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Wed May 13 08:27:50 2026 +0800
x86: Don't set cum->preserve_none_abi for x86-64 MS calls
In 64-bit mode, preserve_none attribute uses the same number of integer
parameters passed in registers as SYSV ABI, but with a different set of
6 registers, by setting cum->preserve_none_abi to true. Don't set
cum->preserve_none_abi to true for MS ABI functions with preserve_none
attribute to keep the number of integer parameters passed in registers
unchanged as 4. This treats preserve_none attribute the same way as
no_callee_saved_registers attribute for MS ABI functions.
gcc/
PR target/125297
* config/i386/i386.cc (init_cumulative_args): Don't set
cum->preserve_none_abi to true for MS ABI functions.
* doc/extend.texi: Update x86-64 preserve_none attribute
documentation.
gcc/testsuite/
PR target/125297
* gcc.target/i386/preserve-none-1.c: Skip llp64 target.
* gcc.target/i386/preserve-none-31a.c: New test.
* gcc.target/i386/preserve-none-31b.c: Likewise.
* gcc.target/i386/preserve-none-32.c: Likewise.
* gcc.target/i386/preserve-none-33a.c: Likewise.
* gcc.target/i386/preserve-none-33b.c: Likewise.
* gcc.target/i386/preserve-none-34a.c: Likewise.
* gcc.target/i386/preserve-none-34b.c: Likewise.
* gcc.target/i386/preserve-none-35a.c: Likewise.
* gcc.target/i386/preserve-none-35b.c: Likewise.
* gcc.target/i386/preserve-none-35c.c: Likewise.
* gcc.target/i386/preserve-none-35d.c: Likewise.
* gcc.target/i386/preserve-none-35e.c: Likewise.
* gcc.target/i386/preserve-none-35f.c: Likewise.
* gcc.target/i386/preserve-none-35g.c: Likewise.
* gcc.target/i386/preserve-none-36a.c: Likewise.
* gcc.target/i386/preserve-none-36b.c: Likewise.
* gcc.target/i386/preserve-none-36c.c: Likewise.
* gcc.target/i386/preserve-none-36d.c: Likewise.
* gcc.target/i386/preserve-none-36e.c: Likewise.
* gcc.target/i386/preserve-none-36f.c: Likewise.
* gcc.target/i386/preserve-none-36g.c: Likewise.
* gcc.target/i386/preserve-none-37a.c: Likewise.
* gcc.target/i386/preserve-none-37b.c: Likewise.
* gcc.target/i386/preserve-none-37c.c: Likewise.
* gcc.target/i386/preserve-none-37d.c: Likewise.
* gcc.target/i386/preserve-none-37e.c: Likewise.
* gcc.target/i386/preserve-none-37f.c: Likewise.
* gcc.target/i386/preserve-none-37g.c: Likewise.
* gcc.target/i386/preserve-none-37h.c: Likewise.
* gcc.target/i386/preserve-none-37i.c: Likewise.
* gcc.target/i386/preserve-none-37j.c: Likewise.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
More information about the Gcc-bugs
mailing list