Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Mar 2026 17:15:40 +0000
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 6b89f5360f84 - main - msun/riscv: convert fenv functions to proper linkage
Message-ID:  <69caafbc.41a15.30d6ab0d@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by kib:

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

commit 6b89f5360f8441ffd1a3e8db7375ed3ccdba7d2a
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-03-29 01:27:30 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-03-30 16:57:01 +0000

    msun/riscv: convert fenv functions to proper linkage
    
    namely
            fegetexceptflag(3)
            fesetexceptflag(3)
            feraiseexcept(3)
            fetestexcept(3)
            fegetround(3)
            fesetround(3)
            fegetenv(3)
            feholdexcept(3)
            fesetenv(3)
            feupdateenv(3)
            feenableexcept(3)
            fedisableexcept(3)
            fegetexcept(3)
    
    PR:     277958
    Reviewed by:    dim
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D56139
---
 lib/msun/riscv/fenv.c | 84 +++++++++++++++++++++++++++++++++++++++++++--------
 lib/msun/riscv/fenv.h | 51 +++++++++++++++++++++++--------
 2 files changed, 110 insertions(+), 25 deletions(-)

diff --git a/lib/msun/riscv/fenv.c b/lib/msun/riscv/fenv.c
index 4d1b2cb2f611..1f1f8eddc2d6 100644
--- a/lib/msun/riscv/fenv.c
+++ b/lib/msun/riscv/fenv.c
@@ -43,16 +43,74 @@ int
 	return (__feclearexcept_int(excepts));
 }
 
-extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
-extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
-extern inline int feraiseexcept(int __excepts);
-extern inline int fetestexcept(int __excepts);
-extern inline int fegetround(void);
-extern inline int fesetround(int __round);
-extern inline int fegetenv(fenv_t *__envp);
-extern inline int feholdexcept(fenv_t *__envp);
-extern inline int fesetenv(const fenv_t *__envp);
-extern inline int feupdateenv(const fenv_t *__envp);
-extern inline int feenableexcept(int __mask);
-extern inline int fedisableexcept(int __mask);
-extern inline int fegetexcept(void);
+int
+(fegetexceptflag)(fexcept_t *flagp, int excepts)
+{
+	return (__fegetexceptflag_int(flagp, excepts));
+}
+
+int
+(fesetexceptflag)(const fexcept_t *flagp, int excepts)
+{
+	return (__fesetexceptflag_int(flagp, excepts));
+}
+
+int
+(feraiseexcept)(int excepts)
+{
+	return (__feraiseexcept_int(excepts));
+}
+
+int
+(fetestexcept)(int excepts)
+{
+	return (__fetestexcept_int(excepts));
+}
+
+int
+(fegetround)(void)
+{
+	return (__fegetround_int());
+}
+
+int
+(fesetround)(int round)
+{
+	return (__fesetround_int(round));
+}
+
+int
+(fegetenv)(fenv_t *envp)
+{
+	return (__fegetenv_int(envp));
+}
+
+int
+(feholdexcept)(fenv_t *envp)
+{
+	return (__feholdexcept_int(envp));
+}
+
+int
+(fesetenv)(const fenv_t *envp)
+{
+	return (__fesetenv_int(envp));
+}
+
+int
+(feupdateenv)(const fenv_t *envp)
+{
+	return (__feupdateenv_int(envp));
+}
+
+int
+(feenableexcept)(int mask)
+{
+	return (__feenableexcept_int(mask));
+}
+
+int
+(fedisableexcept)(int mask)
+{
+	return (__fedisableexcept_int(mask));
+}
diff --git a/lib/msun/riscv/fenv.h b/lib/msun/riscv/fenv.h
index 4e8f81aa04c1..1059744941f3 100644
--- a/lib/msun/riscv/fenv.h
+++ b/lib/msun/riscv/fenv.h
@@ -80,7 +80,28 @@ extern const fenv_t	__fe_dfl_env;
 #define	__wfs(__fcsr)	__asm __volatile("csrw fcsr, %0" :: "r" (__fcsr))
 
 int feclearexcept(int);
+int fegetexceptflag(fexcept_t *, int);
+int fesetexceptflag(const fexcept_t *, int);
+int feraiseexcept(int);
+int fetestexcept(int);
+int fegetround(void);
+int fesetround(int);
+int fegetenv(fenv_t *);
+int feholdexcept(fenv_t *);
+int fesetenv(const fenv_t *);
+int feupdateenv(const fenv_t *);
+
 #define	feclearexcept(a)	__feclearexcept_int(a)
+#define	fegetexceptflag(e, a)	__fegetexceptflag_int(e, a)
+#define	fesetexceptflag(e, a)	__fesetexceptflag_int(e, a)
+#define	feraiseexcept(a)	__feraiseexcept_int(a)
+#define	fetestexcept(a)		__fetestexcept_int(a)
+#define	fegetround()		__fegetround_int()
+#define	fesetround(a)		__fesetround_int(a)
+#define	fegetenv(e)		__fegetenv_int(e)
+#define	feholdexcept(e)		__feholdexcept_int(e)
+#define	fesetenv(e)		__fesetenv_int(e)
+#define	feupdateenv(e)		__feupdateenv_int(e)
 
 __fenv_static inline int
 __feclearexcept_int(int __excepts)
@@ -92,7 +113,7 @@ __feclearexcept_int(int __excepts)
 }
 
 __fenv_static inline int
-fegetexceptflag(fexcept_t *__flagp, int __excepts)
+__fegetexceptflag_int(fexcept_t *__flagp, int __excepts)
 {
 	fexcept_t __fcsr;
 
@@ -103,7 +124,7 @@ fegetexceptflag(fexcept_t *__flagp, int __excepts)
 }
 
 __fenv_static inline int
-fesetexceptflag(const fexcept_t *__flagp, int __excepts)
+__fesetexceptflag_int(const fexcept_t *__flagp, int __excepts)
 {
 	fexcept_t __fcsr;
 
@@ -115,7 +136,7 @@ fesetexceptflag(const fexcept_t *__flagp, int __excepts)
 }
 
 __fenv_static inline int
-feraiseexcept(int __excepts)
+__feraiseexcept_int(int __excepts)
 {
 
 	__asm __volatile("csrs fflags, %0" :: "r"(__excepts));
@@ -124,7 +145,7 @@ feraiseexcept(int __excepts)
 }
 
 __fenv_static inline int
-fetestexcept(int __excepts)
+__fetestexcept_int(int __excepts)
 {
 	fexcept_t __fcsr;
 
@@ -134,7 +155,7 @@ fetestexcept(int __excepts)
 }
 
 __fenv_static inline int
-fegetround(void)
+__fegetround_int(void)
 {
 	fexcept_t __fcsr;
 
@@ -144,7 +165,7 @@ fegetround(void)
 }
 
 __fenv_static inline int
-fesetround(int __round)
+__fesetround_int(int __round)
 {
 	fexcept_t __fcsr;
 
@@ -160,7 +181,7 @@ fesetround(int __round)
 }
 
 __fenv_static inline int
-fegetenv(fenv_t *__envp)
+__fegetenv_int(fenv_t *__envp)
 {
 
 	__rfs(*__envp);
@@ -169,7 +190,7 @@ fegetenv(fenv_t *__envp)
 }
 
 __fenv_static inline int
-feholdexcept(fenv_t *__envp __unused)
+__feholdexcept_int(fenv_t *__envp __unused)
 {
 
 	/* No exception traps. */
@@ -178,7 +199,7 @@ feholdexcept(fenv_t *__envp __unused)
 }
 
 __fenv_static inline int
-fesetenv(const fenv_t *__envp)
+__fesetenv_int(const fenv_t *__envp)
 {
 
 	__wfs(*__envp);
@@ -187,7 +208,7 @@ fesetenv(const fenv_t *__envp)
 }
 
 __fenv_static inline int
-feupdateenv(const fenv_t *__envp)
+__feupdateenv_int(const fenv_t *__envp)
 {
 	fexcept_t __fcsr;
 
@@ -200,8 +221,14 @@ feupdateenv(const fenv_t *__envp)
 
 #if __BSD_VISIBLE
 
+int feenableexcept(int);
+int fedisableexcept(int);
+
+#define	feenableexcept(a)	__feenableexcept_int(a)
+#define	fedisableexcept(a)	__fedisableexcept_int(a)
+
 __fenv_static inline int
-feenableexcept(int __mask __unused)
+__feenableexcept_int(int __mask __unused)
 {
 
 	/* No exception traps. */
@@ -210,7 +237,7 @@ feenableexcept(int __mask __unused)
 }
 
 __fenv_static inline int
-fedisableexcept(int __mask __unused)
+__fedisableexcept_int(int __mask __unused)
 {
 
 	/* No exception traps. */


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69caafbc.41a15.30d6ab0d>