c-common.c (builtin_define_float_constants): Emit __FOO_DENORM_MIN__.
authorRichard Henderson <rth@redhat.com>
Mon, 16 Sep 2002 16:58:42 +0000 (09:58 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Mon, 16 Sep 2002 16:58:42 +0000 (09:58 -0700)
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<float>::has_denorm): Use __FLT_DENORM_MIN__.
        (std::numeric_limits<float>::denorm_min): Likewise.
        (std::numeric_limits<double>): Similarly.
        (std::numeric_limits<long double>): Similarly.
        * src/limits.cc (__glibcpp_float_denorm_min,
        __glibcpp_double_denorm_min, __glibcpp_long_double_denorm_min): Remove.

From-SVN: r57200

gcc/ChangeLog
gcc/c-common.c
libstdc++-v3/ChangeLog
libstdc++-v3/include/std/std_limits.h
libstdc++-v3/src/limits.cc

index a54214ca7ae1d5bf223e24cb7bdbb3a49a551cb5..c9c74bcae57d54c4c88abf67e3a80f6da104d33c 100644 (file)
@@ -1,3 +1,7 @@
+2002-09-16  Richard Henderson  <rth@redhat.com>
+
+       * c-common.c (builtin_define_float_constants): Emit __FOO_DENORM_MIN__.
+
 2002-09-16  Richard Henderson  <rth@redhat.com>
 
        * real.c, real.h: Rewrite from scratch.
index 34941e008aeea81c6a5cc8cb0197df3b9e96991b..bdb8a5819d4009c3bc2e089034ac2c5b0638c734 100644 (file)
@@ -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<T>::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.  */
index 6bb38f073777dede58e9e7f34b83ef58fb709331..113a0df6bd087df2802fd2f41fb6919d537a3bd8 100644 (file)
@@ -1,3 +1,23 @@
+2002-09-16  Richard Henderson  <rth@redhat.com>
+
+       * 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<float>::has_denorm): Use __FLT_DENORM_MIN__.
+       (std::numeric_limits<float>::denorm_min): Likewise.
+       (std::numeric_limits<double>): Similarly.
+       (std::numeric_limits<long double>): Similarly.
+       * src/limits.cc (__glibcpp_float_denorm_min,
+       __glibcpp_double_denorm_min, __glibcpp_long_double_denorm_min): Remove.
+
 2002-09-13  Andy Felt  <afelt@uwsp.edu>
 
        * docs/html/17_intro/howto.html:  Update link.
index 320c3ab10c90d62635a8acbff160e728a9b8b393..34a3f7613879c9678b58eb6b93bf3942c33feb45 100644 (file)
 #  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
 #  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 
 #  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
 #  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 
        { 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
 #  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 
 #  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
 #  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 { }
 #  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
 #  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.
 #  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
 #  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.
 #  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
 #  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.
 #  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<const float*>(__glibcpp_float_SNaN); }
       static float denorm_min() throw()
-      { return *reinterpret_cast<const float*>(__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<const double*>(__glibcpp_double_SNaN); }
       static double denorm_min() throw()
-      { return *reinterpret_cast<const double*>(__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<const long double*>
-          (__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
index 9c5aabb6a0a2b6abf3fcd85d01ba5c86265c13a9..93cb3bce3df06a1886c4f46e178083ef77768c5f 100644 (file)
@@ -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;