]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
aarch64: Fall back to AAPCS for variadic functions with preserve_none [PR 125838]
authorAlfie Richards <alfie.richards@arm.com>
Wed, 17 Jun 2026 11:17:09 +0000 (11:17 +0000)
committerAlfie Richards <alfie.richards@arm.com>
Tue, 30 Jun 2026 09:51:45 +0000 (09:51 +0000)
PR target/125838

gcc/ChangeLog:

* config/aarch64/aarch64.cc (aarch64_fntype_abi): Fall back to
AAPCS for preserve_none variadic calls.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/preserve_none_5.c: Update to use AAPCS.

gcc/config/aarch64/aarch64.cc
gcc/testsuite/gcc.target/aarch64/preserve_none_5.c

index 124e6dc37ccc4ebd27916987a2178d333b629e2f..ea45c208f8ffe1e55ab0911cac32e1f2d2c5c803 100644 (file)
@@ -2591,7 +2591,9 @@ aarch64_fntype_abi (const_tree fntype)
   if (lookup_attribute ("aarch64_vector_pcs", TYPE_ATTRIBUTES (fntype)))
     return aarch64_simd_abi ();
 
-  if (lookup_attribute ("preserve_none", TYPE_ATTRIBUTES (fntype)))
+  /* Fall back to AAPCS for variadic functions.  */
+  if (lookup_attribute ("preserve_none", TYPE_ATTRIBUTES (fntype))
+      && !stdarg_p (fntype))
     return aarch64_preserve_none_abi ();
 
   if (aarch64_returns_value_in_sve_regs_p (fntype)
index d11bf10a8985eaff962e1daf95661ff1418d209e..80bd949a893a713dce5b2cc492c218a9d6974527 100644 (file)
@@ -6,35 +6,51 @@
 #include <stdarg.h>
 int foo [[gnu::preserve_none]] (...);
 
-/* Check the pcs argument order is correct. Should be x20-28, x0-7, x10-14, x9, x15 and that the return arg is x0 */
+/* Check preserve_none falls back to AAPCS for variadic functions. */
 
 /*
 ** bar:
 ** ...
-**     mov     w15, 23
-**     mov     w9, 22
-**     mov     w14, 21
-**     mov     w13, 20
-**     mov     w12, 19
-**     mov     w11, 18
-**     mov     w10, 17
-**     mov     w7, 16
-**     mov     w6, 15
-**     mov     w5, 14
-**     mov     w4, 13
-**     mov     w3, 12
-**     mov     w2, 11
-**     mov     w1, 10
+**     mov     w0, 23
+**     mov     w7, 7
+**     mov     w6, 6
+**     mov     w5, 5
+**     mov     w4, 4
+**     mov     w3, 3
+**     mov     w2, 2
+**     mov     w1, 1
+**     str     w0, \[sp, 120\]
+**     mov     w0, 22
+**     str     w0, \[sp, 112\]
+**     mov     w0, 21
+**     str     w0, \[sp, 104\]
+**     mov     w0, 20
+**     str     w0, \[sp, 96\]
+**     mov     w0, 19
+**     str     w0, \[sp, 88\]
+**     mov     w0, 18
+**     str     w0, \[sp, 80\]
+**     mov     w0, 17
+**     str     w0, \[sp, 72\]
+**     mov     w0, 16
+**     str     w0, \[sp, 64\]
+**     mov     w0, 15
+**     str     w0, \[sp, 56\]
+**     mov     w0, 14
+**     str     w0, \[sp, 48\]
+**     mov     w0, 13
+**     str     w0, \[sp, 40\]
+**     mov     w0, 12
+**     str     w0, \[sp, 32\]
+**     mov     w0, 11
+**     str     w0, \[sp, 24\]
+**     mov     w0, 10
+**     str     w0, \[sp, 16\]
 **     mov     w0, 9
-**     mov     w28, 8
-**     mov     w27, 7
-**     mov     w26, 6
-**     mov     w25, 5
-**     mov     w24, 4
-**     mov     w23, 3
-**     mov     w22, 2
-**     mov     w21, 1
-**     mov     w20, 0
+**     str     w0, \[sp, 8\]
+**     mov     w0, 8
+**     str     w0, \[sp\]
+**     mov     w0, 0
 **     bl      foo
 **     add     w0, w0, 1
 ** ...