Acked-by: Jarno Rajahalme <jrajaha...@gmail.com> On Nov 19, 2013, at 12:13 AM, YAMAMOTO Takashi <yamam...@valinux.co.jp> wrote:
> This avoids a conflict with NetBSD's strings.h/libc. > (http://netbsd.gw.com/cgi-bin/man-cgi?popcount++NetBSD-current) > > The new name is suggested by Ben Pfaff. > > Signed-off-by: YAMAMOTO Takashi <yamam...@valinux.co.jp> > --- > lib/flow.c | 5 +++-- > lib/util.c | 16 ++++++++-------- > lib/util.h | 2 +- > tests/library.at | 2 +- > tests/test-util.c | 18 +++++++++--------- > 5 files changed, 22 insertions(+), 21 deletions(-) > > diff --git a/lib/flow.c b/lib/flow.c > index 63c6ef8..be1c309 100644 > --- a/lib/flow.c > +++ b/lib/flow.c > @@ -1101,7 +1101,7 @@ flow_compose(struct ofpbuf *b, const struct flow *flow) > static int > miniflow_n_values(const struct miniflow *flow) > { > - return popcount(flow->map); > + return count_1bits(flow->map); > } > > static uint32_t * > @@ -1221,7 +1221,8 @@ miniflow_get__(const struct miniflow *flow, unsigned > int u32_ofs) > static const uint32_t zero = 0; > return &zero; > } > - return flow->values + popcount(flow->map & ((UINT64_C(1) << u32_ofs) - > 1)); > + return flow->values + > + count_1bits(flow->map & ((UINT64_C(1) << u32_ofs) - 1)); > } > > /* Returns the uint32_t that would be at byte offset '4 * u32_ofs' if 'flow' > diff --git a/lib/util.c b/lib/util.c > index eb8beca..c2ffab2 100644 > --- a/lib/util.c > +++ b/lib/util.c > @@ -918,7 +918,7 @@ raw_ctz(uint64_t n) > > /* Returns the number of 1-bits in 'x', between 0 and 32 inclusive. */ > static unsigned int > -popcount32(uint32_t x) > +count_1bits_32(uint32_t x) > { > /* In my testing, this implementation is over twice as fast as any other > * portable implementation that I tried, including GCC 4.4 > @@ -940,21 +940,21 @@ popcount32(uint32_t x) > #define INIT32(X) INIT16(X), INIT16((X) + 16) > #define INIT64(X) INIT32(X), INIT32((X) + 32) > > - static const uint8_t popcount8[256] = { > + static const uint8_t count_1bits_8[256] = { > INIT64(0), INIT64(64), INIT64(128), INIT64(192) > }; > > - return (popcount8[x & 0xff] + > - popcount8[(x >> 8) & 0xff] + > - popcount8[(x >> 16) & 0xff] + > - popcount8[x >> 24]); > + return (count_1bits_8[x & 0xff] + > + count_1bits_8[(x >> 8) & 0xff] + > + count_1bits_8[(x >> 16) & 0xff] + > + count_1bits_8[x >> 24]); > } > > /* Returns the number of 1-bits in 'x', between 0 and 64 inclusive. */ > unsigned int > -popcount(uint64_t x) > +count_1bits(uint64_t x) > { > - return popcount32(x) + popcount32(x >> 32); > + return count_1bits_32(x) + count_1bits_32(x >> 32); > } > > /* Returns true if the 'n' bytes starting at 'p' are zeros. */ > diff --git a/lib/util.h b/lib/util.h > index 4e2b2a7..acb2d8f 100644 > --- a/lib/util.h > +++ b/lib/util.h > @@ -287,7 +287,7 @@ void ignore(bool x OVS_UNUSED); > > int log_2_floor(uint32_t); > int log_2_ceil(uint32_t); > -unsigned int popcount(uint64_t); > +unsigned int count_1bits(uint64_t); > > /* Returns the number of trailing 0-bits in 'n'. Undefined if 'n' == 0. */ > #if __GNUC__ >= 4 > diff --git a/tests/library.at b/tests/library.at > index 5cd6c4e..6e28573 100644 > --- a/tests/library.at > +++ b/tests/library.at > @@ -114,7 +114,7 @@ m4_foreach( > [[ctz], > [round_up_pow2], > [round_down_pow2], > - [popcount], > + [count_1bits], > [log_2_floor], > [bitwise_copy], > [bitwise_zero], > diff --git a/tests/test-util.c b/tests/test-util.c > index e66987d..7183f46 100644 > --- a/tests/test-util.c > +++ b/tests/test-util.c > @@ -188,17 +188,17 @@ shuffle(uint64_t *p, size_t n) > } > > static void > -check_popcount(uint64_t x, int n) > +check_count_1bits(uint64_t x, int n) > { > - if (popcount(x) != n) { > - fprintf(stderr, "popcount(%#"PRIx64") is %d but should be %d\n", > - x, popcount(x), n); > + if (count_1bits(x) != n) { > + fprintf(stderr, "count_1bits(%#"PRIx64") is %d but should be %d\n", > + x, count_1bits(x), n); > abort(); > } > } > > static void > -test_popcount(int argc OVS_UNUSED, char *argv[] OVS_UNUSED) > +test_count_1bits(int argc OVS_UNUSED, char *argv[] OVS_UNUSED) > { > uint64_t bits[64]; > int i; > @@ -207,7 +207,7 @@ test_popcount(int argc OVS_UNUSED, char *argv[] > OVS_UNUSED) > bits[i] = UINT64_C(1) << i; > } > > - check_popcount(0, 0); > + check_count_1bits(0, 0); > > for (i = 0; i < 1000; i++) { > uint64_t x = 0; > @@ -216,14 +216,14 @@ test_popcount(int argc OVS_UNUSED, char *argv[] > OVS_UNUSED) > shuffle(bits, ARRAY_SIZE(bits)); > for (j = 0; j < 64; j++) { > x |= bits[j]; > - check_popcount(x, j + 1); > + check_count_1bits(x, j + 1); > } > assert(x == UINT64_MAX); > > shuffle(bits, ARRAY_SIZE(bits)); > for (j = 63; j >= 0; j--) { > x &= ~bits[j]; > - check_popcount(x, j); > + check_count_1bits(x, j); > } > assert(x == 0); > } > @@ -966,7 +966,7 @@ static const struct command commands[] = { > {"ctz", 0, 0, test_ctz}, > {"round_up_pow2", 0, 0, test_round_up_pow2}, > {"round_down_pow2", 0, 0, test_round_down_pow2}, > - {"popcount", 0, 0, test_popcount}, > + {"count_1bits", 0, 0, test_count_1bits}, > {"log_2_floor", 0, 0, test_log_2_floor}, > {"bitwise_copy", 0, 0, test_bitwise_copy}, > {"bitwise_zero", 0, 0, test_bitwise_zero}, > -- > 1.8.3.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev