This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[COMMITTED 2/2] alpha: Fix isnan
- From: Richard Henderson <rth at twiddle dot net>
- To: libc-alpha at sourceware dot org
- Date: Tue, 1 Jul 2014 10:06:37 -0700
- Subject: [COMMITTED 2/2] alpha: Fix isnan
- Authentication-results: sourceware.org; auth=none
- References: <1404234397-29920-1-git-send-email-rth at twiddle dot net>
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 <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 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)
--
1.9.3