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"