diff mbox

Reimplement min_of_type using __MATH_TG [committed]

Message ID alpine.DEB.2.20.1708042133230.19430@digraph.polyomino.org.uk
State New
Headers show

Commit Message

Joseph Myers Aug. 4, 2017, 9:33 p.m. UTC
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.  Committed.

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.
diff mbox

Patch

diff --git a/sysdeps/generic/math_private.h b/sysdeps/generic/math_private.h
index f1da7c3..4d962e1 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;	\