]> Savannah Git Hosting - gnulib.git/commitdiff
ffsl, ffsll: Optimize for GCC.
authorBruno Haible <bruno@clisp.org>
Thu, 13 Oct 2011 22:48:29 +0000 (00:48 +0200)
committerBruno Haible <bruno@clisp.org>
Thu, 13 Oct 2011 22:48:29 +0000 (00:48 +0200)
* lib/ffsl.h (FUNC): Use GCC_BUILTIN if defined.
* lib/ffsl.c (GCC_BUILTIN): New macro.
* lib/ffsll.c (GCC_BUILTIN): Likewise.

ChangeLog
lib/ffsl.c
lib/ffsl.h
lib/ffsll.c

index 8b06b276658b9175e257c460b63c52a7062b88fc..866dfa293d1854a0106d527816016fed66fae2b9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2011-10-13  Bruno Haible  <bruno@clisp.org>
+
+       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  <bruno@clisp.org>
 
        ffs, bcopy, memset: Support symbol renaming via config.h.
index 0b93796ac360a42f0ecf7b2dd0d826f66c2647ce..ee99ba7e0122956dbe98da329c7f09c06ee9de1f 100644 (file)
@@ -1,3 +1,4 @@
 #define FUNC ffsl
 #define TYPE long int
+#define GCC_BUILTIN __builtin_ffsl
 #include "ffsl.h"
index eb7fead56de7615020bb9790b6017f2bff2c99ef..9f209123d98f7ce6a1643d81f382d355ecf84fad 100644 (file)
@@ -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
 }
index d056d7c26e6b928e9ee45085ede34c0a4fcf62d7..f0e9425eedd53b16e64f345b8249ca81f0e2b755 100644 (file)
@@ -1,3 +1,4 @@
 #define FUNC ffsll
 #define TYPE long long int
+#define GCC_BUILTIN __builtin_ffsll
 #include "ffsl.h"