diff --git a/C/amasm.c b/C/amasm.c index fc913a527..68c596c91 100644 --- a/C/amasm.c +++ b/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) diff --git a/C/cmppreds.c b/C/cmppreds.c index 83e8cfa80..48cd138dd 100644 --- a/C/cmppreds.c +++ b/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); diff --git a/C/init.c b/C/init.c index 4aaf66dff..9e5130d64 100644 --- a/C/init.c +++ b/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); } diff --git a/C/stdpreds.c b/C/stdpreds.c index 397f0da12..7533af1fc 100644 --- a/C/stdpreds.c +++ b/C/stdpreds.c @@ -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); diff --git a/H/Yapproto.h b/H/Yapproto.h index 708d7734f..628e459ae 100644 --- a/H/Yapproto.h +++ b/H/Yapproto.h @@ -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)); diff --git a/H/clause.h b/H/clause.h index e7a33170d..4498bdd88 100644 --- a/H/clause.h +++ b/H/clause.h @@ -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 *));