mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
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>
|
||||
|
||||
* sysdeps/x86/cpu-features.h [__ASSEMBLER__]
|
||||
|
@ -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; \
|
||||
|
Loading…
Reference in New Issue
Block a user