aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/sparc
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-03-19 15:12:50 -0700
committerDavid S. Miller <davem@davemloft.net>2012-03-19 15:12:50 -0700
commit5df98260fe6718703cef3b5d337ec9f5d41eb815 (patch)
tree3ea44d51e5406ffdd105b63f9c3bb839b0056c02 /sysdeps/sparc
parent4adaaafc9e0909107bb931d28fc2c48ce0a4de05 (diff)
downloadglibc-5df98260fe6718703cef3b5d337ec9f5d41eb815.tar
glibc-5df98260fe6718703cef3b5d337ec9f5d41eb815.tar.gz
glibc-5df98260fe6718703cef3b5d337ec9f5d41eb815.tar.bz2
glibc-5df98260fe6718703cef3b5d337ec9f5d41eb815.zip
Fix sparc build after math_private.h cleanups.
* sysdeps/sparc/fpu/fenv_private.h: New file. * sysdeps/sparc/fpu/math_private.h: Use it. (libc_feholdexcept, libc_feholdexceptf, libc_feholdexceptl): Remove. (libc_feholdexcept_setround, libc_feholdexcept_setroundf, (libc_feholdexcept_setroundl): Remove. (libc_fetestexcept, libc_fetestexceptf, libc_fetestexceptl): Remove. (libc_fesetenv, libc_fesetenvf, libc_fesetenvl): Remove. (libc_feupdateenv, libc_feupdateenvf, libc_feupdateenvf): Remove.
Diffstat (limited to 'sysdeps/sparc')
-rw-r--r--sysdeps/sparc/fpu/fenv_private.h106
-rw-r--r--sysdeps/sparc/fpu/math_private.h63
2 files changed, 107 insertions, 62 deletions
diff --git a/sysdeps/sparc/fpu/fenv_private.h b/sysdeps/sparc/fpu/fenv_private.h
new file mode 100644
index 0000000000..a6e8e95a55
--- /dev/null
+++ b/sysdeps/sparc/fpu/fenv_private.h
@@ -0,0 +1,106 @@
+#ifndef FENV_PRIVATE_H
+#define FENV_PRIVATE_H 1
+
+#include <fenv.h>
+
+static __always_inline void
+libc_feholdexcept (fenv_t *e)
+{
+ fenv_t etmp;
+ __fenv_stfsr(etmp);
+ *(e) = etmp;
+ etmp = etmp & ~((0x1f << 23) | FE_ALL_EXCEPT);
+ __fenv_ldfsr(etmp);
+}
+
+static __always_inline void
+libc_feholdexcept_setround (fenv_t *e, int r)
+{
+ fenv_t etmp;
+ __fenv_stfsr(etmp);
+ *(e) = etmp;
+ etmp = etmp & ~((0x1f << 23) | FE_ALL_EXCEPT);
+ etmp = (etmp & ~__FE_ROUND_MASK) | (r);
+ __fenv_ldfsr(etmp);
+}
+
+static __always_inline int
+libc_fetestexcept (int e)
+{
+ fenv_t etmp;
+ __fenv_stfsr(etmp);
+ return etmp & (e) & FE_ALL_EXCEPT;
+}
+
+static __always_inline void
+libc_fesetenv (fenv_t *e)
+{
+ __fenv_ldfsr(*e);
+}
+
+static __always_inline int
+libc_feupdateenv_test (fenv_t *e, int ex)
+{
+ fenv_t etmp;
+
+ __fenv_stfsr(etmp);
+ etmp &= FE_ALL_EXCEPT;
+
+ __fenv_ldfsr(*e);
+
+ __feraiseexcept (etmp);
+
+ return etmp & ex;
+}
+
+static __always_inline void
+libc_feupdateenv (fenv_t *e)
+{
+ libc_feupdateenv_test (e, 0);
+}
+
+static __always_inline void
+libc_feholdsetround (fenv_t *e, int r)
+{
+ fenv_t etmp;
+ __fenv_stfsr(etmp);
+ *(e) = etmp;
+ etmp = (etmp & ~__FE_ROUND_MASK) | (r);
+ __fenv_ldfsr(etmp);
+}
+
+static __always_inline void
+libc_feresetround (fenv_t *e)
+{
+ fenv_t etmp;
+ __fenv_stfsr(etmp);
+ etmp = (etmp & ~__FE_ROUND_MASK) | (*e & __FE_ROUND_MASK);
+ __fenv_ldfsr(etmp);
+}
+
+#define libc_feholdexceptf libc_feholdexcept
+#define libc_feholdexcept_setroundf libc_feholdexcept_setround
+#define libc_fetestexceptf libc_fetestexcept
+#define libc_fesetenvf libc_fesetenv
+#define libc_feupdateenv_testf libc_feupdateenv_test
+#define libc_feupdateenvf libc_feupdateenv
+#define libc_feholdsetroundf libc_feholdsetround
+#define libc_feresetroundf libc_feresetround
+#define libc_feholdexcept libc_feholdexcept
+#define libc_feholdexcept_setround libc_feholdexcept_setround
+#define libc_fetestexcept libc_fetestexcept
+#define libc_fesetenv libc_fesetenv
+#define libc_feupdateenv_test libc_feupdateenv_test
+#define libc_feupdateenv libc_feupdateenv
+#define libc_feholdsetround libc_feholdsetround
+#define libc_feresetround libc_feresetround
+#define libc_feholdexceptl libc_feholdexcept
+#define libc_feholdexcept_setroundl libc_feholdexcept_setround
+#define libc_fetestexceptl libc_fetestexcept
+#define libc_fesetenvl libc_fesetenv
+#define libc_feupdateenv_testl libc_feupdateenv_test
+#define libc_feupdateenvl libc_feupdateenv
+#define libc_feholdsetroundl libc_feholdsetround
+#define libc_feresetroundl libc_feresetround
+
+#endif /* FENV_PRIVATE_H */
diff --git a/sysdeps/sparc/fpu/math_private.h b/sysdeps/sparc/fpu/math_private.h
index 05ef623644..27946cec7b 100644
--- a/sysdeps/sparc/fpu/math_private.h
+++ b/sysdeps/sparc/fpu/math_private.h
@@ -1,68 +1,7 @@
#ifndef SPARC_MATH_PRIVATE_H
#define SPARC_MATH_PRIVATE_H 1
+#include "fenv_private.h"
#include_next <math_private.h>
-#include <fenv.h>
-
-#undef libc_feholdexcept
-#define libc_feholdexcept(e) \
- do { \
- fenv_t etmp; \
- __fenv_stfsr(etmp); \
- *(e) = etmp; \
- etmp = etmp & ~((0x1f << 23) | FE_ALL_EXCEPT); \
- __fenv_ldfsr(etmp); \
- } while (0)
-#undef libc_feholdexceptf
-#define libc_feholdexceptf(e) libc_feholdexcept (e)
-#undef libc_feholdexceptl
-#define libc_feholdexceptl(e) libc_feholdexcept (e)
-
-#undef libc_feholdexcept_setround
-#define libc_feholdexcept_setround(e, r) \
- do { \
- fenv_t etmp; \
- __fenv_stfsr(etmp); \
- *(e) = etmp; \
- etmp = etmp & ~((0x1f << 23) | FE_ALL_EXCEPT); \
- etmp = (etmp & ~__FE_ROUND_MASK) | (r); \
- __fenv_ldfsr(etmp); \
- } while (0)
-#undef libc_feholdexcept_setroundf
-#define libc_feholdexcept_setroundf(e, r) libc_feholdexcept_setround (e, r)
-#undef libc_feholdexcept_setroundl
-#define libc_feholdexcept_setroundl(e, r) libc_feholdexcept_setround (e, r)
-
-#undef libc_fetestexcept
-#define libc_fetestexcept(e) \
- ({ \
- fenv_t etmp; \
- __fenv_stfsr(etmp); \
- etmp & (e) & FE_ALL_EXCEPT; })
-#undef libc_fetestexceptf
-#define libc_fetestexceptf(e) libc_fetestexcept (e)
-#undef libc_fetestexceptl
-#define libc_fetestexceptl(e) libc_fetestexcept (e)
-
-#undef libc_fesetenv
-#define libc_fesetenv(e) \
- __fenv_ldfsr(*e)
-#undef libc_fesetenvf
-#define libc_fesetenvf(e) libc_fesetenv (e)
-#undef libc_fesetenvl
-#define libc_fesetenvl(e) libc_fesetenv (e)
-
-#undef libc_feupdateenv
-#define libc_feupdateenv(e) \
- do { \
- fenv_t etmp; \
- __fenv_stfsr(etmp); \
- __fenv_ldfsr(*e); \
- __feraiseexcept (etmp & FE_ALL_EXCEPT); \
- } while (0)
-#undef libc_feupdateenvf
-#define libc_feupdateenvf(e) libc_feupdateenv (e)
-#undef libc_feupdateenvl
-#define libc_feupdateenvl(e) libc_feupdateenv (e)
#endif /* SPARC_MATH_PRIVATE_H */