changeset 14060:99b3a26ce54b

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.
author Bruno Haible <bruno@clisp.org>
date Fri, 31 Dec 2010 15:03:46 +0100
parents fedf2b2f460a
children 3d7ddb7340dd
files ChangeLog lib/math.in.h
diffstat 2 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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.
--- a/lib/math.in.h
+++ b/lib/math.in.h
@@ -699,7 +699,7 @@
    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 @@
 #   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 @@
    (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