isnan: Use GCC built-ins when possible.
authorBruno Haible <bruno@clisp.org>
Fri, 31 Dec 2010 14:03:46 +0000 (15:03 +0100)
committerBruno Haible <bruno@clisp.org>
Fri, 31 Dec 2010 14:03:46 +0000 (15:03 +0100)
* 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
lib/math.in.h

index eebe941..3176a03 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 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.
        * m4/isnand.m4 (gl_HAVE_ISNAND_IN_LIBM): Use __builtin_isnan, not
        __builtin_isnand.
index e3dc54b..01817d0 100644 (file)
@@ -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