diff options
author | Richard Henderson <rth@twiddle.net> | 2014-07-01 08:27:49 -0700 |
---|---|---|
committer | Richard Henderson <rth@twiddle.net> | 2014-07-01 09:54:29 -0700 |
commit | 631021e0aaefbf9fde4b4472e4ec1d51fffb9bbd (patch) | |
tree | adbde954b9fc983591973944e92dbedd5aafaad8 | |
parent | a1ac3184fad4e7f28a85dee91825fc85bfaef89a (diff) | |
download | glibc-631021e0aaefbf9fde4b4472e4ec1d51fffb9bbd.tar glibc-631021e0aaefbf9fde4b4472e4ec1d51fffb9bbd.tar.gz glibc-631021e0aaefbf9fde4b4472e4ec1d51fffb9bbd.tar.bz2 glibc-631021e0aaefbf9fde4b4472e4ec1d51fffb9bbd.zip |
alpha: Fix isnan
The isunordered formulation raises SIGFPE for SNaN.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | sysdeps/alpha/fpu/bits/mathinline.h | 23 | ||||
-rw-r--r-- | sysdeps/alpha/fpu/s_isnan.c | 4 |
3 files changed, 7 insertions, 24 deletions
@@ -1,5 +1,9 @@ 2014-07-01 Richard henderson <rth@redhat.com> + * sysdeps/alpha/fpu/bits/mathinline.h (__isnanf): Remove. + (__isnan, __isnanl): Remove. + * sysdeps/alpha/fpu/s_isnan.c (__isnan): Use integer arithmetic. + * sysdeps/alpha/fpu/libm-test-ulps: Update. 2014-07-01 Stefan Liebler <stli@linux.vnet.ibm.com> diff --git a/sysdeps/alpha/fpu/bits/mathinline.h b/sysdeps/alpha/fpu/bits/mathinline.h index 3d64b56107..83f3b4ad0a 100644 --- a/sysdeps/alpha/fpu/bits/mathinline.h +++ b/sysdeps/alpha/fpu/bits/mathinline.h @@ -120,29 +120,6 @@ __NTH (__signbitl (long double __x)) return __builtin_signbitl (__x); #endif } - -/* Test for NaN. Used in the isnan() macro. */ - -__MATH_INLINE int -__NTH (__isnanf (float __x)) -{ - return isunordered (__x, __x); -} - -__MATH_INLINE int -__NTH (__isnan (double __x)) -{ - return isunordered (__x, __x); -} - -#ifndef __NO_LONG_DOUBLE_MATH -__MATH_INLINE int -__NTH (__isnanl (long double __x)) -{ - return isunordered (__x, __x); -} -#endif - #endif /* C99 */ #endif /* __NO_MATH_INLINES */ diff --git a/sysdeps/alpha/fpu/s_isnan.c b/sysdeps/alpha/fpu/s_isnan.c index adfb4ccf36..d664f0cb10 100644 --- a/sysdeps/alpha/fpu/s_isnan.c +++ b/sysdeps/alpha/fpu/s_isnan.c @@ -31,7 +31,9 @@ int __isnan (double x) { - return isunordered (x, x); + uint64_t ix; + EXTRACT_WORDS64 (ix, x); + return ix * 2 > 0xffe0000000000000ul; } hidden_def (__isnan) |