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>
