summaryrefslogtreecommitdiff
path: root/lib/math.in.h
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2010-12-31 15:03:46 +0100
committerBruno Haible <bruno@clisp.org>2010-12-31 15:03:46 +0100
commit6e97d1240d6e5cafd706fd20a5550044064e4985 (patch)
tree19735f75c565a21e5cf3dd3599f91c06bea8fe4c /lib/math.in.h
parentdf7dae24bb4eb1e73f5cb482923348907dbbd0da (diff)
downloadgnulib-6e97d1240d6e5cafd706fd20a5550044064e4985.tar.gz
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.
Diffstat (limited to 'lib/math.in.h')
-rw-r--r--lib/math.in.h10
1 files changed, 8 insertions, 2 deletions
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