From: Bruno Haible Date: Thu, 13 Oct 2011 22:48:29 +0000 (+0200) Subject: ffsl, ffsll: Optimize for GCC. X-Git-Tag: v0.1~1580 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=4b3d1ed028029965f1fae63b312dd1e0397f54f8;p=gnulib.git ffsl, ffsll: Optimize for GCC. * lib/ffsl.h (FUNC): Use GCC_BUILTIN if defined. * lib/ffsl.c (GCC_BUILTIN): New macro. * lib/ffsll.c (GCC_BUILTIN): Likewise. --- diff --git a/ChangeLog b/ChangeLog index 8b06b2766..866dfa293 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2011-10-13 Bruno Haible + ffsl, ffsll: Optimize for GCC. + * lib/ffsl.h (FUNC): Use GCC_BUILTIN if defined. + * lib/ffsl.c (GCC_BUILTIN): New macro. + * lib/ffsll.c (GCC_BUILTIN): Likewise. + +2011-10-13 Bruno Haible + ffs, bcopy, memset: Support symbol renaming via config.h. * lib/ffs.c: Include . * lib/bcopy.c: Likewise. diff --git a/lib/ffsl.c b/lib/ffsl.c index 0b93796ac..ee99ba7e0 100644 --- a/lib/ffsl.c +++ b/lib/ffsl.c @@ -1,3 +1,4 @@ #define FUNC ffsl #define TYPE long int +#define GCC_BUILTIN __builtin_ffsl #include "ffsl.h" diff --git a/lib/ffsl.h b/lib/ffsl.h index eb7fead56..9f209123d 100644 --- a/lib/ffsl.h +++ b/lib/ffsl.h @@ -31,6 +31,9 @@ int FUNC (TYPE i) { +#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) && defined GCC_BUILTIN + return GCC_BUILTIN (i); +#else int result = 0; unsigned TYPE j = i; @@ -44,4 +47,5 @@ FUNC (TYPE i) j >>= CHAR_BIT * sizeof (unsigned int); result += CHAR_BIT * sizeof (unsigned int); } +#endif } diff --git a/lib/ffsll.c b/lib/ffsll.c index d056d7c26..f0e9425ee 100644 --- a/lib/ffsll.c +++ b/lib/ffsll.c @@ -1,3 +1,4 @@ #define FUNC ffsll #define TYPE long long int +#define GCC_BUILTIN __builtin_ffsll #include "ffsl.h"