lkml.org 
[lkml]   [2023]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 4/9] LoongArch: Make {read,write}_fcsr compatible with LLVM/Clang
Date
From: WANG Xuerui <git@xen0n.name>

LLVM/Clang does not see FCSRs as GPRs, so make use of compiler
built-ins instead for better maintainability with less code.

The existing version cannot be wholly removed though, because the
built-ins, while available on GCC too, is predicated TARGET_HARD_FLOAT,
which means soft-float code cannot make use of them.

Signed-off-by: WANG Xuerui <git@xen0n.name>
---
arch/loongarch/include/asm/loongarch.h | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/arch/loongarch/include/asm/loongarch.h b/arch/loongarch/include/asm/loongarch.h
index ac83e60c60d1..eedc313b5241 100644
--- a/arch/loongarch/include/asm/loongarch.h
+++ b/arch/loongarch/include/asm/loongarch.h
@@ -1445,12 +1445,6 @@ __BUILD_CSR_OP(tlbidx)
#define EXCCODE_INT_START 64
#define EXCCODE_INT_END (EXCCODE_INT_START + EXCCODE_INT_NUM - 1)

-/* FPU register names */
-#define LOONGARCH_FCSR0 $r0
-#define LOONGARCH_FCSR1 $r1
-#define LOONGARCH_FCSR2 $r2
-#define LOONGARCH_FCSR3 $r3
-
/* FPU Status Register Values */
#define FPU_CSR_RSVD 0xe0e0fce0

@@ -1487,6 +1481,18 @@ __BUILD_CSR_OP(tlbidx)
#define FPU_CSR_RU 0x200 /* towards +Infinity */
#define FPU_CSR_RD 0x300 /* towards -Infinity */

+#ifdef CONFIG_CC_IS_CLANG
+#define LOONGARCH_FCSR0 0
+#define LOONGARCH_FCSR1 1
+#define LOONGARCH_FCSR2 2
+#define LOONGARCH_FCSR3 3
+#define read_fcsr(source) __movfcsr2gr(source)
+#define write_fcsr(dest, val) __movgr2fcsr(dest, val)
+#else /* CONFIG_CC_IS_CLANG */
+#define LOONGARCH_FCSR0 $r0
+#define LOONGARCH_FCSR1 $r1
+#define LOONGARCH_FCSR2 $r2
+#define LOONGARCH_FCSR3 $r3
#define read_fcsr(source) \
({ \
unsigned int __res; \
@@ -1503,5 +1509,6 @@ do { \
" movgr2fcsr "__stringify(dest)", %0 \n" \
: : "r" (val)); \
} while (0)
+#endif /* CONFIG_CC_IS_CLANG */

#endif /* _ASM_LOONGARCH_H */
--
2.40.0
\
 
 \ /
  Last update: 2023-06-23 15:45    [W:0.098 / U:0.776 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site