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


Andreas Schwab <schwab@suse.de> writes:

|> 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:

I forgot to check the other *_digits10 definitions, there are more errors
like this, so here is another patch (sorry).

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.
        (__glibcpp_f32_digits10): Corrected, off by one.
        (__glibcpp_f80_digits10): Likewise.
        (__glibcpp_f128_digits10): Likewise.
	* 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:21:20 2001
@@ -175,7 +175,7 @@
 #define __glibcpp_f32_min 1.17549435e-38F
 #define __glibcpp_f32_max 3.40282347e+38F
 #define __glibcpp_f32_digits 24
-#define __glibcpp_f32_digits10 7
+#define __glibcpp_f32_digits10 6
 #define __glibcpp_f32_radix 2
 #define __glibcpp_f32_epsilon 1.19209290e-07F
 #define __glibcpp_f32_round_error 1.0F
@@ -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,10 +205,21 @@
 #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
-#define __glibcpp_f128_digits10 34
+#define __glibcpp_f128_digits10 33
 #define __glibcpp_f128_radix 2
 #define __glibcpp_f128_epsilon 1.925929944387235853055977942584927319E-34L
 #define __glibcpp_f128_round_error 1.0L
@@ -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]