(popcount32): Reduce size of constants, to allow better code
authorBen Pfaff <blp@gnu.org>
Tue, 24 Jul 2007 02:35:09 +0000 (02:35 +0000)
committerBen Pfaff <blp@gnu.org>
Tue, 24 Jul 2007 02:35:09 +0000 (02:35 +0000)
generation, and add U to large constants to avoid warnings, in non-GCC
case.
Suggested by Bruno Haible.

ChangeLog
lib/popcount.h

index c8c539d..6c04450 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 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.
        * modules/popcount: Depend on verify module.
        Suggested by Jim Meyering.
index 6c19de2..0ea6ed8 100644 (file)
 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