X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Futil.h;h=70f36919a5bd0d645225902a10476bf24fe18a4a;hb=bee6b8bc16b1c42fef8843cffe4d68b464cddadf;hp=c087b53f4f3cf7a6bca6345e9014904e8b245055;hpb=fe9d0898828728fc6ce4667527c21beb8fa25ac2;p=openvswitch diff --git a/lib/util.h b/lib/util.h index c087b53f..70f36919 100644 --- a/lib/util.h +++ b/lib/util.h @@ -271,6 +271,27 @@ zero_rightmost_1bit(uintmax_t x) { return x & (x - 1); } + +/* Returns the index of the rightmost 1-bit in 'x' (e.g. 01011000 => 3), or 32 + * if 'x' is 0. + * + * Unlike the other functions for rightmost 1-bits, this function only works + * with 32-bit integers. */ +static inline uint32_t +rightmost_1bit_idx(uint32_t x) +{ + return x ? ctz(x) : 32; +} + +/* Returns the index of the rightmost 1-bit in 'x' (e.g. 01011000 => 6), or 32 + * if 'x' is 0. + * + * This function only works with 32-bit integers. */ +static inline uint32_t +leftmost_1bit_idx(uint32_t x) +{ + return x ? log_2_floor(x) : 32; +} bool is_all_zeros(const uint8_t *, size_t); bool is_all_ones(const uint8_t *, size_t);