]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
LoongArch: Add ABI names for FPR
authorXi Ruoyao <xry111@xry111.site>
Sun, 16 Mar 2025 06:19:53 +0000 (14:19 +0800)
committerXi Ruoyao <xry111@xry111.site>
Wed, 19 Mar 2025 03:39:01 +0000 (11:39 +0800)
We already allow the ABI names for GPR in inline asm clobber list, so
for consistency allow the ABI names for FPR as well.

Reported-by: Yao Zi <ziyao@disroot.org>
gcc/ChangeLog:

* config/loongarch/loongarch.h (ADDITIONAL_REGISTER_NAMES): Add
fa0-fa7, ft0-ft16, and fs0-fs7.

gcc/testsuite/ChangeLog:

* gcc.target/loongarch/regname-float-abi.c: New test.

gcc/config/loongarch/loongarch.h
gcc/testsuite/gcc.target/loongarch/regname-float-abi.c [new file with mode: 0644]

index 42a38a44efeb81d617afb918c93ca39dbebfa834..d8977634b71aa1c020973a4c9ed7f90f6c28e538 100644 (file)
@@ -941,6 +941,38 @@ typedef struct {
   { "s6",      29 + GP_REG_FIRST },                                    \
   { "s7",      30 + GP_REG_FIRST },                                    \
   { "s8",      31 + GP_REG_FIRST },                                    \
+  { "fa0",      0 + FP_REG_FIRST },                                    \
+  { "fa1",      1 + FP_REG_FIRST },                                    \
+  { "fa2",      2 + FP_REG_FIRST },                                    \
+  { "fa3",      3 + FP_REG_FIRST },                                    \
+  { "fa4",      4 + FP_REG_FIRST },                                    \
+  { "fa5",      5 + FP_REG_FIRST },                                    \
+  { "fa6",      6 + FP_REG_FIRST },                                    \
+  { "fa7",      7 + FP_REG_FIRST },                                    \
+  { "ft0",      8 + FP_REG_FIRST },                                    \
+  { "ft1",      9 + FP_REG_FIRST },                                    \
+  { "ft2",     10 + FP_REG_FIRST },                                    \
+  { "ft3",     11 + FP_REG_FIRST },                                    \
+  { "ft4",     12 + FP_REG_FIRST },                                    \
+  { "ft5",     13 + FP_REG_FIRST },                                    \
+  { "ft6",     14 + FP_REG_FIRST },                                    \
+  { "ft7",     15 + FP_REG_FIRST },                                    \
+  { "ft8",     16 + FP_REG_FIRST },                                    \
+  { "ft9",     17 + FP_REG_FIRST },                                    \
+  { "ft10",    18 + FP_REG_FIRST },                                    \
+  { "ft11",    19 + FP_REG_FIRST },                                    \
+  { "ft12",    20 + FP_REG_FIRST },                                    \
+  { "ft13",    21 + FP_REG_FIRST },                                    \
+  { "ft14",    22 + FP_REG_FIRST },                                    \
+  { "ft15",    23 + FP_REG_FIRST },                                    \
+  { "fs0",     24 + FP_REG_FIRST },                                    \
+  { "fs1",     25 + FP_REG_FIRST },                                    \
+  { "fs2",     26 + FP_REG_FIRST },                                    \
+  { "fs3",     27 + FP_REG_FIRST },                                    \
+  { "fs4",     28 + FP_REG_FIRST },                                    \
+  { "fs5",     29 + FP_REG_FIRST },                                    \
+  { "fs6",     30 + FP_REG_FIRST },                                    \
+  { "fs7",     31 + FP_REG_FIRST },                                    \
   { "v0",       4 + GP_REG_FIRST },                                    \
   { "v1",       5 + GP_REG_FIRST },                                    \
   { "vr0",      0 + FP_REG_FIRST },                                    \
diff --git a/gcc/testsuite/gcc.target/loongarch/regname-float-abi.c b/gcc/testsuite/gcc.target/loongarch/regname-float-abi.c
new file mode 100644 (file)
index 0000000..2224304
--- /dev/null
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-Wno-pedantic -std=gnu90 -mfpu=64" } */
+
+register double fs0 asm("fs0"); /* { dg-note "conflicts with 'fs0'" } */
+register double f24 asm("$f24"); /* { dg-warning "register of 'f24' used for multiple global register variables" } */
+
+void
+test (void)
+{
+  asm("" ::: "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", "fa6", "fa7",
+            "ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7",
+            "ft8", "ft9", "ft10", "ft11", "ft12", "ft13", "ft14", "ft15",
+            "fs0", "fs1", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7");
+}