Changeset: 6a0efb9558d0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6a0efb9558d0
Modified Files:
        monetdb5/modules/mal/mkey.c
Branch: Mar2018
Log Message:

remove redundant bit masking from mkey/GDK_ROTATE()
this speeds-up mkey.bulk_rotate_xor_hash() by 20%


diffs (199 lines):

diff --git a/monetdb5/modules/mal/mkey.c b/monetdb5/modules/mal/mkey.c
--- a/monetdb5/modules/mal/mkey.c
+++ b/monetdb5/modules/mal/mkey.c
@@ -26,16 +26,16 @@
 #endif
 
 static inline lng
-GDK_ROTATE(lng x, int y, int z, lng m)
+GDK_ROTATE(lng x, int y, int z)
 {
-       return ((lng) ((ulng) x << y) & ~m) | ((x >> z) & m);
+       return (lng) (((ulng) x << y) | ((ulng) x >> z));
 }
 
 /* TODO: nil handling. however; we do not want to lose time in 
bulk_rotate_xor_hash with that */
 str
 MKEYrotate(lng *res, const lng *val, const int *n)
 {
-       *res = GDK_ROTATE(*val, *n, (sizeof(lng)*8) - *n, (((lng)1) << *n) - 1);
+       *res = GDK_ROTATE(*val, *n, (sizeof(lng)*8) - *n);
        return MAL_SUCCEED;
 }
 
@@ -203,7 +203,6 @@ MKEYrotate_xor_hash(Client cntxt, MalBlk
        int tpe = getArgType(mb, p, 3);
        ptr *pval = getArgReference(stk, p, 3);
        lng val;
-       lng mask = ((lng) 1 << lbit) - 1;
 
        (void) cntxt;
        switch (ATOMstorage(tpe)) {
@@ -233,7 +232,7 @@ MKEYrotate_xor_hash(Client cntxt, MalBlk
                        val = ATOMhash(tpe, pval);
                break;
        }
-       *dst = GDK_ROTATE(h, lbit, rbit, mask) ^ val;
+       *dst = GDK_ROTATE(h, lbit, rbit) ^ val;
        return MAL_SUCCEED;
 }
 
@@ -243,7 +242,6 @@ MKEYbulk_rotate_xor_hash(bat *res, const
        BAT *hb, *b, *bn;
        int lbit = *nbits;
        int rbit = (int) sizeof(lng) * 8 - lbit;
-       lng mask = ((lng) 1 << lbit) - 1;
        lng *r;
        const lng *h;
        BUN n;
@@ -280,7 +278,7 @@ MKEYbulk_rotate_xor_hash(bat *res, const
        case TYPE_bte: {
                bte *v = (bte *) Tloc(b, 0);
                while (n-- > 0) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ 
MKEYHASH_bte(v);
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_bte(v);
                        v++;
                        h++;
                }
@@ -289,7 +287,7 @@ MKEYbulk_rotate_xor_hash(bat *res, const
        case TYPE_sht: {
                sht *v = (sht *) Tloc(b, 0);
                while (n-- > 0) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ 
MKEYHASH_sht(v);
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_sht(v);
                        v++;
                        h++;
                }
@@ -299,7 +297,7 @@ MKEYbulk_rotate_xor_hash(bat *res, const
        case TYPE_flt: {
                int *v = (int *) Tloc(b, 0);
                while (n-- > 0) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ 
MKEYHASH_int(v);
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_int(v);
                        v++;
                        h++;
                }
@@ -309,7 +307,7 @@ MKEYbulk_rotate_xor_hash(bat *res, const
        case TYPE_dbl: {
                lng *v = (lng *) Tloc(b, 0);
                while (n-- > 0) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ 
MKEYHASH_lng(v);
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_lng(v);
                        v++;
                        h++;
                }
@@ -319,7 +317,7 @@ MKEYbulk_rotate_xor_hash(bat *res, const
        case TYPE_hge: {
                hge *v = (hge *) Tloc(b, 0);
                while (n-- > 0) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ 
MKEYHASH_hge(v);
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_hge(v);
                        v++;
                        h++;
                }
@@ -332,7 +330,7 @@ MKEYbulk_rotate_xor_hash(bat *res, const
                        BUN i;
                        BATloop(b, i, n) {
                                str s = (str) BUNtvar(bi, i);
-                               *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ (lng) 
((BUN *) s)[-1];
+                               *r++ = GDK_ROTATE(*h, lbit, rbit) ^ (lng) ((BUN 
*) s)[-1];
                                h++;
                        }
                        break;
@@ -344,7 +342,7 @@ MKEYbulk_rotate_xor_hash(bat *res, const
                BUN i;
 
                BATloop(b, i, n) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ (lng) 
(*hash)(BUNtail(bi, i));
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ (lng) 
(*hash)(BUNtail(bi, i));
                        h++;
                }
                break;
@@ -376,7 +374,6 @@ MKEYbulkconst_rotate_xor_hash(Client cnt
        ptr *pval = getArgReference(stk, p, 3);
        BAT *hb, *bn;
        int rbit = (int) sizeof(lng) * 8 - lbit;
-       lng mask = ((lng) 1 << lbit) - 1;
        lng *r;
        const lng *h;
        lng val;
@@ -428,7 +425,7 @@ MKEYbulkconst_rotate_xor_hash(Client cnt
        h = (const lng *) Tloc(hb, 0);
 
        while (n-- > 0) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ val;
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ val;
                        h++;
        }
 
@@ -453,7 +450,6 @@ MKEYconstbulk_rotate_xor_hash(bat *res, 
        BAT *b, *bn;
        int lbit = *nbits;
        int rbit = (int) sizeof(lng) * 8 - lbit;
-       lng mask = ((lng) 1 << lbit) - 1;
        lng *r;
        BUN n;
 
@@ -475,7 +471,7 @@ MKEYconstbulk_rotate_xor_hash(bat *res, 
        case TYPE_bte: {
                bte *v = (bte *) Tloc(b, 0);
                while (n-- > 0) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ 
MKEYHASH_bte(v);
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_bte(v);
                        v++;
                }
                break;
@@ -483,7 +479,7 @@ MKEYconstbulk_rotate_xor_hash(bat *res, 
        case TYPE_sht: {
                sht *v = (sht *) Tloc(b, 0);
                while (n-- > 0) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ 
MKEYHASH_sht(v);
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_sht(v);
                        v++;
                }
                break;
@@ -492,7 +488,7 @@ MKEYconstbulk_rotate_xor_hash(bat *res, 
        case TYPE_flt: {
                int *v = (int *) Tloc(b, 0);
                while (n-- > 0) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ 
MKEYHASH_int(v);
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_int(v);
                        v++;
                }
                break;
@@ -501,7 +497,7 @@ MKEYconstbulk_rotate_xor_hash(bat *res, 
        case TYPE_dbl: {
                lng *v = (lng *) Tloc(b, 0);
                while (n-- > 0) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ 
MKEYHASH_lng(v);
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_lng(v);
                        v++;
                }
                break;
@@ -510,7 +506,7 @@ MKEYconstbulk_rotate_xor_hash(bat *res, 
        case TYPE_hge: {
                hge *v = (hge *) Tloc(b, 0);
                while (n-- > 0) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ 
MKEYHASH_hge(v);
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_hge(v);
                        v++;
                }
                break;
@@ -522,7 +518,7 @@ MKEYconstbulk_rotate_xor_hash(bat *res, 
                        BUN i;
                        BATloop(b, i, n) {
                                str s = (str) BUNtvar(bi, i);
-                               *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ (lng) 
((BUN *) s)[-1];
+                               *r++ = GDK_ROTATE(*h, lbit, rbit) ^ (lng) ((BUN 
*) s)[-1];
                        }
                        break;
                }
@@ -533,7 +529,7 @@ MKEYconstbulk_rotate_xor_hash(bat *res, 
                BUN i;
 
                BATloop(b, i, n) {
-                       *r++ = GDK_ROTATE(*h, lbit, rbit, mask) ^ (lng) 
(*hash)(BUNtail(bi, i));
+                       *r++ = GDK_ROTATE(*h, lbit, rbit) ^ (lng) 
(*hash)(BUNtail(bi, i));
                }
                break;
        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to