bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

improve clang support (2)


From: Bruno Haible
Subject: improve clang support (2)
Date: Wed, 05 Aug 2020 19:59:53 +0200
User-agent: KMail/5.1.3 (Linux/4.4.0-186-generic; KDE/5.18.0; x86_64; ; )

clang (>= 4.0.0 at least) has also the built-ins
  __builtin_ctz
  __builtin_ctzl
  __builtin_ctzll
  __builtin_ffs
  __builtin_ffsl
  __builtin_ffsll


2020-08-05  Bruno Haible  <bruno@clisp.org>

        Use __builtin_ctz{,l,ll} and __builtin_ffs{,l,ll} with clang everywhere.
        * lib/count-trailing-zeros.h (COUNT_TRAILING_ZEROS): Use the GCC
        built-in also on clang.
        * lib/ffs.c: With clang, use the GCC built-in, not <intrin.h>.
        * lib/ffsl.h: Likewise. Assume GCC_BUILTIN is defined.

diff --git a/lib/count-trailing-zeros.h b/lib/count-trailing-zeros.h
index 1eb5fb9..727b21d 100644
--- a/lib/count-trailing-zeros.h
+++ b/lib/count-trailing-zeros.h
@@ -38,7 +38,8 @@ extern "C" {
    expand to code that computes the number of trailing zeros of the local
    variable 'x' of type TYPE (an unsigned integer type) and return it
    from the current function.  */
-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) \
+    || (__clang_major__ >= 4)
 # define COUNT_TRAILING_ZEROS(BUILTIN, MSC_BUILTIN, TYPE)               \
   return x ? BUILTIN (x) : CHAR_BIT * sizeof x;
 #elif _MSC_VER
diff --git a/lib/ffs.c b/lib/ffs.c
index d8a65ca..c94b8ac 100644
--- a/lib/ffs.c
+++ b/lib/ffs.c
@@ -23,14 +23,14 @@
 
 #include <limits.h>
 
-#if defined _MSC_VER
+#if defined _MSC_VER && !(__clang_major__ >= 4)
 # include <intrin.h>
 #endif
 
 int
 ffs (int i)
 {
-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__clang_major__ 
>= 4)
   return __builtin_ffs (i);
 #elif defined _MSC_VER
   /* _BitScanForward
diff --git a/lib/ffsl.h b/lib/ffsl.h
index fa5c093..b449f19 100644
--- a/lib/ffsl.h
+++ b/lib/ffsl.h
@@ -27,7 +27,7 @@
 #include <limits.h>
 #include <strings.h>
 
-#if defined _MSC_VER
+#if defined _MSC_VER && !(__clang_major__ >= 4)
 # include <intrin.h>
 /* Copied from ffs.c.  */
 static inline int
@@ -50,7 +50,8 @@ ffs (int i)
 int
 FUNC (TYPE i)
 {
-#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) && defined 
GCC_BUILTIN
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) \
+    || (__clang_major__ >= 4)
   return GCC_BUILTIN (i);
 #elif defined _MSC_VER && defined MSVC_BUILTIN
   /* _BitScanForward, _BitScanForward64




reply via email to

[Prev in Thread] Current Thread [Next in Thread]