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:
vsc 2003-01-13 14:02:50 +00:00
parent 6f8b90b131
commit ef3c860fdc
6 changed files with 32 additions and 57 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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);
}

View File

@ -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);

View File

@ -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));

View File

@ -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 *));