From 6e97d1240d6e5cafd706fd20a5550044064e4985 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@clisp.org>
Date: Fri, 31 Dec 2010 15:03:46 +0100
Subject: [PATCH] isnan: Use GCC built-ins when possible.

* lib/math.in.h (gl_isnan_f): Use __builtin_isnanf instead of
__builtin_isnan.
(gl_isnan_l): Use __builtin_isnanl instead of __builtin_isnan.
(isnan): Define using GCC built-ins for GCC >= 4.0.
---
 ChangeLog     |  8 ++++++++
 lib/math.in.h | 10 ++++++++--
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index eebe9416f7..3176a03636 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2010-12-31  Bruno Haible  <bruno@clisp.org>
+
+	isnan: Use GCC built-ins when possible.
+	* lib/math.in.h (gl_isnan_f): Use __builtin_isnanf instead of
+	__builtin_isnan.
+	(gl_isnan_l): Use __builtin_isnanl instead of __builtin_isnan.
+	(isnan): Define using GCC built-ins for GCC >= 4.0.
+
 2010-12-31  Bruno Haible  <bruno@clisp.org>
 
 	isnand: Fix mistake.
diff --git a/lib/math.in.h b/lib/math.in.h
index e3dc54b43c..01817d0b00 100644
--- a/lib/math.in.h
+++ b/lib/math.in.h
@@ -699,7 +699,7 @@ _GL_EXTERN_C int isnanl (long double x);
    that recursively expand back to isnan.  So use the gnulib
    replacements for them directly. */
 #  if @HAVE_ISNANF@ && __GNUC__ >= 4
-#   define gl_isnan_f(x) __builtin_isnan ((float)(x))
+#   define gl_isnan_f(x) __builtin_isnanf ((float)(x))
 #  else
 _GL_EXTERN_C int rpl_isnanf (float x);
 #   define gl_isnan_f(x) rpl_isnanf (x)
@@ -711,7 +711,7 @@ _GL_EXTERN_C int rpl_isnand (double x);
 #   define gl_isnan_d(x) rpl_isnand (x)
 #  endif
 #  if @HAVE_ISNANL@ && __GNUC__ >= 4
-#   define gl_isnan_l(x) __builtin_isnan ((long double)(x))
+#   define gl_isnan_l(x) __builtin_isnanl ((long double)(x))
 #  else
 _GL_EXTERN_C int rpl_isnanl (long double x);
 #   define gl_isnan_l(x) rpl_isnanl (x)
@@ -721,6 +721,12 @@ _GL_EXTERN_C int rpl_isnanl (long double x);
    (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \
     sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \
     gl_isnan_f (x))
+# elif __GNUC__ >= 4
+#  undef isnan
+#  define isnan(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \
+    sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \
+    __builtin_isnanf ((float)(x)))
 # endif
 /* Ensure isnan is a macro.  */
 # ifndef isnan
-- 
2.30.2