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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list