c-common.c (builtin_define_type_precision): New function.
authorGabriel Dos Reis <gdr@integrable-solutions.net>
Wed, 28 Aug 2002 21:41:55 +0000 (21:41 +0000)
committerGabriel Dos Reis <gdr@gcc.gnu.org>
Wed, 28 Aug 2002 21:41:55 +0000 (21:41 +0000)
gcc/
 2002-08-28  Gabriel Dos Reis  <gdr@integrable-solutions.net>

 * c-common.c (builtin_define_type_precision): New function.
 (cb_register_builtins): Use it.  Define __WCHAR_UNSIGNED__ is
 wchar_t is unsigned in C++.
 * doc/cpp.texi (Common Predefined Macros): Document
 __WCHAR_UNSIGNED__, __CHAR_BIT__, __WCHAR_BIT__, __SHRT_BIT__,
 __INT_BIT__, __LONG_BIT__, __LONG_LONG_BIT__, __FLOAT_BIT__,
 __DOUBLE_BIT__, __LONG_DOUBLE_BIT__.

libstdc++-v3/

2002-08-28  Gabriel Dos Reis  <gdr@integrable-solutions.net>

    * include/std/std_limits.h (__glibcpp_char_bits,
    __glibcpp_short_bits, __glibcpp_int_bits,
    __glibcpp_long_bits,
    __glibcpp_long_long_bits, __glibcpp_float_bits,
    __glibcpp_double_bits, __glibcpp_long_double_bits):
    Remove.  Use
    compiler predifined macros.
    (__glibcpp_wchar_t_is_signed): Define based on compiler
    predefined
    __WCHAR_UNSIGNED__.

From-SVN: r56646

gcc/ChangeLog
gcc/c-common.c
gcc/doc/cpp.texi
libstdc++-v3/ChangeLog
libstdc++-v3/include/std/std_limits.h

index 17b0ffe3b9b86a24123c15afe84824b4aa4fd247..223d00de5adfec5a278429fe2b6cdc9fdb692239 100644 (file)
@@ -1,3 +1,13 @@
+2002-08-28  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * c-common.c (builtin_define_type_precision): New function.
+       (cb_register_builtins): Use it.  Define __WCHAR_UNSIGNED__ is
+       wchar_t is unsigned in C++.
+       * doc/cpp.texi (Common Predefined Macros): Document
+       __WCHAR_UNSIGNED__, __CHAR_BIT__, __WCHAR_BIT__, __SHRT_BIT__,
+       __INT_BIT__, __LONG_BIT__, __LONG_LONG_BIT__, __FLOAT_BIT__,
+       __DOUBLE_BIT__, __LONG_DOUBLE_BIT__.
+
 2002-08-28  Sylvain Pion <pion@cs.nyu.edu>
 
        * doc/invoke.texi (-Wreorder): Remove remaining pieces from the generic
index 913aec19c6b564bcce7268b30236b332cf90607c..45879917c1c3ae02d15ea3eef58093a3dac3e3c1 100644 (file)
@@ -760,9 +760,10 @@ static bool get_nonnull_operand            PARAMS ((tree,
                                                 unsigned HOST_WIDE_INT *));
 void builtin_define_std PARAMS ((const char *));
 static void builtin_define_with_value PARAMS ((const char *, const char *,
-                                              int));
+                                               int));
 static void builtin_define_type_max PARAMS ((const char *, tree, int));
 static void cpp_define_data_format PARAMS ((cpp_reader *));
+static void builtin_define_type_precision PARAMS ((const char *, tree));
 
 /* Table of machine-independent attributes common to all C-like languages.  */
 const struct attribute_spec c_common_attribute_table[] =
@@ -4765,6 +4766,17 @@ cpp_define_data_format (pfile)
   builtin_define_with_value ("__GCC_FLOAT_FORMAT__", format, 0);
 }
 
+/* Define NAME with value TYPE precision.  */
+static void
+builtin_define_type_precision (name, type)
+     const char *name;
+     tree type;
+{
+  char buf[8];
+  sprintf (buf, "%d", (int) TYPE_PRECISION (type));
+  builtin_define_with_value (name, buf, 0);
+}
+
 /* Hook that registers front end and target-specific built-ins.  */
 void
 cb_register_builtins (pfile)
@@ -4807,11 +4819,16 @@ cb_register_builtins (pfile)
   builtin_define_type_max ("__LONG_MAX__", long_integer_type_node, 1);
   builtin_define_type_max ("__LONG_LONG_MAX__", long_long_integer_type_node, 2);
 
-  {
-    char buf[8];
-    sprintf (buf, "%d", (int) TYPE_PRECISION (signed_char_type_node));
-    builtin_define_with_value ("__CHAR_BIT__", buf, 0);
-  }
+  builtin_define_type_precision ("__CHAR_BIT__", char_type_node);
+  builtin_define_type_precision ("__WCHAR_BIT__", wchar_type_node);
+  builtin_define_type_precision ("__SHRT_BIT__", short_integer_type_node);
+  builtin_define_type_precision ("__INT_BIT__", integer_type_node);
+  builtin_define_type_precision ("__LONG_BIT__", long_integer_type_node);
+  builtin_define_type_precision ("__LONG_LONG_BIT__",
+                                 long_long_integer_type_node);
+  builtin_define_type_precision ("__FLOAT_BIT__", float_type_node);
+  builtin_define_type_precision ("__DOUBLE_BIT__", double_type_node);
+  builtin_define_type_precision ("__LONG_DOUBLE_BIT__", long_double_type_node);
 
   /* For use in assembly language.  */
   builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
@@ -4849,6 +4866,9 @@ cb_register_builtins (pfile)
   if (!flag_signed_char)
     cpp_define (pfile, "__CHAR_UNSIGNED__");
 
+  if (c_language == clk_cplusplus && TREE_UNSIGNED (wchar_type_node))
+    cpp_define (pfile, "__WCHAR_UNSIGNED__");
+
   cpp_define_data_format (pfile);
   
   /* Make the choice of ObjC runtime visible to source code.  */
index bb0c39ce835082f59a52d1d37b74d2c542ded78f..0770e418a83d64e9d002da85bcba50900b4f5f22 100644 (file)
@@ -1972,6 +1972,10 @@ unsigned on the target machine.  It exists to cause the standard header
 file @file{limits.h} to work correctly.  You should not use this macro
 yourself; instead, refer to the standard macros defined in @file{limits.h}.
 
+@item __WCHAR_UNSIGNED__
+Like @code{__CHAR_UNSIGNED__}, this macro is defined if and only if the
+data type @code{wchar_t} is unsigned and the front-end is in C++ mode.
+
 @item __REGISTER_PREFIX__
 This macro expands to a single token (not a string constant) which is
 the prefix applied to CPU register names in assembly language for this
@@ -2002,6 +2006,22 @@ typedefs, respectively.  They exist to make the standard header files
 these macros directly; instead, include the appropriate headers and use
 the typedefs.
 
+@item __CHAR_BIT__
+@itemx __WCHAR_BIT__
+@itemx __SHRT_BIT__
+@itemx __INT_BIT__
+@itemx __LONG_BIT__
+@itemx __LONG_LONG_BIT__
+@itemx __FLOAT_BIT__
+@itemx __DOUBLE_BIT__
+@itemx __LONG_DOUBLE_BIT__
+These macros are defined to the number of bits used in the
+representation of the data types @code{char}, @code{wchar_t},
+@code{short}, @code{int}, @code{long}, @code{long long}, @code{float},
+@code{double} and @code{long double}.  They exist to make the standard
+header given numerical limits work correctly.  You should not use
+these macros directly; instead, include the appropriate headers.
+
 @item __USING_SJLJ_EXCEPTIONS__
 This macro is defined, with value 1, if the compiler uses the old
 mechanism based on @code{setjmp} and @code{longjmp} for exception
index 86b6d841ff9c63fbf76bd3175654506d4d893e11..0320356c578ba3650feee5f4c5053d354c82ccbe 100644 (file)
@@ -1,3 +1,13 @@
+2002-08-28  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * include/std/std_limits.h (__glibcpp_char_bits,
+       __glibcpp_short_bits, __glibcpp_int_bits, __glibcpp_long_bits,
+       __glibcpp_long_long_bits, __glibcpp_float_bits,
+       __glibcpp_double_bits, __glibcpp_long_double_bits): Remove.  Use
+       compiler predifined macros.
+       (__glibcpp_wchar_t_is_signed): Define based on compiler predefined
+       __WCHAR_UNSIGNED__. 
+
 2002-08-27  Gabriel Dos Reis  <gdr@integrable-solutions.net>
 
        * include/std/std_limits.h (__glibcpp_f32_infinity_bytes,
index f1878a74faa8a71cb3378df917ee78251d049bfc..190cfdfa3ec0dac0f1526248344db56dece431a6 100644 (file)
 // definitions given here.
 //
 
-// These values can be overridden in the target configuration file.
-// The default values are appropriate for many 32-bit targets.
-
-#ifndef __glibcpp_char_bits
-#  define __glibcpp_char_bits 8
-#endif
 #ifdef __CHAR_UNSIGNED__
 #  define __glibcpp_plain_char_is_signed false
 #else
 #  define __glibcpp_plain_char_is_signed true
 #endif
-#ifndef __glibcpp_short_bits
-#  define __glibcpp_short_bits 16
-#endif
-#ifndef __glibcpp_int_bits
-#  define __glibcpp_int_bits 32
-#endif
-#ifndef __glibcpp_long_bits
-#  define __glibcpp_long_bits 32
-#endif
-#ifndef __glibcpp_wchar_t_bits
-#  define __glibcpp_wchar_t_bits 32
-#endif
-#ifndef __glibcpp_wchar_t_is_signed
+
+#ifndef __WCHAR_UNSIGNED__
+#  define __glibcpp_wchar_t_is_signed false
+#else
 #  define __glibcpp_wchar_t_is_signed true
 #endif
-#ifndef __glibcpp_long_long_bits
-#  define __glibcpp_long_long_bits 64
-#endif
-#ifndef __glibcpp_float_bits
-#  define __glibcpp_float_bits 32
-#endif
-#ifndef __glibcpp_double_bits
-#  define __glibcpp_double_bits 64
-#endif
-#ifndef __glibcpp_long_double_bits
-#  define __glibcpp_long_double_bits 128
-#endif
+
+// These values can be overridden in the target configuration file.
+// The default values are appropriate for many 32-bit targets.
 
 #ifndef __glibcpp_char_traps
 #  define __glibcpp_char_traps true
 #ifndef __glibcpp_signed_char_is_modulo
 #  define __glibcpp_signed_char_is_modulo true
 #endif
-#if __glibcpp_char_bits == 8
+#if __CHAR_BIT__ == 8
 #  define __glibcpp_signed_char_min __glibcpp_s8_min
 #  define __glibcpp_signed_char_max __glibcpp_s8_max
 #  define __glibcpp_signed_char_digits __glibcpp_s8_digits
 #  define __glibcpp_unsigned_char_max __glibcpp_u8_max
 #  define __glibcpp_unsigned_char_digits __glibcpp_u8_digits
 #  define __glibcpp_unsigned_char_digits10 __glibcpp_u8_digits10
-#elif __glibcpp_char_bits == 16
+#elif __CHAR_BIT__ == 16
 #  define __glibcpp_signed_char_min __glibcpp_s16_min
 #  define __glibcpp_signed_char_max __glibcpp_s16_max
 #  define __glibcpp_signed_char_digits __glibcpp_s16_digits
 #  define __glibcpp_unsigned_char_max __glibcpp_u16_max
 #  define __glibcpp_unsigned_char_digits __glibcpp_u16_digits
 #  define __glibcpp_unsigned_char_digits10 __glibcpp_u16_digits10
-#elif __glibcpp_char_bits == 32
+#elif __CHAR_BIT__ == 32
 #  define __glibcpp_signed_char_min (signed char)__glibcpp_s32_min
 #  define __glibcpp_signed_char_max (signed char)__glibcpp_s32_max
 #  define __glibcpp_signed_char_digits __glibcpp_s32_digits
 #  define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u32_max
 #  define __glibcpp_unsigned_char_digits __glibcpp_u32_digits
 #  define __glibcpp_unsigned_char_digits10 __glibcpp_u32_digits10
-#elif __glibcpp_char_bits == 64
+#elif __CHAR_BIT__ == 64
 #  define __glibcpp_signed_char_min (signed char)__glibcpp_s64_min
 #  define __glibcpp_signed_char_max (signed char)__glibcpp_s64_max
 #  define __glibcpp_signed_char_digits __glibcpp_s64_digits
 #ifndef __glibcpp_signed_short_is_modulo
 #  define __glibcpp_signed_short_is_modulo true
 #endif
-#if __glibcpp_short_bits == 8
+#if __SHRT_BIT__ == 8
 #  define __glibcpp_signed_short_min __glibcpp_s8_min
 #  define __glibcpp_signed_short_max __glibcpp_s8_max
 #  define __glibcpp_signed_short_digits __glibcpp_s8_digits
 #  define __glibcpp_unsigned_short_max __glibcpp_u8_max
 #  define __glibcpp_unsigned_short_digits __glibcpp_u8_digits
 #  define __glibcpp_unsigned_short_digits10 __glibcpp_u8_digits10
-#elif __glibcpp_short_bits == 16
+#elif __SHRT_BIT__ == 16
 #  define __glibcpp_signed_short_min __glibcpp_s16_min
 #  define __glibcpp_signed_short_max __glibcpp_s16_max
 #  define __glibcpp_signed_short_digits __glibcpp_s16_digits
 #  define __glibcpp_unsigned_short_max __glibcpp_u16_max
 #  define __glibcpp_unsigned_short_digits __glibcpp_u16_digits
 #  define __glibcpp_unsigned_short_digits10 __glibcpp_u16_digits10
-#elif __glibcpp_short_bits == 32
+#elif __SHRT_BIT__ == 32
 #  define __glibcpp_signed_short_min (short)__glibcpp_s32_min
 #  define __glibcpp_signed_short_max (short)__glibcpp_s32_max
 #  define __glibcpp_signed_short_digits __glibcpp_s32_digits
 #  define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u32_max
 #  define __glibcpp_unsigned_short_digits __glibcpp_u32_digits
 #  define __glibcpp_unsigned_short_digits10 __glibcpp_u32_digits10
-#elif __glibcpp_short_bits == 64
+#elif __SHRT_BIT__ == 64
 #  define __glibcpp_signed_short_min (short)__glibcpp_s64_min
 #  define __glibcpp_signed_short_max (short)__glibcpp_s64_max
 #  define __glibcpp_signed_short_digits __glibcpp_s64_digits
 #ifndef __glibcpp_signed_int_is_modulo
 #  define __glibcpp_signed_int_is_modulo true
 #endif
-#if __glibcpp_int_bits == 8
+#if __INT_BIT__ == 8
 #  define __glibcpp_signed_int_min __glibcpp_s8_min
 #  define __glibcpp_signed_int_max __glibcpp_s8_max
 #  define __glibcpp_signed_int_digits __glibcpp_s8_digits
 #  define __glibcpp_unsigned_int_max __glibcpp_u8_max
 #  define __glibcpp_unsigned_int_digits __glibcpp_u8_digits
 #  define __glibcpp_unsigned_int_digits10 __glibcpp_u8_digits10
-#elif __glibcpp_int_bits == 16
+#elif __INT_BIT__ == 16
 #  define __glibcpp_signed_int_min __glibcpp_s16_min
 #  define __glibcpp_signed_int_max __glibcpp_s16_max
 #  define __glibcpp_signed_int_digits __glibcpp_s16_digits
 #  define __glibcpp_unsigned_int_max __glibcpp_u16_max
 #  define __glibcpp_unsigned_int_digits __glibcpp_u16_digits
 #  define __glibcpp_unsigned_int_digits10 __glibcpp_u16_digits10
-#elif __glibcpp_int_bits == 32
+#elif __INT_BIT__ == 32
 #  define __glibcpp_signed_int_min (int)__glibcpp_s32_min
 #  define __glibcpp_signed_int_max (int)__glibcpp_s32_max
 #  define __glibcpp_signed_int_digits __glibcpp_s32_digits
 #  define __glibcpp_unsigned_int_max (unsigned)__glibcpp_u32_max
 #  define __glibcpp_unsigned_int_digits __glibcpp_u32_digits
 #  define __glibcpp_unsigned_int_digits10 __glibcpp_u32_digits10
-#elif __glibcpp_int_bits == 64
+#elif __INT_BIT__ == 64
 #  define __glibcpp_signed_int_min (int)__glibcpp_s64_min
 #  define __glibcpp_signed_int_max (int)__glibcpp_s64_max
 #  define __glibcpp_signed_int_digits __glibcpp_s64_digits
 #ifndef __glibcpp_signed_long_is_modulo
 #  define __glibcpp_signed_long_is_modulo true
 #endif
-#if __glibcpp_long_bits == 8
+#if __LONG_BIT__ == 8
 #  define __glibcpp_signed_long_min __glibcpp_s8_min
 #  define __glibcpp_signed_long_max __glibcpp_s8_max
 #  define __glibcpp_signed_long_digits __glibcpp_s8_digits
 #  define __glibcpp_unsigned_long_max __glibcpp_u8_max
 #  define __glibcpp_unsigned_long_digits __glibcpp_u8_digits
 #  define __glibcpp_unsigned_long_digits10 __glibcpp_u8_digits10
-#elif __glibcpp_long_bits == 16
+#elif __LONG_BIT__ == 16
 #  define __glibcpp_signed_long_min __glibcpp_s16_min
 #  define __glibcpp_signed_long_max __glibcpp_s16_max
 #  define __glibcpp_signed_long_digits __glibcpp_s16_digits
 #  define __glibcpp_unsigned_long_max __glibcpp_u16_max
 #  define __glibcpp_unsigned_long_digits __glibcpp_u16_digits
 #  define __glibcpp_unsigned_long_digits10 __glibcpp_u16_digits10
-#elif __glibcpp_long_bits == 32
+#elif __LONG_BIT__ == 32
 #  define __glibcpp_signed_long_min __glibcpp_s32_min
 #  define __glibcpp_signed_long_max __glibcpp_s32_max
 #  define __glibcpp_signed_long_digits __glibcpp_s32_digits
 #  define __glibcpp_unsigned_long_max __glibcpp_u32_max
 #  define __glibcpp_unsigned_long_digits __glibcpp_u32_digits
 #  define __glibcpp_unsigned_long_digits10 __glibcpp_u32_digits10
-#elif __glibcpp_long_bits == 64
+#elif __LONG_BIT__ == 64
 #  define __glibcpp_signed_long_min (long)__glibcpp_s64_min
 #  define __glibcpp_signed_long_max (long)__glibcpp_s64_max
 #  define __glibcpp_signed_long_digits __glibcpp_s64_digits
 #ifndef __glibcpp_signed_long_long_is_modulo
 #  define __glibcpp_signed_long_long_is_modulo true
 #endif
-#if __glibcpp_long_long_bits == 8
+#if __LONG_LONG_BIT__ == 8
 #  define __glibcpp_signed_long_long_min __glibcpp_s8_min
 #  define __glibcpp_signed_long_long_max __glibcpp_s8_max
 #  define __glibcpp_signed_long_long_digits __glibcpp_s8_digits
 #  define __glibcpp_unsigned_long_long_max __glibcpp_u8_max
 #  define __glibcpp_unsigned_long_long_digits __glibcpp_u8_digits
 #  define __glibcpp_unsigned_long_long_digits10 __glibcpp_u8_digits10
-#elif __glibcpp_long_long_bits == 16
+#elif __LONG_LONG_BIT__ == 16
 #  define __glibcpp_signed_long_long_min __glibcpp_s16_min
 #  define __glibcpp_signed_long_long_max __glibcpp_s16_max
 #  define __glibcpp_signed_long_long_digits __glibcpp_s16_digits
 #  define __glibcpp_unsigned_long_long_max __glibcpp_u16_max
 #  define __glibcpp_unsigned_long_long_digits __glibcpp_u16_digits
 #  define __glibcpp_unsigned_long_long_digits10 __glibcpp_u16_digits10
-#elif __glibcpp_long_long_bits == 32
+#elif __LONG_LONG_BIT__ == 32
 #  define __glibcpp_signed_long_long_min __glibcpp_s32_min
 #  define __glibcpp_signed_long_long_max __glibcpp_s32_max
 #  define __glibcpp_signed_long_long_digits __glibcpp_s32_digits
 #  define __glibcpp_unsigned_long_long_max __glibcpp_u32_max
 #  define __glibcpp_unsigned_long_long_digits __glibcpp_u32_digits
 #  define __glibcpp_unsigned_long_long_digits10 __glibcpp_u32_digits10
-#elif __glibcpp_long_long_bits == 64
+#elif __LONG_LONG_BIT__ == 64
 #  define __glibcpp_signed_long_long_min __glibcpp_s64_min
 #  define __glibcpp_signed_long_long_max __glibcpp_s64_max
 #  define __glibcpp_signed_long_long_digits __glibcpp_s64_digits
 #  define __glibcpp_wchar_t_is_modulo true
 #endif
 #if __glibcpp_wchar_t_is_signed
-#  if __glibcpp_wchar_t_bits == 8
+#  if __WCHAR_BIT__ == 8
 #    define __glibcpp_wchar_t_min __glibcpp_s8_min
 #    define __glibcpp_wchar_t_max __glibcpp_s8_max
 #    define __glibcpp_wchar_t_digits __glibcpp_s8_digits
 #    define __glibcpp_wchar_t_digits10 __glibcpp_s8_digits10
-#  elif __glibcpp_wchar_t_bits == 16
+#  elif __WCHAR_BIT__ == 16
 #    define __glibcpp_wchar_t_min __glibcpp_s16_min
 #    define __glibcpp_wchar_t_max __glibcpp_s16_max
 #    define __glibcpp_wchar_t_digits __glibcpp_s16_digits
 #    define __glibcpp_wchar_t_digits10 __glibcpp_s16_digits10
-#  elif __glibcpp_wchar_t_bits == 32
+#  elif __WCHAR_BIT__ == 32
 #    define __glibcpp_wchar_t_min (wchar_t)__glibcpp_s32_min
 #    define __glibcpp_wchar_t_max (wchar_t)__glibcpp_s32_max
 #    define __glibcpp_wchar_t_digits __glibcpp_s32_digits
 #    define __glibcpp_wchar_t_digits10 __glibcpp_s32_digits10
-#  elif __glibcpp_wchar_t_bits == 64
+#  elif __WCHAR_BIT__ == 64
 #    define __glibcpp_wchar_t_min (wchar_t)__glibcpp_s64_min
 #    define __glibcpp_wchar_t_max (wchar_t)__glibcpp_s64_max
 #    define __glibcpp_wchar_t_digits __glibcpp_s64_digits
 // You must define these macros in the configuration file.
 #  endif
 #else
-#  if __glibcpp_wchar_t_bits == 8
+#  if __WCHAR_BIT__ == 8
 #    define __glibcpp_wchar_t_min __glibcpp_u8_min
 #    define __glibcpp_wchar_t_max __glibcpp_u8_max
 #    define __glibcpp_wchar_t_digits __glibcpp_u8_digits
 #    define __glibcpp_wchar_t_digits10 __glibcpp_u8_digits10
-#  elif __glibcpp_wchar_t_bits == 16
+#  elif __WCHAR_BIT__ == 16
 #    define __glibcpp_wchar_t_min __glibcpp_u16_min
 #    define __glibcpp_wchar_t_max __glibcpp_u16_max
 #    define __glibcpp_wchar_t_digits __glibcpp_u16_digits
 #    define __glibcpp_wchar_t_digits10 __glibcpp_u16_digits10
-#  elif __glibcpp_wchar_t_bits == 32
+#  elif __WCHAR_BIT__ == 32
 #    define __glibcpp_wchar_t_min (wchar_t)__glibcpp_u32_min
 #    define __glibcpp_wchar_t_max (wchar_t)__glibcpp_u32_max
 #    define __glibcpp_wchar_t_digits __glibcpp_u32_digits
 #    define __glibcpp_wchar_t_digits10 __glibcpp_u32_digits10
-#  elif __glibcpp_wchar_t_bits == 64
+#  elif __WCHAR_BIT__ == 64
 #    define __glibcpp_wchar_t_min (wchar_t)__glibcpp_u64_min
 #    define __glibcpp_wchar_t_max (wchar_t)__glibcpp_u64_max
 #    define __glibcpp_wchar_t_digits __glibcpp_u64_digits
 // float
 //
 
-#if __glibcpp_float_bits == 32
+#if __FLOAT_BIT__ == 32
 #  define __glibcpp_float_min __glibcpp_f32_min
 #  define __glibcpp_float_max __glibcpp_f32_max
 #  define __glibcpp_float_digits __glibcpp_f32_digits
 #  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 __glibcpp_float_bits == 64
+#elif __FLOAT_BIT__ == 64
 #  define __glibcpp_float_min __glibcpp_f64_min
 #  define __glibcpp_float_max __glibcpp_f64_max
 #  define __glibcpp_float_digits __glibcpp_f64_digits
 #  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 __glibcpp_float_bits == 80
+#elif __FLOAT_BIT__ == 80
 #  define __glibcpp_float_min __glibcpp_f80_min
 #  define __glibcpp_float_max __glibcpp_f80_max
 #  define __glibcpp_float_digits __glibcpp_f80_digits
 
 // double
 
-#if __glibcpp_double_bits == 32
+#if __DOUBLE_BIT__ == 32
 #  define __glibcpp_double_min __glibcpp_f32_min
 #  define __glibcpp_double_max __glibcpp_f32_max
 #  define __glibcpp_double_digits __glibcpp_f32_digits
 #  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 __glibcpp_double_bits == 64
+#elif __DOUBLE_BIT__ == 64
 #  define __glibcpp_double_min __glibcpp_f64_min
 #  define __glibcpp_double_max __glibcpp_f64_max
 #  define __glibcpp_double_digits __glibcpp_f64_digits
 #  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 __glibcpp_double_bits == 80
+#elif __DOUBLE_BIT__ == 80
 #  define __glibcpp_double_min __glibcpp_f80_min
 #  define __glibcpp_double_max __glibcpp_f80_max
 #  define __glibcpp_double_digits __glibcpp_f80_digits
 
 // long double
 
-#if __glibcpp_long_double_bits == 32
+#if __LONG_DOUBLE_BIT__ == 32
 #  define __glibcpp_long_double_min __glibcpp_f32_min
 #  define __glibcpp_long_double_max __glibcpp_f32_max
 #  define __glibcpp_long_double_digits __glibcpp_f32_digits
 #  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 __glibcpp_long_double_bits == 64
+#elif __LONG_DOUBLE_BIT__ == 64
 #  define __glibcpp_long_double_min __glibcpp_f64_min
 #  define __glibcpp_long_double_max __glibcpp_f64_max
 #  define __glibcpp_long_double_digits __glibcpp_f64_digits
 #  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 __glibcpp_long_double_bits == 80
+#elif __LONG_DOUBLE_BIT__ == 80
 #  define __glibcpp_long_double_min __glibcpp_f80_min
 #  define __glibcpp_long_double_max __glibcpp_f80_max
 #  define __glibcpp_long_double_digits __glibcpp_f80_digits
 #  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 __glibcpp_long_double_bits == 96
+#elif __LONG_DOUBLE_BIT__ == 96
 #  define __glibcpp_long_double_min __glibcpp_f96_min
 #  define __glibcpp_long_double_max __glibcpp_f96_max
 #  define __glibcpp_long_double_digits __glibcpp_f96_digits
 #  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 __glibcpp_long_double_bits == 128
+#elif __LONG_DOUBLE_BIT__ == 128
 #  define __glibcpp_long_double_min __glibcpp_f128_min
 #  define __glibcpp_long_double_max __glibcpp_f128_max
 #  define __glibcpp_long_double_digits __glibcpp_f128_digits
@@ -1136,13 +1112,13 @@ namespace std
   // knows about better than we do.) -- Gaby
   typedef unsigned char __glibcpp_byte;
 #define __glibcpp_word_bits 32
-#if __glibcpp_char_bits == __glibcpp_word_bits
+#if __CHAR_BIT__ == __glibcpp_word_bits
 #  define __glibcpp_word unsigned char
-#elif __glibcpp_short_bits == __glibcpp_word_bits
+#elif __SHRT_BIT__ == __glibcpp_word_bits
 #  define __glibcpp_word unsigned short  
-#elif __glibcpp_int_bits == __glibcpp_word_bits
+#elif __INT_BIT__ == __glibcpp_word_bits
 #  define __glibcpp_word unsigned int
-#elif __glibcpp_long_bits == __glibcpp_word_bits
+#elif __LONG_BIT__ == __glibcpp_word_bits
 #  define __glibcpp_word unsigned long
 #endif  
 
@@ -1150,7 +1126,7 @@ namespace std
   // point data types.  Maybe we could avoid the conditional #defines by
   // using the aligned_storage<> extension.  -- Gaby
   typedef const
-#if __glibcpp_float_bits % __glibcpp_word_bits == 0
+#if __FLOAT_BIT__ % __glibcpp_word_bits == 0
     __glibcpp_word __float_storage[sizeof (float) / sizeof (__glibcpp_word)]
 #else
     __glibcpp_byte __float_storage[sizeof (float)]
@@ -1158,7 +1134,7 @@ namespace std
     __attribute__((__aligned__(__alignof__(float))));
 
   typedef const
-#if __glibcpp_double_bits % __glibcpp_word_bits == 0
+#if __DOUBLE_BIT__ % __glibcpp_word_bits == 0
     __glibcpp_word __double_storage[sizeof (double) / sizeof (__glibcpp_word)]
 #else
     __glibcpp_byte __double_storage[sizeof (double)]
@@ -1166,7 +1142,7 @@ namespace std
     __attribute__((__aligned__(__alignof__(double))));
 
   typedef const
-#if __glibcpp_long_double_bits % __glibcpp_word_bits == 0
+#if __LONG_DOUBLE_BIT__ % __glibcpp_word_bits == 0
     __glibcpp_word __long_double_storage[sizeof (long double) / sizeof (__glibcpp_word)]
 #else
     __glibcpp_byte __long_double_storage[sizeof (long double)]