summaryrefslogtreecommitdiff
path: root/wsutil/bits_count_ones.h
diff options
context:
space:
mode:
Diffstat (limited to 'wsutil/bits_count_ones.h')
-rw-r--r--wsutil/bits_count_ones.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/wsutil/bits_count_ones.h b/wsutil/bits_count_ones.h
index e2c2f94f3f..6a8fa1a555 100644
--- a/wsutil/bits_count_ones.h
+++ b/wsutil/bits_count_ones.h
@@ -37,15 +37,15 @@
*/
static inline int
-ws_count_ones(const guint32 x)
+ws_count_ones(const guint64 x)
{
- int bits = x;
+ unsigned long long bits = x;
- bits = bits - ((bits >> 1) & 0x55555555);
- bits = (bits & 0x33333333) + ((bits >> 2) & 0x33333333);
- bits = (bits + (bits >> 4)) & 0x0F0F0F0F;
+ bits = bits - ((bits >> 1) & 0x5555555555555555ULL);
+ bits = (bits & 0x3333333333333333ULL) + ((bits >> 2) & 0x3333333333333333ULL);
+ bits = (bits + (bits >> 4)) & 0x0F0F0F0F0F0F0F0F;
- return (bits * 0x01010101) >> 24;
+ return (bits * 0x0101010101010101ULL) >> 56;
}
#endif /* __WSUTIL_BITS_COUNT_ONES_H__ */