From 631021e0aaefbf9fde4b4472e4ec1d51fffb9bbd Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 1 Jul 2014 08:27:49 -0700 Subject: [PATCH] alpha: Fix isnan The isunordered formulation raises SIGFPE for SNaN. --- ChangeLog | 4 ++++ sysdeps/alpha/fpu/bits/mathinline.h | 23 ----------------------- sysdeps/alpha/fpu/s_isnan.c | 4 +++- 3 files changed, 7 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index 39b6b54..a079a18 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2014-07-01 Richard henderson + * 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 diff --git a/sysdeps/alpha/fpu/bits/mathinline.h b/sysdeps/alpha/fpu/bits/mathinline.h index 3d64b56..83f3b4a 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 adfb4cc..d664f0c 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) -- 2.7.4