about summary refs log tree commit diff
path: root/sysdeps/ieee754/dbl-64/s_isnan.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/ieee754/dbl-64/s_isnan.c')
-rw-r--r--sysdeps/ieee754/dbl-64/s_isnan.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/sysdeps/ieee754/dbl-64/s_isnan.c b/sysdeps/ieee754/dbl-64/s_isnan.c
index 82723eeb8a..1f1535dea3 100644
--- a/sysdeps/ieee754/dbl-64/s_isnan.c
+++ b/sysdeps/ieee754/dbl-64/s_isnan.c
@@ -10,10 +10,6 @@
  * ====================================================
  */
 
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: s_isnan.c,v 1.8 1995/05/10 20:47:36 jtc Exp $";
-#endif
-
 /*
  * isnan(x) returns 1 is x is nan, else 0;
  * no branching!
@@ -23,17 +19,16 @@ static char rcsid[] = "$NetBSD: s_isnan.c,v 1.8 1995/05/10 20:47:36 jtc Exp $";
 #include <math_private.h>
 #include <ldbl-classify-compat.h>
 #include <shlib-compat.h>
+#include <stdint.h>
 
-#undef __isnan
 int
 __isnan (double x)
 {
-  int32_t hx, lx;
-  EXTRACT_WORDS (hx, lx, x);
-  hx &= 0x7fffffff;
-  hx |= (uint32_t) (lx | (-lx)) >> 31;
-  hx = 0x7ff00000 - hx;
-  return (int) (((uint32_t) hx) >> 31);
+  int64_t hx;
+  EXTRACT_WORDS64 (hx, x);
+  hx &= UINT64_C (0x7fffffffffffffff);
+  hx = UINT64_C (0x7ff0000000000000) - hx;
+  return (int)(((uint64_t)hx)>>63);
 }
 hidden_def (__isnan)
 weak_alias (__isnan, isnan)