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