git: f0e05595a1b4 - stable/14 - Fix arm64 build after llvm 18.1.3 upgrade (take 2)

From: Dimitry Andric <dim_at_FreeBSD.org>
Date: Sat, 20 Apr 2024 10:32:41 UTC
The branch stable/14 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=f0e05595a1b47554cdbfcb84f33d03b921d375de

commit f0e05595a1b47554cdbfcb84f33d03b921d375de
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2024-04-07 09:23:06 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2024-04-20 10:03:25 +0000

    Fix arm64 build after llvm 18.1.3 upgrade (take 2)
    
    Instead of compiling the whole sys/arm64/arm64/vfp.c file without
    -mgeneral-regs-only, which might have unwanted side effects, add
    ".arch_extension fp" / ".arch_extension nofp" pairs to the inline
    assembly.
    
    PR:             276104
    Suggested by:   andrew
    MFC after:      1 month
    
    (cherry picked from commit 61e482f2fcd53bbc7fd3d4cc8b7df79d5d57d75c)
---
 sys/arm64/arm64/vfp.c | 4 ++++
 sys/conf/files.arm64  | 3 +--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/sys/arm64/arm64/vfp.c b/sys/arm64/arm64/vfp.c
index ced1a446f0a8..be98af945b0a 100644
--- a/sys/arm64/arm64/vfp.c
+++ b/sys/arm64/arm64/vfp.c
@@ -110,6 +110,7 @@ vfp_store(struct vfpstate *state)
 
 	vfp_state = state->vfp_regs;
 	__asm __volatile(
+	    ".arch_extension fp\n"
 	    "mrs	%0, fpcr		\n"
 	    "mrs	%1, fpsr		\n"
 	    "stp	q0,  q1,  [%2, #16 *  0]\n"
@@ -128,6 +129,7 @@ vfp_store(struct vfpstate *state)
 	    "stp	q26, q27, [%2, #16 * 26]\n"
 	    "stp	q28, q29, [%2, #16 * 28]\n"
 	    "stp	q30, q31, [%2, #16 * 30]\n"
+	    ".arch_extension nofp\n"
 	    : "=&r"(fpcr), "=&r"(fpsr) : "r"(vfp_state));
 
 	state->vfp_fpcr = fpcr;
@@ -145,6 +147,7 @@ vfp_restore(struct vfpstate *state)
 	fpsr = state->vfp_fpsr;
 
 	__asm __volatile(
+	    ".arch_extension fp\n"
 	    "ldp	q0,  q1,  [%2, #16 *  0]\n"
 	    "ldp	q2,  q3,  [%2, #16 *  2]\n"
 	    "ldp	q4,  q5,  [%2, #16 *  4]\n"
@@ -163,6 +166,7 @@ vfp_restore(struct vfpstate *state)
 	    "ldp	q30, q31, [%2, #16 * 30]\n"
 	    "msr	fpcr, %0		\n"
 	    "msr	fpsr, %1		\n"
+	    ".arch_extension nofp\n"
 	    : : "r"(fpcr), "r"(fpsr), "r"(vfp_state));
 }
 
diff --git a/sys/conf/files.arm64 b/sys/conf/files.arm64
index b142999ec659..218571d0e23a 100644
--- a/sys/conf/files.arm64
+++ b/sys/conf/files.arm64
@@ -82,8 +82,7 @@ arm64/arm64/uma_machdep.c			standard
 arm64/arm64/undefined.c				standard
 arm64/arm64/unwind.c				optional ddb | kdtrace_hooks | stack \
 	compile-with "${NORMAL_C:N-fsanitize*}"
-arm64/arm64/vfp.c				standard \
-	compile-with "${NORMAL_C:N-mgeneral-regs-only}"
+arm64/arm64/vfp.c				standard
 arm64/arm64/vm_machdep.c			standard
 
 arm64/coresight/coresight.c			standard