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.
This commit is contained in:
parent
64d4dea6cd
commit
219dd320d6
13
ChangeLog
13
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>
|
2017-08-04 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* sysdeps/x86/cpu-features.h [__ASSEMBLER__]
|
* sysdeps/x86/cpu-features.h [__ASSEMBLER__]
|
||||||
|
@ -301,24 +301,14 @@ extern void __docos (double __x, double __dx, double __v[]);
|
|||||||
})
|
})
|
||||||
#endif
|
#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 fabs_tg(x) __MATH_TG ((x), (__typeof (x)) __builtin_fabs, (x))
|
||||||
|
|
||||||
#define min_of_type(type) __builtin_choose_expr \
|
#define min_of_type_f FLT_MIN
|
||||||
(__builtin_types_compatible_p (type, float), \
|
#define min_of_type_ DBL_MIN
|
||||||
FLT_MIN, \
|
#define min_of_type_l LDBL_MIN
|
||||||
__builtin_choose_expr \
|
#define min_of_type_f128 FLT128_MIN
|
||||||
(__builtin_types_compatible_p (type, double), \
|
|
||||||
DBL_MIN, \
|
#define min_of_type(x) __MATH_TG ((x), (__typeof (x)) min_of_type_, )
|
||||||
__EXPR_FLT128 (type, FLT128_MIN, LDBL_MIN)))
|
|
||||||
|
|
||||||
/* If X (which is not a NaN) is subnormal, force an underflow
|
/* If X (which is not a NaN) is subnormal, force an underflow
|
||||||
exception. */
|
exception. */
|
||||||
@ -327,7 +317,7 @@ extern void __docos (double __x, double __dx, double __v[]);
|
|||||||
{ \
|
{ \
|
||||||
__typeof (x) force_underflow_tmp = (x); \
|
__typeof (x) force_underflow_tmp = (x); \
|
||||||
if (fabs_tg (force_underflow_tmp) \
|
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 \
|
__typeof (force_underflow_tmp) force_underflow_tmp2 \
|
||||||
= force_underflow_tmp * force_underflow_tmp; \
|
= 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); \
|
__typeof (x) force_underflow_tmp = (x); \
|
||||||
if (force_underflow_tmp \
|
if (force_underflow_tmp \
|
||||||
< min_of_type (__typeof (force_underflow_tmp))) \
|
< min_of_type (force_underflow_tmp)) \
|
||||||
{ \
|
{ \
|
||||||
__typeof (force_underflow_tmp) force_underflow_tmp2 \
|
__typeof (force_underflow_tmp) force_underflow_tmp2 \
|
||||||
= force_underflow_tmp * force_underflow_tmp; \
|
= force_underflow_tmp * force_underflow_tmp; \
|
||||||
|
Loading…
Reference in New Issue
Block a user