From 6e97d1240d6e5cafd706fd20a5550044064e4985 Mon Sep 17 00:00:00 2001 From: Bruno Haible 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 eebe9416f..3176a0363 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2010-12-31 Bruno Haible + 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 + isnand: Fix mistake. * m4/isnand.m4 (gl_HAVE_ISNAND_IN_LIBM): Use __builtin_isnan, not __builtin_isnand. diff --git a/lib/math.in.h b/lib/math.in.h index e3dc54b43..01817d0b0 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.11.0