diff --git a/C/type_absmi_insts.h b/C/type_absmi_insts.h new file mode 100644 index 000000000..49b564f66 --- /dev/null +++ b/C/type_absmi_insts.h @@ -0,0 +1,546 @@ +#if 0 +{ + { +#endif + /************************************************************************ \ + * Basic Primitive Predicates * +\************************************************************************/ + + Op(p_atom_x, xl); + BEGD(d0); + d0 = XREG(PREG->y_u.xl.x); + deref_head(d0, atom_x_unk); + atom_x_nvar: + if (IsAtomTerm(d0) && !IsBlob(AtomOfTerm(d0))) { + PREG = NEXTOP(PREG, xl); + GONext(); + } + else { + PREG = PREG->y_u.xl.F; + GONext(); + } + + BEGP(pt0); + deref_body(d0, pt0, atom_x_unk, atom_x_nvar); + PREG = PREG->y_u.xl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_atom_y, yl); + BEGD(d0); + BEGP(pt0); + pt0 = YREG + PREG->y_u.yl.y; + d0 = *pt0; + deref_head(d0, atom_y_unk); + atom_y_nvar: + if (IsAtomTerm(d0) && !IsBlob(AtomOfTerm(d0))) { + PREG = NEXTOP(PREG, yl); + GONext(); + } + else { + PREG = PREG->y_u.yl.F; + GONext(); + } + + derefa_body(d0, pt0, atom_y_unk, atom_y_nvar); + PREG = PREG->y_u.yl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_atomic_x, xl); + BEGD(d0); + d0 = XREG(PREG->y_u.xl.x); + deref_head(d0, atomic_x_unk); + atomic_x_nvar: + /* non variable */ + if (IsAtomicTerm(d0)) { + PREG = NEXTOP(PREG, xl); + GONext(); + } + else { + PREG = PREG->y_u.xl.F; + GONext(); + } + + BEGP(pt0); + deref_body(d0, pt0, atomic_x_unk, atomic_x_nvar); + PREG = PREG->y_u.xl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_atomic_y, yl); + BEGD(d0); + BEGP(pt0); + pt0 = YREG + PREG->y_u.yl.y; + d0 = *pt0; + deref_head(d0, atomic_y_unk); + atomic_y_nvar: + /* non variable */ + if (IsAtomicTerm(d0)) { + PREG = NEXTOP(PREG, yl); + GONext(); + } + else { + PREG = PREG->y_u.yl.F; + GONext(); + } + + derefa_body(d0, pt0, atomic_y_unk, atomic_y_nvar); + PREG = PREG->y_u.yl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_integer_x, xl); + BEGD(d0); + d0 = XREG(PREG->y_u.xl.x); + deref_head(d0, integer_x_unk); + integer_x_nvar: + /* non variable */ + if (IsIntTerm(d0)) { + PREG = NEXTOP(PREG, xl); + GONext(); + } + if (IsApplTerm(d0)) { + Functor f0 = FunctorOfTerm(d0); + if (IsExtensionFunctor(f0)) { + switch ((CELL)f0) { + case (CELL)FunctorBigInt: + { CELL *pt = RepAppl(d0); + if ( pt[1] != BIG_RATIONAL || pt[1] != BIG_INT ) { + PREG = PREG->y_u.xl.F; + GONext(); + } + } + break; + case (CELL)FunctorLongInt: + PREG = NEXTOP(PREG, xl); + GONext(); + break; + default: + PREG = PREG->y_u.xl.F; + GONext(); + } + } + } + PREG = PREG->y_u.xl.F; + GONext(); + + BEGP(pt0); + deref_body(d0, pt0, integer_x_unk, integer_x_nvar); + PREG = PREG->y_u.xl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_integer_y, yl); + BEGD(d0); + BEGP(pt0); + pt0 = YREG + PREG->y_u.yl.y; + d0 = *pt0; + deref_head(d0, integer_y_unk); + integer_y_nvar: + /* non variable */ + if (IsIntTerm(d0)) { + PREG = NEXTOP(PREG, yl); + GONext(); + } + if (IsApplTerm(d0)) { + Functor f0 = FunctorOfTerm(d0); + if (IsExtensionFunctor(f0)) { + switch ((CELL)f0) { + case (CELL)FunctorBigInt: + { CELL *pt = RepAppl(d0); + if ( pt[1] != BIG_RATIONAL || pt[1] != BIG_INT ) { + PREG = PREG->y_u.yl.F; + GONext(); + } + } + case (CELL)FunctorLongInt: + PREG = NEXTOP(PREG, yl); + GONext(); + default: + PREG = PREG->y_u.yl.F; + GONext(); + } + } + } + PREG = PREG->y_u.yl.F; + GONext(); + + derefa_body(d0, pt0, integer_y_unk, integer_y_nvar); + PREG = PREG->y_u.yl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_nonvar_x, xl); + BEGD(d0); + d0 = XREG(PREG->y_u.xl.x); + deref_head(d0, nonvar_x_unk); + nonvar_x_nvar: + PREG = NEXTOP(PREG, xl); + GONext(); + + BEGP(pt0); + deref_body(d0, pt0, nonvar_x_unk, nonvar_x_nvar); + PREG = PREG->y_u.xl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_nonvar_y, yl); + BEGD(d0); + BEGP(pt0); + pt0 = YREG + PREG->y_u.yl.y; + d0 = *pt0; + deref_head(d0, nonvar_y_unk); + nonvar_y_nvar: + PREG = NEXTOP(PREG, yl); + GONext(); + + derefa_body(d0, pt0, nonvar_y_unk, nonvar_y_nvar); + PREG = PREG->y_u.yl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_number_x, xl); + BEGD(d0); + d0 = XREG(PREG->y_u.xl.x); + deref_head(d0, number_x_unk); + number_x_nvar: + /* non variable */ + if (IsIntTerm(d0)) { + PREG = NEXTOP(PREG, xl); + GONext(); + } + if (IsApplTerm(d0)) { + Functor f0 = FunctorOfTerm(d0); + if (IsExtensionFunctor(f0)) { + switch ((CELL)f0) { + case (CELL)FunctorBigInt: + { CELL *pt = RepAppl(d0); + if ( pt[1] != BIG_RATIONAL || pt[1] != BIG_INT ) { + PREG = PREG->y_u.xl.F; + GONext(); + } + } + case (CELL)FunctorLongInt: + case (CELL)FunctorDouble: + PREG = NEXTOP(PREG, xl); + GONext(); + break; + default: + PREG = PREG->y_u.xl.F; + GONext(); + } + } + } + PREG = PREG->y_u.xl.F; + GONext(); + + BEGP(pt0); + deref_body(d0, pt0, number_x_unk, number_x_nvar); + PREG = PREG->y_u.xl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_number_y, yl); + BEGD(d0); + BEGP(pt0); + pt0 = YREG + PREG->y_u.yl.y; + d0 = *pt0; + deref_head(d0, number_y_unk); + number_y_nvar: + /* non variable */ + /* non variable */ + if (IsIntTerm(d0)) { + PREG = NEXTOP(PREG, xl); + GONext(); + } + if (IsApplTerm(d0)) { + Functor f0 = FunctorOfTerm(d0); + if (IsExtensionFunctor(f0)) { + switch ((CELL)f0) { + case (CELL)FunctorBigInt: + { CELL *pt = RepAppl(d0); + if ( pt[1] != BIG_RATIONAL || pt[1] != BIG_INT ) { + PREG = PREG->y_u.yl.F; + GONext(); + } + } + break; + case (CELL)FunctorLongInt: + case (CELL)FunctorDouble: + PREG = NEXTOP(PREG, yl); + GONext(); + break; + default: + PREG = PREG->y_u.yl.F; + GONext(); + } + } + } + PREG = PREG->y_u.yl.F; + GONext(); + + derefa_body(d0, pt0, number_y_unk, number_y_nvar); + PREG = PREG->y_u.yl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_var_x, xl); + BEGD(d0); + d0 = XREG(PREG->y_u.xl.x); + deref_head(d0, var_x_unk); + var_x_nvar: + /* non variable */ + PREG = PREG->y_u.xl.F; + GONext(); + + BEGP(pt0); + deref_body(d0, pt0, var_x_unk, var_x_nvar); + PREG = NEXTOP(PREG, xl); + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_var_y, yl); + BEGD(d0); + BEGP(pt0); + pt0 = YREG + PREG->y_u.yl.y; + d0 = *pt0; + deref_head(d0, var_y_unk); + var_y_nvar: + /* non variable */ + PREG = PREG->y_u.yl.F; + GONext(); + + derefa_body(d0, pt0, var_y_unk, var_y_nvar); + PREG = NEXTOP(PREG, yl); + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_db_ref_x, xl); + BEGD(d0); + d0 = XREG(PREG->y_u.xl.x); + deref_head(d0, dbref_x_unk); + dbref_x_nvar: + /* non variable */ + if (IsDBRefTerm(d0)) { + /* only allow references to the database, not general references + * to go through. */ + PREG = NEXTOP(PREG, xl); + GONext(); + } + else { + PREG = PREG->y_u.xl.F; + GONext(); + } + + BEGP(pt0); + deref_body(d0, pt0, dbref_x_unk, dbref_x_nvar); + PREG = PREG->y_u.xl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_db_ref_y, yl); + BEGD(d0); + BEGP(pt0); + pt0 = YREG + PREG->y_u.yl.y; + d0 = *pt0; + deref_head(d0, dbref_y_unk); + dbref_y_nvar: + /* non variable */ + if (IsDBRefTerm(d0)) { + /* only allow references to the database, not general references + * to go through. */ + PREG = NEXTOP(PREG, yl); + GONext(); + } + else { + PREG = PREG->y_u.yl.F; + GONext(); + } + + derefa_body(d0, pt0, dbref_y_unk, dbref_y_nvar); + PREG = PREG->y_u.yl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_primitive_x, xl); + BEGD(d0); + d0 = XREG(PREG->y_u.xl.x); + deref_head(d0, primi_x_unk); + primi_x_nvar: + /* non variable */ + if (IsPrimitiveTerm(d0)) { + PREG = NEXTOP(PREG, xl); + GONext(); + } + else { + PREG = PREG->y_u.xl.F; + GONext(); + } + + BEGP(pt0); + deref_body(d0, pt0, primi_x_unk, primi_x_nvar); + PREG = PREG->y_u.xl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_primitive_y, yl); + BEGD(d0); + BEGP(pt0); + pt0 = YREG + PREG->y_u.yl.y; + d0 = *pt0; + deref_head(d0, primi_y_unk); + primi_y_nvar: + /* non variable */ + if (IsPrimitiveTerm(d0)) { + PREG = NEXTOP(PREG, yl); + GONext(); + } + else { + PREG = PREG->y_u.yl.F; + GONext(); + } + + derefa_body(d0, pt0, primi_y_unk, primi_y_nvar); + PREG = PREG->y_u.yl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_compound_x, xl); + BEGD(d0); + d0 = XREG(PREG->y_u.xl.x); + deref_head(d0, compound_x_unk); + compound_x_nvar: + /* non variable */ + if (IsPairTerm(d0)) { + PREG = NEXTOP(PREG, xl); + GONext(); + } + else if (IsApplTerm(d0)) { + if (IsExtensionFunctor(FunctorOfTerm(d0))) { + PREG = PREG->y_u.xl.F; + GONext(); + } + PREG = NEXTOP(PREG, xl); + GONext(); + } + else { + PREG = PREG->y_u.xl.F; + GONext(); + } + + BEGP(pt0); + deref_body(d0, pt0, compound_x_unk, compound_x_nvar); + PREG = PREG->y_u.xl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_compound_y, yl); + BEGD(d0); + BEGP(pt0); + pt0 = YREG + PREG->y_u.yl.y; + d0 = *pt0; + deref_head(d0, compound_y_unk); + compound_y_nvar: + /* non variable */ + if (IsPairTerm(d0)) { + PREG = NEXTOP(PREG, yl); + GONext(); + } + else if (IsApplTerm(d0)) { + if (IsExtensionFunctor(FunctorOfTerm(d0))) { + PREG = PREG->y_u.yl.F; + GONext(); + } + PREG = NEXTOP(PREG, yl); + GONext(); + } + else { + PREG = PREG->y_u.yl.F; + GONext(); + } + + derefa_body(d0, pt0, compound_y_unk, compound_y_nvar); + PREG = PREG->y_u.yl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_float_x, xl); + BEGD(d0); + d0 = XREG(PREG->y_u.xl.x); + deref_head(d0, float_x_unk); + float_x_nvar: + /* non variable */ + if (IsFloatTerm(d0)) { + PREG = NEXTOP(PREG, xl); + GONext(); + } + PREG = PREG->y_u.xl.F; + GONext(); + + BEGP(pt0); + deref_body(d0, pt0, float_x_unk, float_x_nvar); + PREG = PREG->y_u.xl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); + + Op(p_float_y, yl); + BEGD(d0); + BEGP(pt0); + pt0 = YREG + PREG->y_u.yl.y; + d0 = *pt0; + deref_head(d0, float_y_unk); + float_y_nvar: + /* non variable */ + if (IsFloatTerm(d0)) { + PREG = NEXTOP(PREG, yl); + GONext(); + } + PREG = PREG->y_u.yl.F; + GONext(); + + derefa_body(d0, pt0, float_y_unk, float_y_nvar); + PREG = PREG->y_u.yl.F; + GONext(); + ENDP(pt0); + ENDD(d0); + ENDOp(); +