diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-07-12 15:30:07 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2007-07-12 15:30:07 +0000 |
commit | 85b34a3d15a11d8d4d1a7046fa9438c760c3c9c1 (patch) | |
tree | e3ae76d8cdaf0393f2359afd7c8311f20b64de94 | |
parent | 31f58f074aaa975ff31fc1f291d197ea656d58a7 (diff) | |
download | glibc-85b34a3d15a11d8d4d1a7046fa9438c760c3c9c1.tar glibc-85b34a3d15a11d8d4d1a7046fa9438c760c3c9c1.tar.gz glibc-85b34a3d15a11d8d4d1a7046fa9438c760c3c9c1.tar.bz2 glibc-85b34a3d15a11d8d4d1a7046fa9438c760c3c9c1.zip |
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.
-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
@@ -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 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" |