diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2009-05-22 08:35:15 -0700 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2009-05-22 08:35:15 -0700 |
commit | 38ae768d88c47dd06030104eb3376212b0d8d164 (patch) | |
tree | 0646aa5dd41d96365cd73a5a658c76642c9cfd21 | |
parent | 0323b051be1bee42592e6813064031aacfd6063d (diff) | |
download | glibc-38ae768d88c47dd06030104eb3376212b0d8d164.tar.gz glibc-38ae768d88c47dd06030104eb3376212b0d8d164.tar.xz glibc-38ae768d88c47dd06030104eb3376212b0d8d164.zip |
Fix errno for IBM long double.
After the last addition to the math test suite PPC routines haven't been adjusted so far.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/s_cosl.c | 7 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/s_expm1l.c | 6 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/s_sinl.c | 8 | ||||
-rw-r--r-- | sysdeps/ieee754/ldbl-128ibm/s_tanl.c | 8 |
5 files changed, 27 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog index 2c1d66ca43..45be576e1d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2009-05-22 Andreas Schwab <schwab@linux-m68k.org> + * sysdeps/ieee754/ldbl-128ibm/s_sinl.c: Set errno for ±Inf. + * sysdeps/ieee754/ldbl-128ibm/s_cosl.c: Likewise. + * sysdeps/ieee754/ldbl-128ibm/s_tanl.c: Likewise. + * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: Set errno for overflow. + * sysdeps/powerpc/powerpc32/____longjmp_chk.S: New file. * sysdeps/powerpc/powerpc64/____longjmp_chk.S: New file. * sysdeps/powerpc/powerpc32/__longjmp-common.S: Use CHECK_SP if diff --git a/sysdeps/ieee754/ldbl-128ibm/s_cosl.c b/sysdeps/ieee754/ldbl-128ibm/s_cosl.c index 59a8196706..8470850fc8 100644 --- a/sysdeps/ieee754/ldbl-128ibm/s_cosl.c +++ b/sysdeps/ieee754/ldbl-128ibm/s_cosl.c @@ -44,6 +44,7 @@ * TRIG(x) returns trig(x) nearly rounded */ +#include <errno.h> #include "math.h" #include "math_private.h" #include <math_ldbl_opt.h> @@ -67,9 +68,11 @@ return __kernel_cosl(x,z); /* cos(Inf or NaN) is NaN */ - else if (ix>=0x7ff0000000000000LL) + else if (ix>=0x7ff0000000000000LL) { + if (ix == 0x7ff0000000000000LL) + __set_errno (EDOM); return x-x; - + } /* argument reduction needed */ else { n = __ieee754_rem_pio2l(x,y); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c b/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c index 735006575f..f631eddf59 100644 --- a/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c +++ b/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c @@ -51,6 +51,7 @@ License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include <errno.h> #include "math.h" #include "math_private.h" #include <math_ldbl_opt.h> @@ -120,7 +121,10 @@ __expm1l (long double x) /* Overflow. */ if (x > maxlog) - return (big * big); + { + __set_errno (ERANGE); + return (big * big); + } /* Minimum value. */ if (x < minarg) diff --git a/sysdeps/ieee754/ldbl-128ibm/s_sinl.c b/sysdeps/ieee754/ldbl-128ibm/s_sinl.c index 8cc592c612..bd72225e18 100644 --- a/sysdeps/ieee754/ldbl-128ibm/s_sinl.c +++ b/sysdeps/ieee754/ldbl-128ibm/s_sinl.c @@ -44,6 +44,7 @@ * TRIG(x) returns trig(x) nearly rounded */ +#include <errno.h> #include "math.h" #include "math_private.h" #include <math_ldbl_opt.h> @@ -67,8 +68,11 @@ return __kernel_sinl(x,z,0); /* sin(Inf or NaN) is NaN */ - else if (ix>=0x7ff0000000000000LL) return x-x; - + else if (ix>=0x7ff0000000000000LL) { + if (ix == 0x7ff0000000000000LL) + __set_errno (EDOM); + return x-x; + } /* argument reduction needed */ else { n = __ieee754_rem_pio2l(x,y); diff --git a/sysdeps/ieee754/ldbl-128ibm/s_tanl.c b/sysdeps/ieee754/ldbl-128ibm/s_tanl.c index ea5a7f0ffb..913f38f243 100644 --- a/sysdeps/ieee754/ldbl-128ibm/s_tanl.c +++ b/sysdeps/ieee754/ldbl-128ibm/s_tanl.c @@ -44,6 +44,7 @@ * TRIG(x) returns trig(x) nearly rounded */ +#include <errno.h> #include "math.h" #include "math_private.h" #include <math_ldbl_opt.h> @@ -66,8 +67,11 @@ if(ix <= 0x3fe921fb54442d10LL) return __kernel_tanl(x,z,1); /* tanl(Inf or NaN) is NaN */ - else if (ix>=0x7ff0000000000000LL) return x-x; /* NaN */ - + else if (ix>=0x7ff0000000000000LL) { + if (ix == 0x7ff0000000000000LL) + __set_errno (EDOM); + return x-x; /* NaN */ + } /* argument reduction needed */ else { n = __ieee754_rem_pio2l(x,y); |