]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
2007-06-06 Jakub Jelinek <jakub@redhat.com>
authorJakub Jelinek <jakub@redhat.com>
Thu, 12 Jul 2007 15:30:07 +0000 (15:30 +0000)
committerJakub Jelinek <jakub@redhat.com>
Thu, 12 Jul 2007 15:30:07 +0000 (15:30 +0000)
[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.

ChangeLog
sysdeps/i386/ldbl2mpn.c
sysdeps/ia64/ldbl2mpn.c [new file with mode: 0644]
sysdeps/x86_64/ldbl2mpn.c [new file with mode: 0644]

index 9340bd95d880ec5779bc88a41752e8e904adca8d..94664d408cc885caf05923e3e7e0287b054cbfaf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+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.
+
 2007-06-05  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c
index bf4e4ff43fb7e70b85efd8c8ef126f98996a8c1e..b0543b7845b5374608069ebe70d910df7697edb2 100644 (file)
@@ -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_ptr, mp_size_t size,
 #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_ptr, mp_size_t size,
            }
        }
     }
+  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;
 }
diff --git a/sysdeps/ia64/ldbl2mpn.c b/sysdeps/ia64/ldbl2mpn.c
new file mode 100644 (file)
index 0000000..641b789
--- /dev/null
@@ -0,0 +1 @@
+#include "../i386/ldbl2mpn.c"
diff --git a/sysdeps/x86_64/ldbl2mpn.c b/sysdeps/x86_64/ldbl2mpn.c
new file mode 100644 (file)
index 0000000..641b789
--- /dev/null
@@ -0,0 +1 @@
+#include "../i386/ldbl2mpn.c"