This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: 3.0.1 PATCH: libstdc++ long double support for m68k-linux
Gabriel Dos Reis <gdr@codesourcery.com> writes:
|> Andreas Schwab <schwab@suse.de> writes:
|>
|> [...]
|>
|> | 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.
|>
|> Hmm, anny discrepancy is an error <limits>, pleas would you be willing
|> to correct that? Thanks.
The formula quoted in the standard for *_DIG is floor((p-1)log10(b)),
where p is *_MANT_DIG and b is FLT_RADIX. According to my maths,
floor(63*log10(2)) is 18, so this should be the correct value. If you
agree, here is a new patch:
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.
(__glibcpp_f80_digits10): Correct to 18.
* 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
--- libstdc++-v3/include/bits/std_limits.h.~1.2.2.3.~ Wed Aug 15 10:53:04 2001
+++ libstdc++-v3/include/bits/std_limits.h Wed Aug 15 16:16:27 2001
@@ -197,7 +197,7 @@
#define __glibcpp_f80_min 3.36210314311209350626e-4932L
#define __glibcpp_f80_max 1.18973149535723176502e+4932L
#define __glibcpp_f80_digits 64
-#define __glibcpp_f80_digits10 19
+#define __glibcpp_f80_digits10 18
#define __glibcpp_f80_radix 2
#define __glibcpp_f80_epsilon 1.08420217248550443401e-19L
#define __glibcpp_f80_round_error 1.0L
@@ -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 18
+#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