Changeset: 7c7161485dfc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7c7161485dfc
Modified Files:
        gdk/gdk_group.c
Branch: Jul2017
Log Message:

Minor tweaks.


diffs (74 lines):

diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -336,38 +336,39 @@ static inline oid
 rev(oid x)
 {
 #if SIZEOF_OID == 8
-       x = (x & 0x5555555555555555) << 1 | (x & 0xAAAAAAAAAAAAAAAA) >> 1;
-       x = (x & 0x3333333333333333) << 2 | (x & 0xCCCCCCCCCCCCCCCC) >> 2;
-       x = (x & 0x0F0F0F0F0F0F0F0F) << 4 | (x & 0xF0F0F0F0F0F0F0F0) >> 4;
-       x = (x & 0x00FF00FF00FF00FF) << 8 | (x & 0xFF00FF00FF00FF00) >> 8;
-       x = (x & 0x0000FFFF0000FFFF) << 16 | (x & 0xFFFF0000FFFF0000) >> 16;
-       x = (x & 0x00000000FFFFFFFF) << 32 | (x & 0xFFFFFFFF00000000) >> 32;
+       x = ((x & 0x5555555555555555) <<  1) | ((x >>  1) & 0x5555555555555555);
+       x = ((x & 0x3333333333333333) <<  2) | ((x >>  2) & 0x3333333333333333);
+       x = ((x & 0x0F0F0F0F0F0F0F0F) <<  4) | ((x >>  4) & 0x0F0F0F0F0F0F0F0F);
+       x = ((x & 0x00FF00FF00FF00FF) <<  8) | ((x >>  8) & 0x00FF00FF00FF00FF);
+       x = ((x & 0x0000FFFF0000FFFF) << 16) | ((x >> 16) & 0x0000FFFF0000FFFF);
+       x = ((x & 0x00000000FFFFFFFF) << 32) | ((x >> 32) & 0x00000000FFFFFFFF);
 #else
-       x = (x & 0x55555555) << 1 | (x & 0xAAAAAAAA) >> 1;
-       x = (x & 0x33333333) << 2 | (x & 0xCCCCCCCC) >> 2;
-       x = (x & 0x0F0F0F0F) << 4 | (x & 0xF0F0F0F0) >> 4;
-       x = (x & 0x00FF00FF) << 8 | (x & 0xFF00FF00) >> 8;
-       x = (x & 0x0000FFFF) << 16 | (x & 0xFFFF0000) >> 16;
+       x = ((x & 0x55555555) <<  1) | ((x >>  1) & 0x55555555);
+       x = ((x & 0x33333333) <<  2) | ((x >>  2) & 0x33333333);
+       x = ((x & 0x0F0F0F0F) <<  4) | ((x >>  4) & 0x0F0F0F0F);
+       x = ((x & 0x00FF00FF) <<  8) | ((x >>  8) & 0x00FF00FF);
+       x = ((x & 0x0000FFFF) << 16) | ((x >> 16) & 0x0000FFFF);
 #endif
-       return x >> 1;          /* shift to be in OID range */
+       return x;
 }
 
 /* population count: count number of 1 bits in a value */
 static inline int
 pop(oid x)
 {
+       /* divide and conquer implementation */
 #if SIZEOF_OID == 8
-       x = (x & 0x5555555555555555) + ((x >> 1) & 0x5555555555555555);
-       x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333);
-       x = (x & 0x0F0F0F0F0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F0F0F0F0F);
-       x = (x & 0x00FF00FF00FF00FF) + ((x >> 8) & 0x00FF00FF00FF00FF);
+       x = (x & 0x5555555555555555) + ((x >>  1) & 0x5555555555555555);
+       x = (x & 0x3333333333333333) + ((x >>  2) & 0x3333333333333333);
+       x = (x & 0x0F0F0F0F0F0F0F0F) + ((x >>  4) & 0x0F0F0F0F0F0F0F0F);
+       x = (x & 0x00FF00FF00FF00FF) + ((x >>  8) & 0x00FF00FF00FF00FF);
        x = (x & 0x0000FFFF0000FFFF) + ((x >> 16) & 0x0000FFFF0000FFFF);
        x = (x & 0x00000000FFFFFFFF) + ((x >> 32) & 0x00000000FFFFFFFF);
 #else
-       x = (x & 0x55555555) + ((x >> 1) & 0x55555555);
-       x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
-       x = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F);
-       x = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF);
+       x = (x & 0x55555555) + ((x >>  1) & 0x55555555);
+       x = (x & 0x33333333) + ((x >>  2) & 0x33333333);
+       x = (x & 0x0F0F0F0F) + ((x >>  4) & 0x0F0F0F0F);
+       x = (x & 0x00FF00FF) + ((x >>  8) & 0x00FF00FF);
        x = (x & 0x0000FFFF) + ((x >> 16) & 0x0000FFFF);
 #endif
        return (int) x;
@@ -1078,7 +1079,9 @@ BATgroup_internal(BAT **groups, BAT **ex
                nme = BBP_physical(b->batCacheid);
                nmelen = strlen(nme);
                mask = MAX(HASHmask(cnt), 1 << 16);
-               bits = 8 * SIZEOF_OID - pop(mask - 1) - 1;
+               /* mask is a power of two, so pop(mask - 1) tells us
+                * which power of two */
+               bits = 8 * SIZEOF_OID - pop(mask - 1);
                if ((hp = GDKzalloc(sizeof(Heap))) == NULL ||
                    (hp->farmid = BBPselectfarm(TRANSIENT, b->ttype, hashheap)) 
< 0 ||
                    (hp->filename = GDKmalloc(nmelen + 30)) == NULL ||
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to