This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]