The unified diff between revisions [5403e8ae..] and [681b366e..] is displayed below. It can also be downloaded as a raw diff.

#
#
# patch "include/bit_ops.h"
#  from [ddd6937537f693015aafa0a769fd6b3fdca2284d]
#    to [58d58d1957fd68f9dd8bc2ee8286104a5382ef5d]
#
============================================================
--- include/bit_ops.h	ddd6937537f693015aafa0a769fd6b3fdca2284d
+++ include/bit_ops.h	58d58d1957fd68f9dd8bc2ee8286104a5382ef5d
@@ -63,10 +63,12 @@ inline u32bit hamming_weight(T n)
 template<typename T>
 inline u32bit hamming_weight(T n)
    {
+   const byte NIBBLE_WEIGHTS[] = {
+      0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
+
    u32bit weight = 0;
-   for(u32bit j = 0; j != 8*sizeof(T); ++j)
-      if((n >> j) & 0x01)
-         ++weight;
+   for(u32bit i = 0; i != 8*sizeof(T); i += 4)
+      weight += NIBBLE_WEIGHTS[(n >> i) & 0x0F];
    return weight;
    }