use same format for all call instructions; try to be more robust in doing g
This commit is contained in:
parent
8bf607aa65
commit
51b99388e7
18
C/absmi.c
18
C/absmi.c
@ -526,8 +526,8 @@ static int interrupt_execute(USES_REGS1) {
|
|||||||
}
|
}
|
||||||
if (PP)
|
if (PP)
|
||||||
UNLOCKPE(1, PP);
|
UNLOCKPE(1, PP);
|
||||||
PP = P->y_u.pp.p0;
|
PP = P->y_u.Osbpp.p0;
|
||||||
if ((P->y_u.pp.p->PredFlags & (NoTracePredFlag | HiddenPredFlag)) &&
|
if ((P->y_u.Osbpp.p->PredFlags & (NoTracePredFlag | HiddenPredFlag)) &&
|
||||||
Yap_only_has_signal(YAP_CREEP_SIGNAL)) {
|
Yap_only_has_signal(YAP_CREEP_SIGNAL)) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
@ -535,11 +535,11 @@ static int interrupt_execute(USES_REGS1) {
|
|||||||
if ((v = code_overflow(YENV PASS_REGS)) >= 0) {
|
if ((v = code_overflow(YENV PASS_REGS)) >= 0) {
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
if ((v = stack_overflow(P->y_u.pp.p, ENV, CP,
|
if ((v = stack_overflow(P->y_u.Osbpp.p, ENV, CP,
|
||||||
P->y_u.pp.p->ArityOfPE PASS_REGS)) >= 0) {
|
P->y_u.Osbpp.p->ArityOfPE PASS_REGS)) >= 0) {
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
return interrupt_handler(P->y_u.pp.p PASS_REGS);
|
return interrupt_handler(P->y_u.Osbpp.p PASS_REGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int interrupt_call(USES_REGS1) {
|
static int interrupt_call(USES_REGS1) {
|
||||||
@ -864,8 +864,8 @@ static int interrupt_dexecute(USES_REGS1) {
|
|||||||
#endif
|
#endif
|
||||||
if (PP)
|
if (PP)
|
||||||
UNLOCKPE(1, PP);
|
UNLOCKPE(1, PP);
|
||||||
PP = P->y_u.pp.p0;
|
PP = P->y_u.Osbpp.p0;
|
||||||
pe = P->y_u.pp.p;
|
pe = P->y_u.Osbpp.p;
|
||||||
if ((pe->PredFlags & (NoTracePredFlag | HiddenPredFlag)) &&
|
if ((pe->PredFlags & (NoTracePredFlag | HiddenPredFlag)) &&
|
||||||
Yap_only_has_signal(YAP_CREEP_SIGNAL)) {
|
Yap_only_has_signal(YAP_CREEP_SIGNAL)) {
|
||||||
return 2;
|
return 2;
|
||||||
@ -877,8 +877,8 @@ static int interrupt_dexecute(USES_REGS1) {
|
|||||||
if ((v = code_overflow(YENV PASS_REGS)) >= 0) {
|
if ((v = code_overflow(YENV PASS_REGS)) >= 0) {
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
if ((v = stack_overflow(P->y_u.pp.p, (CELL *)YENV[E_E], (yamop *)YENV[E_CP],
|
if ((v = stack_overflow(P->y_u.Osbpp.p, (CELL *)YENV[E_E], (yamop *)YENV[E_CP],
|
||||||
P->y_u.pp.p->ArityOfPE PASS_REGS)) >= 0) {
|
P->y_u.Osbpp.p->ArityOfPE PASS_REGS)) >= 0) {
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
/* first, deallocate */
|
/* first, deallocate */
|
||||||
|
16
C/amasm.c
16
C/amasm.c
@ -1434,10 +1434,12 @@ a_p(op_numbers opcode, clause_info *clinfo, yamop *code_p, int pass_no,
|
|||||||
if (Flags & CPredFlag) {
|
if (Flags & CPredFlag) {
|
||||||
code_p->opc = emit_op(_execute_cpred);
|
code_p->opc = emit_op(_execute_cpred);
|
||||||
}
|
}
|
||||||
code_p->y_u.pp.p = RepPredProp(fe);
|
code_p->y_u.Osbpp.p = RepPredProp(fe);
|
||||||
code_p->y_u.pp.p0 = clinfo->CurrentPred;
|
code_p->y_u.Osbpp.p0 = clinfo->CurrentPred;
|
||||||
|
code_p->y_u.Osbpp.s = 0;
|
||||||
|
code_p->y_u.Osbpp.bmap = NULL;
|
||||||
}
|
}
|
||||||
GONEXT(pp);
|
GONEXT(Osbpp);
|
||||||
} else {
|
} else {
|
||||||
if (pass_no)
|
if (pass_no)
|
||||||
code_p->y_u.p.p = RepPredProp(fe);
|
code_p->y_u.p.p = RepPredProp(fe);
|
||||||
@ -3901,7 +3903,7 @@ yamop *Yap_InitCommaContinuation(PredEntry *pe) {
|
|||||||
GONEXT(Osbmp);
|
GONEXT(Osbmp);
|
||||||
for (i = 0; i < arity; i++)
|
for (i = 0; i < arity; i++)
|
||||||
GONEXT(yx);
|
GONEXT(yx);
|
||||||
GONEXT(pp);
|
GONEXT(Osbmp);
|
||||||
pe->MetaEntryOfPred = code_p =
|
pe->MetaEntryOfPred = code_p =
|
||||||
Yap_AllocCodeSpace((size_t)code_p);
|
Yap_AllocCodeSpace((size_t)code_p);
|
||||||
code_p->opc = opcode(_call);
|
code_p->opc = opcode(_call);
|
||||||
@ -3917,8 +3919,8 @@ Yap_AllocCodeSpace((size_t)code_p);
|
|||||||
GONEXT(yx);
|
GONEXT(yx);
|
||||||
}
|
}
|
||||||
code_p->opc = opcode(_dexecute);
|
code_p->opc = opcode(_dexecute);
|
||||||
code_p->y_u.pp.p0 = PredMetaCall;
|
code_p->y_u.Osbpp.p0 = PredMetaCall;
|
||||||
code_p->y_u.pp.p = pe;
|
code_p->y_u.Osbpp.p = pe;
|
||||||
GONEXT(pp);
|
GONEXT(Osbpp);
|
||||||
return pe->MetaEntryOfPred;
|
return pe->MetaEntryOfPred;
|
||||||
}
|
}
|
||||||
|
@ -194,18 +194,18 @@
|
|||||||
/* Macros for stack trimming */
|
/* Macros for stack trimming */
|
||||||
|
|
||||||
/* execute Label */
|
/* execute Label */
|
||||||
BOp(execute, pp);
|
BOp(execute, Osbpp);
|
||||||
{
|
{
|
||||||
PredEntry *pt0;
|
PredEntry *pt0;
|
||||||
CACHE_Y_AS_ENV(YREG);
|
CACHE_Y_AS_ENV(YREG);
|
||||||
pt0 = PREG->y_u.pp.p;
|
pt0 = PREG->y_u.Osbpp.p;
|
||||||
#ifndef NO_CHECKING
|
#ifndef NO_CHECKING
|
||||||
check_stack(NoStackExecute, HR);
|
check_stack(NoStackExecute, HR);
|
||||||
goto skip_do_execute;
|
goto skip_do_execute;
|
||||||
#endif
|
#endif
|
||||||
do_execute:
|
do_execute:
|
||||||
FETCH_Y_FROM_ENV(YREG);
|
FETCH_Y_FROM_ENV(YREG);
|
||||||
pt0 = PREG->y_u.pp.p;
|
pt0 = PREG->y_u.Osbpp.p;
|
||||||
skip_do_execute:
|
skip_do_execute:
|
||||||
#ifdef LOW_LEVEL_TRACER
|
#ifdef LOW_LEVEL_TRACER
|
||||||
if (Yap_do_low_level_trace) {
|
if (Yap_do_low_level_trace) {
|
||||||
@ -244,17 +244,17 @@
|
|||||||
|
|
||||||
/* dexecute Label */
|
/* dexecute Label */
|
||||||
/* joint deallocate and execute */
|
/* joint deallocate and execute */
|
||||||
BOp(dexecute, pp);
|
BOp(dexecute, Osbpp);
|
||||||
#ifdef LOW_LEVEL_TRACER
|
#ifdef LOW_LEVEL_TRACER
|
||||||
if (Yap_do_low_level_trace)
|
if (Yap_do_low_level_trace)
|
||||||
low_level_trace(enter_pred,PREG->y_u.pp.p,XREGS+1);
|
low_level_trace(enter_pred,PREG->y_u.Osbpp.p,XREGS+1);
|
||||||
#endif /* LOW_LEVEL_TRACER */
|
#endif /* LOW_LEVEL_TRACER */
|
||||||
CACHE_Y_AS_ENV(YREG);
|
CACHE_Y_AS_ENV(YREG);
|
||||||
{
|
{
|
||||||
PredEntry *pt0;
|
PredEntry *pt0;
|
||||||
|
|
||||||
CACHE_A1();
|
CACHE_A1();
|
||||||
pt0 = PREG->y_u.pp.p;
|
pt0 = PREG->y_u.Osbpp.p;
|
||||||
#ifndef NO_CHECKING
|
#ifndef NO_CHECKING
|
||||||
/* check stacks */
|
/* check stacks */
|
||||||
check_stack(NoStackDExecute, HR);
|
check_stack(NoStackDExecute, HR);
|
||||||
@ -262,7 +262,7 @@
|
|||||||
#endif
|
#endif
|
||||||
continue_dexecute:
|
continue_dexecute:
|
||||||
FETCH_Y_FROM_ENV(YREG);
|
FETCH_Y_FROM_ENV(YREG);
|
||||||
pt0 = PREG->y_u.pp.p;
|
pt0 = PREG->y_u.Osbpp.p;
|
||||||
skip_dexecute:
|
skip_dexecute:
|
||||||
#ifdef DEPTH_LIMIT
|
#ifdef DEPTH_LIMIT
|
||||||
if (DEPTH <= MkIntTerm(1)) {/* I assume Module==0 is primitives */
|
if (DEPTH <= MkIntTerm(1)) {/* I assume Module==0 is primitives */
|
||||||
|
15
C/errors.c
15
C/errors.c
@ -130,14 +130,27 @@ bool Yap_HandleError__(const char *file, const char *function, int lineno,
|
|||||||
yap_error_number err = LOCAL_Error_TYPE;
|
yap_error_number err = LOCAL_Error_TYPE;
|
||||||
const char *serr;
|
const char *serr;
|
||||||
|
|
||||||
|
arity_t arity = 2;
|
||||||
|
|
||||||
if (LOCAL_ErrorMessage) {
|
if (LOCAL_ErrorMessage) {
|
||||||
serr = LOCAL_ErrorMessage;
|
serr = LOCAL_ErrorMessage;
|
||||||
} else {
|
} else {
|
||||||
serr = s;
|
serr = s;
|
||||||
}
|
}
|
||||||
|
if (P->opc == Yap_opcode(_try_c) ||
|
||||||
|
P->opc == Yap_opcode(_try_userc) ||
|
||||||
|
P->opc == Yap_opcode(_retry_c) ||
|
||||||
|
P->opc == Yap_opcode(_retry_userc)) {
|
||||||
|
|
||||||
|
arity = P->y_u.OtapFs.p->ArityOfPE;
|
||||||
|
} else {
|
||||||
|
arity = PREVOP(P,Osbpp)->y_u.Osbpp.p->ArityOfPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
switch (err) {
|
switch (err) {
|
||||||
case RESOURCE_ERROR_STACK:
|
case RESOURCE_ERROR_STACK:
|
||||||
if (!Yap_gc(2, ENV, gc_P(P, CP))) {
|
if (!Yap_gc(arity, ENV, gc_P(P, CP))) {
|
||||||
Yap_Error__(file, function, lineno, RESOURCE_ERROR_STACK, ARG1, serr);
|
Yap_Error__(file, function, lineno, RESOURCE_ERROR_STACK, ARG1, serr);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@
|
|||||||
ENDBOp();
|
ENDBOp();
|
||||||
|
|
||||||
/* execute Label */
|
/* execute Label */
|
||||||
BOp(execute_cpred, pp);
|
BOp(execute_cpred, Osbpp);
|
||||||
check_trail(TR);
|
check_trail(TR);
|
||||||
{
|
{
|
||||||
PredEntry *pt0;
|
PredEntry *pt0;
|
||||||
@ -103,7 +103,7 @@
|
|||||||
SET_ASP(YREG, E_CB * sizeof(CELL));
|
SET_ASP(YREG, E_CB * sizeof(CELL));
|
||||||
/* for slots to work */
|
/* for slots to work */
|
||||||
#endif /* FROZEN_STACKS */
|
#endif /* FROZEN_STACKS */
|
||||||
pt0 = PREG->y_u.pp.p;
|
pt0 = PREG->y_u.Osbpp.p;
|
||||||
#ifdef LOW_LEVEL_TRACER
|
#ifdef LOW_LEVEL_TRACER
|
||||||
if (Yap_do_low_level_trace) {
|
if (Yap_do_low_level_trace) {
|
||||||
low_level_trace(enter_pred, pt0, XREGS + 1);
|
low_level_trace(enter_pred, pt0, XREGS + 1);
|
||||||
@ -131,7 +131,7 @@
|
|||||||
#endif /* DEPTH_LIMIT */
|
#endif /* DEPTH_LIMIT */
|
||||||
/* now call C-Code */
|
/* now call C-Code */
|
||||||
{
|
{
|
||||||
CPredicate f = PREG->y_u.pp.p->cs.f_code;
|
CPredicate f = PREG->y_u.Osbpp.p->cs.f_code;
|
||||||
yamop *oldPREG = PREG;
|
yamop *oldPREG = PREG;
|
||||||
saveregs();
|
saveregs();
|
||||||
d0 = f(PASS_REGS1);
|
d0 = f(PASS_REGS1);
|
||||||
|
@ -973,7 +973,7 @@ prof_alrm(int signo, siginfo_t *si, void *scv)
|
|||||||
current_p = PREVOP(P,Osbpp)->y_u.Osbpp.p->CodeOfPred;
|
current_p = PREVOP(P,Osbpp)->y_u.Osbpp.p->CodeOfPred;
|
||||||
} else if ((oop = Yap_op_from_opcode(P->opc)) == _execute_cpred) {
|
} else if ((oop = Yap_op_from_opcode(P->opc)) == _execute_cpred) {
|
||||||
/* doing C-code */
|
/* doing C-code */
|
||||||
current_p = P->y_u.pp.p->CodeOfPred;
|
current_p = P->y_u.Osbpp.p->CodeOfPred;
|
||||||
} else {
|
} else {
|
||||||
current_p = P;
|
current_p = P;
|
||||||
}
|
}
|
||||||
|
@ -789,9 +789,9 @@ static PredEntry *found_ystop(yamop *pc, int clause_code, void **startp, void **
|
|||||||
return pp;
|
return pp;
|
||||||
}
|
}
|
||||||
if (!pp) {
|
if (!pp) {
|
||||||
yamop *o = PREVOP(pc,pp);
|
yamop *o = PREVOP(pc,Osbpp);
|
||||||
if (o->opc ==Yap_opcode(_execute_cpred)) {
|
if (o->opc ==Yap_opcode(_execute_cpred)) {
|
||||||
pp = o->y_u.pp.p0;
|
pp = o->y_u.Osbpp.p0;
|
||||||
} else {
|
} else {
|
||||||
/* must be an index */
|
/* must be an index */
|
||||||
PredEntry **pep = (PredEntry **)pc->y_u.l.l;
|
PredEntry **pep = (PredEntry **)pc->y_u.l.l;
|
||||||
|
641
H/YapCompile.h
641
H/YapCompile.h
@ -1,305 +1,245 @@
|
|||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* *
|
* *
|
||||||
* YAP Prolog %W% %G% *
|
* YAP Prolog %W% %G% *
|
||||||
* *
|
* *
|
||||||
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
*Yap Prolog was developed at NCCUP - Universidade do Porto *
|
||||||
* *
|
* *
|
||||||
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
|
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
|
||||||
* *
|
* *
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
* *
|
* *
|
||||||
* File: YapCompile.h *
|
* File:YapCompile.h *
|
||||||
* Last rev: *
|
* Last rev: *
|
||||||
* mods: *
|
* mods: *
|
||||||
* comments: compiler data structures and routines *
|
* comments:compiler data structures and routines *
|
||||||
* *
|
* *
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
/* consult stack management */
|
/* consult stack management */
|
||||||
|
|
||||||
/* virtual machine instruction op-codes */
|
#undef COMPILER_OPS
|
||||||
#define mklist0(f) \
|
#undef COMPILER_OPS_END
|
||||||
f(nop_op, "nop") f(get_var_op, "get_var\t\t%v,%r") f(put_var_op, "put_" \
|
#undef f
|
||||||
"var\t\t%" \
|
|
||||||
"v,%r") f( \
|
#ifdef COMPILER_NAMES
|
||||||
get_val_op, "get_val\t\t%v,%r") f(put_val_op, \
|
|
||||||
"put_val\t\t%v,%r") f(get_atom_op, \
|
#define COMPILER_OPS() char *opDesc[] =
|
||||||
"get_atom\t%a,%" \
|
#define COMPILER_OPS_END()
|
||||||
"r") f(put_atom_op, \
|
#define f(x,y) y
|
||||||
"put_" \
|
|
||||||
"atom\t%" \
|
|
||||||
"a,%r") \
|
|
||||||
f(get_num_op, "get_num\t\t%n,%r") f(put_num_op, "put_num\t\t%n,%r") f( \
|
|
||||||
get_float_op, \
|
|
||||||
"get_float\t\t%w,%r") f(put_float_op, \
|
|
||||||
"put_float\t\t%w,%r") f(get_dbterm_op, \
|
|
||||||
"get_dbterm\t%w,%r") \
|
|
||||||
f(put_dbterm_op, "put_dbterm\t%w,%r") f(get_longint_op, "get_" \
|
|
||||||
"longint\t" \
|
|
||||||
"\t%w,%r") f( \
|
|
||||||
put_longint_op, \
|
|
||||||
"put_longint\t\t%w,%r") f(get_string_op, \
|
|
||||||
"get_string\t\t%w,%S") f(put_string_op, \
|
|
||||||
"put_" \
|
|
||||||
"string\t\t%" \
|
|
||||||
"w,%S") \
|
|
||||||
f(get_bigint_op, "get_bigint\t\t%l,%r") f(put_bigint_op, "put_" \
|
|
||||||
"bigin" \
|
|
||||||
"t\t\t" \
|
|
||||||
"%l,%" \
|
|
||||||
"r") f( \
|
|
||||||
get_list_op, \
|
|
||||||
"get_list\t%r") f(put_list_op, \
|
|
||||||
"put_list\t%r") f(get_struct_op, \
|
|
||||||
"get_struct\t%f,%r") \
|
|
||||||
f(put_struct_op, "put_struct\t%f,%r") f(put_unsafe_op, "put" \
|
|
||||||
"_un" \
|
|
||||||
"saf" \
|
|
||||||
"e\t" \
|
|
||||||
"%v," \
|
|
||||||
"%r") f( \
|
|
||||||
unify_var_op, \
|
|
||||||
"unify_var\t%v") f(write_var_op, \
|
|
||||||
"write_var\t%v") f(unify_val_op, \
|
|
||||||
"unify_val\t%v") \
|
|
||||||
f(write_val_op, "write_val\t%v") f(unify_atom_op, "unif" \
|
|
||||||
"y_" \
|
|
||||||
"atom" \
|
|
||||||
"\t%" \
|
|
||||||
"a") f( \
|
|
||||||
write_atom_op, \
|
|
||||||
"write_atom\t%a") f(unify_num_op, \
|
|
||||||
"unify_num\t%n") f(write_num_op, \
|
|
||||||
"write_" \
|
|
||||||
"num\t%n") \
|
|
||||||
f(unify_float_op, "unify_float\t%w") f( \
|
|
||||||
write_float_op, \
|
|
||||||
"write_float\t%w") f(unify_dbterm_op, \
|
|
||||||
"unify_dbterm\t%w") \
|
|
||||||
f(write_dbterm_op, "write_dbterm\t%w") f( \
|
|
||||||
unify_longint_op, \
|
|
||||||
"unify_longint\t%w") f(write_longint_op, \
|
|
||||||
"write_longint\t%w") \
|
|
||||||
f(unify_string_op, "unify_string\t%S") f( \
|
|
||||||
write_string_op, \
|
|
||||||
"write_string\t%S") f(unify_bigint_op, \
|
|
||||||
"unify_bigint\t%" \
|
|
||||||
"l") f(write_bigint_op, \
|
|
||||||
"write_" \
|
|
||||||
"bigint\t%" \
|
|
||||||
"l") \
|
|
||||||
f(unify_list_op, "unify_list") f( \
|
|
||||||
write_list_op, \
|
|
||||||
"write_list") f(unify_struct_op, \
|
|
||||||
"unify_struct\t%f") \
|
|
||||||
f(write_struct_op, "write_struct\t%" \
|
|
||||||
"f") f( \
|
|
||||||
write_unsafe_op, \
|
|
||||||
"write_unsafe\t%v") f(unify_local_op, \
|
|
||||||
"unify_" \
|
|
||||||
"local\t%" \
|
|
||||||
"v") \
|
|
||||||
f(write_local_op, "write " \
|
|
||||||
"local\t%v") f( \
|
|
||||||
unify_last_list_op, \
|
|
||||||
"unify_last_list") \
|
|
||||||
f(write_last_list_op, "writ" \
|
|
||||||
"e_" \
|
|
||||||
"last" \
|
|
||||||
"_lis" \
|
|
||||||
"t") f( \
|
|
||||||
unify_last_struct_op, \
|
|
||||||
"unify_last_struct\t%f") \
|
|
||||||
f(write_last_struct_op, \
|
|
||||||
"write_last_struct\t%" \
|
|
||||||
"f") f(unify_last_var_op, \
|
|
||||||
"unify_last_" \
|
|
||||||
"var\t%v") \
|
|
||||||
f( \
|
|
||||||
unify_last_val_op, \
|
|
||||||
"unify_last_" \
|
|
||||||
"val\t%v") f(unify_last_local_op, \
|
|
||||||
"u" \
|
|
||||||
"n" \
|
|
||||||
"i" \
|
|
||||||
"f" \
|
|
||||||
"y" \
|
|
||||||
"_" \
|
|
||||||
"l" \
|
|
||||||
"a" \
|
|
||||||
"s" \
|
|
||||||
"t" \
|
|
||||||
"_" \
|
|
||||||
"l" \
|
|
||||||
"o" \
|
|
||||||
"c" \
|
|
||||||
"a" \
|
|
||||||
"l" \
|
|
||||||
"\t%v") f(unify_last_atom_op, \
|
|
||||||
"unify_last_atom\t%a") f(unify_last_num_op, "unify_last_num\t%n") f(unify_last_float_op, "unify_last_float\t%w") f(unify_last_dbterm_op, "unify_last_dbterm\t%w") f(unify_last_longint_op, "unify_last_longint\t%w") f(unify_last_string_op, "unify_last_string\t%S") f(unify_last_bigint_op, "unify_last_bigint\t%l") f(ensure_space_op, \
|
|
||||||
"ensure_space") f(native_op, \
|
|
||||||
"native_code") f(f_var_op, "function_to_var\t%v,%B") f(f_val_op, "function_to_val\t%v,%B") f(f_0_op, "function_to_0\t%B") f(align_float_op, \
|
|
||||||
"align_float") f(fail_op, "fail") f(cut_op, "cut") f(cutexit_op, \
|
|
||||||
"cutexit") f(allocate_op, \
|
|
||||||
"allocate") f(deallocate_op, \
|
|
||||||
"deallocate") f(tryme_op, \
|
|
||||||
"try_me_else\t\t%l\t%x") f(jump_op, \
|
|
||||||
"jump\t\t%l") f(jumpi_op, \
|
|
||||||
"jump_in_indexing\t\t%i") f(procceed_op, "proceed") f(call_op, "call\t\t%p,%d,%z") f(execute_op, "execute\t\t%p") f(safe_call_op, "sys\t\t%p") f(label_op, \
|
|
||||||
"%l:") f(name_op, "name\t\t%m,%d") f(pop_op, \
|
|
||||||
"pop\t\t%l") f(retryme_op, \
|
|
||||||
"retry_me_else\t\t%l\t%x") f(trustme_op, \
|
|
||||||
"trust_me_else_fail\t%x") f(either_op, "either_me\t\t%l,%d,%z") f(orelse_op, "or_else\t\t%l,%z") f(orlast_op, \
|
|
||||||
"or_last") f(push_or_op, "push_or") f(pushpop_or_op, "pushpop_or") f(pop_or_op, "pop_or") f(save_b_op, "save_by\t\t%v") f(commit_b_op, \
|
|
||||||
"commit_by\t\t%v") f(patch_b_op, "patch_by\t\t%v") f(try_op, \
|
|
||||||
"try\t\t%g\t%x") f(retry_op, "retry\t\t%g\t%x") f(trust_op, \
|
|
||||||
"trust\t\t%g\t%x") f(try_in_op, \
|
|
||||||
"try_in\t\t%g\t%x") f(jump_v_op, \
|
|
||||||
"jump_if_var\t\t%g") f(jump_nv_op, "jump_if_nonvar\t\t%g") f(cache_arg_op, "cache_arg\t%r") f(cache_sub_arg_op, "cache_sub_arg\t%d") f(user_switch_op, \
|
|
||||||
"user_switch") f(switch_on_type_op, "switch_on_type\t%h\t%h\t%h\t%h") f(switch_c_op, \
|
|
||||||
"switch_on_constant\t%i\n%c") f(if_c_op, \
|
|
||||||
"if_constant\t%i\n%c") f(switch_f_op, \
|
|
||||||
"switch_on_functor\t%i\n%e") f(if_f_op, "if_functor\t%i\n%e") f(if_not_op, "if_not_then\t%i\t%h\t%h\t%h") \
|
|
||||||
f(index_dbref_op, \
|
|
||||||
"index_on_" \
|
|
||||||
"dbref") f(index_blob_op, \
|
|
||||||
"i" \
|
|
||||||
"n" \
|
|
||||||
"d" \
|
|
||||||
"e" \
|
|
||||||
"x" \
|
|
||||||
"_" \
|
|
||||||
"o" \
|
|
||||||
"n" \
|
|
||||||
"_" \
|
|
||||||
"b" \
|
|
||||||
"l" \
|
|
||||||
"o" \
|
|
||||||
"b") f(index_string_op, "index_on_string") \
|
|
||||||
f(index_long_op, "index_on_blob") f( \
|
|
||||||
if_nonvar_op, \
|
|
||||||
"check_" \
|
|
||||||
"var\t " \
|
|
||||||
"%r") f(save_pair_op, "save_pair\t%v") \
|
|
||||||
f(save_appl_op, "save_appl\t%v") f( \
|
|
||||||
mark_initialized_pvars_op, \
|
|
||||||
"pv" \
|
|
||||||
"ar" \
|
|
||||||
"_b" \
|
|
||||||
"it" \
|
|
||||||
"ma" \
|
|
||||||
"p" \
|
|
||||||
"\t" \
|
|
||||||
"%l" \
|
|
||||||
",%" \
|
|
||||||
"b") f(mark_live_regs_op, \
|
|
||||||
"pvar_live_regs\t%l,%b") \
|
|
||||||
f(fetch_args_vv_op, "fetch_reg1_reg2\t%N,%N") f( \
|
|
||||||
fetch_args_cv_op, \
|
|
||||||
"fetch_constant_reg\t%l,%N") f(fetch_args_vc_op, \
|
|
||||||
"fetch_reg_constant\t%l,%N") \
|
|
||||||
f(fetch_args_iv_op, "fetch_integer_reg\t%d,%N") f( \
|
|
||||||
fetch_args_vi_op, \
|
|
||||||
"fetch_reg_integer\t%d,%N") f(enter_profiling_op, \
|
|
||||||
"enter_profiling\t\t%g") \
|
|
||||||
f(retry_profiled_op, "retry_profiled\t\t%g") f( \
|
|
||||||
count_call_op, \
|
|
||||||
"count_call_op\t\t%g") f(count_retry_op, \
|
|
||||||
"count_retry_op\t\t%g") \
|
|
||||||
f(restore_tmps_op, "restore_temps\t\t%l") f( \
|
|
||||||
restore_tmps_and_skip_op, \
|
|
||||||
"restore_temps_and_skip\t\t%l") \
|
|
||||||
f(enter_lu_op, "enter_lu") f( \
|
|
||||||
empty_call_op, \
|
|
||||||
"empty_call\t\t%l,%d") \
|
|
||||||
f(bccall_op, \
|
|
||||||
"binary_cfunc\t\t%v,%r,%2") \
|
|
||||||
f(blob_op, \
|
|
||||||
"blob\t%O") \
|
|
||||||
f(string_op, \
|
|
||||||
"string\t%O") \
|
|
||||||
f(label_ctl_op, \
|
|
||||||
"label_control\t")
|
|
||||||
#ifdef YAPOR
|
|
||||||
#define mklist1(f) mklist0(f) f(sync_op, "sync")
|
|
||||||
#else
|
#else
|
||||||
#define mklist1(f) mklist0(f)
|
|
||||||
|
#define COMPILER_OPS() typedef enum compiler_op
|
||||||
|
#define COMPILER_OPS_END() compiler_vm_op
|
||||||
|
#define f(x,y) x
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* virtual machine instruction op-codes*/
|
||||||
|
COMPILER_OPS() {
|
||||||
|
f(nop_op, "nop"),
|
||||||
|
f(get_var_op, "get_var\t\t %v,%r"),
|
||||||
|
f(put_var_op, "put_var\t\t %v,%r"),
|
||||||
|
f( get_val_op, "get_val\t\t %v,%r"),
|
||||||
|
f(put_val_op, "put_val\t\t %v,%r"),
|
||||||
|
f(get_atom_op, "get_atom\t %a,%r"),
|
||||||
|
f(put_atom_op, "put_atom\t %a,%r"),
|
||||||
|
f(get_num_op, "get_num\t\t %n,%r"),
|
||||||
|
f(put_num_op, "put_num\t\t %n,%r"),
|
||||||
|
f( get_float_op, "get_float\t\t %w,%r"),
|
||||||
|
f(put_float_op, "put_float\t\t %w,%r"),
|
||||||
|
f(get_dbterm_op, "get_dbterm\t %w,%r"),
|
||||||
|
f(put_dbterm_op, "put_dbterm\t %w,%r"),
|
||||||
|
f(get_longint_op, "get_longint\t\t %w,%r"),
|
||||||
|
f( put_longint_op, "put_longint\t\t %w,%r"),
|
||||||
|
f(get_string_op, "get_string\t\t %w,%S"),
|
||||||
|
f(put_string_op, "put_string\t\t %w,%S"),
|
||||||
|
f(get_bigint_op, "get_bigint\t\t %l,%r"),
|
||||||
|
f(put_bigint_op, "put_bigint\t\t %l,%r"),
|
||||||
|
f( get_list_op, "get_list\t %r"),
|
||||||
|
f(put_list_op, "put_list\t %r"),
|
||||||
|
f(get_struct_op, "get_struct\t %f,%r"),
|
||||||
|
f(put_struct_op, "put_struct\t %f,%r"),
|
||||||
|
f(put_unsafe_op, "put_unsafe\t %v,%r"),
|
||||||
|
f( unify_var_op, "unify_var\t %v"),
|
||||||
|
f(write_var_op, "write_var\t %v"),
|
||||||
|
f(unify_val_op, "unify_val\t %v"),
|
||||||
|
f(write_val_op, "write_val\t %v"),
|
||||||
|
f(unify_atom_op, "unify_atom\t %a"),
|
||||||
|
f( write_atom_op, "write_atom\t %a"),
|
||||||
|
f(unify_num_op, "unify_num\t %n"),
|
||||||
|
f(write_num_op, "write_num\t %n"),
|
||||||
|
f(unify_float_op, "unify_float\t %w"),
|
||||||
|
f( write_float_op, "write_float\t %w"),
|
||||||
|
f(unify_dbterm_op, "unify_dbterm\t %w"),
|
||||||
|
f(write_dbterm_op, "write_dbterm\t %w"),
|
||||||
|
f( unify_longint_op, "unify_longint\t %w"),
|
||||||
|
f(write_longint_op, "write_longint\t %w"),
|
||||||
|
f(unify_string_op, "unify_string\t %S"),
|
||||||
|
f( write_string_op, "write_string\t %S"),
|
||||||
|
f(unify_bigint_op, "unify_bigint\t %l"),
|
||||||
|
f(write_bigint_op, "write_bigint\t %l"),
|
||||||
|
f(unify_list_op, "unify_list"),
|
||||||
|
f( write_list_op, "write_list"),
|
||||||
|
f(unify_struct_op, "unify_struct\t %f"),
|
||||||
|
f(write_struct_op, "write_struct\t %f"),
|
||||||
|
f( write_unsafe_op, "write_unsafe\t %v"),
|
||||||
|
f(unify_local_op, "unify_local\t %v"),
|
||||||
|
f(write_local_op, "write local\t %v"),
|
||||||
|
f( unify_last_list_op, "unify_last_list"),
|
||||||
|
f(write_last_list_op, "write_last_list"),
|
||||||
|
f( unify_last_struct_op, "unify_last_struct\t %f"),
|
||||||
|
f(write_last_struct_op, "write_last_struct\t %f"),
|
||||||
|
f(unify_last_var_op, "unify_last_var\t %v"),
|
||||||
|
f( unify_last_val_op, "unify_last_val\t %v"),
|
||||||
|
f(unify_last_local_op, "unify_last_local\t %v"),
|
||||||
|
f(unify_last_atom_op, "unify_last_atom\t %a"),
|
||||||
|
f(unify_last_num_op, "unify_last_num\t %n"),
|
||||||
|
f(unify_last_float_op, "unify_last_float\t %w"),
|
||||||
|
f(unify_last_dbterm_op, "unify_last_dbterm\t %w"),
|
||||||
|
f(unify_last_longint_op, "unify_last_longint\t %w"),
|
||||||
|
f(unify_last_string_op, "unify_last_string\t %S"),
|
||||||
|
f(unify_last_bigint_op, "unify_last_bigint\t %l"),
|
||||||
|
f(ensure_space_op, "ensure_space"),
|
||||||
|
f(native_op, "native_code"),
|
||||||
|
f(f_var_op, "function_to_var\t %v,%B"),
|
||||||
|
f(f_val_op, "function_to_val\t %v,%B"),
|
||||||
|
f(f_0_op, "function_to_0\t %B"),
|
||||||
|
f(align_float_op, "align_float"),
|
||||||
|
f(fail_op, "fail"),
|
||||||
|
f(cut_op, "cut"),
|
||||||
|
f(cutexit_op, "cutexit"),
|
||||||
|
f(allocate_op, "allocate"),
|
||||||
|
f(deallocate_op, "deallocate"),
|
||||||
|
f(tryme_op, "try_me_else\t\t %l\t %x"),
|
||||||
|
f(jump_op, "jump\t\t %l"),
|
||||||
|
f(jumpi_op, "jump_in_indexing\t\t %i"),
|
||||||
|
f(procceed_op, "proceed"),
|
||||||
|
f(call_op, "call\t\t %p,%d,%z"),
|
||||||
|
f(execute_op, "execute\t\t %p"),
|
||||||
|
f(safe_call_op, "sys\t\t %p"),
|
||||||
|
f(label_op, "%l:"),
|
||||||
|
f(name_op, "name\t\t %m,%d"),
|
||||||
|
f(pop_op, "pop\t\t %l"),
|
||||||
|
f(retryme_op, "retry_me_else\t\t %l\t %x"),
|
||||||
|
f(trustme_op, "trust_me_else_fail\t %x"),
|
||||||
|
f(either_op, "either_me\t\t %l,%d,%z"),
|
||||||
|
f(orelse_op, "or_else\t\t %l,%z"),
|
||||||
|
f(orlast_op, "or_last"),
|
||||||
|
f(push_or_op, "push_or"),
|
||||||
|
f(pushpop_or_op, "pushpop_or"),
|
||||||
|
f(pop_or_op, "pop_or"),
|
||||||
|
f(save_b_op, "save_by\t\t %v"),
|
||||||
|
f(commit_b_op, "commit_by\t\t %v"),
|
||||||
|
f(patch_b_op, "patch_by\t\t %v"),
|
||||||
|
f(try_op, "try\t\t %g\t %x"),
|
||||||
|
f(retry_op, "retry\t\t %g\t %x"),
|
||||||
|
f(trust_op, "trust\t\t %g\t %x"),
|
||||||
|
f(try_in_op, "try_in\t\t %g\t %x"),
|
||||||
|
f(jump_v_op, "jump_if_var\t\t %g"),
|
||||||
|
f(jump_nv_op, "jump_if_nonvar\t\t %g"),
|
||||||
|
f(cache_arg_op, "cache_arg\t %r"),
|
||||||
|
f(cache_sub_arg_op, "cache_sub_arg\t %d"),
|
||||||
|
f(user_switch_op, "user_switch"),
|
||||||
|
f(switch_on_type_op, "switch_on_type\t %h\t %h\t %h\t %h"),
|
||||||
|
f(switch_c_op, "switch_on_constant\t %i,n%c"),
|
||||||
|
f(if_c_op, "if_constant\t %i,n%c"),
|
||||||
|
f(switch_f_op, "switch_on_functor\t %i,n%e"),
|
||||||
|
f(if_f_op, "if_functor\t %i,n%e"),
|
||||||
|
f(if_not_op, "if_not_then\t %i\t %h\t %h\t %h"),
|
||||||
|
f(index_dbref_op, "index_on_dbref"),
|
||||||
|
f(index_blob_op, "index_on_blob"),
|
||||||
|
f(index_string_op, "index_on_string"),
|
||||||
|
f(index_long_op, "index_on_blob"),
|
||||||
|
f( if_nonvar_op, "check_var\t %r"),
|
||||||
|
f(save_pair_op, "save_pair\t %v"),
|
||||||
|
f(save_appl_op, "save_appl\t %v"),
|
||||||
|
f( mark_initialized_pvars_op, "pvar_bitmap\t %l,%b"),
|
||||||
|
f(mark_live_regs_op, "pvar_live_regs\t %l,%b"),
|
||||||
|
f(fetch_args_vv_op, "fetch_reg1_reg2\t %N,%N"),
|
||||||
|
f( fetch_args_cv_op, "fetch_constant_reg\t %l,%N"),
|
||||||
|
f(fetch_args_vc_op, "fetch_reg_constant\t %l,%N"),
|
||||||
|
f(fetch_args_iv_op, "fetch_integer_reg\t %d,%N"),
|
||||||
|
f( fetch_args_vi_op, "fetch_reg_integer\t %d,%N"),
|
||||||
|
f(enter_profiling_op, "enter_profiling\t\t %g"),
|
||||||
|
f(retry_profiled_op, "retry_profiled\t\t %g"),
|
||||||
|
f( count_call_op, "count_call_op\t\t %g"),
|
||||||
|
f(count_retry_op, "count_retry_op\t\t %g"),
|
||||||
|
f(restore_tmps_op, "restore_temps\t\t %l"),
|
||||||
|
f( restore_tmps_and_skip_op, "restore_temps_and_skip\t\t %l"),
|
||||||
|
f(enter_lu_op, "enter_lu"),
|
||||||
|
f( empty_call_op, "empty_call\t\t %l,%d"),
|
||||||
|
f(bccall_op, "binary_cfunc\t\t %v,%r,%2"),
|
||||||
|
f(blob_op, "blob\t %O"),
|
||||||
|
f(string_op, "string\t %O"),
|
||||||
|
f(label_ctl_op, "label_control\t"),
|
||||||
|
#ifdef YAPOR
|
||||||
|
f(sync_op, "sync"),
|
||||||
#endif /* YAPOR */
|
#endif /* YAPOR */
|
||||||
#ifdef TABLING
|
#ifdef TABLING
|
||||||
#define mklist2(f) \
|
f(table_new_answer_op, "table_new_answer"),
|
||||||
mklist1(f) f(table_new_answer_op, "table_new_answer") \
|
f(table_try_single_op, "table_try_single\t %g\t %x"),
|
||||||
f(table_try_single_op, "table_try_single\t%g\t%x")
|
|
||||||
#else
|
|
||||||
#define mklist2(f) mklist1(f)
|
|
||||||
#endif /* TABLING */
|
|
||||||
#ifdef TABLING_INNER_CUTS
|
#ifdef TABLING_INNER_CUTS
|
||||||
#define mklist3(f) mklist2(f) f(clause_with_cut_op, "clause_with_cut")
|
f(clause_with_cut_op, "clause_with_cut"),
|
||||||
#else
|
|
||||||
#define mklist3(f) mklist2(f)
|
|
||||||
#endif /* TABLING_INNER_CUTS */
|
#endif /* TABLING_INNER_CUTS */
|
||||||
|
#endif
|
||||||
#ifdef BEAM
|
#ifdef BEAM
|
||||||
#define mklist4(f) \
|
f(run_op, "run_op %1,%4"),
|
||||||
mklist3(f) f(run_op, "run_op %1,%4") f(body_op, "body_op %1") f( \
|
f(body_op, "body_op %1"),
|
||||||
endgoal_op, "endgoal_op") f(try_me_op, "try_me_op %1,%4") \
|
f( endgoal_op, "endgoal_op"),
|
||||||
f(retry_me_op, "retry_me_op %1,%4") f(trust_me_op, "trust_me_op %1,%4") \
|
f(try_me_op, "try_me_op %1,%4"),
|
||||||
f(only_1_clause_op, "only_1_clause_op %1,%4") f( \
|
f(retry_me_op, "retry_me_op %1,%4"),
|
||||||
create_first_box_op, "create_first_box_op %1,%4") \
|
f(trust_me_op, "trust_me_op %1,%4"),
|
||||||
f(create_box_op, "create_box_op %1,%4") f( \
|
f(only_1_clause_op, "only_1_clause_op %1,%4"),
|
||||||
create_last_box_op, "create_last_box_op %1,%4") \
|
f( create_first_box_op, "create_first_box_op %1,%4"),
|
||||||
f(remove_box_op, "remove_box_op %1,%4") f( \
|
f(create_box_op, "create_box_op %1,%4"),
|
||||||
remove_last_box_op, "remove_last_box_op %1,%4") \
|
f( create_last_box_op, "create_last_box_op %1,%4"),
|
||||||
f(prepare_tries, "prepare_tries") f(std_base_op, \
|
f(remove_box_op, "remove_box_op %1,%4"),
|
||||||
"std_base_op %1,%4") \
|
f( remove_last_box_op, "remove_last_box_op %1,%4"),
|
||||||
f(direct_safe_call_op, "direct_safe_call") \
|
f(prepare_tries, "prepare_tries"),
|
||||||
f(commit_op, ) f(skip_while_var_op, \
|
f(std_base_op, "std_base_op %1,%4"),
|
||||||
"skip_while_var_op") \
|
f(direct_safe_call_op, "direct_safe_call"),
|
||||||
f(wait_while_var_op, "wait_while_var_op") \
|
f(commit_op, ),
|
||||||
f(force_wait_op, "force_wait_op") \
|
f(skip_while_var_op, "skip_while_var_op"),
|
||||||
f(is_op, "is_op") \
|
f(wait_while_var_op, "wait_while_var_op"),
|
||||||
f(write_op, "write_op") \
|
f(force_wait_op, "force_wait_op"),
|
||||||
f(equal_op, "equal_op") \
|
f(is_op, "is_op"),
|
||||||
f(exit_op, "exit")
|
f(write_op, "write_op"),
|
||||||
#else
|
f(equal_op, "equal_op"),
|
||||||
#define mklist4(f) mklist3(f)
|
f(exit_op, "exit"),
|
||||||
#endif
|
#endif
|
||||||
#ifdef SFUNC
|
#ifdef SFUNC
|
||||||
#define mklist(f) \
|
f(get_s_f_op, "get_s_f_op\t %f,%r"),
|
||||||
mklist4(f) f(get_s_f_op, "get_s_f_op\t%f,%r") \
|
f(put_s_f_op, "put_s_f_op\t %f,%r"),
|
||||||
f(put_s_f_op, "put_s_f_op\t%f,%r") f(unify_s_f_op, "unify_s_f_op\t%f") \
|
f(unify_s_f_op, "unify_s_f_op\t %f"),
|
||||||
f(write_s_f_op, "write_s_f_op\t%f") \
|
f(write_s_f_op, "write_s_f_op\t %f"),
|
||||||
f(unify_s_var_op, "unify_s_var\t%v,%r") f(write_s_var_op, \
|
f(unify_s_var_op, "unify_s_var\t %v,%r"),
|
||||||
"write_s_var\t%v,%r") \
|
f(write_s_var_op, "write_s_var\t %v,%r"),
|
||||||
f(unify_s_val_op, "unify_s_val\t%v,%r") \
|
f(unify_s_val_op, "unify_s_val\t %v,%r"),
|
||||||
f(write_s_val_op, "write_s_val\t%v,%r") \
|
f(write_s_val_op, "write_s_val\t %v,%r"),
|
||||||
f(unify_s_a_op, "unify_s_a\t%a,%r") \
|
f(unify_s_a_op, "unify_s_a\t %a,%r"),
|
||||||
f(write_s_a_op, "write_s_a\t%a,%r") \
|
f(write_s_a_op, "write_s_a\t %a,%r"),
|
||||||
f(get_s_end_op, "get_s_end") \
|
f(get_s_end_op, "get_s_end"),
|
||||||
f(put_s_end_op, "put_s_end") \
|
f(put_s_end_op, "put_s_end"),
|
||||||
f(unify_s_end_op, "unify_s_end") \
|
f(unify_s_end_op, "unify_s_end"),
|
||||||
f(write_s_end_op, "write_s_end")
|
f(write_s_end_op, "write_s_end"),
|
||||||
#else
|
|
||||||
#define mklist(f) mklist4(f)
|
|
||||||
#endif
|
#endif
|
||||||
|
} COMPILER_OPS_END();
|
||||||
|
|
||||||
#define f_enum(x, y) x,
|
#ifndef COMPILER_NAMES
|
||||||
#define f_arr(x, y) y,
|
|
||||||
|
|
||||||
enum compiler_op { mklist(f_enum) };
|
|
||||||
|
|
||||||
typedef enum compiler_op compiler_vm_op;
|
|
||||||
|
|
||||||
typedef struct PSEUDO {
|
typedef struct PSEUDO {
|
||||||
struct PSEUDO *nextInst;
|
struct PSEUDO *nextInst;
|
||||||
enum compiler_op op;
|
enum compiler_op op;
|
||||||
CELL rnd1;
|
CELL rnd1;
|
||||||
union {
|
union {
|
||||||
Int oprnd2;
|
Int oprnd2;
|
||||||
#if MIN_ARRAY == 0
|
#if MIN_ARRAY == 0
|
||||||
CELL opseqt[MIN_ARRAY];
|
CELL opseqt[MIN_ARRAY];
|
||||||
#else
|
#else
|
||||||
CELL opseqt[1];
|
CELL opseqt[1];
|
||||||
#endif
|
#endif
|
||||||
} ops;
|
} ops;
|
||||||
} PInstr;
|
} PInstr;
|
||||||
|
|
||||||
#define arnds ops.opseqt
|
#define arnds ops.opseqt
|
||||||
@ -312,26 +252,26 @@ typedef struct PSEUDO {
|
|||||||
#define rnd8 ops.opseqt[6]
|
#define rnd8 ops.opseqt[6]
|
||||||
|
|
||||||
typedef struct VENTRY {
|
typedef struct VENTRY {
|
||||||
CELL SelfOfVE;
|
CELL SelfOfVE;
|
||||||
Term AdrsOfVE;
|
Term AdrsOfVE;
|
||||||
Int KindOfVE;
|
Int KindOfVE;
|
||||||
CELL NoOfVE;
|
CELL NoOfVE;
|
||||||
PInstr *FirstOpForV;
|
PInstr *FirstOpForV;
|
||||||
PInstr *LastOpForV;
|
PInstr *LastOpForV;
|
||||||
BITS16 AgeOfVE;
|
BITS16 AgeOfVE;
|
||||||
BITS16 BranchOfVE;
|
BITS16 BranchOfVE;
|
||||||
BITS16 LastBranchOfVE;
|
BITS16 LastBranchOfVE;
|
||||||
BITS16 FirstOfVE;
|
BITS16 FirstOfVE;
|
||||||
BITS16 RCountOfVE;
|
BITS16 RCountOfVE;
|
||||||
BITS16 FlagsOfVE;
|
BITS16 FlagsOfVE;
|
||||||
struct VENTRY *NextOfVE;
|
struct VENTRY *NextOfVE;
|
||||||
} Ventry;
|
} Ventry;
|
||||||
|
|
||||||
typedef struct CEXPENTRY {
|
typedef struct CEXPENTRY {
|
||||||
Term TermOfCE;
|
Term TermOfCE;
|
||||||
PInstr *CodeOfCE;
|
PInstr *CodeOfCE;
|
||||||
Term VarOfCE;
|
Term VarOfCE;
|
||||||
struct CEXPENTRY *NextCE;
|
struct CEXPENTRY *NextCE;
|
||||||
} CExpEntry;
|
} CExpEntry;
|
||||||
|
|
||||||
#define COMPILER_ERR_BOTCH 1
|
#define COMPILER_ERR_BOTCH 1
|
||||||
@ -342,48 +282,48 @@ typedef struct CEXPENTRY {
|
|||||||
#define OUT_OF_TRAIL_BOTCH 6
|
#define OUT_OF_TRAIL_BOTCH 6
|
||||||
|
|
||||||
typedef struct intermediates {
|
typedef struct intermediates {
|
||||||
char *freep;
|
char *freep;
|
||||||
char *freep0;
|
char *freep0;
|
||||||
struct mem_blk *blks;
|
struct mem_blk *blks;
|
||||||
char *blk_cur, *blk_top;
|
char *blk_cur, *blk_top;
|
||||||
struct PSEUDO *cpc;
|
struct PSEUDO *cpc;
|
||||||
struct PSEUDO *CodeStart;
|
struct PSEUDO *CodeStart;
|
||||||
struct PSEUDO *icpc;
|
struct PSEUDO *icpc;
|
||||||
struct PSEUDO *BlobsStart;
|
struct PSEUDO *BlobsStart;
|
||||||
struct dbterm_list *dbterml;
|
struct dbterm_list *dbterml;
|
||||||
Int *label_offset;
|
Int *label_offset;
|
||||||
Int *uses;
|
Int *uses;
|
||||||
Term *contents;
|
Term *contents;
|
||||||
struct pred_entry *CurrentPred;
|
struct pred_entry *CurrentPred;
|
||||||
sigjmp_buf CompilerBotch;
|
sigjmp_buf CompilerBotch;
|
||||||
yamop *code_addr;
|
yamop *code_addr;
|
||||||
yamop *expand_block;
|
yamop *expand_block;
|
||||||
UInt i_labelno;
|
UInt i_labelno;
|
||||||
UInt exception_handler, success_handler, failure_handler;
|
UInt exception_handler, success_handler, failure_handler;
|
||||||
/* for expanding code */
|
/* for expanding code */
|
||||||
yamop **current_try_lab, **current_trust_lab;
|
yamop **current_try_lab, **current_trust_lab;
|
||||||
yamop *try_instructions;
|
yamop *try_instructions;
|
||||||
struct StructClauseDef *cls;
|
struct StructClauseDef *cls;
|
||||||
int clause_has_cut;
|
int clause_has_cut;
|
||||||
UInt term_depth, last_index_at_depth;
|
UInt term_depth, last_index_at_depth;
|
||||||
UInt last_index_new_depth, last_depth_size;
|
UInt last_index_new_depth, last_depth_size;
|
||||||
/* for expanding code */
|
/* for expanding code */
|
||||||
union {
|
union {
|
||||||
struct static_index *si;
|
struct static_index *si;
|
||||||
struct logic_upd_index *lui;
|
struct logic_upd_index *lui;
|
||||||
} current_cl;
|
} current_cl;
|
||||||
} CIntermediates;
|
} CIntermediates;
|
||||||
|
|
||||||
typedef enum special_label_id_enum {
|
typedef enum special_label_id_enum {
|
||||||
SPECIAL_LABEL_SUCCESS = 0,
|
SPECIAL_LABEL_SUCCESS = 0,
|
||||||
SPECIAL_LABEL_FAILURE = 1,
|
SPECIAL_LABEL_FAILURE = 1,
|
||||||
SPECIAL_LABEL_EXCEPTION = 2
|
SPECIAL_LABEL_EXCEPTION = 2
|
||||||
} special_label_id;
|
} special_label_id;
|
||||||
|
|
||||||
typedef enum special_label_op_enum {
|
typedef enum special_label_op_enum {
|
||||||
SPECIAL_LABEL_INIT = 0,
|
SPECIAL_LABEL_INIT = 0,
|
||||||
SPECIAL_LABEL_SET = 1,
|
SPECIAL_LABEL_SET = 1,
|
||||||
SPECIAL_LABEL_CLEAR = 2
|
SPECIAL_LABEL_CLEAR = 2
|
||||||
} special_label_op;
|
} special_label_op;
|
||||||
|
|
||||||
#define SafeVar 0x01
|
#define SafeVar 0x01
|
||||||
@ -415,23 +355,20 @@ typedef enum special_label_op_enum {
|
|||||||
#define One 1
|
#define One 1
|
||||||
#define Two 2
|
#define Two 2
|
||||||
|
|
||||||
extern yamop *Yap_assemble(int, Term, struct pred_entry *, int,
|
extern yamop *Yap_assemble(int, Term, struct pred_entry *, int, struct intermediates *, UInt);
|
||||||
struct intermediates *, UInt);
|
extern void Yap_emit(compiler_vm_op, Int, CELL, struct intermediates *);
|
||||||
void Yap_emit(compiler_vm_op, Int, CELL, struct intermediates *);
|
extern void Yap_emit_3ops(compiler_vm_op, CELL, CELL, CELL, struct intermediates *);
|
||||||
void Yap_emit_3ops(compiler_vm_op, CELL, CELL, CELL, struct intermediates *);
|
extern void Yap_emit_4ops(compiler_vm_op, CELL, CELL, CELL, CELL, struct intermediates *);
|
||||||
void Yap_emit_4ops(compiler_vm_op, CELL, CELL, CELL, CELL,
|
extern void Yap_emit_5ops(compiler_vm_op, CELL, CELL, CELL, CELL, CELL,struct intermediates *);
|
||||||
struct intermediates *);
|
extern void Yap_emit_6ops(compiler_vm_op, CELL, CELL, CELL, CELL, CELL, CELL,struct intermediates *);
|
||||||
void Yap_emit_5ops(compiler_vm_op, CELL, CELL, CELL, CELL, CELL,
|
extern void Yap_emit_7ops(compiler_vm_op, CELL, CELL, CELL, CELL, CELL, CELL, CELL, struct intermediates *);
|
||||||
struct intermediates *);
|
extern CELL *Yap_emit_extra_size(compiler_vm_op, CELL, int, struct intermediates *);
|
||||||
void Yap_emit_6ops(compiler_vm_op, CELL, CELL, CELL, CELL, CELL, CELL,
|
extern char *Yap_AllocCMem(UInt, struct intermediates *);
|
||||||
struct intermediates *);
|
extern void Yap_ReleaseCMem(struct intermediates *);
|
||||||
void Yap_emit_7ops(compiler_vm_op, CELL, CELL, CELL, CELL, CELL, CELL, CELL,
|
extern int Yap_is_a_test_pred(Term, Term);
|
||||||
struct intermediates *);
|
extern void Yap_bip_name(Int, char *);
|
||||||
CELL *Yap_emit_extra_size(compiler_vm_op, CELL, int, struct intermediates *);
|
|
||||||
char *Yap_AllocCMem(UInt, struct intermediates *);
|
|
||||||
void Yap_ReleaseCMem(struct intermediates *);
|
|
||||||
int Yap_is_a_test_pred(Term, Term);
|
|
||||||
void Yap_bip_name(Int, char *);
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
void Yap_ShowCode(struct intermediates *);
|
extern void Yap_ShowCode(struct intermediates *);
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
296
H/YapOpcodes.h
296
H/YapOpcodes.h
@ -6,6 +6,26 @@
|
|||||||
OPCODE(Nstop ,e),
|
OPCODE(Nstop ,e),
|
||||||
#ifdef YAP_JIT
|
#ifdef YAP_JIT
|
||||||
OPCODE(jit_handler ,J),
|
OPCODE(jit_handler ,J),
|
||||||
|
#endif
|
||||||
|
OPCODE(cut ,s),
|
||||||
|
OPCODE(cut_t ,s),
|
||||||
|
OPCODE(cut_e ,s),
|
||||||
|
OPCODE(save_b_x ,x),
|
||||||
|
OPCODE(save_b_y ,y),
|
||||||
|
OPCODE(commit_b_x ,xps),
|
||||||
|
OPCODE(commit_b_y ,yps),
|
||||||
|
OPCODE(execute ,Osbpp),
|
||||||
|
OPCODE(dexecute ,Osbpp),
|
||||||
|
OPCODE(fcall ,Osbpp),
|
||||||
|
OPCODE(call ,Osbpp),
|
||||||
|
OPCODE(procceed ,p),
|
||||||
|
OPCODE(allocate ,e),
|
||||||
|
OPCODE(deallocate ,p),
|
||||||
|
#ifdef BEAM
|
||||||
|
OPCODE(retry_eam ,e),
|
||||||
|
#endif
|
||||||
|
#ifdef BEAM
|
||||||
|
OPCODE(run_eam ,os),
|
||||||
#endif
|
#endif
|
||||||
OPCODE(try_me ,Otapl),
|
OPCODE(try_me ,Otapl),
|
||||||
OPCODE(retry_me ,Otapl),
|
OPCODE(retry_me ,Otapl),
|
||||||
@ -43,6 +63,44 @@
|
|||||||
OPCODE(retry4 ,l),
|
OPCODE(retry4 ,l),
|
||||||
OPCODE(trust ,Otapl),
|
OPCODE(trust ,Otapl),
|
||||||
OPCODE(try_in ,l),
|
OPCODE(try_in ,l),
|
||||||
|
OPCODE(trust_fail ,e),
|
||||||
|
OPCODE(op_fail ,e),
|
||||||
|
OPCODE(call_cpred ,Osbpp),
|
||||||
|
OPCODE(execute_cpred ,Osbpp),
|
||||||
|
OPCODE(call_usercpred ,Osbpp),
|
||||||
|
OPCODE(call_c_wfail ,slpp),
|
||||||
|
OPCODE(try_c ,OtapFs),
|
||||||
|
OPCODE(retry_c ,OtapFs),
|
||||||
|
OPCODE(cut_c ,OtapFs),
|
||||||
|
OPCODE(try_userc ,OtapFs),
|
||||||
|
OPCODE(retry_userc ,OtapFs),
|
||||||
|
OPCODE(cut_userc ,OtapFs),
|
||||||
|
OPCODE(lock_pred ,e),
|
||||||
|
OPCODE(index_pred ,e),
|
||||||
|
#ifdef THREADS
|
||||||
|
OPCODE(thread_local ,e),
|
||||||
|
#endif
|
||||||
|
OPCODE(expand_index ,e),
|
||||||
|
OPCODE(expand_clauses ,sssllp),
|
||||||
|
OPCODE(undef_p ,e),
|
||||||
|
OPCODE(spy_pred ,e),
|
||||||
|
OPCODE(user_switch ,lp),
|
||||||
|
OPCODE(switch_on_type ,llll),
|
||||||
|
OPCODE(switch_list_nl ,ollll),
|
||||||
|
OPCODE(switch_on_arg_type ,xllll),
|
||||||
|
OPCODE(switch_on_sub_arg_type ,sllll),
|
||||||
|
OPCODE(jump_if_var ,l),
|
||||||
|
OPCODE(jump_if_nonvar ,xll),
|
||||||
|
OPCODE(if_not_then ,clll),
|
||||||
|
OPCODE(switch_on_func ,sssl),
|
||||||
|
OPCODE(switch_on_cons ,sssl),
|
||||||
|
OPCODE(go_on_func ,sssl),
|
||||||
|
OPCODE(go_on_cons ,sssl),
|
||||||
|
OPCODE(if_func ,sssl),
|
||||||
|
OPCODE(if_cons ,sssl),
|
||||||
|
OPCODE(index_dbref ,e),
|
||||||
|
OPCODE(index_blob ,e),
|
||||||
|
OPCODE(index_long ,e),
|
||||||
OPCODE(enter_lu_pred ,Illss),
|
OPCODE(enter_lu_pred ,Illss),
|
||||||
OPCODE(profiled_retry_logical ,OtaLl),
|
OPCODE(profiled_retry_logical ,OtaLl),
|
||||||
OPCODE(profiled_trust_logical ,OtILl),
|
OPCODE(profiled_trust_logical ,OtILl),
|
||||||
@ -56,28 +114,94 @@
|
|||||||
OPCODE(alloc_for_logical_pred ,L),
|
OPCODE(alloc_for_logical_pred ,L),
|
||||||
OPCODE(copy_idb_term ,e),
|
OPCODE(copy_idb_term ,e),
|
||||||
OPCODE(unify_idb_term ,e),
|
OPCODE(unify_idb_term ,e),
|
||||||
OPCODE(trust_fail ,e),
|
OPCODE(p_execute_tail ,Osbmp),
|
||||||
OPCODE(op_fail ,e),
|
OPCODE(p_execute2 ,Osbpp),
|
||||||
OPCODE(cut ,s),
|
OPCODE(p_execute ,Osbmp),
|
||||||
OPCODE(cut_t ,s),
|
OPCODE(jump ,l),
|
||||||
OPCODE(cut_e ,s),
|
OPCODE(move_back ,l),
|
||||||
OPCODE(save_b_x ,x),
|
OPCODE(skip ,l),
|
||||||
OPCODE(save_b_y ,y),
|
OPCODE(either ,Osblp),
|
||||||
OPCODE(commit_b_x ,xps),
|
OPCODE(or_else ,Osblp),
|
||||||
OPCODE(commit_b_y ,yps),
|
OPCODE(pop_n ,s),
|
||||||
OPCODE(execute ,pp),
|
OPCODE(pop ,e),
|
||||||
OPCODE(dexecute ,pp),
|
OPCODE(p_plus_vv ,xxx),
|
||||||
OPCODE(fcall ,Osbpp),
|
OPCODE(p_plus_vc ,xxn),
|
||||||
OPCODE(call ,Osbpp),
|
OPCODE(p_plus_y_vv ,yxx),
|
||||||
OPCODE(procceed ,p),
|
OPCODE(p_plus_y_vc ,yxn),
|
||||||
OPCODE(allocate ,e),
|
OPCODE(p_minus_vv ,xxx),
|
||||||
OPCODE(deallocate ,p),
|
OPCODE(p_minus_cv ,xxn),
|
||||||
#ifdef BEAM
|
OPCODE(p_minus_y_vv ,yxx),
|
||||||
OPCODE(retry_eam ,e),
|
OPCODE(p_minus_y_cv ,yxn),
|
||||||
#endif
|
OPCODE(p_times_vv ,xxx),
|
||||||
#ifdef BEAM
|
OPCODE(p_times_vc ,xxn),
|
||||||
OPCODE(run_eam ,os),
|
OPCODE(p_times_y_vv ,yxx),
|
||||||
#endif
|
OPCODE(p_times_y_vc ,yxn),
|
||||||
|
OPCODE(p_div_vv ,xxx),
|
||||||
|
OPCODE(p_div_vc ,xxn),
|
||||||
|
OPCODE(p_div_cv ,xxn),
|
||||||
|
OPCODE(p_div_y_vv ,yxx),
|
||||||
|
OPCODE(p_div_y_vc ,yxn),
|
||||||
|
OPCODE(p_div_y_cv ,yxn),
|
||||||
|
OPCODE(p_and_vv ,xxx),
|
||||||
|
OPCODE(p_and_vc ,xxn),
|
||||||
|
OPCODE(p_and_y_vv ,yxx),
|
||||||
|
OPCODE(p_and_y_vc ,yxn),
|
||||||
|
OPCODE(p_or_vv ,xxx),
|
||||||
|
OPCODE(p_or_vc ,xxn),
|
||||||
|
OPCODE(p_or_y_vv ,yxx),
|
||||||
|
OPCODE(p_or_y_vc ,yxn),
|
||||||
|
OPCODE(p_sll_vv ,xxx),
|
||||||
|
OPCODE(p_sll_vc ,xxn),
|
||||||
|
OPCODE(p_sll_cv ,xxn),
|
||||||
|
OPCODE(p_sll_y_vv ,yxx),
|
||||||
|
OPCODE(p_sll_y_vc ,yxn),
|
||||||
|
OPCODE(p_sll_y_cv ,yxn),
|
||||||
|
OPCODE(p_slr_vv ,xxx),
|
||||||
|
OPCODE(p_slr_vc ,xxn),
|
||||||
|
OPCODE(p_slr_cv ,xxn),
|
||||||
|
OPCODE(p_slr_y_vv ,yxx),
|
||||||
|
OPCODE(p_slr_y_vc ,yxn),
|
||||||
|
OPCODE(p_slr_y_cv ,yxn),
|
||||||
|
OPCODE(call_bfunc_xx ,plxxs),
|
||||||
|
OPCODE(call_bfunc_yx ,plxys),
|
||||||
|
OPCODE(call_bfunc_xy ,plxys),
|
||||||
|
OPCODE(call_bfunc_yy ,plyys),
|
||||||
|
OPCODE(p_equal ,e),
|
||||||
|
OPCODE(p_arg_vv ,xxx),
|
||||||
|
OPCODE(p_arg_cv ,xxn),
|
||||||
|
OPCODE(p_arg_y_vv ,yxx),
|
||||||
|
OPCODE(p_arg_y_cv ,yxn),
|
||||||
|
OPCODE(p_func2s_vv ,xxx),
|
||||||
|
OPCODE(p_func2s_cv ,xxc),
|
||||||
|
OPCODE(p_func2s_vc ,xxn),
|
||||||
|
OPCODE(p_func2s_y_vv ,yxx),
|
||||||
|
OPCODE(p_func2s_y_cv ,yxc),
|
||||||
|
OPCODE(p_func2s_y_vc ,yxn),
|
||||||
|
OPCODE(p_func2f_xx ,xxx),
|
||||||
|
OPCODE(p_func2f_xy ,xxy),
|
||||||
|
OPCODE(p_func2f_yx ,yxx),
|
||||||
|
OPCODE(p_func2f_yy ,yyx),
|
||||||
|
OPCODE(p_functor ,e),
|
||||||
|
OPCODE(p_atom_x ,xl),
|
||||||
|
OPCODE(p_atom_y ,yl),
|
||||||
|
OPCODE(p_atomic_x ,xl),
|
||||||
|
OPCODE(p_atomic_y ,yl),
|
||||||
|
OPCODE(p_integer_x ,xl),
|
||||||
|
OPCODE(p_integer_y ,yl),
|
||||||
|
OPCODE(p_nonvar_x ,xl),
|
||||||
|
OPCODE(p_nonvar_y ,yl),
|
||||||
|
OPCODE(p_number_x ,xl),
|
||||||
|
OPCODE(p_number_y ,yl),
|
||||||
|
OPCODE(p_var_x ,xl),
|
||||||
|
OPCODE(p_var_y ,yl),
|
||||||
|
OPCODE(p_db_ref_x ,xl),
|
||||||
|
OPCODE(p_db_ref_y ,yl),
|
||||||
|
OPCODE(p_primitive_x ,xl),
|
||||||
|
OPCODE(p_primitive_y ,yl),
|
||||||
|
OPCODE(p_compound_x ,xl),
|
||||||
|
OPCODE(p_compound_y ,yl),
|
||||||
|
OPCODE(p_float_x ,xl),
|
||||||
|
OPCODE(p_float_y ,yl),
|
||||||
OPCODE(get_x_var ,xx),
|
OPCODE(get_x_var ,xx),
|
||||||
OPCODE(get_y_var ,yx),
|
OPCODE(get_y_var ,yx),
|
||||||
OPCODE(get_yy_var ,yyxx),
|
OPCODE(get_yy_var ,yyxx),
|
||||||
@ -207,134 +331,6 @@
|
|||||||
OPCODE(save_appl_x_write ,ox),
|
OPCODE(save_appl_x_write ,ox),
|
||||||
OPCODE(save_appl_y ,oy),
|
OPCODE(save_appl_y ,oy),
|
||||||
OPCODE(save_appl_y_write ,oy),
|
OPCODE(save_appl_y_write ,oy),
|
||||||
OPCODE(call_cpred ,Osbpp),
|
|
||||||
OPCODE(execute_cpred ,pp),
|
|
||||||
OPCODE(call_usercpred ,Osbpp),
|
|
||||||
OPCODE(call_c_wfail ,slpp),
|
|
||||||
OPCODE(try_c ,OtapFs),
|
|
||||||
OPCODE(retry_c ,OtapFs),
|
|
||||||
OPCODE(cut_c ,OtapFs),
|
|
||||||
OPCODE(try_userc ,OtapFs),
|
|
||||||
OPCODE(retry_userc ,OtapFs),
|
|
||||||
OPCODE(cut_userc ,OtapFs),
|
|
||||||
OPCODE(lock_pred ,e),
|
|
||||||
OPCODE(index_pred ,e),
|
|
||||||
#ifdef THREADS
|
|
||||||
OPCODE(thread_local ,e),
|
|
||||||
#endif
|
|
||||||
OPCODE(expand_index ,e),
|
|
||||||
OPCODE(expand_clauses ,sssllp),
|
|
||||||
OPCODE(undef_p ,e),
|
|
||||||
OPCODE(spy_pred ,e),
|
|
||||||
OPCODE(jump ,l),
|
|
||||||
OPCODE(move_back ,l),
|
|
||||||
OPCODE(skip ,l),
|
|
||||||
OPCODE(either ,Osblp),
|
|
||||||
OPCODE(or_else ,Osblp),
|
|
||||||
OPCODE(pop_n ,s),
|
|
||||||
OPCODE(pop ,e),
|
|
||||||
OPCODE(user_switch ,lp),
|
|
||||||
OPCODE(switch_on_type ,llll),
|
|
||||||
OPCODE(switch_list_nl ,ollll),
|
|
||||||
OPCODE(switch_on_arg_type ,xllll),
|
|
||||||
OPCODE(switch_on_sub_arg_type ,sllll),
|
|
||||||
OPCODE(jump_if_var ,l),
|
|
||||||
OPCODE(jump_if_nonvar ,xll),
|
|
||||||
OPCODE(if_not_then ,clll),
|
|
||||||
OPCODE(switch_on_func ,sssl),
|
|
||||||
OPCODE(switch_on_cons ,sssl),
|
|
||||||
OPCODE(go_on_func ,sssl),
|
|
||||||
OPCODE(go_on_cons ,sssl),
|
|
||||||
OPCODE(if_func ,sssl),
|
|
||||||
OPCODE(if_cons ,sssl),
|
|
||||||
OPCODE(index_dbref ,e),
|
|
||||||
OPCODE(index_blob ,e),
|
|
||||||
OPCODE(index_long ,e),
|
|
||||||
OPCODE(p_atom_x ,xl),
|
|
||||||
OPCODE(p_atom_y ,yl),
|
|
||||||
OPCODE(p_atomic_x ,xl),
|
|
||||||
OPCODE(p_atomic_y ,yl),
|
|
||||||
OPCODE(p_integer_x ,xl),
|
|
||||||
OPCODE(p_integer_y ,yl),
|
|
||||||
OPCODE(p_nonvar_x ,xl),
|
|
||||||
OPCODE(p_nonvar_y ,yl),
|
|
||||||
OPCODE(p_number_x ,xl),
|
|
||||||
OPCODE(p_number_y ,yl),
|
|
||||||
OPCODE(p_var_x ,xl),
|
|
||||||
OPCODE(p_var_y ,yl),
|
|
||||||
OPCODE(p_db_ref_x ,xl),
|
|
||||||
OPCODE(p_db_ref_y ,yl),
|
|
||||||
OPCODE(p_primitive_x ,xl),
|
|
||||||
OPCODE(p_primitive_y ,yl),
|
|
||||||
OPCODE(p_compound_x ,xl),
|
|
||||||
OPCODE(p_compound_y ,yl),
|
|
||||||
OPCODE(p_float_x ,xl),
|
|
||||||
OPCODE(p_float_y ,yl),
|
|
||||||
OPCODE(p_plus_vv ,xxx),
|
|
||||||
OPCODE(p_plus_vc ,xxn),
|
|
||||||
OPCODE(p_plus_y_vv ,yxx),
|
|
||||||
OPCODE(p_plus_y_vc ,yxn),
|
|
||||||
OPCODE(p_minus_vv ,xxx),
|
|
||||||
OPCODE(p_minus_cv ,xxn),
|
|
||||||
OPCODE(p_minus_y_vv ,yxx),
|
|
||||||
OPCODE(p_minus_y_cv ,yxn),
|
|
||||||
OPCODE(p_times_vv ,xxx),
|
|
||||||
OPCODE(p_times_vc ,xxn),
|
|
||||||
OPCODE(p_times_y_vv ,yxx),
|
|
||||||
OPCODE(p_times_y_vc ,yxn),
|
|
||||||
OPCODE(p_div_vv ,xxx),
|
|
||||||
OPCODE(p_div_vc ,xxn),
|
|
||||||
OPCODE(p_div_cv ,xxn),
|
|
||||||
OPCODE(p_div_y_vv ,yxx),
|
|
||||||
OPCODE(p_div_y_vc ,yxn),
|
|
||||||
OPCODE(p_div_y_cv ,yxn),
|
|
||||||
OPCODE(p_and_vv ,xxx),
|
|
||||||
OPCODE(p_and_vc ,xxn),
|
|
||||||
OPCODE(p_and_y_vv ,yxx),
|
|
||||||
OPCODE(p_and_y_vc ,yxn),
|
|
||||||
OPCODE(p_or_vv ,xxx),
|
|
||||||
OPCODE(p_or_vc ,xxn),
|
|
||||||
OPCODE(p_or_y_vv ,yxx),
|
|
||||||
OPCODE(p_or_y_vc ,yxn),
|
|
||||||
OPCODE(p_sll_vv ,xxx),
|
|
||||||
OPCODE(p_sll_vc ,xxn),
|
|
||||||
OPCODE(p_sll_cv ,xxn),
|
|
||||||
OPCODE(p_sll_y_vv ,yxx),
|
|
||||||
OPCODE(p_sll_y_vc ,yxn),
|
|
||||||
OPCODE(p_sll_y_cv ,yxn),
|
|
||||||
OPCODE(p_slr_vv ,xxx),
|
|
||||||
OPCODE(p_slr_vc ,xxn),
|
|
||||||
OPCODE(p_slr_cv ,xxn),
|
|
||||||
OPCODE(p_slr_y_vv ,yxx),
|
|
||||||
OPCODE(p_slr_y_vc ,yxn),
|
|
||||||
OPCODE(p_slr_y_cv ,yxn),
|
|
||||||
OPCODE(call_bfunc_xx ,plxxs),
|
|
||||||
OPCODE(call_bfunc_yx ,plxys),
|
|
||||||
OPCODE(call_bfunc_xy ,plxys),
|
|
||||||
OPCODE(call_bfunc_yy ,plyys),
|
|
||||||
OPCODE(p_equal ,e),
|
|
||||||
#if INLINE_BIG_COMPARISONS
|
|
||||||
OPCODE(p_dif ,l),
|
|
||||||
OPCODE(p_eq ,l),
|
|
||||||
#endif
|
|
||||||
OPCODE(p_arg_vv ,xxx),
|
|
||||||
OPCODE(p_arg_cv ,xxn),
|
|
||||||
OPCODE(p_arg_y_vv ,yxx),
|
|
||||||
OPCODE(p_arg_y_cv ,yxn),
|
|
||||||
OPCODE(p_func2s_vv ,xxx),
|
|
||||||
OPCODE(p_func2s_cv ,xxc),
|
|
||||||
OPCODE(p_func2s_vc ,xxn),
|
|
||||||
OPCODE(p_func2s_y_vv ,yxx),
|
|
||||||
OPCODE(p_func2s_y_cv ,yxc),
|
|
||||||
OPCODE(p_func2s_y_vc ,yxn),
|
|
||||||
OPCODE(p_func2f_xx ,xxx),
|
|
||||||
OPCODE(p_func2f_xy ,xxy),
|
|
||||||
OPCODE(p_func2f_yx ,yxx),
|
|
||||||
OPCODE(p_func2f_yy ,yyx),
|
|
||||||
OPCODE(p_functor ,e),
|
|
||||||
OPCODE(p_execute_tail ,Osbmp),
|
|
||||||
OPCODE(p_execute2 ,Osbpp),
|
|
||||||
OPCODE(p_execute ,Osbmp),
|
|
||||||
#ifdef YAPOR
|
#ifdef YAPOR
|
||||||
OPCODE(getwork_first_time ,e),
|
OPCODE(getwork_first_time ,e),
|
||||||
OPCODE(getwork ,Otapl),
|
OPCODE(getwork ,Otapl),
|
||||||
|
@ -557,11 +557,6 @@ typedef struct yami {
|
|||||||
struct pred_entry *p;
|
struct pred_entry *p;
|
||||||
CELL next;
|
CELL next;
|
||||||
} p;
|
} p;
|
||||||
struct {
|
|
||||||
struct pred_entry *p;
|
|
||||||
struct pred_entry *p0;
|
|
||||||
CELL next;
|
|
||||||
} pp;
|
|
||||||
struct {
|
struct {
|
||||||
COUNT s;
|
COUNT s;
|
||||||
CELL next;
|
CELL next;
|
||||||
|
@ -255,10 +255,6 @@ restore_opcodes(yamop *pc, yamop *max USES_REGS)
|
|||||||
case _jump:
|
case _jump:
|
||||||
case _jump_if_var:
|
case _jump_if_var:
|
||||||
case _move_back:
|
case _move_back:
|
||||||
#if INLINE_BIG_COMPARISONS
|
|
||||||
case _p_dif:
|
|
||||||
case _p_eq:
|
|
||||||
#endif
|
|
||||||
case _retry2:
|
case _retry2:
|
||||||
case _retry3:
|
case _retry3:
|
||||||
case _retry4:
|
case _retry4:
|
||||||
|
@ -78,6 +78,9 @@
|
|||||||
case _call:
|
case _call:
|
||||||
case _call_cpred:
|
case _call_cpred:
|
||||||
case _call_usercpred:
|
case _call_usercpred:
|
||||||
|
case _dexecute:
|
||||||
|
case _execute:
|
||||||
|
case _execute_cpred:
|
||||||
case _fcall:
|
case _fcall:
|
||||||
case _p_execute2:
|
case _p_execute2:
|
||||||
#ifdef YAPOR
|
#ifdef YAPOR
|
||||||
@ -273,8 +276,6 @@
|
|||||||
case _jump:
|
case _jump:
|
||||||
case _jump_if_var:
|
case _jump_if_var:
|
||||||
case _move_back:
|
case _move_back:
|
||||||
case _p_dif:
|
|
||||||
case _p_eq:
|
|
||||||
case _retry2:
|
case _retry2:
|
||||||
case _retry3:
|
case _retry3:
|
||||||
case _retry4:
|
case _retry4:
|
||||||
@ -498,14 +499,6 @@
|
|||||||
CHECK(save_Constant(stream, pc->y_u.plyys.flags));
|
CHECK(save_Constant(stream, pc->y_u.plyys.flags));
|
||||||
pc = NEXTOP(pc,plyys);
|
pc = NEXTOP(pc,plyys);
|
||||||
break;
|
break;
|
||||||
/* instructions type pp */
|
|
||||||
case _dexecute:
|
|
||||||
case _execute:
|
|
||||||
case _execute_cpred:
|
|
||||||
CHECK(save_PtoPred(stream, pc->y_u.pp.p));
|
|
||||||
CHECK(save_PtoPred(stream, pc->y_u.pp.p0));
|
|
||||||
pc = NEXTOP(pc,pp);
|
|
||||||
break;
|
|
||||||
/* instructions type s */
|
/* instructions type s */
|
||||||
case _cut:
|
case _cut:
|
||||||
case _cut_e:
|
case _cut_e:
|
||||||
|
1439
H/walkclause.h
1439
H/walkclause.h
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user