Make use of GCC's __builtin_isnan.
authorBruno Haible <bruno@clisp.org>
Sat, 26 Jan 2008 14:37:59 +0000 (15:37 +0100)
committerBruno Haible <bruno@clisp.org>
Sat, 26 Jan 2008 14:37:59 +0000 (15:37 +0100)
ChangeLog
lib/isnand.h
m4/isnand.m4

index 0756be8..2dd3da1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2008-01-26  Bruno Haible  <bruno@clisp.org>
 
+       * m4/isnand.m4 (gl_FUNC_ISNAND_NO_LIBM): Test the GCC >= 4.0 built-in.
+       * lib/isnand.h (isnand): Use the GCC >= 4.0 built-in.
+
+2008-01-26  Bruno Haible  <bruno@clisp.org>
+
        * m4/isnanf.m4 (gl_HAVE_ISNANF_NO_LIBM, gl_ISNANF_WORKS): Test the
        GCC >= 4.0 built-in.
        * lib/isnanf.h (isnanf): Use the GCC >= 4.0 built-in.
index c58697f..d248b2f 100644 (file)
 #if HAVE_ISNAND_IN_LIBC
 /* Get declaration of isnan macro.  */
 # include <math.h>
-# ifdef isnan
+# if __GNUC__ >= 4
+   /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#  undef isnand
+#  define isnand(x) __builtin_isnan ((double)(x))
+# else
 #  undef isnand
 #  define isnand(x) isnan ((double)(x))
 # endif
index 4f747ea..7783b42 100644 (file)
@@ -1,4 +1,4 @@
-# isnand.m4 serial 1
+# isnand.m4 serial 2
 dnl Copyright (C) 2007-2008 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -12,8 +12,15 @@ AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM],
     [gl_cv_func_isnand_no_libm],
     [
       AC_TRY_LINK([#include <math.h>
+                   #if __GNUC__ >= 4
+                   # undef isnand
+                   # define isnand(x) __builtin_isnan ((double)(x))
+                   #else
+                   # undef isnand
+                   # define isnand(x) isnan ((double)(x))
+                   #endif
                    double x;],
-                  [return isnan (x);],
+                  [return isnand (x);],
         [gl_cv_func_isnand_no_libm=yes],
         [gl_cv_func_isnand_no_libm=no])
     ])