summaryrefslogtreecommitdiffstats
path: root/lib/msun/amd64
diff options
context:
space:
mode:
Diffstat (limited to 'lib/msun/amd64')
-rw-r--r--lib/msun/amd64/Symbol.map2
-rw-r--r--lib/msun/amd64/fenv.c15
-rw-r--r--lib/msun/amd64/fenv.h19
3 files changed, 27 insertions, 9 deletions
diff --git a/lib/msun/amd64/Symbol.map b/lib/msun/amd64/Symbol.map
index f4c13a4..3da32ff 100644
--- a/lib/msun/amd64/Symbol.map
+++ b/lib/msun/amd64/Symbol.map
@@ -7,8 +7,6 @@ FBSD_1.0 {
fegetenv;
feholdexcept;
feupdateenv;
- __feenableexcept;
- __fedisableexcept;
feenableexcept;
fedisableexcept;
};
diff --git a/lib/msun/amd64/fenv.c b/lib/msun/amd64/fenv.c
index e126070..c543bd5 100644
--- a/lib/msun/amd64/fenv.c
+++ b/lib/msun/amd64/fenv.c
@@ -29,8 +29,14 @@
#include <sys/cdefs.h>
#include <sys/types.h>
#include <machine/fpu.h>
+
+#define __fenv_static
#include <fenv.h>
+#ifdef __GNUC_GNU_INLINE__
+#error "This file must be compiled with C99 'inline' semantics"
+#endif
+
const fenv_t __fe_dfl_env = {
{ 0xffff0000 | __INITIAL_FPUCW__,
0xffff0000,
@@ -41,6 +47,9 @@ const fenv_t __fe_dfl_env = {
__INITIAL_MXCSR__
};
+extern inline int feclearexcept(int __excepts);
+extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
+
int
fesetexceptflag(const fexcept_t *flagp, int excepts)
{
@@ -69,6 +78,10 @@ feraiseexcept(int excepts)
return (0);
}
+extern inline int fetestexcept(int __excepts);
+extern inline int fegetround(void);
+extern inline int fesetround(int __round);
+
int
fegetenv(fenv_t *envp)
{
@@ -98,6 +111,8 @@ feholdexcept(fenv_t *envp)
return (0);
}
+extern inline int fesetenv(const fenv_t *__envp);
+
int
feupdateenv(const fenv_t *envp)
{
diff --git a/lib/msun/amd64/fenv.h b/lib/msun/amd64/fenv.h
index 875664a..b7c9873 100644
--- a/lib/msun/amd64/fenv.h
+++ b/lib/msun/amd64/fenv.h
@@ -32,6 +32,10 @@
#include <sys/cdefs.h>
#include <sys/_types.h>
+#ifndef __fenv_static
+#define __fenv_static static
+#endif
+
typedef struct {
struct {
__uint32_t __control;
@@ -89,7 +93,7 @@ extern const fenv_t __fe_dfl_env;
#define __ldmxcsr(__csr) __asm __volatile("ldmxcsr %0" : : "m" (__csr))
#define __stmxcsr(__csr) __asm __volatile("stmxcsr %0" : "=m" (*(__csr)))
-static __inline int
+__fenv_static inline int
feclearexcept(int __excepts)
{
fenv_t __env;
@@ -107,7 +111,7 @@ feclearexcept(int __excepts)
return (0);
}
-static __inline int
+__fenv_static inline int
fegetexceptflag(fexcept_t *__flagp, int __excepts)
{
__uint32_t __mxcsr;
@@ -122,7 +126,7 @@ fegetexceptflag(fexcept_t *__flagp, int __excepts)
int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
int feraiseexcept(int __excepts);
-static __inline int
+__fenv_static inline int
fetestexcept(int __excepts)
{
__uint32_t __mxcsr;
@@ -133,7 +137,7 @@ fetestexcept(int __excepts)
return ((__status | __mxcsr) & __excepts);
}
-static __inline int
+__fenv_static inline int
fegetround(void)
{
__uint16_t __control;
@@ -148,7 +152,7 @@ fegetround(void)
return (__control & _ROUND_MASK);
}
-static __inline int
+__fenv_static inline int
fesetround(int __round)
{
__uint32_t __mxcsr;
@@ -173,7 +177,7 @@ fesetround(int __round)
int fegetenv(fenv_t *__envp);
int feholdexcept(fenv_t *__envp);
-static __inline int
+__fenv_static inline int
fesetenv(const fenv_t *__envp)
{
@@ -197,7 +201,8 @@ int feupdateenv(const fenv_t *__envp);
int feenableexcept(int __mask);
int fedisableexcept(int __mask);
-static __inline int
+/* We currently provide no external definition of fegetexcept(). */
+static inline int
fegetexcept(void)
{
__uint16_t __control;
OpenPOWER on IntegriCloud