diff options
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128/k_cosl.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128/k_sincosl.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128/k_sinl.c | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/k_cosl.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/k_sincosl.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/k_sinl.c | 2 |
7 files changed, 35 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog index 33bb4f89d0..a993315e9e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2012-03-22 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/ieee754/ldbl-128/k_cosl.c (__kernel_cosl): Negate y if + negating x to take absolute value. + * sysdeps/ieee754/ldbl-128/k_sincosl.c (__kernel_sincosl): + Likewise. + * sysdeps/ieee754/ldbl-128ibm/k_cosl.c (__kernel_cosl): Likewise. + * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c (__kernel_sincosl): + Likewise. + * sysdeps/ieee754/ldbl-128/k_sinl.c (__kernel_sinl): Negate y when + computing low part if x was negated. + * sysdeps/ieee754/ldbl-128ibm/k_sinl.c (__kernel_sinl): Likewise. + 2012-03-21 H.J. Lu <hongjiu.lu@intel.com> * elf/tst-auditmod1.c: Support la_x32_gnu_pltenter and diff --git a/sysdeps/ieee754/ldbl-128/k_cosl.c b/sysdeps/ieee754/ldbl-128/k_cosl.c index 4cb9dd1f56..aa447ec1db 100644 --- a/sysdeps/ieee754/ldbl-128/k_cosl.c +++ b/sysdeps/ieee754/ldbl-128/k_cosl.c @@ -105,7 +105,11 @@ __kernel_cosl(long double x, long double y) cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l). */ index = 0x3ffe - (tix >> 16); hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - x = fabsl (x); + if (signbit (x)) + { + x = -x; + y = -y; + } switch (index) { case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break; diff --git a/sysdeps/ieee754/ldbl-128/k_sincosl.c b/sysdeps/ieee754/ldbl-128/k_sincosl.c index 98c5d62780..00a21c45d1 100644 --- a/sysdeps/ieee754/ldbl-128/k_sincosl.c +++ b/sysdeps/ieee754/ldbl-128/k_sincosl.c @@ -132,7 +132,11 @@ __kernel_sincosl(long double x, long double y, long double *sinx, long double *c cosl(h+l) = cosl(h)cosl(l) - sinl(h)sinl(l). */ index = 0x3ffe - (tix >> 16); hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - x = fabsl (x); + if (signbit (x)) + { + x = -x; + y = -y; + } switch (index) { case 0: index = ((45 << 10) + hix - 0x3ffe0000) >> 8; break; diff --git a/sysdeps/ieee754/ldbl-128/k_sinl.c b/sysdeps/ieee754/ldbl-128/k_sinl.c index 6eaf878d94..1f0ca8c7f9 100644 --- a/sysdeps/ieee754/ldbl-128/k_sinl.c +++ b/sysdeps/ieee754/ldbl-128/k_sinl.c @@ -116,7 +116,7 @@ __kernel_sinl(long double x, long double y, int iy) SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0); if (iy) - l = y - (h - x); + l = (ix < 0 ? -y : y) - (h - x); else l = x - h; z = l * l; diff --git a/sysdeps/ieee754/ldbl-128ibm/k_cosl.c b/sysdeps/ieee754/ldbl-128ibm/k_cosl.c index 52414319a6..fc01374688 100644 --- a/sysdeps/ieee754/ldbl-128ibm/k_cosl.c +++ b/sysdeps/ieee754/ldbl-128ibm/k_cosl.c @@ -123,7 +123,11 @@ __kernel_cosl(long double x, long double y) index = 0x3fe - (tix >> 20); hix = (tix + (0x200 << index)) & (0xfffffc00 << index); - x = fabsl (x); + if (signbit (x)) + { + x = -x; + y = -y; + } switch (index) { case 0: index = ((45 << 14) + hix - 0x3fe00000) >> 12; break; diff --git a/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c b/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c index f3dd954887..98fe07d7a7 100644 --- a/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c +++ b/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c @@ -151,7 +151,11 @@ __kernel_sincosl(long double x, long double y, long double *sinx, long double *c index = 0x3fe - (tix >> 20); hix = (tix + (0x2000 << index)) & (0xffffc000 << index); - x = fabsl (x); + if (signbit (x)) + { + x = -x; + y = -y; + } switch (index) { case 0: index = ((45 << 14) + hix - 0x3fe00000) >> 12; break; diff --git a/sysdeps/ieee754/ldbl-128ibm/k_sinl.c b/sysdeps/ieee754/ldbl-128ibm/k_sinl.c index 484b65fc8e..94aba0b62d 100644 --- a/sysdeps/ieee754/ldbl-128ibm/k_sinl.c +++ b/sysdeps/ieee754/ldbl-128ibm/k_sinl.c @@ -134,7 +134,7 @@ __kernel_sinl(long double x, long double y, int iy) */ SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0); if (iy) - l = y - (h - x); + l = (ix < 0 ? -y : y) - (h - x); else l = x - h; z = l * l; |