diff options
author | Ben Pfaff <blp@nicira.com> | 2012-08-21 10:47:22 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2012-09-04 12:24:27 -0700 |
commit | 0ee140fb69ec924fe5280c1ceaa82c7a3d8f4223 (patch) | |
tree | 68095d156697e3114fb712053618cd09c7787944 /lib/util.h | |
parent | 3ca1de08b4d0374e4b9389d98351b2b0192c8189 (diff) |
util: New function raw_ctz().
This will acquire a user in an upcoming commit.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'lib/util.h')
-rw-r--r-- | lib/util.h | 25 |
1 files changed, 24 insertions, 1 deletions
@@ -242,9 +242,32 @@ char *xreadlink(const char *filename); char *follow_symlinks(const char *filename); void ignore(bool x OVS_UNUSED); + +/* Returns the number of trailing 0-bits in 'n'. Undefined if 'n' == 0. + * + * This compiles to a single machine instruction ("bsf") with GCC on x86. */ +#if !defined(UINT_MAX) || !defined(UINT32_MAX) +#error "Someone screwed up the #includes." +#elif __GNUC__ >= 4 && UINT_MAX == UINT32_MAX +static inline int +raw_ctz(uint32_t n) +{ + return __builtin_ctz(n); +} +#else +/* Defined in util.c. */ +int raw_ctz(uint32_t n); +#endif + +/* Returns the number of trailing 0-bits in 'n', or 32 if 'n' is 0. */ +static inline int +ctz(uint32_t n) +{ + return n ? raw_ctz(n) : 32; +} + int log_2_floor(uint32_t); int log_2_ceil(uint32_t); -int ctz(uint32_t); int popcount(uint32_t); bool is_all_zeros(const uint8_t *, size_t); |