diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-07-07 19:59:56 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2007-07-07 19:59:56 +0000 |
commit | 32c2052cf06910f6a275223d12391807033d549b (patch) | |
tree | 9616f2b29e48c9a85c88f7999dc2ef8e50e158d3 | |
parent | 4021079f5eb0ac9b1a0f3d791c628d7ce665ee57 (diff) | |
download | glibc-32c2052cf06910f6a275223d12391807033d549b.tar.gz glibc-32c2052cf06910f6a275223d12391807033d549b.tar.xz glibc-32c2052cf06910f6a275223d12391807033d549b.zip |
[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.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | sysdeps/i386/ldbl2mpn.c | 11 | ||||
-rw-r--r-- | sysdeps/ia64/ldbl2mpn.c | 1 | ||||
-rw-r--r-- | sysdeps/x86_64/ldbl2mpn.c | 1 |
4 files changed, 19 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 1d75047cdd..386ff108e2 100644 --- 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-07-01 Jakub Jelinek <jakub@redhat.com> * elf/dl-sysdep.c (_dl_important_hwcaps): Add integer overflow check. diff --git a/sysdeps/i386/ldbl2mpn.c b/sysdeps/i386/ldbl2mpn.c index bf4e4ff43f..b0543b7845 100644 --- a/sysdeps/i386/ldbl2mpn.c +++ b/sysdeps/i386/ldbl2mpn.c @@ -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 index 0000000000..641b789cd4 --- /dev/null +++ b/sysdeps/ia64/ldbl2mpn.c @@ -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 index 0000000000..641b789cd4 --- /dev/null +++ b/sysdeps/x86_64/ldbl2mpn.c @@ -0,0 +1 @@ +#include "../i386/ldbl2mpn.c" |