diff options
Diffstat (limited to 'lib/msun/sparc64')
-rw-r--r-- | lib/msun/sparc64/Symbol.map | 8 | ||||
-rw-r--r-- | lib/msun/sparc64/fenv.c | 17 | ||||
-rw-r--r-- | lib/msun/sparc64/fenv.h | 34 |
3 files changed, 45 insertions, 14 deletions
diff --git a/lib/msun/sparc64/Symbol.map b/lib/msun/sparc64/Symbol.map index 3121177..971112e 100644 --- a/lib/msun/sparc64/Symbol.map +++ b/lib/msun/sparc64/Symbol.map @@ -3,3 +3,11 @@ */ FBSD_1.0 { }; + +FBSD_1.3 { + fesetexceptflag; + feraiseexcept; + fegetenv; + feholdexcept; + feupdateenv; +}; diff --git a/lib/msun/sparc64/fenv.c b/lib/msun/sparc64/fenv.c index 6e8220f..a1db64e 100644 --- a/lib/msun/sparc64/fenv.c +++ b/lib/msun/sparc64/fenv.c @@ -26,11 +26,28 @@ * $FreeBSD$ */ +#define __fenv_static #include <fenv.h> +#ifdef __GNUC_GNU_INLINE__ +#error "This file must be compiled with C99 'inline' semantics" +#endif + /* * The FSR_version field may be different on different * implementations, but it is immutable and opaque to the * application. Thus, 0 is valid as the default environment. */ const fenv_t __fe_dfl_env = 0; + +extern inline int 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); diff --git a/lib/msun/sparc64/fenv.h b/lib/msun/sparc64/fenv.h index 8273299..d17361f 100644 --- a/lib/msun/sparc64/fenv.h +++ b/lib/msun/sparc64/fenv.h @@ -31,6 +31,10 @@ #include <sys/_types.h> +#ifndef __fenv_static +#define __fenv_static static +#endif + typedef __uint64_t fenv_t; typedef __uint64_t fexcept_t; @@ -70,7 +74,7 @@ extern const fenv_t __fe_dfl_env; #define __ldxfsr(__r) __asm __volatile("ldx %0, %%fsr" : : "m" (__r)) #define __stxfsr(__r) __asm __volatile("stx %%fsr, %0" : "=m" (*(__r))) -static __inline int +__fenv_static __inline int feclearexcept(int __excepts) { fexcept_t __r; @@ -81,7 +85,7 @@ feclearexcept(int __excepts) return (0); } -static __inline int +__fenv_static inline int fegetexceptflag(fexcept_t *__flagp, int __excepts) { fexcept_t __r; @@ -91,7 +95,7 @@ fegetexceptflag(fexcept_t *__flagp, int __excepts) return (0); } -static __inline int +__fenv_static inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts) { fexcept_t __r; @@ -108,7 +112,7 @@ fesetexceptflag(const fexcept_t *__flagp, int __excepts) * inline this function on sparc64 even when the arguments are not * compile-time constants. Perhaps this depends on the register window. */ -static __inline int +__fenv_static inline int feraiseexcept(int __excepts) { volatile double d; @@ -143,7 +147,7 @@ feraiseexcept(int __excepts) return (0); } -static __inline int +__fenv_static inline int fetestexcept(int __excepts) { fexcept_t __r; @@ -152,7 +156,7 @@ fetestexcept(int __excepts) return (__r & __excepts); } -static __inline int +__fenv_static inline int fegetround(void) { fenv_t __r; @@ -161,7 +165,7 @@ fegetround(void) return ((__r >> _ROUND_SHIFT) & _ROUND_MASK); } -static __inline int +__fenv_static inline int fesetround(int __round) { fenv_t __r; @@ -175,7 +179,7 @@ fesetround(int __round) return (0); } -static __inline int +__fenv_static inline int fegetenv(fenv_t *__envp) { @@ -183,7 +187,7 @@ fegetenv(fenv_t *__envp) return (0); } -static __inline int +__fenv_static inline int feholdexcept(fenv_t *__envp) { fenv_t __r; @@ -195,7 +199,7 @@ feholdexcept(fenv_t *__envp) return (0); } -static __inline int +__fenv_static inline int fesetenv(const fenv_t *__envp) { @@ -203,7 +207,7 @@ fesetenv(const fenv_t *__envp) return (0); } -static __inline int +__fenv_static inline int feupdateenv(const fenv_t *__envp) { fexcept_t __r; @@ -216,7 +220,9 @@ feupdateenv(const fenv_t *__envp) #if __BSD_VISIBLE -static __inline int +/* We currently provide no external definitions of the functions below. */ + +static inline int feenableexcept(int __mask) { fenv_t __old_r, __new_r; @@ -227,7 +233,7 @@ feenableexcept(int __mask) return ((__old_r >> _FPUSW_SHIFT) & FE_ALL_EXCEPT); } -static __inline int +static inline int fedisableexcept(int __mask) { fenv_t __old_r, __new_r; @@ -238,7 +244,7 @@ fedisableexcept(int __mask) return ((__old_r >> _FPUSW_SHIFT) & FE_ALL_EXCEPT); } -static __inline int +static inline int fegetexcept(void) { fenv_t __r; |