2875 lines
73 KiB
C
2875 lines
73 KiB
C
#if (defined(YAPOR_SBA) && defined(YAPOR)) || defined(TABLING)
|
|
#define check_stack_on_call \
|
|
if (__builtin_expect( ((Int)(Unsigned(YOUNGEST_CP((choiceptr)ENV_YREG,B_FZ)) - Unsigned(YOUNGEST_H(H_FZ,H))) < CreepFlag), 0) ) return external_labels[6];
|
|
#else
|
|
#define check_stack_on_call \
|
|
if (__builtin_expect(((Int)(Unsigned(ENV_YREG) - Unsigned(HR)) < CreepFlag ), 0) ) return external_labels[6];
|
|
#endif /* YAPOR_SBA && YAPOR */
|
|
|
|
#if (defined(YAPOR_SBA) && defined(YAPOR)) || defined(TABLING)
|
|
#define check_stack_on_execute \
|
|
if (__builtin_expect( ((Int)(Unsigned(YOUNGEST_CP((choiceptr)ENV_YREG,B_FZ)) - Unsigned(YOUNGEST_H(H_FZ,H))) < CreepFlag), 0) ) return external_labels[5];
|
|
#else
|
|
#define check_stack_on_execute \
|
|
if (__builtin_expect(((Int)(Unsigned(ENV_YREG) - Unsigned(HR)) < CreepFlag ), 0) ) return external_labels[5];
|
|
#endif /* YAPOR_SBA && YAPOR */
|
|
|
|
#if (defined(YAPOR_SBA) && defined(YAPOR)) || defined(TABLING)
|
|
#define check_stack_on_dexecute \
|
|
if (__builtin_expect( ((Int)(Unsigned(YOUNGEST_CP((choiceptr)ENV_YREG,B_FZ)) - Unsigned(YOUNGEST_H(H_FZ,H))) < CreepFlag), 0) ) return external_labels[7];
|
|
#else
|
|
#define check_stack_on_dexecute \
|
|
if (__builtin_expect(((Int)(Unsigned(ENV_YREG) - Unsigned(HR)) < CreepFlag ), 0) ) return external_labels[7];
|
|
#endif /* YAPOR_SBA && YAPOR */
|
|
|
|
#if (defined(YAPOR_SBA) && defined(YAPOR)) || defined(TABLING)
|
|
#define check_stack_on_deallocate \
|
|
if (__builtin_expect( ((Int)(Unsigned(YOUNGEST_CP((choiceptr)ENV_YREG,B_FZ)) - Unsigned(YOUNGEST_H(H_FZ,H))) < CreepFlag), 0) ) return external_labels[8];
|
|
#else
|
|
#define check_stack_on_deallocate \
|
|
if (__builtin_expect(((Int)(Unsigned(ENV_YREG) - Unsigned(HR)) < CreepFlag ), 0) ) return external_labels[8];
|
|
#endif /* YAPOR_SBA && YAPOR */
|
|
|
|
#ifdef DEPTH_LIMIT
|
|
#define _procceed_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = (*_CPREG); \
|
|
save_pc(); \
|
|
ENV_YREG = ENV; \
|
|
DEPTH = ENV_YREG[E_DEPTH]; \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
GONEXT(); \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* DEPTH_LIMIT */
|
|
#define _procceed_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = (*_CPREG); \
|
|
save_pc(); \
|
|
ENV_YREG = ENV; \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
GONEXT(); \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* DEPTH_LIMIT */
|
|
|
|
#ifdef DEPTH_LIMIT
|
|
#define _fcall_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
ENV_YREG[E_CP] = (CELL) (*_CPREG); \
|
|
ENV_YREG[E_E] = (CELL) ENV; \
|
|
ENV_YREG[E_DEPTH] = DEPTH; \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
_call_instinit;
|
|
#else /* DEPTH_LIMIT */
|
|
#define _fcall_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
ENV_YREG[E_CP] = (CELL) (*_CPREG); \
|
|
ENV_YREG[E_E] = (CELL) ENV; \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
_call_instinit;
|
|
#endif /* DEPTH_LIMIT */
|
|
|
|
#ifdef LOW_LEVEL_TRACER
|
|
#ifdef NO_CHECKING
|
|
#ifdef DEPTH_LIMIT
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#else /* YAPOR_SBA */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* FROZEN_STACKS */
|
|
#else /* DEPTH_LIMIT */
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#else /* YAPOR_SBA */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* FROZEN_STACKS */
|
|
#endif /* DEPTH_LIMIT */
|
|
#else /* NO_CHECKING */
|
|
#ifdef DEPTH_LIMIT
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#else /* YAPOR_SBA */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* FROZEN_STACKS */
|
|
#else /* DEPTH_LIMIT */
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#else /* YAPOR_SBA */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.Osbpp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* FROZEN_STACKS */
|
|
#endif /* DEPTH_LIMIT */
|
|
#endif /* NO_CHECKING */
|
|
#else /* LOW_LEVEL_TRACER */
|
|
#ifdef NO_CHECKING
|
|
#ifdef DEPTH_LIMIT
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#else /* YAPOR_SBA */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* FROZEN_STACKS */
|
|
#else /* DEPTH_LIMIT */
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#else /* YAPOR_SBA */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* FROZEN_STACKS */
|
|
#endif /* DEPTH_LIMIT */
|
|
#else /* NO_CHECKING */
|
|
#ifdef DEPTH_LIMIT
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#else /* YAPOR_SBA */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)){ \
|
|
FAIL(); \
|
|
} else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* FROZEN_STACKS */
|
|
#else /* DEPTH_LIMIT */
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#else /* YAPOR_SBA */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#ifdef YAPOR
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
SCH_check_requests(); \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR */
|
|
#define _call_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt; \
|
|
pt = (*_PREG)->u.Osbpp.p; \
|
|
CACHE_A1(); \
|
|
check_stack_on_call; \
|
|
ENV = ENV_YREG; \
|
|
ENV_YREG = (CELL *) (((char *) ENV_YREG) + (*_PREG)->u.Osbpp.s); \
|
|
(*_CPREG) = NEXTOP((*_PREG), Osbpp); \
|
|
(*_PREG) = pt->CodeOfPred; \
|
|
save_pc(); \
|
|
if (ENV_YREG > (CELL *) B) { \
|
|
ENV_YREG = (CELL *) B; \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR */
|
|
#endif /* FROZEN_STACKS */
|
|
#endif /* DEPTH_LIMIT */
|
|
#endif /* NO_CHECKING */
|
|
#endif /* LOW_LEVEL_TRACER */
|
|
|
|
#ifdef LOW_LEVEL_TRACER
|
|
#ifdef NO_CHECKING
|
|
#ifdef DEPTH_LIMIT
|
|
#define _execute_instinit \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,pt0,XREGS+1); \
|
|
} \
|
|
CACHE_A1(); \
|
|
BEGD(d0); \
|
|
d0 = (CELL)B; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
ENV_YREG[E_CB] = d0; \
|
|
ENDD(d0); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
GONEXT(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
}
|
|
#else /* DEPTH_LIMIT */
|
|
#define _execute_instinit \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,pt0,XREGS+1); \
|
|
} \
|
|
CACHE_A1(); \
|
|
BEGD(d0); \
|
|
d0 = (CELL)B; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
ENV_YREG[E_CB] = d0; \
|
|
ENDD(d0); \
|
|
GONEXT(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
}
|
|
#endif /* DEPTH_LIMIT */
|
|
#else /* NO_CHECKING */
|
|
#ifdef DEPTH_LIMIT
|
|
#define _execute_instinit \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,pt0,XREGS+1); \
|
|
} \
|
|
CACHE_A1(); \
|
|
BEGD(d0); \
|
|
d0 = (CELL)B; \
|
|
check_stack_on_execute; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
ENV_YREG[E_CB] = d0; \
|
|
ENDD(d0); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
GONEXT(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
}
|
|
#else /* DEPTH_LIMIT */
|
|
#define _execute_instinit \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,pt0,XREGS+1); \
|
|
} \
|
|
CACHE_A1(); \
|
|
BEGD(d0); \
|
|
d0 = (CELL)B; \
|
|
check_stack_on_execute; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
ENV_YREG[E_CB] = d0; \
|
|
ENDD(d0); \
|
|
GONEXT(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
}
|
|
#endif /* DEPTH_LIMIT */
|
|
#endif /* NO_CHECKING */
|
|
#else /* LOW_LEVEL_TRACER */
|
|
#ifdef NO_CHECKING
|
|
#ifdef DEPTH_LIMIT
|
|
#define _execute_instinit \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
CACHE_A1(); \
|
|
BEGD(d0); \
|
|
d0 = (CELL)B; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
ENV_YREG[E_CB] = d0; \
|
|
ENDD(d0); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
GONEXT(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
}
|
|
#else /* DEPTH_LIMIT */
|
|
#define _execute_instinit \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
CACHE_A1(); \
|
|
BEGD(d0); \
|
|
d0 = (CELL)B; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
ENV_YREG[E_CB] = d0; \
|
|
ENDD(d0); \
|
|
GONEXT(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
}
|
|
#endif /* DEPTH_LIMIT */
|
|
#else /* NO_CHECKING */
|
|
#ifdef DEPTH_LIMIT
|
|
#define _execute_instinit \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
CACHE_A1(); \
|
|
BEGD(d0); \
|
|
d0 = (CELL)B; \
|
|
check_stack_on_execute; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
ENV_YREG[E_CB] = d0; \
|
|
ENDD(d0); \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
GONEXT(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
}
|
|
#else /* DEPTH_LIMIT */
|
|
#define _execute_instinit \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
CACHE_A1(); \
|
|
BEGD(d0); \
|
|
d0 = (CELL)B; \
|
|
check_stack_on_execute; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
ENV_YREG[E_CB] = d0; \
|
|
ENDD(d0); \
|
|
GONEXT(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
}
|
|
#endif /* DEPTH_LIMIT */
|
|
#endif /* NO_CHECKING */
|
|
#endif /* LOW_LEVEL_TRACER */
|
|
|
|
#ifdef LOW_LEVEL_TRACER
|
|
#ifdef NO_CHECKING
|
|
#ifdef DEPTH_LIMIT
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#define _dexecute_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR_SBA */
|
|
#define _dexecute_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#define _dexecute_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
if (ENV_YREG > (CELL *)B) { \
|
|
ENV_YREG = (CELL *)B; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* FROZEN_STACKS */
|
|
#else /* DEPTH_LIMIT */
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#define _dexecute_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR_SBA */
|
|
#define _dexecute_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#define _dexecute_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
if (ENV_YREG > (CELL *)B) { \
|
|
ENV_YREG = (CELL *)B; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* FROZEN_STACKS */
|
|
#endif /* DEPTH_LIMIT */
|
|
#else /* NO_CHECKING */
|
|
#ifdef DEPTH_LIMIT
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#define _dexecute_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
check_stack_on_dexecute; \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR_SBA */
|
|
#define _dexecute_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
check_stack_on_dexecute; \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#define _dexecute_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
check_stack_on_dexecute; \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
if (ENV_YREG > (CELL *)B) { \
|
|
ENV_YREG = (CELL *)B; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* FROZEN_STACKS */
|
|
#else /* DEPTH_LIMIT */
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#define _dexecute_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
check_stack_on_dexecute; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR_SBA */
|
|
#define _dexecute_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
check_stack_on_dexecute; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#define _dexecute_instinit \
|
|
if (Yap_do_low_level_trace) { \
|
|
low_level_trace(enter_pred,(*_PREG)->u.pp.p,XREGS+1); \
|
|
} \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
check_stack_on_dexecute; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
if (ENV_YREG > (CELL *)B) { \
|
|
ENV_YREG = (CELL *)B; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* FROZEN_STACKS */
|
|
#endif /* DEPTH_LIMIT */
|
|
#endif /* NO_CHECKING */
|
|
#else /* LOW_LEVEL_TRACER */
|
|
#ifdef NO_CHECKING
|
|
#ifdef DEPTH_LIMIT
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#define _dexecute_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR_SBA */
|
|
#define _dexecute_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#define _dexecute_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
if (ENV_YREG > (CELL *)B) { \
|
|
ENV_YREG = (CELL *)B; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* FROZEN_STACKS */
|
|
#else /* DEPTH_LIMIT */
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#define _dexecute_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR_SBA */
|
|
#define _dexecute_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#define _dexecute_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
if (ENV_YREG > (CELL *)B) { \
|
|
ENV_YREG = (CELL *)B; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* FROZEN_STACKS */
|
|
#endif /* DEPTH_LIMIT */
|
|
#else /* NO_CHECKING */
|
|
#ifdef DEPTH_LIMIT
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#define _dexecute_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
check_stack_on_dexecute; \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR_SBA */
|
|
#define _dexecute_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
check_stack_on_dexecute; \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#define _dexecute_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
check_stack_on_dexecute; \
|
|
if (DEPTH <= MkIntTerm(1)) { \
|
|
if (pt0->ModuleOfPred) { \
|
|
if (DEPTH == MkIntTerm(0)) { \
|
|
FAIL(); \
|
|
} \
|
|
else { \
|
|
DEPTH = RESET_DEPTH(); \
|
|
} \
|
|
} \
|
|
} else if (pt0->ModuleOfPred) { \
|
|
DEPTH -= MkIntConstant(2); \
|
|
} \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
if (ENV_YREG > (CELL *)B) { \
|
|
ENV_YREG = (CELL *)B; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* FROZEN_STACKS */
|
|
#else /* DEPTH_LIMIT */
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#define _dexecute_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
check_stack_on_dexecute; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#else /* YAPOR_SBA */
|
|
#define _dexecute_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
check_stack_on_dexecute; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) { \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *)((CELL)ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#define _dexecute_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
{ \
|
|
PredEntry *pt0; \
|
|
CACHE_A1(); \
|
|
pt0 = (*_PREG)->u.pp.p; \
|
|
check_stack_on_dexecute; \
|
|
(*_PREG) = pt0->CodeOfPred; \
|
|
save_pc(); \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV_YREG = ENV = (CELL *) ENV_YREG[E_E]; \
|
|
if (ENV_YREG > (CELL *)B) { \
|
|
ENV_YREG = (CELL *)B; \
|
|
} \
|
|
else { \
|
|
ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENV_YREG[E_CB] = (CELL) B; \
|
|
GONEXT(); \
|
|
} \
|
|
ENDCACHE_Y_AS_ENV();
|
|
#endif /* FROZEN_STACKS */
|
|
#endif /* DEPTH_LIMIT */
|
|
#endif /* NO_CHECKING */
|
|
#endif /* LOW_LEVEL_TRACER */
|
|
|
|
#ifdef DEPTH_LIMIT
|
|
#define _allocate_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), e); \
|
|
ENV_YREG[E_CP] = (CELL) (*_CPREG); \
|
|
ENV_YREG[E_E] = (CELL) ENV; \
|
|
ENV_YREG[E_DEPTH] = DEPTH; \
|
|
ENV = ENV_YREG; \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#else /* DEPTH_LIMIT */
|
|
#define _allocate_instinit \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), e); \
|
|
ENV_YREG[E_CP] = (CELL) (*_CPREG); \
|
|
ENV_YREG[E_E] = (CELL) ENV; \
|
|
ENV = ENV_YREG; \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#endif /* DEPTH_LIMIT */
|
|
|
|
#ifdef DEPTH_LIMIT
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#ifdef NO_CHECKING
|
|
#define _deallocate_instinit \
|
|
check_trail(TR); \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), p); \
|
|
(*_SREG) = YREG; \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; \
|
|
DEPTH = ENV_YREG[E_DEPTH]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
else \
|
|
ENV_YREG = (CELL *)((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#else /* NO_CHECKING */
|
|
#define _deallocate_instinit \
|
|
check_trail(TR); \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), p); \
|
|
(*_SREG) = YREG; \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; \
|
|
DEPTH = ENV_YREG[E_DEPTH]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
else \
|
|
ENV_YREG = (CELL *)((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
check_stack_on_deallocate; \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#endif /* NO_CHECKING */
|
|
#else /* YAPOR_SBA */
|
|
#ifdef NO_CHECKING
|
|
#define _deallocate_instinit \
|
|
check_trail(TR); \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), p); \
|
|
(*_SREG) = YREG; \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; \
|
|
DEPTH = ENV_YREG[E_DEPTH]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
else \
|
|
ENV_YREG = (CELL *)((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#else /* NO_CHECKING */
|
|
#define _deallocate_instinit \
|
|
check_trail(TR); \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), p); \
|
|
(*_SREG) = YREG; \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; \
|
|
DEPTH = ENV_YREG[E_DEPTH]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
else \
|
|
ENV_YREG = (CELL *)((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
check_stack_on_deallocate; \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#endif /* NO_CHECKING */
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#ifdef NO_CHECKING
|
|
#define _deallocate_instinit \
|
|
check_trail(TR); \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), p); \
|
|
(*_SREG) = YREG; \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; \
|
|
DEPTH = ENV_YREG[E_DEPTH]; \
|
|
if (ENV_YREG > (CELL *) B) \
|
|
ENV_YREG = (CELL *) B; \
|
|
else \
|
|
ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#else /* NO_CHECKING */
|
|
#define _deallocate_instinit \
|
|
check_trail(TR); \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), p); \
|
|
(*_SREG) = YREG; \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; \
|
|
DEPTH = ENV_YREG[E_DEPTH]; \
|
|
if (ENV_YREG > (CELL *) B) \
|
|
ENV_YREG = (CELL *) B; \
|
|
else \
|
|
ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
check_stack_on_deallocate; \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#endif /* NO_CHECKING */
|
|
#endif /* FROZEN_STACKS */
|
|
#else /* DEPTH_LIMIT */
|
|
#ifdef FROZEN_STACKS
|
|
#ifdef YAPOR_SBA
|
|
#ifdef NO_CHECKING
|
|
#define _deallocate_instinit \
|
|
check_trail(TR); \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), p); \
|
|
(*_SREG) = YREG; \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
else \
|
|
ENV_YREG = (CELL *)((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#else /* NO_CHECKING */
|
|
#define _deallocate_instinit \
|
|
check_trail(TR); \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), p); \
|
|
(*_SREG) = YREG; \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b || ENV_YREG < HR) \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
else \
|
|
ENV_YREG = (CELL *)((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
check_stack_on_deallocate; \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#endif /* NO_CHECKING */
|
|
#else /* YAPOR_SBA */
|
|
#ifdef NO_CHECKING
|
|
#define _deallocate_instinit \
|
|
check_trail(TR); \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), p); \
|
|
(*_SREG) = YREG; \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
else \
|
|
ENV_YREG = (CELL *)((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#else /* NO_CHECKING */
|
|
#define _deallocate_instinit \
|
|
check_trail(TR); \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), p); \
|
|
(*_SREG) = YREG; \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; \
|
|
{ \
|
|
choiceptr top_b = PROTECT_FROZEN_B(B); \
|
|
if (ENV_YREG > (CELL *) top_b) \
|
|
ENV_YREG = (CELL *) top_b; \
|
|
else \
|
|
ENV_YREG = (CELL *)((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
} \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
check_stack_on_deallocate; \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#endif /* NO_CHECKING */
|
|
#endif /* YAPOR_SBA */
|
|
#else /* FROZEN_STACKS */
|
|
#ifdef NO_CHECKING
|
|
#define _deallocate_instinit \
|
|
check_trail(TR); \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), p); \
|
|
(*_SREG) = YREG; \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; \
|
|
if (ENV_YREG > (CELL *) B) \
|
|
ENV_YREG = (CELL *) B; \
|
|
else \
|
|
ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#else /* NO_CHECKING */
|
|
#define _deallocate_instinit \
|
|
check_trail(TR); \
|
|
CACHE_Y_AS_ENV(YREG); \
|
|
(*_PREG) = NEXTOP((*_PREG), p); \
|
|
(*_SREG) = YREG; \
|
|
(*_CPREG) = (yamop *) ENV_YREG[E_CP]; \
|
|
ENV = ENV_YREG = (CELL *) ENV_YREG[E_E]; \
|
|
if (ENV_YREG > (CELL *) B) \
|
|
ENV_YREG = (CELL *) B; \
|
|
else \
|
|
ENV_YREG = (CELL *) ((CELL) ENV_YREG + ENV_Size((*_CPREG))); \
|
|
WRITEBACK_Y_AS_ENV(); \
|
|
check_stack_on_deallocate; \
|
|
ENDCACHE_Y_AS_ENV(); \
|
|
GONEXT();
|
|
#endif /* NO_CHECKING */
|
|
#endif /* FROZEN_STACKS */
|
|
#endif /* DEPTH_LIMIT */
|