Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 2003d1abfa0c20ee77815f0da33e2c1c > files > 55

glibc-2.5-49.el5_5.5.src.rpm

2007-06-06  Jakub Jelinek  <jakub@redhat.com>

	[BZ #4586]
	* sysdeps/i386/ldbl2mpn.c (__mpn_extract_long_double): Treat
	pseudo-zeros as zero.
	* sysdeps/x86_64/ldbl2mpn.c: New file.
	* sysdeps/ia64/ldbl2mpn.c: New file.

--- libc/sysdeps/i386/ldbl2mpn.c	6 Jul 2001 04:55:52 -0000	1.4
+++ libc/sysdeps/i386/ldbl2mpn.c	8 Jun 2007 02:50:11 -0000	1.5
@@ -19,7 +19,7 @@
 #include "gmp.h"
 #include "gmp-impl.h"
 #include "longlong.h"
-#include "ieee754.h"
+#include <ieee754.h>
 #include <float.h>
 #include <stdlib.h>
 
@@ -46,7 +46,7 @@ __mpn_extract_long_double (mp_ptr res_pt
 #elif BITS_PER_MP_LIMB == 64
   /* Hopefully the compiler will combine the two bitfield extracts
      and this composition into just the original quadword extract.  */
-  res_ptr[0] = ((unsigned long int) u.ieee.mantissa0 << 32) | u.ieee.mantissa1;
+  res_ptr[0] = ((mp_limb_t) u.ieee.mantissa0 << 32) | u.ieee.mantissa1;
   #define N 1
 #else
   #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for"
@@ -109,6 +109,13 @@ __mpn_extract_long_double (mp_ptr res_pt
 	    }
 	}
     }
+  else if (u.ieee.exponent < 0x7fff
+#if N == 2
+	   && res_ptr[0] == 0
+#endif
+	   && res_ptr[N - 1] == 0)
+    /* Pseudo zero.  */
+    *expt = 0;
 
   return N;
 }
--- libc/sysdeps/ia64/ldbl2mpn.c	1 Jan 1970 00:00:00 -0000
+++ libc/sysdeps/ia64/ldbl2mpn.c	8 Jun 2007 02:50:49 -0000	1.1
@@ -0,0 +1 @@
+#include "../i386/ldbl2mpn.c"
--- libc/sysdeps/x86_64/ldbl2mpn.c	1 Jan 1970 00:00:00 -0000
+++ libc/sysdeps/x86_64/ldbl2mpn.c	8 Jun 2007 02:50:35 -0000	1.1
@@ -0,0 +1 @@
+#include "../i386/ldbl2mpn.c"