2004-10-06 Jakub Jelinek * config/os/gnu-linux/bits/os_defines.h: Define __glibcpp_{float,double,long_double}* macros. * config/cpu/x86-64/bits/cpu_limits.h (__glibcpp_long_bits): Only define to 64 if __x86_64__. * include/std/std_limits.h (__glibcpp_f*_round_error): Only define if not yet defined. --- libstdc++-v3/config/os/gnu-linux/bits/os_defines.h.jj 2002-06-03 17:33:17.000000000 +0200 +++ libstdc++-v3/config/os/gnu-linux/bits/os_defines.h 2004-10-06 20:07:16.601101686 +0200 @@ -73,4 +73,87 @@ typedef __loff_t __off64_t; #define __glibcpp_long_double_bits 64 #endif +/* RHEL3 hack. */ +#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(__IBMCPP__) \ + && (defined(__i386__) || defined(__x86_64__) || defined(__ia64__) \ + || defined(__s390__) || defined(__s390x__) || defined(__powerpc__) \ + || defined(__powerpc64__)) +#define __glibcpp_float_has_quiet_NaN true +#define __glibcpp_float_has_signaling_NaN true +#define __glibcpp_float_has_denorm denorm_present +#define __glibcpp_float_has_infinity true +#define __glibcpp_float_round_style round_to_nearest +#define __glibcpp_float_is_iec559 true +#define __glibcpp_double_has_quiet_NaN true +#define __glibcpp_double_has_signaling_NaN true +#define __glibcpp_double_has_denorm denorm_present +#define __glibcpp_double_has_infinity true +#define __glibcpp_double_round_style round_to_nearest +#define __glibcpp_double_is_iec559 true +#define __glibcpp_long_double_has_quiet_NaN true +#define __glibcpp_long_double_has_signaling_NaN true +#define __glibcpp_long_double_has_denorm denorm_present +#define __glibcpp_long_double_has_infinity true +#define __glibcpp_long_double_round_style round_to_nearest +#define __glibcpp_long_double_is_iec559 true + +#define __glibcpp_f32_round_error 0.5F +#define __glibcpp_f64_round_error 0.5 +#define __glibcpp_f80_round_error 0.5L +#define __glibcpp_f96_round_error 0.5L +#define __glibcpp_f128_round_error 0.5L + +#define __glibcpp_float_infinity 1.0e+40F +#define __glibcpp_double_infinity 1.0e+320 +#define __glibcpp_long_double_infinity 1.0e+5000L + +#define __glibcpp_float_denorm_min 1.40129846e-45F +#define __glibcpp_double_denorm_min 4.9406564584124654e-324 + +#define __glibcpp_float_quiet_NaN \ + (__extension__ ((union { unsigned int __l; float __d; }) \ + { __l: 0x7fc00000 }).__d) +#define __glibcpp_double_quiet_NaN \ + (__extension__ ((union { unsigned long long __l; double __d; }) \ + { __l: 0x7ff8000000000000ULL }).__d) + +#define __glibcpp_float_signaling_NaN \ + (__extension__ ({ union { unsigned int __l; float __d; } __u; \ + __u.__l = 0x7fa00000; \ + __asm ("" : : "r" (&__u) : "memory"); __u.__d; })) +#define __glibcpp_double_signaling_NaN \ + (__extension__ ({ union { unsigned long long __l; double __d; } __u; \ + __u.__l = 0x7ff4000000000000ULL; \ + __asm ("" : : "r" (&__u) : "memory"); __u.__d; })) + +#if __glibcpp_long_double_bits == 80 + +#define __glibcpp_long_double_denorm_min 3.64519953188247460253e-4951L +#define __glibcpp_long_double_quiet_NaN \ + (__extension__ ({ union { unsigned long long __l[2]; \ + long double __d; } __u; \ + __u.__l[0] = 0xcULL << 60; __u.__l[1] = 0x7fff; \ + __u.__d; })) +#define __glibcpp_long_double_signaling_NaN \ + (__extension__ ({ union { unsigned long long __l[2]; \ + long double __d; } __u; \ + __u.__l[0] = 0xaULL << 60; __u.__l[1] = 0x7fff; \ + __asm ("" : : "r" (&__u) : "memory"); __u.__d; })) + +#else + +#define __glibcpp_long_double_denorm_min 4.9406564584124654e-324L +#define __glibcpp_long_double_quiet_NaN \ + (__extension__ ((union { unsigned long long __l; long double __d; }) \ + { __l: 0x7ff8000000000000ULL }).__d) +#define __glibcpp_long_double_signaling_NaN \ + (__extension__ ({ union { unsigned long long __l; \ + long double __d; } __u; \ + __u.__l = 0x7ff4000000000000ULL; \ + __asm ("" : : "r" (&__u) : "memory"); __u.__d; })) + +#endif + +#endif + #endif --- libstdc++-v3/config/cpu/x86-64/bits/cpu_limits.h.jj 2002-01-12 23:14:42.000000000 +0100 +++ libstdc++-v3/config/cpu/x86-64/bits/cpu_limits.h 2004-10-06 17:13:39.369189090 +0200 @@ -28,7 +28,9 @@ #ifndef _GLIBCPP_CPU_LIMITS #define _GLIBCPP_CPU_LIMITS 1 +#ifdef __x86_64__ #define __glibcpp_long_bits 64 +#endif #define __glibcpp_long_double_bits 80 --- libstdc++-v3/include/std/std_limits.h.jj 2002-10-16 16:12:23.000000000 +0200 +++ libstdc++-v3/include/std/std_limits.h 2004-10-06 19:59:26.602318867 +0200 @@ -180,7 +180,9 @@ #define __glibcpp_f32_digits10 6 #define __glibcpp_f32_radix 2 #define __glibcpp_f32_epsilon 1.19209290e-07F +#ifndef __glibcpp_f32_round_error #define __glibcpp_f32_round_error 1.0F +#endif #define __glibcpp_f32_min_exponent -125 #define __glibcpp_f32_min_exponent10 -37 #define __glibcpp_f32_max_exponent 128 @@ -191,7 +193,9 @@ #define __glibcpp_f64_digits10 15 #define __glibcpp_f64_radix 2 #define __glibcpp_f64_epsilon 2.2204460492503131e-16 +#ifndef __glibcpp_f64_round_error #define __glibcpp_f64_round_error 1.0 +#endif #define __glibcpp_f64_min_exponent -1021 #define __glibcpp_f64_min_exponent10 -307 #define __glibcpp_f64_max_exponent 1024 @@ -202,7 +206,9 @@ #define __glibcpp_f80_digits10 18 #define __glibcpp_f80_radix 2 #define __glibcpp_f80_epsilon 1.08420217248550443401e-19L +#ifndef __glibcpp_f80_round_error #define __glibcpp_f80_round_error 1.0L +#endif #define __glibcpp_f80_min_exponent -16381 #define __glibcpp_f80_min_exponent10 -4931 #define __glibcpp_f80_max_exponent 16384 @@ -213,7 +219,9 @@ #define __glibcpp_f96_digits10 18 #define __glibcpp_f96_radix 2 #define __glibcpp_f96_epsilon 1.08420217248550443401e-19L +#ifndef __glibcpp_f96_round_error #define __glibcpp_f96_round_error 1.0L +#endif #define __glibcpp_f96_min_exponent -16382 #define __glibcpp_f96_min_exponent10 -4931 #define __glibcpp_f96_max_exponent 16384 @@ -224,7 +232,9 @@ #define __glibcpp_f128_digits10 33 #define __glibcpp_f128_radix 2 #define __glibcpp_f128_epsilon 1.925929944387235853055977942584927319E-34L +#ifndef __glibcpp_f128_round_error #define __glibcpp_f128_round_error 1.0L +#endif #define __glibcpp_f128_min_exponent -16381 #define __glibcpp_f128_min_exponent10 -4931 #define __glibcpp_f128_max_exponent 16384