From 65e32b88a6a9b4b8169e4d8fde0bc28934c4667e Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 4 Sep 2002 16:22:18 -0700 Subject: [PATCH] std_limits.h (__glibcpp_f32_infinity_bytes, [...]): Remove. * include/std/std_limits.h (__glibcpp_f32_infinity_bytes, __glibcpp_f32_has_infinity, __glibcpp_f64_infinity_bytes, __glibcpp_f64_has_infinity, __glibcpp_f80_infinity_bytes, __glibcpp_f80_has_infinity, __glibcpp_f96_infinity_bytes, __glibcpp_f96_has_infinity, __glibcpp_f128_infinity_bytes, __glibcpp_f128_has_infinity, __glibcpp_float_infinity_bytes, __glibcpp_float_has_infinity, __glibcpp_double_infinity_bytes, __glibcpp_double_has_infinity, __glibcpp_long_double_infinity_bytes, __glibcpp_long_double_has_infinity): Remove. (std::numeric_limits, std::numeric_limits, std::numeric_limits): Use __builtin_huge_val to implement has_infinity and infinity(). * src/limits.cc (__glibcpp_float_infinity, __glibcpp_double_infinity, __glibcpp_long_double_infinity): Remove. From-SVN: r56821 --- libstdc++-v3/ChangeLog | 17 +++++ libstdc++-v3/include/std/std_limits.h | 97 +++------------------------ libstdc++-v3/src/limits.cc | 6 -- 3 files changed, 26 insertions(+), 94 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 383ab79efc7..702cb67041e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,20 @@ +2002-09-04 Richard Henderson + + * include/std/std_limits.h (__glibcpp_f32_infinity_bytes, + __glibcpp_f32_has_infinity, __glibcpp_f64_infinity_bytes, + __glibcpp_f64_has_infinity, __glibcpp_f80_infinity_bytes, + __glibcpp_f80_has_infinity, __glibcpp_f96_infinity_bytes, + __glibcpp_f96_has_infinity, __glibcpp_f128_infinity_bytes, + __glibcpp_f128_has_infinity, __glibcpp_float_infinity_bytes, + __glibcpp_float_has_infinity, __glibcpp_double_infinity_bytes, + __glibcpp_double_has_infinity, __glibcpp_long_double_infinity_bytes, + __glibcpp_long_double_has_infinity): Remove. + (std::numeric_limits, std::numeric_limits, + std::numeric_limits): Use __builtin_huge_val + to implement has_infinity and infinity(). + * src/limits.cc (__glibcpp_float_infinity, __glibcpp_double_infinity, + __glibcpp_long_double_infinity): Remove. + 2002-09-03 Richard Henderson * include/std/std_limits.h (__glibcpp_f32_min, __glibcpp_f32_max, diff --git a/libstdc++-v3/include/std/std_limits.h b/libstdc++-v3/include/std/std_limits.h index 8fe95b677fb..320c3ab10c9 100644 --- a/libstdc++-v3/include/std/std_limits.h +++ b/libstdc++-v3/include/std/std_limits.h @@ -152,8 +152,6 @@ #define __glibcpp_f32_round_error 1.0F #if __GCC_FLOAT_FORMAT__ == __IEEE_FORMAT__ -# define __glibcpp_f32_infinity_bytes { 0x7f800000 } -# define __glibcpp_f32_has_infinity true # define __glibcpp_f32_QNaN_bytes { 0x7fc00000 } # define __glibcpp_f32_has_QNaN true # define __glibcpp_f32_SNaN_bytes { 0x7f800001 } @@ -162,10 +160,6 @@ # define __glibcpp_f32_has_denorm denorm_present # define __glibcpp_f32_is_iec559 true #endif -#ifndef __glibcpp_f32_infinity_bytes -# define __glibcpp_f32_infinity_bytes { } -# define __glibcpp_f32_has_infinity false -#endif #ifndef __glibcpp_f32_QNaN_bytes # define __glibcpp_f32_QNaN_bytes { } # define __glibcpp_f32_has_QNaN false @@ -184,26 +178,19 @@ #define __glibcpp_f64_round_error 1.0 #if __GCC_FLOAT_FORMAT__ == __IEEE_FORMAT__ # if __TARGET_FLOAT_WORDS_ORDER__ == __GCC_BIG_ENDIAN__ -# define __glibcpp_f64_infinity_bytes { 0x7ff00000, 0x0 } # 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_infinity_bytes { 0x0, 0x7ff00000 } # 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_infinity true # 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_infinity_bytes -# define __glibcpp_f64_infinity_bytes { } -# define __glibcpp_f64_has_infinity false -#endif #ifndef __glibcpp_f64_QNaN_bytes # define __glibcpp_f64_QNaN_bytes { } # define __glibcpp_f64_has_QNaN false @@ -222,8 +209,6 @@ #define __glibcpp_f80_round_error 1.0L #if __GCC_FLOAT_FORMAT__ == __IEEE_FORMAT__ # if __TARGET_BYTES_ORDER__ == __GCC_BIG_ENDIAN__ -# define __glibcpp_f80_infinity_bytes \ - { 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } # define __glibcpp_f80_QNaN_bytes \ { 0x7f, 0xff, 0xC0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } # define __glibcpp_f80_SNaN_bytes \ @@ -231,8 +216,6 @@ # define __glibcpp_f80_denorm_min_bytes \ { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 } # else -# define __glibcpp_f80_infinity_bytes \ - { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0xff, 0x7f } # define __glibcpp_f80_QNaN_bytes \ { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC0, 0xff, 0x7f } # define __glibcpp_f80_SNaN_bytes \ @@ -240,16 +223,11 @@ # define __glibcpp_f80_denorm_min_bytes \ { 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } # endif -# define __glibcpp_f80_has_infinity true # 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_infinity_bytes -# define __glibcpp_f80_infinity_bytes { } -# define __glibcpp_f80_has_infinity false -#endif #ifndef __glibcpp_f80_QNaN_bytes # define __glibcpp_f80_QNaN_bytes { } # define __glibcpp_f80_has_QNaN false @@ -268,26 +246,19 @@ #define __glibcpp_f96_round_error 1.0L #if __GCC_FLOAT_FORMAT__ == __IEEE_FORMAT__ # if __TARGET_BYTES_ORDER__ == __GCC_BIG_ENDIAN__ -# define __glibcpp_f96_infinity_bytes { 0x7ff0000, 0x0, 0x0 } # 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_infinity_bytes { 0x0, 0x0, 0x7ff0000 } # 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_infinity true # 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_infinity_bytes -# define __glibcpp_f96_infinity_bytes { } -# define __glibcpp_f96_has_infinity false -#endif #ifndef __glibcpp_f96_QNaN_bytes # define __glibcpp_f96_QNaN_bytes { } # define __glibcpp_f96_has_QNaN false @@ -303,25 +274,18 @@ #define __glibcpp_f128_round_error 1.0L #if __GCC_FLOAT_FORMAT__ == __IEEE_FORMAT__ # if __TARGET_FLOAT_WORDS_ORDER__ == __GCC_BIG_ENDIAN__ -# define __glibcpp_f128_infinity_bytes { 0x7fff0000, 0x0, 0x0, 0x0 } # 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_infinity_bytes { 0x0, 0x0, 0x0, 0x7fff0000 } # 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_infinity true # define __glibcpp_f128_has_QNaN true # define __glibcpp_f128_has_SNaN true # define __glibcpp_f128_has_denorm denorm_present #endif -#ifndef __glibcpp_f128_infinity_bytes -# define __glibcpp_f128_infinity_bytes { } -# define __glibcpp_f128_has_infinity false -#endif #ifndef __glibcpp_f128_QNaN_bytes # define __glibcpp_f128_QNaN_bytes { } # define __glibcpp_f128_has_QNaN false @@ -659,33 +623,27 @@ #if __FLOAT_BIT__ == 32 # define __glibcpp_float_round_error __glibcpp_f32_round_error -# define __glibcpp_float_infinity_bytes __glibcpp_f32_infinity_bytes # 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_infinity __glibcpp_f32_has_infinity # 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_infinity_bytes __glibcpp_f64_infinity_bytes # 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_infinity __glibcpp_f64_has_infinity # 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_infinity_bytes __glibcpp_f80_infinity_bytes # 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_infinity __glibcpp_f80_has_infinity # 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 @@ -696,11 +654,6 @@ // Default values. Should be overriden in configuration files if necessary. -#ifndef __glibcpp_float_infinity_bytes -# define __glibcpp_float_infinity_bytes { } -# define __glibcpp_float_has_infinty false -#endif - #ifndef __glibcpp_float_QNaN_bytes # define __glibcpp_float_QNaN_bytes { } # define __glibcpp_float_has_QNaN false @@ -748,33 +701,27 @@ #if __DOUBLE_BIT__ == 32 # define __glibcpp_double_round_error __glibcpp_f32_round_error -# define __glibcpp_double_infinity_bytes __glibcpp_f32_infinity_bytes # 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_infinity __glibcpp_f32_has_infinity # 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_infinity_bytes __glibcpp_f64_infinity_bytes # 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_infinity __glibcpp_f64_has_infinity # 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_infinity_bytes __glibcpp_f80_infinity_bytes # 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_infinity __glibcpp_f80_has_infinity # 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 @@ -785,11 +732,6 @@ // Default values. Should be overriden in configuration files if necessary. -#ifndef __glibcpp_double_infinity_bytes -# define __glibcpp_double_infinity_bytes { } -# define __glibcpp_double_has_infinty false -#endif - #ifndef __glibcpp_double_QNaN_bytes # define __glibcpp_double_QNaN_bytes { } # define __glibcpp_double_has_QNaN false @@ -837,55 +779,45 @@ #if __LONG_DOUBLE_BIT__ == 32 # define __glibcpp_long_double_round_error __glibcpp_f32_round_error -# define __glibcpp_long_double_infinity_bytes __glibcpp_f32_infinity_bytes # 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_infinity __glibcpp_f32_has_infinity # 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_infinity_bytes __glibcpp_f64_infinity_bytes # 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_infinity __glibcpp_f64_has_infinity # 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_infinity_bytes __glibcpp_f80_infinity_bytes # 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_infinity __glibcpp_f80_has_infinity # 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_infinity_bytes __glibcpp_f96_infinity_bytes # 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_infinity __glibcpp_f96_has_infinity # 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_infinity_bytes __glibcpp_f128_infinity_bytes # 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_infinity __glibcpp_f128_has_infinity # 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 @@ -896,11 +828,6 @@ // Default values. Should be overriden in configuration files if necessary. -#ifndef __glibcpp_long_double_infinity_bytes -# define __glibcpp_long_double_infinity_bytes { } -# define __glibcpp_long_double_has_infinty false -#endif - #ifndef __glibcpp_long_double_QNaN_bytes # define __glibcpp_long_double_QNaN_bytes { } # define __glibcpp_long_double_has_QNaN false @@ -989,17 +916,14 @@ namespace std #endif __attribute__((__aligned__(__alignof__(long double)))); - extern const __float_storage __glibcpp_float_infinity; 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_infinity; 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_infinity; 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; @@ -1830,14 +1754,15 @@ namespace std static const int max_exponent = __FLT_MAX_EXP__; static const int max_exponent10 = __FLT_MAX_10_EXP__; - static const bool has_infinity = __glibcpp_float_has_infinity; + static const bool has_infinity + = __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 bool has_denorm_loss = __glibcpp_float_has_denorm_loss; static float infinity() throw() - { return *reinterpret_cast(__glibcpp_float_infinity); } + { return __builtin_huge_valf (); } static float quiet_NaN() throw() { return *reinterpret_cast(__glibcpp_float_QNaN); } static float signaling_NaN() throw() @@ -1855,7 +1780,6 @@ namespace std }; #undef __glibcpp_float_round_error -#undef __glibcpp_float_has_infinity #undef __glibcpp_float_has_QNaN #undef __glibcpp_float_has_SNaN #undef __glibcpp_float_has_denorm @@ -1893,7 +1817,8 @@ namespace std static const int max_exponent = __DBL_MAX_EXP__; static const int max_exponent10 = __DBL_MAX_10_EXP__; - static const bool has_infinity = __glibcpp_double_has_infinity; + static const bool has_infinity + = __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 = @@ -1901,7 +1826,7 @@ namespace std static const bool has_denorm_loss = __glibcpp_double_has_denorm_loss; static double infinity() throw() - { return *reinterpret_cast(__glibcpp_double_infinity); } + { return __builtin_huge_val(); } static double quiet_NaN() throw() { return *reinterpret_cast(__glibcpp_double_QNaN); } static double signaling_NaN() throw() @@ -1920,7 +1845,6 @@ namespace std }; #undef __glibcpp_double_round_error -#undef __glibcpp_double_has_infinity #undef __glibcpp_double_has_QNaN #undef __glibcpp_double_has_SNaN #undef __glibcpp_double_has_denorm @@ -1959,7 +1883,8 @@ namespace std static const int max_exponent = __LDBL_MAX_EXP__; static const int max_exponent10 = __LDBL_MAX_10_EXP__; - static const bool has_infinity = __glibcpp_long_double_has_infinity; + static const bool has_infinity + = __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 = @@ -1968,10 +1893,7 @@ namespace std __glibcpp_long_double_has_denorm_loss; static long double infinity() throw() - { - return *reinterpret_cast - (__glibcpp_long_double_infinity); - } + { return __builtin_huge_vall (); } static long double quiet_NaN() throw() { @@ -2002,7 +1924,6 @@ namespace std }; #undef __glibcpp_long_double_round_error -#undef __glibcpp_long_double_has_infinity #undef __glibcpp_long_double_has_QNaN #undef __glibcpp_long_double_has_SNaN #undef __glibcpp_long_double_has_denorm diff --git a/libstdc++-v3/src/limits.cc b/libstdc++-v3/src/limits.cc index b0172b8d94b..9c5aabb6a0a 100644 --- a/libstdc++-v3/src/limits.cc +++ b/libstdc++-v3/src/limits.cc @@ -38,22 +38,16 @@ namespace std { - const __float_storage __glibcpp_float_infinity = - __glibcpp_float_infinity_bytes; 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_infinity = - __glibcpp_double_infinity_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_infinity = - __glibcpp_long_double_infinity_bytes; const __long_double_storage __glibcpp_long_double_QNaN = __glibcpp_long_double_QNaN_bytes; const __long_double_storage __glibcpp_long_double_SNaN = -- 2.30.2