more bigint and dbterm fixes.
This commit is contained in:
74
C/absmi.c
74
C/absmi.c
@@ -4261,17 +4261,17 @@ Yap_absmi(int inp)
|
||||
ENDD(d0);
|
||||
ENDOp();
|
||||
|
||||
Op(get_bigint, xB);
|
||||
Op(get_bigint, xN);
|
||||
#ifdef USE_GMP
|
||||
BEGD(d0);
|
||||
d0 = XREG(PREG->u.xB.x);
|
||||
d0 = XREG(PREG->u.xN.x);
|
||||
deref_head(d0, gbigint_unk);
|
||||
|
||||
gbigint_nonvar:
|
||||
if (!IsApplTerm(d0))
|
||||
FAIL();
|
||||
/* we have met a preexisting bigint */
|
||||
START_PREFETCH(xB);
|
||||
START_PREFETCH(xN);
|
||||
BEGP(pt0);
|
||||
pt0 = RepAppl(d0);
|
||||
/* check functor */
|
||||
@@ -4279,9 +4279,9 @@ Yap_absmi(int inp)
|
||||
{
|
||||
FAIL();
|
||||
}
|
||||
if (Yap_gmp_tcmp_big_big(d0,PREG->u.xB.b))
|
||||
if (Yap_gmp_tcmp_big_big(d0,PREG->u.xN.b))
|
||||
FAIL();
|
||||
PREG = NEXTOP(PREG, xB);
|
||||
PREG = NEXTOP(PREG, xN);
|
||||
ENDP(pt0);
|
||||
/* enter read mode */
|
||||
GONext();
|
||||
@@ -4291,10 +4291,10 @@ Yap_absmi(int inp)
|
||||
deref_body(d0, pt0, gbigint_unk, gbigint_nonvar);
|
||||
/* Enter Write mode */
|
||||
/* set d1 to be the new structure we are going to create */
|
||||
START_PREFETCH(xB);
|
||||
START_PREFETCH(xN);
|
||||
BEGD(d1);
|
||||
d1 = PREG->u.xB.b;
|
||||
PREG = NEXTOP(PREG, xB);
|
||||
d1 = PREG->u.xN.b;
|
||||
PREG = NEXTOP(PREG, xN);
|
||||
BIND(pt0, d1, bind_gbigint);
|
||||
#ifdef COROUTINING
|
||||
DO_TRAIL(pt0, d1);
|
||||
@@ -6347,7 +6347,7 @@ Yap_absmi(int inp)
|
||||
GONext();
|
||||
ENDOp();
|
||||
|
||||
Op(unify_bigint, oB);
|
||||
Op(unify_bigint, oN);
|
||||
#ifdef USE_GMP
|
||||
BEGD(d0);
|
||||
BEGP(pt0);
|
||||
@@ -6368,16 +6368,16 @@ Yap_absmi(int inp)
|
||||
FAIL();
|
||||
}
|
||||
ENDD(d1);
|
||||
if (Yap_gmp_tcmp_big_big(d0,PREG->u.oB.b))
|
||||
if (Yap_gmp_tcmp_big_big(d0,PREG->u.oN.b))
|
||||
FAIL();
|
||||
PREG = NEXTOP(PREG, oB);
|
||||
PREG = NEXTOP(PREG, oN);
|
||||
ENDP(pt0);
|
||||
GONext();
|
||||
|
||||
derefa_body(d0, pt0, ubigint_unk, ubigint_nonvar);
|
||||
BEGD(d1);
|
||||
d1 = PREG->u.oB.b;
|
||||
PREG = NEXTOP(PREG, oB);
|
||||
d1 = PREG->u.oN.b;
|
||||
PREG = NEXTOP(PREG, oN);
|
||||
BIND_GLOBAL(pt0, d1, bind_ubigint);
|
||||
#ifdef COROUTINING
|
||||
DO_TRAIL(pt0, d1);
|
||||
@@ -6393,7 +6393,7 @@ Yap_absmi(int inp)
|
||||
#endif
|
||||
ENDOp();
|
||||
|
||||
Op(unify_l_bigint, oB);
|
||||
Op(unify_l_bigint, oN);
|
||||
#ifdef USE_GMP
|
||||
BEGD(d0);
|
||||
CACHE_S();
|
||||
@@ -6413,16 +6413,16 @@ Yap_absmi(int inp)
|
||||
FAIL();
|
||||
}
|
||||
ENDD(d0);
|
||||
if (Yap_gmp_tcmp_big_big(d0,PREG->u.oB.b))
|
||||
if (Yap_gmp_tcmp_big_big(d0,PREG->u.oN.b))
|
||||
FAIL();
|
||||
PREG = NEXTOP(PREG, oB);
|
||||
PREG = NEXTOP(PREG, oN);
|
||||
ENDP(pt0);
|
||||
GONext();
|
||||
|
||||
derefa_body(d0, S_SREG, ulbigint_unk, ulbigint_nonvar);
|
||||
BEGD(d1);
|
||||
d1 = PREG->u.oB.b;
|
||||
PREG = NEXTOP(PREG, oB);
|
||||
d1 = PREG->u.oN.b;
|
||||
PREG = NEXTOP(PREG, oN);
|
||||
BIND_GLOBAL(S_SREG, d1, bind_ulbigint);
|
||||
#ifdef COROUTINING
|
||||
DO_TRAIL(S_SREG, d1);
|
||||
@@ -6907,8 +6907,26 @@ Yap_absmi(int inp)
|
||||
GONext();
|
||||
ENDD(d0);
|
||||
ENDOp();
|
||||
|
||||
Op(put_dbterm, xD);
|
||||
BEGD(d0);
|
||||
d0 = PREG->u.xD.D;
|
||||
XREG(PREG->u.xD.x) = d0;
|
||||
PREG = NEXTOP(PREG, xD);
|
||||
GONext();
|
||||
ENDD(d0);
|
||||
ENDOp();
|
||||
|
||||
Op(put_float, xd);
|
||||
Op(put_bigint, xN);
|
||||
BEGD(d0);
|
||||
d0 = PREG->u.xN.b;
|
||||
XREG(PREG->u.xN.x) = d0;
|
||||
PREG = NEXTOP(PREG, xN);
|
||||
GONext();
|
||||
ENDD(d0);
|
||||
ENDOp();
|
||||
|
||||
Op(put_float, xd);
|
||||
BEGD(d0);
|
||||
d0 = AbsAppl(PREG->u.xd.d);
|
||||
XREG(PREG->u.xd.x) = d0;
|
||||
@@ -7101,6 +7119,24 @@ Yap_absmi(int inp)
|
||||
GONext();
|
||||
ENDOp();
|
||||
|
||||
Op(write_bigint, N);
|
||||
BEGD(d0);
|
||||
d0 = PREG->u.N.b;
|
||||
*SREG++ = d0;
|
||||
ENDD(d0);
|
||||
PREG = NEXTOP(PREG, N);
|
||||
GONext();
|
||||
ENDOp();
|
||||
|
||||
Op(write_dbterm, D);
|
||||
BEGD(d0);
|
||||
d0 = PREG->u.D.D;
|
||||
*SREG++ = d0;
|
||||
ENDD(d0);
|
||||
PREG = NEXTOP(PREG, D);
|
||||
GONext();
|
||||
ENDOp();
|
||||
|
||||
Op(write_float, d);
|
||||
BEGD(d0);
|
||||
d0 = AbsAppl(PREG->u.d.d);
|
||||
|
||||
Reference in New Issue
Block a user