aboutsummaryrefslogtreecommitdiff
path: root/math
diff options
context:
space:
mode:
Diffstat (limited to 'math')
-rw-r--r--math/Makefile3
-rw-r--r--math/math.h42
2 files changed, 42 insertions, 3 deletions
diff --git a/math/Makefile b/math/Makefile
index e84f86a..576e108 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -27,7 +27,8 @@ headers := math.h bits/mathcalls.h bits/mathinline.h bits/huge_val.h \
fpu_control.h complex.h bits/cmathcalls.h fenv.h \
bits/fenv.h bits/fenvinline.h bits/mathdef.h tgmath.h \
bits/math-finite.h bits/math-vector.h \
- bits/libm-simd-decl-stubs.h bits/iscanonical.h
+ bits/libm-simd-decl-stubs.h bits/iscanonical.h \
+ bits/flt-eval-method.h
# FPU support code.
aux := setfpucw fpu_control
diff --git a/math/math.h b/math/math.h
index 75ccfc3..70bf8e5 100644
--- a/math/math.h
+++ b/math/math.h
@@ -54,13 +54,51 @@ __BEGIN_DECLS
# endif
#endif
-/* Get the architecture specific values describing the floating-point
- evaluation. The following symbols will get defined:
+/* Get __GLIBC_FLT_EVAL_METHOD. */
+#include <bits/flt-eval-method.h>
+
+#ifdef __USE_ISOC99
+/* Define the following typedefs.
float_t floating-point type at least as wide as `float' used
to evaluate `float' expressions
double_t floating-point type at least as wide as `double' used
to evaluate `double' expressions
+*/
+# if __GLIBC_FLT_EVAL_METHOD == 0 || __GLIBC_FLT_EVAL_METHOD == 16
+typedef float float_t;
+typedef double double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 1
+typedef double float_t;
+typedef double double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 2
+typedef long double float_t;
+typedef long double double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 32
+typedef _Float32 float_t;
+typedef double double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 33
+typedef _Float32x float_t;
+typedef _Float32x double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 64
+typedef _Float64 float_t;
+typedef _Float64 double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 65
+typedef _Float64x float_t;
+typedef _Float64x double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 128
+typedef _Float128 float_t;
+typedef _Float128 double_t;
+# elif __GLIBC_FLT_EVAL_METHOD == 129
+typedef _Float128x float_t;
+typedef _Float128x double_t;
+# else
+# error "Unknown __GLIBC_FLT_EVAL_METHOD"
+# endif
+#endif
+
+/* Get the architecture specific values describing the floating-point
+ evaluation. The following symbols will get defined:
FP_FAST_FMA
FP_FAST_FMAF