Changeset: c8fc927411d5 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c8fc927411d5
Modified Files:
clients/Tests/exports.stable.out
monetdb5/mal/mal.c
monetdb5/mal/mal_builder.c
monetdb5/mal/mal_builder.h
monetdb5/mal/mal_instruction.c
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_parser.c
monetdb5/mal/mal_type.c
Branch: int128
Log Message:
added int128 / "hge" support in monetdb5/mal/
TODO (?):
add support for parsing 128-bit integers (":hge")
in monetdb5/mal/mal_parser.c (?)
diffs (186 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
@@ -2926,6 +2926,7 @@ InstrPtr pushDbl(MalBlkPtr mb, InstrPtr
InstrPtr pushEmptyBAT(MalBlkPtr mb, InstrPtr q, int tpe);
void pushEndInstruction(MalBlkPtr mb);
InstrPtr pushFlt(MalBlkPtr mb, InstrPtr q, flt val);
+InstrPtr pushHge(MalBlkPtr mb, InstrPtr q, hge val);
void pushInstruction(MalBlkPtr mb, InstrPtr p);
InstrPtr pushInt(MalBlkPtr mb, InstrPtr q, int val);
InstrPtr pushLng(MalBlkPtr mb, InstrPtr q, lng val);
diff --git a/monetdb5/mal/mal.c b/monetdb5/mal/mal.c
--- a/monetdb5/mal/mal.c
+++ b/monetdb5/mal/mal.c
@@ -226,6 +226,9 @@ void tstAligned(void)
val= (ptr) & v.val.fval; if(val != base){ allAligned = -1; }
val= (ptr) & v.val.dval; if(val != base){ allAligned = -1; }
val= (ptr) & v.val.lval; if(val != base){ allAligned = -1; }
+#ifdef HAVE_HGE
+ val= (ptr) & v.val.hval; if(val != base){ allAligned = -1; }
+#endif
val= (ptr) & v.val.sval; if(val != base){ allAligned = -1; }
if(allAligned<0)
GDKfatal("Recompile with STRUCT_ALIGNED flag disabled\n");
diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -246,6 +246,20 @@ pushLng(MalBlkPtr mb, InstrPtr q, lng va
return pushArgument(mb, q, _t);
}
+#ifdef HAVE_HGE
+InstrPtr
+pushHge(MalBlkPtr mb, InstrPtr q, hge val)
+{
+ int _t;
+ ValRecord cst;
+
+ cst.vtype= TYPE_hge;
+ cst.val.hval= val;
+ _t = defConstant(mb,TYPE_hge,&cst);
+ return pushArgument(mb, q, _t);
+}
+#endif
+
InstrPtr
pushDbl(MalBlkPtr mb, InstrPtr q, dbl val)
{
diff --git a/monetdb5/mal/mal_builder.h b/monetdb5/mal/mal_builder.h
--- a/monetdb5/mal/mal_builder.h
+++ b/monetdb5/mal/mal_builder.h
@@ -42,6 +42,9 @@ mal_export InstrPtr pushBte(MalBlkPtr mb
mal_export InstrPtr pushOid(MalBlkPtr mb, InstrPtr q, oid val);
mal_export InstrPtr pushVoid(MalBlkPtr mb, InstrPtr q);
mal_export InstrPtr pushLng(MalBlkPtr mb, InstrPtr q, lng val);
+#ifdef HAVE_HGE
+mal_export InstrPtr pushHge(MalBlkPtr mb, InstrPtr q, hge val);
+#endif
mal_export InstrPtr pushDbl(MalBlkPtr mb, InstrPtr q, dbl val);
mal_export InstrPtr pushFlt(MalBlkPtr mb, InstrPtr q, flt val);
mal_export InstrPtr pushStr(MalBlkPtr mb, InstrPtr q, const char *val);
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -1321,6 +1321,9 @@ convertConstant(int type, ValPtr vr)
case TYPE_dbl:
case TYPE_wrd:
case TYPE_lng:
+#ifdef HAVE_HGE
+ case TYPE_hge:
+#endif
VALconvert(type, vr);
if (vr->vtype != type)
throw(SYNTAX, "convertConstant", "coercion failed");
@@ -1884,6 +1887,12 @@ varGetPropStr(MalBlkPtr mb, int var)
ATOMformat(v->type, VALptr(&v->value), &t);
switch (v->type) {
+#ifdef HAVE_HGE
+ case TYPE_hge:
+ assert(0);
+ sprintf(s, "%s%s%s:hge", nme, op, t);
+ break;
+#endif
case TYPE_oid:
sprintf(s, "%s%s%s:oid", nme, op, t);
break;
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -59,6 +59,9 @@ ptr getArgReference(MalStkPtr stk, Instr
case TYPE_flt: ret = (ptr) & v->val.fval; break;
case TYPE_dbl: ret = (ptr) & v->val.dval; break;
case TYPE_lng: ret = (ptr) & v->val.lval; break;
+#ifdef HAVE_HGE
+ case TYPE_hge: ret = (ptr) & v->val.hval; break;
+#endif
case TYPE_str: ret = (ptr) & v->val.sval; break;
default:
ret = (ptr) & v->val.pval;
@@ -954,6 +957,12 @@ str runMALsequence(Client cntxt, MalBlkP
if (v->val.lval == lng_nil)
stkpc = pci->jump;
break;
+#ifdef HAVE_HGE
+ case TYPE_hge:
+ if (v->val.hval == hge_nil)
+ stkpc = pci->jump;
+ break;
+#endif
case TYPE_flt:
if (v->val.fval == flt_nil)
stkpc = pci->jump;
@@ -1026,6 +1035,14 @@ str runMALsequence(Client cntxt, MalBlkP
else
stkpc++;
break;
+#ifdef HAVE_HGE
+ case TYPE_hge:
+ if (v->val.hval != hge_nil)
+ stkpc = pci->jump;
+ else
+ stkpc++;
+ break;
+#endif
case TYPE_flt:
if (v->val.fval != flt_nil)
stkpc = pci->jump;
diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c
--- a/monetdb5/mal/mal_parser.c
+++ b/monetdb5/mal/mal_parser.c
@@ -517,6 +517,9 @@ cstToken(Client cntxt, ValPtr cst)
return i;
}
if (*s == 'L') {
+#ifdef HAVE_HGE
+ assert(cst->vtype != TYPE_hge);
+#endif
if (cst->vtype == TYPE_int)
cst->vtype = TYPE_lng;
if (cst->vtype == TYPE_flt)
@@ -549,6 +552,9 @@ cstToken(Client cntxt, ValPtr cst)
return i;
}
handleInts:
+#ifdef HAVE_HGE
+ assert(cst->vtype != TYPE_hge);
+#endif
if (cst->vtype == TYPE_int || cst->vtype == TYPE_lng) {
int len = (int) sizeof(lng);
lng *pval = &l;
diff --git a/monetdb5/mal/mal_type.c b/monetdb5/mal/mal_type.c
--- a/monetdb5/mal/mal_type.c
+++ b/monetdb5/mal/mal_type.c
@@ -159,6 +159,12 @@ getTypeIndex(str nme, int len, int defty
if (qt("lng"))
return TYPE_lng;
break;
+#ifdef HAVE_HGE
+ case 'h':
+ if (qt("hge"))
+ return TYPE_hge;
+ break;
+#endif
case 'o':
if (qt("oid"))
return TYPE_oid;
@@ -196,7 +202,7 @@ getTypeIndex(str nme, int len, int defty
/*
* @-
* Literal constants are not necessarily type specific, e.g.
- * the value '0' could represent bte,sht,wrd,int,lng.
+ * the value '0' could represent bte,sht,wrd,int,lng,hge.
* If the value is potentially ambiguous, it should
* be made type specific in listings
*/
@@ -204,6 +210,9 @@ int
isAmbiguousType(int type){
switch(type){
case TYPE_bte: case TYPE_sht: case TYPE_wrd: case TYPE_int:
case TYPE_lng:
+#ifdef HAVE_HGE
+ case TYPE_hge:
+#endif
return type != TYPE_int;
case TYPE_flt: case TYPE_dbl:
return type != TYPE_flt;
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list