changeset 9648:b0279d822a0e

Make use of GCC's __builtin_isnan.
author Bruno Haible <bruno@clisp.org>
date Sat, 26 Jan 2008 15:37:59 +0100
parents 56547f123073
children 62b023b56d7d
files ChangeLog lib/isnand.h m4/isnand.m4
diffstat 3 files changed, 19 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+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
--- a/lib/isnand.h
+++ b/lib/isnand.h
@@ -17,7 +17,11 @@
 #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
--- a/m4/isnand.m4
+++ b/m4/isnand.m4
@@ -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 @@
     [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])
     ])