generation, and add U to large constants to avoid warnings, in non-GCC
case.
Suggested by Bruno Haible.
+2007-07-23 Ben Pfaff <blp@gnu.org>
+
+ * lib/popcount.h (popcount32): Reduce size of constants, to allow
+ better code generation, and add U to large constants to avoid
+ warnings, in non-GCC case.
+ Suggested by Bruno Haible.
+
2007-07-23 Ben Pfaff <blp@gnu.org>
* lib/popcount.h: Use verify_true instead of if...abort.
static inline int
popcount32 (unsigned int x)
{
- x = ((x & 0xaaaaaaaa) >> 1) + (x & 0x55555555);
- x = ((x & 0xcccccccc) >> 2) + (x & 0x33333333);
- x = ((x & 0xf0f0f0f0) >> 4) + (x & 0x0f0f0f0f);
- x = ((x & 0xff00ff00) >> 8) + (x & 0x00ff00ff);
- return (x >> 16) + (x & 0xff);
+ x = ((x & 0xaaaaaaaaU) >> 1) + (x & 0x55555555U);
+ x = ((x & 0xccccccccU) >> 2) + (x & 0x33333333U);
+ x = (x >> 16) + (x & 0xffff);
+ x = ((x & 0xf0f0) >> 4) + (x & 0x0f0f);
+ return (x >> 8) + (x & 0x00ff);
}
#endif