fix comparison predicates.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@741 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
6f8b90b131
commit
ef3c860fdc
11
C/amasm.c
11
C/amasm.c
@ -244,6 +244,12 @@ emit_x(CELL xarg)
|
||||
#endif /* PRECOMPUTE_REGADDRESS */
|
||||
}
|
||||
|
||||
wamreg
|
||||
Yap_emit_x(CELL xarg)
|
||||
{
|
||||
return emit_x(xarg);
|
||||
}
|
||||
|
||||
inline static yamop *
|
||||
emit_a(CELL a)
|
||||
{
|
||||
@ -903,6 +909,11 @@ compile_cmp_flags(char *s)
|
||||
return(0);
|
||||
}
|
||||
|
||||
wamreg
|
||||
Yap_compile_cmp_flags(PredEntry *pred)
|
||||
{
|
||||
return compile_cmp_flags(RepAtom(NameOfFunctor(pred->FunctorOfPred))->StrOfAE);
|
||||
}
|
||||
|
||||
static void
|
||||
a_bfunc(CELL pred)
|
||||
|
53
C/cmppreds.c
53
C/cmppreds.c
@ -30,17 +30,11 @@ STATIC_PROTO(Int compare, (Term, Term));
|
||||
STATIC_PROTO(Int p_compare, (void));
|
||||
STATIC_PROTO(Int p_acomp, (void));
|
||||
STATIC_PROTO(Int a_eq, (Term,Term));
|
||||
STATIC_PROTO(Int p_eq, (void));
|
||||
STATIC_PROTO(Int a_dif, (Term,Term));
|
||||
STATIC_PROTO(Int p_dif, (void));
|
||||
STATIC_PROTO(Int a_gt, (Term, Term));
|
||||
STATIC_PROTO(Int p_gt, (void));
|
||||
STATIC_PROTO(Int a_ge, (Term,Term));
|
||||
STATIC_PROTO(Int p_ge, (void));
|
||||
STATIC_PROTO(Int a_lt, (Term,Term));
|
||||
STATIC_PROTO(Int p_lt, (void));
|
||||
STATIC_PROTO(Int a_le, (Term,Term));
|
||||
STATIC_PROTO(Int p_le, (void));
|
||||
STATIC_PROTO(Int p_noteq, (void));
|
||||
STATIC_PROTO(Int p_gen_lt, (void));
|
||||
STATIC_PROTO(Int p_gen_le, (void));
|
||||
@ -603,12 +597,6 @@ a_eq(Term t1, Term t2)
|
||||
}
|
||||
}
|
||||
|
||||
static Int
|
||||
p_eq(void)
|
||||
{ /* A =:= B */
|
||||
return(a_eq(Deref(ARG1),Deref(ARG2)));
|
||||
}
|
||||
|
||||
static Int
|
||||
a_dif(Term t1, Term t2)
|
||||
{ /* A =\\= B */
|
||||
@ -688,12 +676,6 @@ a_dif(Term t1, Term t2)
|
||||
}
|
||||
}
|
||||
|
||||
static Int
|
||||
p_dif(void)
|
||||
{ /* A =\\= B */
|
||||
return(a_dif(Deref(ARG1),Deref(ARG2)));
|
||||
}
|
||||
|
||||
static Int
|
||||
a_gt(Term t1, Term t2)
|
||||
{ /* A > B */
|
||||
@ -773,12 +755,6 @@ a_gt(Term t1, Term t2)
|
||||
}
|
||||
}
|
||||
|
||||
static Int
|
||||
p_gt(void)
|
||||
{ /* A > B */
|
||||
return(a_gt(Deref(ARG1),Deref(ARG2)));
|
||||
}
|
||||
|
||||
static Int
|
||||
a_ge(Term t1, Term t2)
|
||||
{ /* A >= B */
|
||||
@ -858,12 +834,6 @@ a_ge(Term t1, Term t2)
|
||||
}
|
||||
}
|
||||
|
||||
static Int
|
||||
p_ge(void)
|
||||
{ /* A >= B */
|
||||
return(a_ge(Deref(ARG1),Deref(ARG2)));
|
||||
}
|
||||
|
||||
static Int
|
||||
a_lt(Term t1, Term t2)
|
||||
{ /* A < B */
|
||||
@ -943,12 +913,6 @@ a_lt(Term t1, Term t2)
|
||||
}
|
||||
}
|
||||
|
||||
static Int
|
||||
p_lt(void)
|
||||
{ /* A < B */
|
||||
return(a_lt(Deref(ARG1),Deref(ARG2)));
|
||||
}
|
||||
|
||||
static Int
|
||||
a_le(Term t1, Term t2)
|
||||
{ /* A <= B */
|
||||
@ -1028,11 +992,6 @@ a_le(Term t1, Term t2)
|
||||
}
|
||||
}
|
||||
|
||||
static Int
|
||||
p_le(void)
|
||||
{ /* A =< B */
|
||||
return(a_le(Deref(ARG1),Deref(ARG2)));
|
||||
}
|
||||
|
||||
static Int
|
||||
p_noteq(void)
|
||||
@ -1068,12 +1027,12 @@ p_gen_ge(void)
|
||||
void
|
||||
Yap_InitCmpPreds(void)
|
||||
{
|
||||
Yap_InitCmpPred("=:=", 2, a_eq, p_eq, SafePredFlag | BinaryTestPredFlag);
|
||||
Yap_InitCmpPred("=\\=", 2, a_dif, p_dif, SafePredFlag | BinaryTestPredFlag);
|
||||
Yap_InitCmpPred(">", 2, a_gt, p_gt, SafePredFlag | BinaryTestPredFlag);
|
||||
Yap_InitCmpPred("=<", 2, a_le, p_le, SafePredFlag | BinaryTestPredFlag);
|
||||
Yap_InitCmpPred("<", 2, a_lt, p_lt, SafePredFlag | BinaryTestPredFlag);
|
||||
Yap_InitCmpPred(">=", 2, a_ge, p_ge, SafePredFlag | BinaryTestPredFlag);
|
||||
Yap_InitCmpPred("=:=", 2, a_eq, SafePredFlag | BinaryTestPredFlag);
|
||||
Yap_InitCmpPred("=\\=", 2, a_dif, SafePredFlag | BinaryTestPredFlag);
|
||||
Yap_InitCmpPred(">", 2, a_gt, SafePredFlag | BinaryTestPredFlag);
|
||||
Yap_InitCmpPred("=<", 2, a_le, SafePredFlag | BinaryTestPredFlag);
|
||||
Yap_InitCmpPred("<", 2, a_lt, SafePredFlag | BinaryTestPredFlag);
|
||||
Yap_InitCmpPred(">=", 2, a_ge, SafePredFlag | BinaryTestPredFlag);
|
||||
Yap_InitCPred("$a_compare", 3, p_acomp, TestPredFlag | SafePredFlag);
|
||||
Yap_InitCPred("\\==", 2, p_noteq, TestPredFlag | SafePredFlag);
|
||||
Yap_InitCPred("@<", 2, p_gen_lt, TestPredFlag | SafePredFlag);
|
||||
|
15
C/init.c
15
C/init.c
@ -477,12 +477,12 @@ Yap_InitCPred(char *Name, unsigned long int Arity, CPredicate code, int flags)
|
||||
}
|
||||
|
||||
void
|
||||
Yap_InitCmpPred(char *Name, unsigned long int Arity, CmpPredicate cmp_code, CPredicate code, int flags)
|
||||
Yap_InitCmpPred(char *Name, unsigned long int Arity, CmpPredicate cmp_code, int flags)
|
||||
{
|
||||
Atom atom = Yap_LookupAtom(Name);
|
||||
PredEntry *pe;
|
||||
yamop *p_code = ((Clause *)NULL)->ClCode;
|
||||
Clause *cl = (Clause *)Yap_AllocCodeSpace((CELL)NEXTOP(NEXTOP(((yamop *)p_code),sla),e));
|
||||
Clause *cl = (Clause *)Yap_AllocCodeSpace((CELL)NEXTOP(NEXTOP(((yamop *)p_code),lxx),e));
|
||||
|
||||
cl->u.ClValue = 0;
|
||||
cl->ClFlags = 0;
|
||||
@ -496,11 +496,12 @@ Yap_InitCmpPred(char *Name, unsigned long int Arity, CmpPredicate cmp_code, CPre
|
||||
pe->CodeOfPred = p_code;
|
||||
pe->cs.d_code = cmp_code;
|
||||
pe->ModuleOfPred = CurrentModule;
|
||||
p_code->opc = pe->OpcodeOfPred = Yap_opcode(_call_cpred);
|
||||
p_code->u.sla.sla_u.p = pe;
|
||||
p_code->u.sla.bmap = NULL;
|
||||
p_code->u.sla.s = -Signed(RealEnvSize);
|
||||
p_code = NEXTOP(p_code,sla);
|
||||
p_code->opc = pe->OpcodeOfPred = Yap_opcode(_call_bfunc_xx);
|
||||
p_code->u.lxx.p = pe;
|
||||
p_code->u.lxx.x1 = Yap_emit_x(1);
|
||||
p_code->u.lxx.x2 = Yap_emit_x(2);
|
||||
p_code->u.lxx.flags = Yap_compile_cmp_flags(pe);
|
||||
p_code = NEXTOP(p_code,lxx);
|
||||
p_code->opc = Yap_opcode(_procceed);
|
||||
}
|
||||
|
||||
|
@ -312,7 +312,7 @@ strtod(s, pe)
|
||||
static char *cur_char_ptr;
|
||||
|
||||
static int
|
||||
get_char_from_string(void)
|
||||
get_char_from_string(int s)
|
||||
{
|
||||
if (cur_char_ptr[0] == '\0')
|
||||
return(-1);
|
||||
|
@ -10,7 +10,7 @@
|
||||
* File: Yap.proto *
|
||||
* mods: *
|
||||
* comments: Function declarations for YAP *
|
||||
* version: $Id: Yapproto.h,v 1.31 2002-12-27 16:53:08 vsc Exp $ *
|
||||
* version: $Id: Yapproto.h,v 1.32 2003-01-13 14:02:50 vsc Exp $ *
|
||||
*************************************************************************/
|
||||
|
||||
/* prototype file for Yap */
|
||||
@ -175,7 +175,7 @@ int STD_PROTO(Yap_IsOpType,(char *));
|
||||
void STD_PROTO(Yap_InitStacks,(int,int,int,int,int,int));
|
||||
void STD_PROTO(Yap_InitCPred,(char *, unsigned long int, CPredicate, int));
|
||||
void STD_PROTO(Yap_InitAsmPred,(char *, unsigned long int, int, CPredicate, int));
|
||||
void STD_PROTO(Yap_InitCmpPred,(char *, unsigned long int, CmpPredicate, CPredicate, int));
|
||||
void STD_PROTO(Yap_InitCmpPred,(char *, unsigned long int, CmpPredicate, int));
|
||||
void STD_PROTO(Yap_InitCPredBack,(char *, unsigned long int, unsigned int, CPredicate,CPredicate,int));
|
||||
void STD_PROTO(Yap_InitYaamRegs,(void));
|
||||
void STD_PROTO(Yap_ReInitWallTime, (void));
|
||||
|
@ -116,6 +116,10 @@ typedef struct clause_struct {
|
||||
#define CL_IN_USE(X) ((X)->ClFlags & InUseMask)
|
||||
#endif
|
||||
|
||||
/* amasm.c */
|
||||
wamreg STD_PROTO(Yap_emit_x,(CELL));
|
||||
wamreg STD_PROTO(Yap_compile_cmp_flags,(PredEntry *));
|
||||
|
||||
/* cdmgr.c */
|
||||
void STD_PROTO(Yap_RemoveLogUpdIndex,(Clause *));
|
||||
void STD_PROTO(Yap_IPred,(PredEntry *));
|
||||
|
Reference in New Issue
Block a user