aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-09-04 16:22:18 -0700
committerRichard Henderson <rth@gcc.gnu.org>2002-09-04 16:22:18 -0700
commit65e32b88a6a9b4b8169e4d8fde0bc28934c4667e (patch)
tree565637e91008ee2392bcc6bc256215a0a1177d2f
parentab5e26156fb28eb59e0a259ccb0ab49485a1b94c (diff)
downloadgcc-65e32b88a6a9b4b8169e4d8fde0bc28934c4667e.zip
gcc-65e32b88a6a9b4b8169e4d8fde0bc28934c4667e.tar.gz
gcc-65e32b88a6a9b4b8169e4d8fde0bc28934c4667e.tar.bz2
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<float>, std::numeric_limits<double>, std::numeric_limits<long double>): 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
-rw-r--r--libstdc++-v3/ChangeLog17
-rw-r--r--libstdc++-v3/include/std/std_limits.h97
-rw-r--r--libstdc++-v3/src/limits.cc6
3 files changed, 26 insertions, 94 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 383ab79..702cb67 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,20 @@
+2002-09-04 Richard Henderson <rth@redhat.com>
+
+ * 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<float>, std::numeric_limits<double>,
+ std::numeric_limits<long double>): 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 <rth@redhat.com>
* 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 8fe95b6..320c3ab 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<const float*>(__glibcpp_float_infinity); }
+ { return __builtin_huge_valf (); }
static float quiet_NaN() throw()
{ return *reinterpret_cast<const float*>(__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<const double*>(__glibcpp_double_infinity); }
+ { return __builtin_huge_val(); }
static double quiet_NaN() throw()
{ return *reinterpret_cast<const double*>(__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<const long double*>
- (__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 b0172b8..9c5aabb 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 =