summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libglusterfs/src/common-utils.c8
-rw-r--r--xlators/cluster/ec/src/ec-helpers.c2
2 files changed, 7 insertions, 3 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c
index bdf340d8612..56f545f28de 100644
--- a/libglusterfs/src/common-utils.c
+++ b/libglusterfs/src/common-utils.c
@@ -4616,7 +4616,7 @@ int
gf_bits_count (uint64_t n)
{
int val = 0;
-#ifdef _GNU_SOURCE
+#if defined(__GNUC__) || defined(__clang__)
val = __builtin_popcountll (n);
#else
n -= (n >> 1) & 0x5555555555555555ULL;
@@ -4633,7 +4633,11 @@ gf_bits_count (uint64_t n)
int
gf_bits_index (uint64_t n)
{
- return ffsll(n) - 1;
+#if defined(__GNUC__) || defined(__clang__)
+ return __builtin_ffsll (n) - 1;
+#else
+ return ffsll (n) - 1;
+#endif
}
const char*
diff --git a/xlators/cluster/ec/src/ec-helpers.c b/xlators/cluster/ec/src/ec-helpers.c
index 751d45a63f6..4e9771f5308 100644
--- a/xlators/cluster/ec/src/ec-helpers.c
+++ b/xlators/cluster/ec/src/ec-helpers.c
@@ -102,7 +102,7 @@ int32_t ec_bits_consume(uint64_t * n)
tmp &= -tmp;
*n ^= tmp;
- return ffsll(tmp) - 1;
+ return gf_bits_index(tmp);
}
size_t ec_iov_copy_to(void * dst, struct iovec * vector, int32_t count,