X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=libringbuffer%2Fbackend_internal.h;h=c9ed81be0e5b5c559ba8de23846a6052ecc8ddea;hb=05cbbadf100053288c7ceccb1ef4ef6763638aea;hp=c4fb7604aa18bf9b3018551257dd3be61285b022;hpb=0d4aa2df26584c00cdb504ff2b3d4a5fdd8f5f08;p=lttng-ust.git diff --git a/libringbuffer/backend_internal.h b/libringbuffer/backend_internal.h index c4fb7604..c9ed81be 100644 --- a/libringbuffer/backend_internal.h +++ b/libringbuffer/backend_internal.h @@ -436,7 +436,7 @@ do { \ /* arch-agnostic implementation */ -static inline int fls(unsigned int x) +static inline int lttng_ust_fls(unsigned int x) { int r = 32; @@ -469,10 +469,26 @@ static inline int get_count_order(unsigned int count) { int order; - order = fls(count) - 1; + order = lttng_ust_fls(count) - 1; if (count & (count - 1)) order++; return order; } +static inline +unsigned int hweight32(unsigned int value) +{ + unsigned int r; + + r = value; + r = r - ((r >> 1) & 0x55555555); + r = (r & 0x33333333) + ((r >> 2) & 0x33333333); + r += r >> 4; + r &= 0x0F0F0F0F; + r += r >> 8; + r += r >> 16; + r &= 0x000000FF; + return r; +} + #endif /* _LINUX_RING_BUFFER_BACKEND_INTERNAL_H */