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

Reply via email to