aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2017-08-04 21:32:57 +0000
committerJoseph Myers <joseph@codesourcery.com>2017-08-04 21:32:57 +0000
commit219dd320d69deb9068f6b2ce46034d0eb4db888a (patch)
treeb882637bdd0e9b84688da36c352dd200115fec3e
parent64d4dea6cdcd908ea43a0eed5fc6262b1c6c205a (diff)
downloadglibc-219dd320d69deb9068f6b2ce46034d0eb4db888a.tar
glibc-219dd320d69deb9068f6b2ce46034d0eb4db888a.tar.gz
glibc-219dd320d69deb9068f6b2ce46034d0eb4db888a.tar.bz2
glibc-219dd320d69deb9068f6b2ce46034d0eb4db888a.zip
Reimplement min_of_type using __MATH_TG.
This patch reimplements the libm-internal min_of_type macro to use __MATH_TG instead of its own local type-generic implementation, so simplifying the code and reducing the number of different type-generic implementation variants in use in glibc. Tested for x86_64. * sysdeps/generic/math_private.h (__EXPR_FLT128): Remove macro. (min_of_type_f): New macro. (min_of_type_): Likewise. (min_of_type_l): Likewise. (min_of_type_f128): Likewise. (min_of_type): Define using __MATH_TG and taking an expression argument. (math_check_force_underflow): Pass expression instead of type to min_of_type. (math_check_force_underflow_nonneg): Likewise.
-rw-r--r--ChangeLog13
-rw-r--r--sysdeps/generic/math_private.h26
2 files changed, 21 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 0909e4d77a..7cee945879 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2017-08-04 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/generic/math_private.h (__EXPR_FLT128): Remove macro.
+ (min_of_type_f): New macro.
+ (min_of_type_): Likewise.
+ (min_of_type_l): Likewise.
+ (min_of_type_f128): Likewise.
+ (min_of_type): Define using __MATH_TG and taking an expression
+ argument.
+ (math_check_force_underflow): Pass expression instead of type to
+ min_of_type.
+ (math_check_force_underflow_nonneg): Likewise.
+
2017-08-04 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/x86/cpu-features.h [__ASSEMBLER__]
diff --git a/sysdeps/generic/math_private.h b/sysdeps/generic/math_private.h
index f1da7c3f06..4d962e1d09 100644
--- a/sysdeps/generic/math_private.h
+++ b/sysdeps/generic/math_private.h
@@ -301,24 +301,14 @@ extern void __docos (double __x, double __dx, double __v[]);
})
#endif
-#if __HAVE_DISTINCT_FLOAT128
-# define __EXPR_FLT128(x, yes, no) \
- __builtin_choose_expr (__builtin_types_compatible_p \
- (x, long double), no, yes)
-#else
-# define __EXPR_FLT128(x, yes, no) no
-#endif
-
-
#define fabs_tg(x) __MATH_TG ((x), (__typeof (x)) __builtin_fabs, (x))
-#define min_of_type(type) __builtin_choose_expr \
- (__builtin_types_compatible_p (type, float), \
- FLT_MIN, \
- __builtin_choose_expr \
- (__builtin_types_compatible_p (type, double), \
- DBL_MIN, \
- __EXPR_FLT128 (type, FLT128_MIN, LDBL_MIN)))
+#define min_of_type_f FLT_MIN
+#define min_of_type_ DBL_MIN
+#define min_of_type_l LDBL_MIN
+#define min_of_type_f128 FLT128_MIN
+
+#define min_of_type(x) __MATH_TG ((x), (__typeof (x)) min_of_type_, )
/* If X (which is not a NaN) is subnormal, force an underflow
exception. */
@@ -327,7 +317,7 @@ extern void __docos (double __x, double __dx, double __v[]);
{ \
__typeof (x) force_underflow_tmp = (x); \
if (fabs_tg (force_underflow_tmp) \
- < min_of_type (__typeof (force_underflow_tmp))) \
+ < min_of_type (force_underflow_tmp)) \
{ \
__typeof (force_underflow_tmp) force_underflow_tmp2 \
= force_underflow_tmp * force_underflow_tmp; \
@@ -341,7 +331,7 @@ extern void __docos (double __x, double __dx, double __v[]);
{ \
__typeof (x) force_underflow_tmp = (x); \
if (force_underflow_tmp \
- < min_of_type (__typeof (force_underflow_tmp))) \
+ < min_of_type (force_underflow_tmp)) \
{ \
__typeof (force_underflow_tmp) force_underflow_tmp2 \
= force_underflow_tmp * force_underflow_tmp; \