gcc2: fix LDBL_MIN, LDBL_MAX, and LDBL_EPSILON

While the union trick used there gave the correct results, it made the
defines non-constants so they couldn't be used properly in some cases.

In particular, this makes the testsuite for gettext and some other GNU
packages fail as they explicitly test for these being constants.
This commit is contained in:
Adrien Destugues 2014-10-14 17:58:00 +02:00
parent c700a4fe64
commit 4319c0ca13

View File

@ -74,20 +74,13 @@
#define LDBL_DIG 18
/* Difference between 1.0 and the minimum long double greater than 1.0 */
#undef LDBL_EPSILON
#ifndef __LDBL_UNION__
#define __LDBL_UNION__
union __convert_long_double {
unsigned __convert_long_double_i[4];
long double __convert_long_double_d;
};
#endif
#define LDBL_EPSILON (__extension__ ((union __convert_long_double) {__convert_long_double_i: {0x0, 0x80000000, 0x3fc0, 0x0}}).__convert_long_double_d)
#define LDBL_EPSILON 0x1p-63l
/* Minimum int x such that FLT_RADIX**(x-1) is a normalised long double */
#undef LDBL_MIN_EXP
#define LDBL_MIN_EXP (-16381)
/* Minimum normalised long double */
#undef LDBL_MIN
#define LDBL_MIN (__extension__ ((union __convert_long_double) {__convert_long_double_i: {0x0, 0x80000000, 0x1, 0x0}}).__convert_long_double_d)
#define LDBL_MIN 0x1p-16382l
/* Minimum int x such that 10**x is a normalised long double */
#undef LDBL_MIN_10_EXP
#define LDBL_MIN_10_EXP (-4931)
@ -96,7 +89,7 @@ union __convert_long_double {
#define LDBL_MAX_EXP 16384
/* Maximum long double */
#undef LDBL_MAX
#define LDBL_MAX (__extension__ ((union __convert_long_double) {__convert_long_double_i: {0xffffffff, 0xffffffff, 0x107ffe, 0x0}}).__convert_long_double_d)
#define LDBL_MAX 0xfffffffffffffffp16320l
/* Maximum int x such that 10**x is a representable long double */
#undef LDBL_MAX_10_EXP
#define LDBL_MAX_10_EXP 4932