Changeset: f48d146b603e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f48d146b603e
Modified Files:
clients/Tests/exports.stable.out
monetdb5/modules/mal/mkey.c
monetdb5/modules/mal/mkey.h
monetdb5/modules/mal/mkey.mal
Branch: int128
Log Message:
added int128 / "hge" support in monetdb5/modules/mal/mkey.*
diffs (199 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1628,6 +1628,7 @@ str MKEYhash_bit(wrd *ret, bit *v);
str MKEYhash_bte(wrd *ret, bte *v);
str MKEYhash_dbl(wrd *ret, dbl *v);
str MKEYhash_flt(wrd *ret, flt *v);
+str MKEYhash_hge(wrd *ret, hge *v);
str MKEYhash_int(wrd *ret, int *v);
str MKEYhash_lng(wrd *ret, lng *v);
str MKEYhash_sht(wrd *ret, sht *v);
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
@@ -87,6 +87,20 @@ CMDhash_lng(wrd *res, lng *val)
return GDK_SUCCEED;
}
+#ifdef HAVE_HGE
+static int
+CMDhash_hge(wrd *res, hge *val)
+{
+#if SIZEOF_WRD == SIZEOF_LNG
+ *res = ((wrd *) val)[0] ^ ((wrd *) val)[1];
+#else
+ *res = ((wrd *) val)[0] ^ ((wrd *) val)[1] ^
+ ((wrd *) val)[2] ^ ((wrd *) val)[3];
+#endif
+ return GDK_SUCCEED;
+}
+#endif
+
static int
CMDhash_dbl(wrd *res, dbl *val)
{
@@ -134,6 +148,16 @@ CMDhash(wrd *res, ptr val, int tpe)
code = ((wrd *) val)[0] ^ ((wrd *) val)[1];
#endif
break;
+#ifdef HAVE_HGE
+ case TYPE_hge:
+#if SIZEOF_WRD == SIZEOF_LNG
+ code = ((wrd *) val)[0] ^ ((wrd *) val)[1];
+#else
+ code = ((wrd *) val)[0] ^ ((wrd *) val)[1] ^
+ ((wrd *) val)[2] ^ ((wrd *) val)[3];
+#endif
+ break;
+#endif
case TYPE_str:
h = strHash((char*)val);
code = h;
@@ -198,6 +222,17 @@ voidbathash(BAT **res, BAT *b )
*r++ = ((wrd *) v)[0] ^ ((wrd *) v)[1];
#endif
break;
+#ifdef HAVE_HGE
+ case TYPE_hge:
+ for(; v < e; v+=sz)
+#if SIZEOF_WRD == SIZEOF_LNG
+ *r++ = ((wrd *) v)[0] ^ ((wrd *) v)[1];
+#else
+ *r++ = ((wrd *) v)[0] ^ ((wrd *) v)[1] ^
+ ((wrd *) v)[2] ^ ((wrd *) v)[3];
+#endif
+ break;
+#endif
default:
for(; v < e; v+=sz)
*r++ = hash(v);
@@ -266,6 +301,17 @@ MKEYrotate_xor_hash(Client cntxt, MalBlk
wrd val = ((wrd *) cur)[0] ^ ((wrd *) cur)[1];
#endif
*dst = GDK_ROTATE(*h, lbit, rbit, mask) ^ val;
+#ifdef HAVE_HGE
+ } else if (tpe == TYPE_hge) {
+ hge *cur = (hge*) pval;
+#if SIZEOF_WRD == SIZEOF_LNG
+ wrd val = ((wrd *) cur)[0] ^ ((wrd *) cur)[1];
+#else
+ wrd val = ((wrd *) cur)[0] ^ ((wrd *) cur)[1] ^
+ ((wrd *) cur)[2] ^ ((wrd *) cur)[3];
+#endif
+ *dst = GDK_ROTATE(*h, lbit, rbit, mask) ^ val;
+#endif
} else if (tpe == TYPE_str) { /* TYPE_str */
str cur = *(str*) pval;
BUN val = strHash(cur);
@@ -348,6 +394,25 @@ CMDconstbulk_rotate_xor_hash(BAT **res,
cur++;
dst++;
}
+#ifdef HAVE_HGE
+ } else if (tpe == TYPE_hge) {
+ hge *cur = (hge *) BUNtloc(bi, BUNfirst(b));
+ hge *end = (hge *) BUNtloc(bi, BUNlast(b));
+
+ while (cur < end) {
+ wrd *t = (wrd*)cur;
+#if SIZEOF_WRD == SIZEOF_LNG
+ wrd val = t[0] ^ t[1];
+#else
+ wrd val = t[0] ^ t[1] ^
+ t[2] ^ t[3];
+#endif
+
+ *dst = GDK_ROTATE(*hsh, lbit, rbit, mask) ^ val;
+ cur++;
+ dst++;
+ }
+#endif
} else if (tpe == TYPE_str) { /* TYPE_str */
BUN p, q;
@@ -441,6 +506,16 @@ MKEYbulkconst_rotate_xor_hash(Client cnt
#else
cur = ((wrd *) pcur)[0] ^ ((wrd *) pcur)[1];
#endif
+#ifdef HAVE_HGE
+ } else if (tpe == TYPE_hge) {
+ hge *pcur = (hge*) pval;
+#if SIZEOF_WRD == SIZEOF_LNG
+ cur = ((wrd *) pcur)[0] ^ ((wrd *) pcur)[1];
+#else
+ cur = ((wrd *) pcur)[0] ^ ((wrd *) pcur)[1] ^
+ ((wrd *) pcur)[2] ^ ((wrd *) pcur)[3];
+#endif
+#endif
} else if (tpe == TYPE_str) { /* TYPE_str */
str pcur = *(str*) pval;
cur = strHash(pcur);
@@ -563,6 +638,26 @@ CMDbulk_rotate_xor_hash(BAT **res, BAT *
dst++;
src++;
}
+#ifdef HAVE_HGE
+ } else if (tpe == TYPE_hge) {
+ hge *cur = (hge *) BUNtloc(bi, BUNfirst(b));
+ hge *end = (hge *) BUNtloc(bi, BUNlast(b));
+
+ while (cur < end) {
+ wrd *t = (wrd*)cur;
+#if SIZEOF_WRD == SIZEOF_LNG
+ wrd val = t[0] ^ t[1];
+#else
+ wrd val = t[0] ^ t[1] ^
+ t[2] ^ t[3];
+#endif
+
+ *dst = GDK_ROTATE(*src, lbit, rbit, mask) ^ val;
+ cur++;
+ dst++;
+ src++;
+ }
+#endif
} else if (tpe == TYPE_str) { /* TYPE_str */
BUN p, q;
@@ -683,6 +778,15 @@ MKEYhash_lng(wrd *ret, lng *v)
return MAL_SUCCEED;
}
+#ifdef HAVE_HGE
+str
+MKEYhash_hge(wrd *ret, hge *v)
+{
+ CMDhash_hge(ret,v);
+ return MAL_SUCCEED;
+}
+#endif
+
str
MKEYhash_str(wrd *ret, str *v)
{
diff --git a/monetdb5/modules/mal/mkey.h b/monetdb5/modules/mal/mkey.h
--- a/monetdb5/modules/mal/mkey.h
+++ b/monetdb5/modules/mal/mkey.h
@@ -140,6 +140,9 @@ mkey_export str MKEYhash_flt(wrd *ret,
mkey_export str MKEYhash_wrd(wrd *ret, wrd *v);
mkey_export str MKEYhash_dbl(wrd *ret, dbl *v);
mkey_export str MKEYhash_lng(wrd *ret, lng *v);
+#ifdef HAVE_HGE
+mkey_export str MKEYhash_hge(wrd *ret, hge *v);
+#endif
mkey_export str MKEYhash_str(wrd *ret, str *v);
mkey_export str MKEYrotate_xor_hash(Client cntxt, MalBlkPtr mb, MalStkPtr
stk, InstrPtr p);
mkey_export str MKEYbulk_rotate_xor_hash(int *ret, int *hid, int *nbits,int
*bid);
diff --git a/monetdb5/modules/mal/mkey.mal b/monetdb5/modules/mal/mkey.mal
--- a/monetdb5/modules/mal/mkey.mal
+++ b/monetdb5/modules/mal/mkey.mal
@@ -41,6 +41,8 @@ command hash(v:dbl):wrd
address MKEYhash_dbl;
command hash(v:lng):wrd
address MKEYhash_lng;
+command hash(v:hge):wrd
+address MKEYhash_hge;
command hash(v:str):wrd
address MKEYhash_str;
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list