X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Futil.c;h=c90d556c316a3ef5e5b49bbcc8dad8762993d4b7;hb=3e34fbdd62bcd79dad4f62ba6ec920d8f3be71bb;hp=256421a6d52c7be3d3ba22b34a8e36ede054e08a;hpb=a656cb7736fd9f5926c2b1bdd6f50dafc3aa796a;p=openvswitch diff --git a/lib/util.c b/lib/util.c index 256421a6..c90d556c 100644 --- a/lib/util.c +++ b/lib/util.c @@ -790,38 +790,34 @@ log_2_ceil(uint32_t n) return log_2_floor(n) + !IS_POW2(n); } -/* Returns the number of trailing 0-bits in 'n', or 32 if 'n' is 0. */ -int -ctz(uint32_t n) -{ - if (!n) { - return 32; - } else { +/* Returns the number of trailing 0-bits in 'n'. Undefined if 'n' == 0. */ #if !defined(UINT_MAX) || !defined(UINT32_MAX) #error "Someone screwed up the #includes." #elif __GNUC__ >= 4 && UINT_MAX == UINT32_MAX - return __builtin_ctz(n); +/* Defined inline in util.h. */ #else - unsigned int k; - int count = 31; +static int +raw_ctz(uint32_t n) +{ + unsigned int k; + int count = 31; #define CTZ_STEP(X) \ - k = n << (X); \ - if (k) { \ - count -= X; \ - n = k; \ - } - CTZ_STEP(16); - CTZ_STEP(8); - CTZ_STEP(4); - CTZ_STEP(2); - CTZ_STEP(1); + k = n << (X); \ + if (k) { \ + count -= X; \ + n = k; \ + } + CTZ_STEP(16); + CTZ_STEP(8); + CTZ_STEP(4); + CTZ_STEP(2); + CTZ_STEP(1); #undef CTZ_STEP - return count; -#endif - } + return count; } +#endif /* Returns the number of 1-bits in 'x', between 0 and 32 inclusive. */ int