msun/aarch64: 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
This commit is contained in:
Konstantin Belousov
2026-03-29 01:13:44 +02:00
parent 5bc64b7d41
commit 3a01e1e1a5
2 changed files with 90 additions and 23 deletions
+59 -13
View File
@@ -44,16 +44,62 @@ 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));
}
+31 -10
View File
@@ -82,7 +82,28 @@ extern const fenv_t __fe_dfl_env;
#define __msr_fpsr(__r) __asm __volatile("msr fpsr, %0" : : "r" (__r))
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)
@@ -96,7 +117,7 @@ __feclearexcept_int(int __excepts)
}
__fenv_static inline int
fegetexceptflag(fexcept_t *__flagp, int __excepts)
__fegetexceptflag_int(fexcept_t *__flagp, int __excepts)
{
fexcept_t __r;
@@ -106,7 +127,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 __r;
@@ -118,7 +139,7 @@ fesetexceptflag(const fexcept_t *__flagp, int __excepts)
}
__fenv_static inline int
feraiseexcept(int __excepts)
__feraiseexcept_int(int __excepts)
{
fexcept_t __r;
@@ -129,7 +150,7 @@ feraiseexcept(int __excepts)
}
__fenv_static inline int
fetestexcept(int __excepts)
__fetestexcept_int(int __excepts)
{
fexcept_t __r;
@@ -138,7 +159,7 @@ fetestexcept(int __excepts)
}
__fenv_static inline int
fegetround(void)
__fegetround_int(void)
{
fenv_t __r;
@@ -147,7 +168,7 @@ fegetround(void)
}
__fenv_static inline int
fesetround(int __round)
__fesetround_int(int __round)
{
fenv_t __r;
@@ -161,7 +182,7 @@ fesetround(int __round)
}
__fenv_static inline int
fegetenv(fenv_t *__envp)
__fegetenv_int(fenv_t *__envp)
{
__uint64_t fpcr;
__uint64_t fpsr;
@@ -174,7 +195,7 @@ fegetenv(fenv_t *__envp)
}
__fenv_static inline int
feholdexcept(fenv_t *__envp)
__feholdexcept_int(fenv_t *__envp)
{
fenv_t __r;
@@ -191,7 +212,7 @@ feholdexcept(fenv_t *__envp)
}
__fenv_static inline int
fesetenv(const fenv_t *__envp)
__fesetenv_int(const fenv_t *__envp)
{
__msr_fpcr((*__envp) >> 32);
@@ -200,7 +221,7 @@ fesetenv(const fenv_t *__envp)
}
__fenv_static inline int
feupdateenv(const fenv_t *__envp)
__feupdateenv_int(const fenv_t *__envp)
{
fexcept_t __r;