Changeset: 46a0e6d97c13 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=46a0e6d97c13
Modified Files:
monetdb5/modules/mal/mkey.c
Branch: Jun2020
Log Message:
Do all bit manipulations as unsigned values.
diffs (284 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
@@ -17,25 +17,26 @@
#include "monetdb_config.h"
#include "mkey.h"
-#define MKEYHASH_bte(valp) ((lng) *(const bte*)(valp))
-#define MKEYHASH_sht(valp) ((lng) *(const sht*)(valp))
-#define MKEYHASH_int(valp) ((lng) *(const int*)(valp))
-#define MKEYHASH_lng(valp) ((lng) *(const lng*)(valp))
+#define MKEYHASH_bte(valp) ((ulng) (lng) *(const bte*)(valp))
+#define MKEYHASH_sht(valp) ((ulng) (lng) *(const sht*)(valp))
+#define MKEYHASH_int(valp) ((ulng) (lng) *(const int*)(valp))
+#define MKEYHASH_lng(valp) ((ulng) (lng) *(const lng*)(valp))
#ifdef HAVE_HGE
-#define MKEYHASH_hge(valp) (((const lng*)(valp))[0] ^ ((const
lng*)(valp))[1])
+#define MKEYHASH_hge(valp) ((ulng) (*(const uhge *)(valp) >> 64) ^ \
+ (ulng) *(const uhge
*)(valp))
#endif
-static inline lng
-GDK_ROTATE(lng x, int y, int z)
+static inline ulng
+GDK_ROTATE(ulng x, int y, int z)
{
- return (lng) (((ulng) x << y) | ((ulng) x >> z));
+ return (x << y) | (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);
+ *res = (lng) GDK_ROTATE((ulng) *val, *n, (sizeof(lng)*8) - *n);
return MAL_SUCCEED;
}
@@ -70,29 +71,29 @@ MKEYhash(Client cntxt, MalBlkPtr mb, Mal
// illegal types, avoid falling into the default case.
assert(0);
case TYPE_bte:
- *res = MKEYHASH_bte(val);
+ *res = (lng) MKEYHASH_bte(val);
break;
case TYPE_sht:
- *res = MKEYHASH_sht(val);
+ *res = (lng) MKEYHASH_sht(val);
break;
case TYPE_int:
case TYPE_flt:
- *res = MKEYHASH_int(val);
+ *res = (lng) MKEYHASH_int(val);
break;
case TYPE_lng:
case TYPE_dbl:
- *res = MKEYHASH_lng(val);
+ *res = (lng) MKEYHASH_lng(val);
break;
#ifdef HAVE_HGE
case TYPE_hge:
- *res = MKEYHASH_hge(val);
+ *res = (lng) MKEYHASH_hge(val);
break;
#endif
default:
if (ATOMextern(tpe))
- *res = ATOMhash(tpe, *(ptr*)val);
+ *res = (lng) ATOMhash(tpe, *(ptr*)val);
else
- *res = ATOMhash(tpe, val);
+ *res = (lng) ATOMhash(tpe, val);
break;
}
return MAL_SUCCEED;
@@ -102,7 +103,7 @@ str
MKEYbathash(bat *res, const bat *bid)
{
BAT *b, *dst;
- lng *restrict r;
+ ulng *restrict r;
BUN n;
if ((b = BATdescriptor(*bid)) == NULL)
@@ -116,14 +117,14 @@ MKEYbathash(bat *res, const bat *bid)
}
BATsetcount(dst, n);
- r = (lng *) Tloc(dst, 0);
+ r = (ulng *) Tloc(dst, 0);
switch (ATOMstorage(b->ttype)) {
case TYPE_void: {
oid o = b->tseqbase;
if (is_oid_nil(o))
for (BUN i = 0; i < n; i++)
- r[i] = lng_nil;
+ r[i] = (ulng) lng_nil;
else
for (BUN i = 0; i < n; i++)
r[i] = o + i;
@@ -172,9 +173,9 @@ MKEYbathash(bat *res, const bat *bid)
for (BUN i = 0; i < n; i++) {
const void *restrict v = BUNtail(bi, i);
if ((*cmp)(v, nil) == 0)
- r[i] = lng_nil;
+ r[i] = (ulng) lng_nil;
else
- r[i] = (lng) (*hash)(v);
+ r[i] = (ulng) (*hash)(v);
}
break;
}
@@ -199,12 +200,12 @@ str
MKEYrotate_xor_hash(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p)
{
lng *dst = getArgReference_lng(stk, p, 0);
- lng h = *getArgReference_lng(stk, p, 1);
+ ulng h = (ulng) *getArgReference_lng(stk, p, 1);
int lbit = *getArgReference_int(stk, p, 2);
int rbit = (int) sizeof(lng) * 8 - lbit;
int tpe = getArgType(mb, p, 3);
ptr *pval = getArgReference(stk, p, 3);
- lng val;
+ ulng val;
(void) cntxt;
switch (ATOMstorage(tpe)) {
@@ -234,7 +235,7 @@ MKEYrotate_xor_hash(Client cntxt, MalBlk
val = ATOMhash(tpe, pval);
break;
}
- *dst = GDK_ROTATE(h, lbit, rbit) ^ val;
+ *dst = (lng) (GDK_ROTATE(h, lbit, rbit) ^ val);
return MAL_SUCCEED;
}
@@ -244,8 +245,8 @@ MKEYbulk_rotate_xor_hash(bat *res, const
BAT *hb, *b, *bn;
int lbit = *nbits;
int rbit = (int) sizeof(lng) * 8 - lbit;
- lng *restrict r;
- const lng *restrict h;
+ ulng *restrict r;
+ const ulng *restrict h;
BUN n;
if ((hb = BATdescriptor(*hid)) == NULL)
@@ -273,8 +274,8 @@ MKEYbulk_rotate_xor_hash(bat *res, const
}
BATsetcount(bn, n);
- r = (lng *) Tloc(bn, 0);
- h = (const lng *) Tloc(hb, 0);
+ r = (ulng *) Tloc(bn, 0);
+ h = (const ulng *) Tloc(hb, 0);
switch (ATOMstorage(b->ttype)) {
case TYPE_bte: {
@@ -326,7 +327,7 @@ MKEYbulk_rotate_xor_hash(bat *res, const
BATiter bi = bat_iterator(b);
for (BUN i = 0; i < n; i++) {
const void *restrict s = BUNtvar(bi, i);
- r[i] = GDK_ROTATE(h[i], lbit, rbit) ^ (lng)
((const BUN *) s)[-1];
+ r[i] = GDK_ROTATE(h[i], lbit, rbit) ^ (ulng)
((const BUN *) s)[-1];
}
break;
}
@@ -336,7 +337,7 @@ MKEYbulk_rotate_xor_hash(bat *res, const
BUN (*hash)(const void *) = BATatoms[b->ttype].atomHash;
for (BUN i = 0; i < n; i++)
- r[i] = GDK_ROTATE(h[i], lbit, rbit) ^ (lng)
(*hash)(BUNtail(bi, i));
+ r[i] = GDK_ROTATE(h[i], lbit, rbit) ^ (ulng)
(*hash)(BUNtail(bi, i));
break;
}
}
@@ -366,9 +367,9 @@ MKEYbulkconst_rotate_xor_hash(Client cnt
ptr *pval = getArgReference(stk, p, 3);
BAT *hb, *bn;
int rbit = (int) sizeof(lng) * 8 - lbit;
- lng *r;
- const lng *h;
- lng val;
+ ulng *r;
+ const ulng *h;
+ ulng val;
BUN n;
(void) cntxt;
@@ -407,14 +408,14 @@ MKEYbulkconst_rotate_xor_hash(Client cnt
#endif
default:
if (ATOMextern(tpe))
- val = ATOMhash(tpe, *(ptr*)pval);
+ val = (ulng) ATOMhash(tpe, *(ptr*)pval);
else
- val = ATOMhash(tpe, pval);
+ val = (ulng) ATOMhash(tpe, pval);
break;
}
- r = (lng *) Tloc(bn, 0);
- h = (const lng *) Tloc(hb, 0);
+ r = (ulng *) Tloc(bn, 0);
+ h = (const ulng *) Tloc(hb, 0);
while (n-- > 0) {
*r++ = GDK_ROTATE(*h, lbit, rbit) ^ val;
@@ -442,7 +443,7 @@ MKEYconstbulk_rotate_xor_hash(bat *res,
BAT *b, *bn;
int lbit = *nbits;
int rbit = (int) sizeof(lng) * 8 - lbit;
- lng *restrict r;
+ ulng *restrict r;
BUN n;
if ((b = BATdescriptor(*bid)) == NULL)
@@ -457,40 +458,40 @@ MKEYconstbulk_rotate_xor_hash(bat *res,
}
BATsetcount(bn, n);
- r = (lng *) Tloc(bn, 0);
+ r = (ulng *) Tloc(bn, 0);
switch (ATOMstorage(b->ttype)) {
case TYPE_bte: {
const bte *restrict v = (const bte *) Tloc(b, 0);
for (BUN i = 0; i < n; i++)
- r[i] = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_bte(v + i);
+ r[i] = GDK_ROTATE((ulng) *h, lbit, rbit) ^
MKEYHASH_bte(v + i);
break;
}
case TYPE_sht: {
const sht *restrict v = (const sht *) Tloc(b, 0);
for (BUN i = 0; i < n; i++)
- r[i] = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_sht(v + i);
+ r[i] = GDK_ROTATE((ulng) *h, lbit, rbit) ^
MKEYHASH_sht(v + i);
break;
}
case TYPE_int:
case TYPE_flt: {
const int *restrict v = (const int *) Tloc(b, 0);
for (BUN i = 0; i < n; i++)
- r[i] = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_int(v + i);
+ r[i] = GDK_ROTATE((ulng) *h, lbit, rbit) ^
MKEYHASH_int(v + i);
break;
}
case TYPE_lng:
case TYPE_dbl: {
const lng *restrict v = (const lng *) Tloc(b, 0);
for (BUN i = 0; i < n; i++)
- r[i] = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_lng(v + i);
+ r[i] = GDK_ROTATE((ulng) *h, lbit, rbit) ^
MKEYHASH_lng(v + i);
break;
}
#ifdef HAVE_HGE
case TYPE_hge: {
const hge *restrict v = (const hge *) Tloc(b, 0);
for (BUN i = 0; i < n; i++)
- r[i] = GDK_ROTATE(*h, lbit, rbit) ^ MKEYHASH_hge(v + i);
+ r[i] = GDK_ROTATE((ulng) *h, lbit, rbit) ^
MKEYHASH_hge(v + i);
break;
}
#endif
@@ -499,7 +500,7 @@ MKEYconstbulk_rotate_xor_hash(bat *res,
BATiter bi = bat_iterator(b);
for (BUN i = 0; i < n; i++) {
const char *restrict s = BUNtvar(bi, i);
- r[i] = GDK_ROTATE(*h, lbit, rbit) ^ (lng)
((const BUN *) s)[-1];
+ r[i] = GDK_ROTATE((ulng) *h, lbit, rbit) ^
(lng) ((const BUN *) s)[-1];
}
break;
}
@@ -509,7 +510,7 @@ MKEYconstbulk_rotate_xor_hash(bat *res,
BUN (*hash)(const void *) = BATatoms[b->ttype].atomHash;
for (BUN i = 0; i < n; i++)
- r[i] = GDK_ROTATE(*h, lbit, rbit) ^ (lng)
(*hash)(BUNtail(bi, i));
+ r[i] = GDK_ROTATE((ulng) *h, lbit, rbit) ^ (lng)
(*hash)(BUNtail(bi, i));
break;
}
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list