This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
3.0.1 PATCH: libstdc++ long double support for m68k-linux
- To: gcc-patches at gcc dot gnu dot org
- Subject: 3.0.1 PATCH: libstdc++ long double support for m68k-linux
- From: Andreas Schwab <schwab at suse dot de>
- Date: 15 Aug 2001 15:30:28 +0200
This defines the appropriate limits for long double on m68k-linux for
libstdc++. Note that there are subtle differences between the i387 and
mc68881 extended float format, see __glibcpp_f80_min vs __glibcpp_f96_min
and __glibcpp_f80_min_exponent vs __glibcpp_f96_min_exponent. I didn't
enable this for all m68k targets because gcc does not define a separate
long double type for all m68k targets either, and the set of targets is
rather random.
Note that __glibcpp_f96_digits10 is set to 19, although LDBL_DIG is 18.
I'm following the i386 configuration here, where there is the same
discrepancy.
Andreas.
2001-08-15 Andreas Schwab <schwab@suse.de>
* include/bits/std_limits.h [__glibcpp_long_double_bits == 96]:
Define appropriate long double limits for m68k extended floating
point.
* config/os/gnu-linux/bits/os_defines.h
(__glibcpp_long_double_bits) [__mc68000__]: Define to 96.
Index: libstdc++-v3/config/os/gnu-linux/bits/os_defines.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/config/os/gnu-linux/bits/os_defines.h,v
retrieving revision 1.8.6.3
diff -u -a -r1.8.6.3 libstdc++-v3/config/os/gnu-linux/bits/os_defines.h
--- libstdc++-v3/config/os/gnu-linux/bits/os_defines.h 2001/08/11 18:12:17 1.8.6.3
+++ libstdc++-v3/config/os/gnu-linux/bits/os_defines.h 2001/08/15 12:57:04
@@ -74,5 +74,9 @@
#if defined (__alpha__) || defined (__powerpc64__)
#define __glibcpp_long_double_bits 64
#endif
+
+#if defined (__mc68000__)
+#define __glibcpp_long_double_bits 96
+#endif
#endif
Index: libstdc++-v3/include/bits/std_limits.h
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/std_limits.h,v
retrieving revision 1.2.2.3
diff -u -a -r1.2.2.3 libstdc++-v3/include/bits/std_limits.h
--- libstdc++-v3/include/bits/std_limits.h 2001/08/14 23:40:04 1.2.2.3
+++ libstdc++-v3/include/bits/std_limits.h 2001/08/15 12:57:04
@@ -205,6 +205,17 @@
#define __glibcpp_f80_min_exponent10 -4931
#define __glibcpp_f80_max_exponent 16384
#define __glibcpp_f80_max_exponent10 4932
+#define __glibcpp_f96_min 1.68105157155604675313e-4932L
+#define __glibcpp_f96_max 1.18973149535723176502e+4932L
+#define __glibcpp_f96_digits 64
+#define __glibcpp_f96_digits10 19
+#define __glibcpp_f96_radix 2
+#define __glibcpp_f96_epsilon 1.08420217248550443401e-19L
+#define __glibcpp_f96_round_error 1.0L
+#define __glibcpp_f96_min_exponent -16382
+#define __glibcpp_f96_min_exponent10 -4931
+#define __glibcpp_f96_max_exponent 16384
+#define __glibcpp_f96_max_exponent10 4932
#define __glibcpp_f128_min 3.362103143112093506262677817321752603E-4932L
#define __glibcpp_f128_max 1.189731495357231765085759326628007016E+4932L
#define __glibcpp_f128_digits 113
@@ -766,6 +777,18 @@
#define __glibcpp_long_double_min_exponent10 __glibcpp_f80_min_exponent10
#define __glibcpp_long_double_max_exponent __glibcpp_f80_max_exponent
#define __glibcpp_long_double_max_exponent10 __glibcpp_f80_max_exponent10
+#elif __glibcpp_long_double_bits == 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_digits10 __glibcpp_f96_digits10
+#define __glibcpp_long_double_radix __glibcpp_f96_radix
+#define __glibcpp_long_double_epsilon __glibcpp_f96_epsilon
+#define __glibcpp_long_double_round_error __glibcpp_f96_round_error
+#define __glibcpp_long_double_min_exponent __glibcpp_f96_min_exponent
+#define __glibcpp_long_double_min_exponent10 __glibcpp_f96_min_exponent10
+#define __glibcpp_long_double_max_exponent __glibcpp_f96_max_exponent
+#define __glibcpp_long_double_max_exponent10 __glibcpp_f96_max_exponent10
#elif __glibcpp_long_double_bits == 128
#define __glibcpp_long_double_min __glibcpp_f128_min
#define __glibcpp_long_double_max __glibcpp_f128_max
--
Andreas Schwab "And now for something
SuSE Labs completely different."
Andreas.Schwab@suse.de
SuSE GmbH, Schanzäckerstr. 10, D-90443 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5