From: Richard Henderson Date: Mon, 16 Sep 2002 16:58:42 +0000 (-0700) Subject: c-common.c (builtin_define_float_constants): Emit __FOO_DENORM_MIN__. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ac520ec919a6794a954d007ba1987a5cd73b8239;p=gcc.git c-common.c (builtin_define_float_constants): Emit __FOO_DENORM_MIN__. gcc/ * c-common.c (builtin_define_float_constants): Emit __FOO_DENORM_MIN__. libstdc++/ * include/std/std_limits.h (__glibcpp_f32_denorm_min_bytes, __glibcpp_f32_has_denorm, __glibcpp_f64_denorm_min_bytes, __glibcpp_f64_has_denorm, __glibcpp_f80_denorm_min_bytes, __glibcpp_f80_has_denorm, __glibcpp_f96_denorm_min_bytes, __glibcpp_f96_has_denorm, __glibcpp_f128_denorm_min_bytes, __glibcpp_f128_has_denorm, __glibcpp_float_denorm_min_bytes, __glibcpp_float_has_denorm, __glibcpp_double_denorm_min_bytes, __glibcpp_double_has_denorm, __glibcpp_long_double_denorm_min_bytes, __glibcpp_long_double_has_denorm): Remove. (__glibcpp_float_denorm_min, __glibcpp_double_denorm_min, __glibcpp_long_double_denorm_min): Remove. (std::numeric_limits::has_denorm): Use __FLT_DENORM_MIN__. (std::numeric_limits::denorm_min): Likewise. (std::numeric_limits): Similarly. (std::numeric_limits): Similarly. * src/limits.cc (__glibcpp_float_denorm_min, __glibcpp_double_denorm_min, __glibcpp_long_double_denorm_min): Remove. From-SVN: r57200 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a54214ca7ae..c9c74bcae57 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2002-09-16 Richard Henderson + + * c-common.c (builtin_define_float_constants): Emit __FOO_DENORM_MIN__. + 2002-09-16 Richard Henderson * real.c, real.h: Rewrite from scratch. diff --git a/gcc/c-common.c b/gcc/c-common.c index 34941e008ae..bdb8a5819d4 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -5048,6 +5048,13 @@ builtin_define_float_constants (name_prefix, fp_suffix, type) sprintf (name, "__%s_EPSILON__", name_prefix); sprintf (buf, "0x1p%d", (1 - mant_dig) * log2_b); builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix); + + /* For C++ std::numeric_limits::denorm_min. The minimum denormalized + positive floating-point number, b**(min_exp-p). Winds up being zero + for targets that don't support denormals. */ + sprintf (name, "__%s_DENORM_MIN__", name_prefix); + sprintf (buf, "0x1p%d", (min_exp - mant_dig) * log2_b); + builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix); } /* Hook that registers front end and target-specific built-ins. */ diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 6bb38f07377..113a0df6bd0 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,23 @@ +2002-09-16 Richard Henderson + + * include/std/std_limits.h (__glibcpp_f32_denorm_min_bytes, + __glibcpp_f32_has_denorm, __glibcpp_f64_denorm_min_bytes, + __glibcpp_f64_has_denorm, __glibcpp_f80_denorm_min_bytes, + __glibcpp_f80_has_denorm, __glibcpp_f96_denorm_min_bytes, + __glibcpp_f96_has_denorm, __glibcpp_f128_denorm_min_bytes, + __glibcpp_f128_has_denorm, __glibcpp_float_denorm_min_bytes, + __glibcpp_float_has_denorm, __glibcpp_double_denorm_min_bytes, + __glibcpp_double_has_denorm, __glibcpp_long_double_denorm_min_bytes, + __glibcpp_long_double_has_denorm): Remove. + (__glibcpp_float_denorm_min, __glibcpp_double_denorm_min, + __glibcpp_long_double_denorm_min): Remove. + (std::numeric_limits::has_denorm): Use __FLT_DENORM_MIN__. + (std::numeric_limits::denorm_min): Likewise. + (std::numeric_limits): Similarly. + (std::numeric_limits): Similarly. + * src/limits.cc (__glibcpp_float_denorm_min, + __glibcpp_double_denorm_min, __glibcpp_long_double_denorm_min): Remove. + 2002-09-13 Andy Felt * docs/html/17_intro/howto.html: Update link. diff --git a/libstdc++-v3/include/std/std_limits.h b/libstdc++-v3/include/std/std_limits.h index 320c3ab10c9..34a3f761387 100644 --- a/libstdc++-v3/include/std/std_limits.h +++ b/libstdc++-v3/include/std/std_limits.h @@ -156,8 +156,6 @@ # define __glibcpp_f32_has_QNaN true # define __glibcpp_f32_SNaN_bytes { 0x7f800001 } # define __glibcpp_f32_has_SNaN true -# define __glibcpp_f32_denorm_min_bytes { 0x00000001 } -# define __glibcpp_f32_has_denorm denorm_present # define __glibcpp_f32_is_iec559 true #endif #ifndef __glibcpp_f32_QNaN_bytes @@ -168,10 +166,6 @@ # define __glibcpp_f32_SNaN_bytes { } # define __glibcpp_f32_has_SNaN false #endif -#ifndef __glibcpp_f32_denorm_min_bytes -# define __glibcpp_f32_denorm_min_bytes { } -# define __glibcpp_f32_has_denorm denorm_indeterminate -#endif #ifndef __glibcpp_f32_is_iec559 # define __glibcpp_f32_is_iec559 false #endif @@ -180,15 +174,12 @@ # if __TARGET_FLOAT_WORDS_ORDER__ == __GCC_BIG_ENDIAN__ # define __glibcpp_f64_QNaN_bytes { 0x7ff80000, 0x0 } # define __glibcpp_f64_SNaN_bytes { 0x7ff00000, 0x1 } -# define __glibcpp_f64_denorm_min_bytes { 0x0, 0x1 } # else # define __glibcpp_f64_QNaN_bytes { 0x0, 0x7ff80000 } # define __glibcpp_f64_SNaN_bytes { 0x1, 0x7ff00000 } -# define __glibcpp_f64_denorm_min_bytes { 0x1, 0x0 } # endif # define __glibcpp_f64_has_QNaN true # define __glibcpp_f64_has_SNaN true -# define __glibcpp_f64_has_denorm denorm_present # define __glibcpp_f64_is_iec559 true #endif #ifndef __glibcpp_f64_QNaN_bytes @@ -199,10 +190,6 @@ # define __glibcpp_f64_SNaN_bytes { } # define __glibcpp_f64_has_SNaN false #endif -#ifndef __glibcpp_f64_denorm_min_bytes -# define __glibcpp_f64_denorm_min_bytes { } -# define __glibcpp_f64_has_denorm denorm_indeterminate -#endif #ifndef __glibcpp_f64_is_iec559 # define __glibcpp_f64_is_iec559 false #endif @@ -213,19 +200,14 @@ { 0x7f, 0xff, 0xC0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } # define __glibcpp_f80_SNaN_bytes \ { 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 } -# define __glibcpp_f80_denorm_min_bytes \ - { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 } # else # define __glibcpp_f80_QNaN_bytes \ { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC0, 0xff, 0x7f } # define __glibcpp_f80_SNaN_bytes \ { 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0xff, 0x7f } -# define __glibcpp_f80_denorm_min_bytes \ - { 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } # endif # define __glibcpp_f80_has_QNaN true # define __glibcpp_f80_has_SNaN true -# define __glibcpp_f80_has_denorm denorm_present # define __glibcpp_f80_is_iec559 true #endif #ifndef __glibcpp_f80_QNaN_bytes @@ -236,10 +218,6 @@ # define __glibcpp_f80_SNaN_bytes { } # define __glibcpp_f80_has_SNaN false #endif -#ifndef __glibcpp_f80_denorm_min_bytes -# define __glibcpp_f80_denorm_min_bytes { } -# define __glibcpp_f80_has_denorm denorm_indeterminate -#endif #ifndef __glibcpp_f80_is_iec559 # define __glibcpp_f80_is_iec559 false #endif @@ -248,15 +226,12 @@ # if __TARGET_BYTES_ORDER__ == __GCC_BIG_ENDIAN__ # define __glibcpp_f96_QNaN_bytes { 0x7ff80000, 0x0, 0x0 } # define __glibcpp_f96_SNaN_bytes { 0x7ff00000, 0x0, 0x1 } -# define __glibcpp_f96_denorm_min_bytes { 0x0, 0x0, 0x1 } # else # define __glibcpp_f96_QNaN_bytes { 0x0, 0x0, 0x7ff80000 } # define __glibcpp_f96_SNaN_bytes { 0x1, 0x0, 0x7ff00000 } -# define __glibcpp_f96_denorm_min_bytes { 0x1, 0x0, 0x0 } # endif # define __glibcpp_f96_has_QNaN true # define __glibcpp_f96_has_SNaN true -# define __glibcpp_f96_has_denorm denorm_present # define __glibcpp_f96_is_iec559 true #endif #ifndef __glibcpp_f96_QNaN_bytes @@ -267,24 +242,17 @@ # define __glibcpp_f96_SNaN_bytes { } # define __glibcpp_f96_has_SNaN false #endif -#ifndef __glibcpp_f96_denorm_min_bytes -# define __glibcpp_f96_denorm_min_bytes { } -# define __glibcpp_f96_has denorm_indeterminate -#endif #define __glibcpp_f128_round_error 1.0L #if __GCC_FLOAT_FORMAT__ == __IEEE_FORMAT__ # if __TARGET_FLOAT_WORDS_ORDER__ == __GCC_BIG_ENDIAN__ # define __glibcpp_f128_QNaN_bytes { 0x7fff0800, 0x0, 0x0, 0x0 } # define __glibcpp_f128_SNaN_bytes { 0x7fff0000, 0x0, 0x0, 0x1 } -# define __glibcpp_f128_denorm_min_bytes { 0x0, 0x0, 0x0, 0x1 } # else # define __glibcpp_f128_QNaN_bytes { 0x0, 0x0, 0x0, 0x7fff0800 } # define __glibcpp_f128_SNaN_bytes { 0x1, 0x0, 0x0, 0x7fff0000 } -# define __glibcpp_f128_denorm_min_bytes { 0x1, 0x0, 0x0, 0x0 } # endif # define __glibcpp_f128_has_QNaN true # define __glibcpp_f128_has_SNaN true -# define __glibcpp_f128_has_denorm denorm_present #endif #ifndef __glibcpp_f128_QNaN_bytes # define __glibcpp_f128_QNaN_bytes { } @@ -294,10 +262,6 @@ # define __glibcpp_f128_SNaN_bytes { } # define __glibcpp_f128_has_SNaN false #endif -#ifndef __glibcpp_f128_denorm_min_bytes -# define __glibcpp_f128_denorm_min_bytes { } -# define __glibcpp_f128_has_denorm denorm_indeterminate -#endif #ifndef __glibcpp_f128_is_iec559 # define __glibcpp_f128_is_iec559 false #endif @@ -625,28 +589,22 @@ # define __glibcpp_float_round_error __glibcpp_f32_round_error # define __glibcpp_float_QNaN_bytes __glibcpp_f32_QNaN_bytes # define __glibcpp_float_SNaN_bytes __glibcpp_f32_SNaN_bytes -# define __glibcpp_float_denorm_min_bytes __glibcpp_f32_denorm_min_bytes # define __glibcpp_float_has_QNaN __glibcpp_f32_has_QNaN # define __glibcpp_float_has_SNaN __glibcpp_f32_has_SNaN -# define __glibcpp_float_has_denorm __glibcpp_f32_has_denorm # define __glibcpp_float_is_iec559 __glibcpp_f32_is_iec559 #elif __FLOAT_BIT__ == 64 # define __glibcpp_float_round_error __glibcpp_f64_round_error # define __glibcpp_float_QNaN_bytes __glibcpp_f64_QNaN_bytes # define __glibcpp_float_SNaN_bytes __glibcpp_f64_SNaN_bytes -# define __glibcpp_float_denorm_min_bytes __glibcpp_f64_denorm_min_bytes # define __glibcpp_float_has_QNaN __glibcpp_f64_has_QNaN # define __glibcpp_float_has_SNaN __glibcpp_f64_has_SNaN -# define __glibcpp_float_has_denorm __glibcpp_f64_has_denorm # define __glibcpp_float_is_iec559 __glibcpp_f64_is_iec559 #elif __FLOAT_BIT__ == 80 # define __glibcpp_float_round_error __glibcpp_f80_round_error # define __glibcpp_float_QNaN_bytes __glibcpp_f80_QNaN_bytes # define __glibcpp_float_SNaN_bytes __glibcpp_f80_SNaN_bytes -# define __glibcpp_float_denorm_min_bytes __glibcpp_f80_denorm_min_bytes # define __glibcpp_float_has_QNaN __glibcpp_f80_has_QNaN # define __glibcpp_float_has_SNaN __glibcpp_f80_has_SNaN -# define __glibcpp_float_has_denorm __glibcpp_f80_has_denorm # define __glibcpp_float_is_iec559 __glibcpp_f80_is_iec559 #else // You must define these macros in the configuration file. @@ -664,11 +622,6 @@ # define __glibcpp_float_has_SNaN false #endif -#ifndef __glibcpp_float_denorm_min_bytes -# define __glibcpp_float_denorm_min_bytes { } -# define __glibcpp_float_has_denorm denorm_indeterminate -#endif - #ifndef __glibcpp_float_has_denorm_loss # define __glibcpp_float_has_denorm_loss false #endif @@ -703,28 +656,22 @@ # define __glibcpp_double_round_error __glibcpp_f32_round_error # define __glibcpp_double_QNaN_bytes __glibcpp_f32_QNaN_bytes # define __glibcpp_double_SNaN_bytes __glibcpp_f32_SNaN_bytes -# define __glibcpp_double_denorm_min_bytes __glibcpp_f32_denorm_min_bytes # define __glibcpp_double_has_QNaN __glibcpp_f32_has_QNaN # define __glibcpp_double_has_SNaN __glibcpp_f32_has_SNaN -# define __glibcpp_double_has_denorm __glibcpp_f32_has_denorm # define __glibcpp_double_is_iec559 __glibcpp_f32_is_iec559 #elif __DOUBLE_BIT__ == 64 # define __glibcpp_double_round_error __glibcpp_f64_round_error # define __glibcpp_double_QNaN_bytes __glibcpp_f64_QNaN_bytes # define __glibcpp_double_SNaN_bytes __glibcpp_f64_SNaN_bytes -# define __glibcpp_double_denorm_min_bytes __glibcpp_f64_denorm_min_bytes # define __glibcpp_double_has_QNaN __glibcpp_f64_has_QNaN # define __glibcpp_double_has_SNaN __glibcpp_f64_has_SNaN -# define __glibcpp_double_has_denorm __glibcpp_f64_has_denorm # define __glibcpp_double_is_iec559 __glibcpp_f64_is_iec559 #elif __DOUBLE_BIT__ == 80 # define __glibcpp_double_round_error __glibcpp_f80_round_error # define __glibcpp_double_QNaN_bytes __glibcpp_f80_QNaN_bytes # define __glibcpp_double_SNaN_bytes __glibcpp_f80_SNaN_bytes -# define __glibcpp_double_denorm_min_bytes __glibcpp_f80_denorm_min_bytes # define __glibcpp_double_has_QNaN __glibcpp_f80_has_QNaN # define __glibcpp_double_has_SNaN __glibcpp_f80_has_SNaN -# define __glibcpp_double_has_denorm __glibcpp_f80_has_denorm # define __glibcpp_double_is_iec559 __glibcpp_f80_is_iec559 #else // You must define these macros in the configuration file. @@ -742,11 +689,6 @@ # define __glibcpp_double_has_SNaN false #endif -#ifndef __glibcpp_double_denorm_min_bytes -# define __glibcpp_double_denorm_min_bytes { } -# define __glibcpp_double_has_denorm denorm_indeterminate -#endif - #ifndef __glibcpp_double_has_denorm_loss # define __glibcpp_double_has_denorm_loss false #endif @@ -781,46 +723,36 @@ # define __glibcpp_long_double_round_error __glibcpp_f32_round_error # define __glibcpp_long_double_QNaN_bytes __glibcpp_f32_QNaN_bytes # define __glibcpp_long_double_SNaN_bytes __glibcpp_f32_SNaN_bytes -# define __glibcpp_long_double_denorm_min_bytes __glibcpp_f32_denorm_min_bytes # define __glibcpp_long_double_has_QNaN __glibcpp_f32_has_QNaN # define __glibcpp_long_double_has_SNaN __glibcpp_f32_has_SNaN -# define __glibcpp_long_double_has_denorm __glibcpp_f32_has_denorm # define __glibcpp_long_double_is_iec559 __glibcpp_f32_is_iec559 #elif __LONG_DOUBLE_BIT__ == 64 # define __glibcpp_long_double_round_error __glibcpp_f64_round_error # define __glibcpp_long_double_QNaN_bytes __glibcpp_f64_QNaN_bytes # define __glibcpp_long_double_SNaN_bytes __glibcpp_f64_SNaN_bytes -# define __glibcpp_long_double_denorm_min_bytes __glibcpp_f64_denorm_min_bytes # define __glibcpp_long_double_has_QNaN __glibcpp_f64_has_QNaN # define __glibcpp_long_double_has_SNaN __glibcpp_f64_has_SNaN -# define __glibcpp_long_double_has_denorm __glibcpp_f64_has_denorm # define __glibcpp_long_double_is_iec559 __glibcpp_f64_is_iec559 #elif __LONG_DOUBLE_BIT__ == 80 # define __glibcpp_long_double_round_error __glibcpp_f80_round_error # define __glibcpp_long_double_QNaN_bytes __glibcpp_f80_QNaN_bytes # define __glibcpp_long_double_SNaN_bytes __glibcpp_f80_SNaN_bytes -# define __glibcpp_long_double_denorm_min_bytes __glibcpp_f80_denorm_min_bytes # define __glibcpp_long_double_has_QNaN __glibcpp_f80_has_QNaN # define __glibcpp_long_double_has_SNaN __glibcpp_f80_has_SNaN -# define __glibcpp_long_double_has_denorm __glibcpp_f80_has_denorm # define __glibcpp_long_double_is_iec559 __glibcpp_f80_is_iec559 #elif __LONG_DOUBLE_BIT__ == 96 # define __glibcpp_long_double_round_error __glibcpp_f96_round_error # define __glibcpp_long_double_QNaN_bytes __glibcpp_f96_QNaN_bytes # define __glibcpp_long_double_SNaN_bytes __glibcpp_f96_SNaN_bytes -# define __glibcpp_long_double_denorm_min_bytes __glibcpp_f96_denorm_min_bytes # define __glibcpp_long_double_has_QNaN __glibcpp_f96_has_QNaN # define __glibcpp_long_double_has_SNaN __glibcpp_f96_has_SNaN -# define __glibcpp_long_double_has_denorm __glibcpp_f96_has_denorm # define __glibcpp_long_double_is_iec559 __glibcpp_f96_is_iec559 #elif __LONG_DOUBLE_BIT__ == 128 # define __glibcpp_long_double_round_error __glibcpp_f128_round_error # define __glibcpp_long_double_QNaN_bytes __glibcpp_f128_QNaN_bytes # define __glibcpp_long_double_SNaN_bytes __glibcpp_f128_SNaN_bytes -# define __glibcpp_long_double_denorm_min_bytes __glibcpp_f128_denorm_min_bytes # define __glibcpp_long_double_has_QNaN __glibcpp_f128_has_QNaN # define __glibcpp_long_double_has_SNaN __glibcpp_f128_has_SNaN -# define __glibcpp_long_double_has_denorm __glibcpp_f128_has_denorm # define __glibcpp_long_double_is_iec559 __glibcpp_f128_is_iec559 #else // You must define these macros in the configuration file. @@ -838,11 +770,6 @@ # define __glibcpp_long_double_has_SNaN false #endif -#ifndef __glibcpp_long_double_denorm_min_bytes -# define __glibcpp_long_double_denorm_min_bytes { } -# define __glibcpp_long_double_has_denorm denorm_indeterminate -#endif - #ifndef __glibcpp_long_double_has_denorm_loss # define __glibcpp_long_double_has_denorm_loss false #endif @@ -918,15 +845,12 @@ namespace std extern const __float_storage __glibcpp_float_QNaN; extern const __float_storage __glibcpp_float_SNaN; - extern const __float_storage __glibcpp_float_denorm_min; extern const __double_storage __glibcpp_double_QNaN; extern const __double_storage __glibcpp_double_SNaN; - extern const __double_storage __glibcpp_double_denorm_min; extern const __long_double_storage __glibcpp_long_double_QNaN; extern const __long_double_storage __glibcpp_long_double_SNaN; - extern const __long_double_storage __glibcpp_long_double_denorm_min; enum float_round_style { @@ -1758,7 +1682,8 @@ namespace std = __builtin_huge_valf () / 2 == __builtin_huge_valf (); static const bool has_quiet_NaN = __glibcpp_float_has_QNaN; static const bool has_signaling_NaN = __glibcpp_float_has_SNaN; - static const float_denorm_style has_denorm = __glibcpp_float_has_denorm; + static const float_denorm_style has_denorm + = __FLT_DENORM_MIN__ ? denorm_present : denorm_absent; static const bool has_denorm_loss = __glibcpp_float_has_denorm_loss; static float infinity() throw() @@ -1768,7 +1693,7 @@ namespace std static float signaling_NaN() throw() { return *reinterpret_cast(__glibcpp_float_SNaN); } static float denorm_min() throw() - { return *reinterpret_cast(__glibcpp_float_denorm_min); } + { return __FLT_DENORM_MIN__; } static const bool is_iec559 = __glibcpp_float_is_iec559; static const bool is_bounded = __glibcpp_float_is_bounded; @@ -1782,7 +1707,6 @@ namespace std #undef __glibcpp_float_round_error #undef __glibcpp_float_has_QNaN #undef __glibcpp_float_has_SNaN -#undef __glibcpp_float_has_denorm #undef __glibcpp_float_has_denorm_loss #undef __glibcpp_float_is_iec559 #undef __glibcpp_float_is_bounded @@ -1821,8 +1745,8 @@ namespace std = __builtin_huge_val () / 2 == __builtin_huge_val (); static const bool has_quiet_NaN = __glibcpp_double_has_QNaN; static const bool has_signaling_NaN = __glibcpp_double_has_SNaN; - static const float_denorm_style has_denorm = - __glibcpp_double_has_denorm; + static const float_denorm_style has_denorm + = __DBL_DENORM_MIN__ ? denorm_present : denorm_absent; static const bool has_denorm_loss = __glibcpp_double_has_denorm_loss; static double infinity() throw() @@ -1832,7 +1756,7 @@ namespace std static double signaling_NaN() throw() { return *reinterpret_cast(__glibcpp_double_SNaN); } static double denorm_min() throw() - { return *reinterpret_cast(__glibcpp_double_denorm_min); } + { return __DBL_DENORM_MIN__; } static const bool is_iec559 = __glibcpp_double_is_iec559; static const bool is_bounded = __glibcpp_double_is_bounded; @@ -1847,7 +1771,6 @@ namespace std #undef __glibcpp_double_round_error #undef __glibcpp_double_has_QNaN #undef __glibcpp_double_has_SNaN -#undef __glibcpp_double_has_denorm #undef __glibcpp_double_has_denorm_loss #undef __glibcpp_double_is_iec559 #undef __glibcpp_double_is_bounded @@ -1887,10 +1810,10 @@ namespace std = __builtin_huge_vall () / 2 == __builtin_huge_vall (); static const bool has_quiet_NaN = __glibcpp_long_double_has_SNaN; static const bool has_signaling_NaN = __glibcpp_long_double_has_SNaN; - static const float_denorm_style has_denorm = - __glibcpp_long_double_has_denorm; - static const bool has_denorm_loss = - __glibcpp_long_double_has_denorm_loss; + static const float_denorm_style has_denorm + = __LDBL_DENORM_MIN__ ? denorm_present : denorm_absent; + static const bool has_denorm_loss + = __glibcpp_long_double_has_denorm_loss; static long double infinity() throw() { return __builtin_huge_vall (); } @@ -1908,10 +1831,7 @@ namespace std } static long double denorm_min() throw() - { - return *reinterpret_cast - (__glibcpp_long_double_denorm_min); - } + { return __LDBL_DENORM_MIN__; } static const bool is_iec559 = __glibcpp_long_double_is_iec559; static const bool is_bounded = __glibcpp_long_double_is_bounded; @@ -1926,7 +1846,6 @@ namespace std #undef __glibcpp_long_double_round_error #undef __glibcpp_long_double_has_QNaN #undef __glibcpp_long_double_has_SNaN -#undef __glibcpp_long_double_has_denorm #undef __glibcpp_long_double_has_denorm_loss #undef __glibcpp_long_double_is_iec559 #undef __glibcpp_long_double_is_bounded diff --git a/libstdc++-v3/src/limits.cc b/libstdc++-v3/src/limits.cc index 9c5aabb6a0a..93cb3bce3df 100644 --- a/libstdc++-v3/src/limits.cc +++ b/libstdc++-v3/src/limits.cc @@ -40,20 +40,14 @@ namespace std { const __float_storage __glibcpp_float_QNaN = __glibcpp_float_QNaN_bytes; const __float_storage __glibcpp_float_SNaN = __glibcpp_float_SNaN_bytes; - const __float_storage __glibcpp_float_denorm_min = - __glibcpp_float_denorm_min_bytes; const __double_storage __glibcpp_double_QNaN = __glibcpp_double_QNaN_bytes; const __double_storage __glibcpp_double_SNaN = __glibcpp_double_SNaN_bytes; - const __double_storage __glibcpp_double_denorm_min = - __glibcpp_double_denorm_min_bytes; const __long_double_storage __glibcpp_long_double_QNaN = __glibcpp_long_double_QNaN_bytes; const __long_double_storage __glibcpp_long_double_SNaN = __glibcpp_long_double_SNaN_bytes; - const __long_double_storage __glibcpp_long_double_denorm_min = - __glibcpp_long_double_denorm_min_bytes; const bool __numeric_limits_base::is_specialized; const int __numeric_limits_base::digits;