This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/JIT/HPP/yaam_call_count.h

1252 lines
34 KiB
C

#define COUNT_CALL_INSTINIT \
LOCK((*_PREG)->u.p.p->StatisticsForPred.lock); \
(*_PREG)->u.p.p->StatisticsForPred.NOfEntries++; \
UNLOCK((*_PREG)->u.p.p->StatisticsForPred.lock); \
LOCAL_ReductionsCounter--;
#define COUNT_CALL_MIDDLE \
if (LOCAL_ReductionsCounter == 0 && LOCAL_ReductionsCounterOn) { \
saveregs(); \
Yap_NilError(CALL_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
else { \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
}
#define COUNT_CALL_END \
(*_PREG) = NEXTOP((*_PREG), p); \
GONext();
#define COUNT_RETRY_INSTINIT \
LOCK((*_PREG)->u.p.p->StatisticsForPred.lock); \
(*_PREG)->u.p.p->StatisticsForPred.NOfRetries++; \
UNLOCK((*_PREG)->u.p.p->StatisticsForPred.lock); \
LOCAL_RetriesCounter--;
#define COUNT_RETRY_MIDDLE \
if (LOCAL_RetriesCounter == 0 && LOCAL_RetriesCounterOn) { \
ENV = B->cp_env; \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
else { \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) { \
ENV = B->cp_env; \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
}
#define COUNT_RETRY_END \
(*_PREG) = NEXTOP((*_PREG), p); \
GONext();
#define COUNT_RETRY_ME_INSTINIT \
CACHE_Y(B); \
restore_yaam_regs((*_PREG)->u.Otapl.d); \
restore_args((*_PREG)->u.Otapl.s);
#ifdef FROZEN_STACKS
#define COUNT_RETRY_ME_MIDDLE \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B->cp_b); \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
LOCK(((PredEntry *)((*_PREG)->u.Otapl.p))->StatisticsForPred.lock); \
((PredEntry *)((*_PREG)->u.Otapl.p))->StatisticsForPred.NOfRetries++; \
UNLOCK(((PredEntry *)((*_PREG)->u.Otapl.p))->StatisticsForPred.lock); \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0 && LOCAL_RetriesCounterOn) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
}
#else /* FROZEN_STACKS */
#define COUNT_RETRY_ME_MIDDLE \
set_cut(S_YREG, B_YREG->cp_b); \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
LOCK(((PredEntry *)((*_PREG)->u.Otapl.p))->StatisticsForPred.lock); \
((PredEntry *)((*_PREG)->u.Otapl.p))->StatisticsForPred.NOfRetries++; \
UNLOCK(((PredEntry *)((*_PREG)->u.Otapl.p))->StatisticsForPred.lock); \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0 && LOCAL_RetriesCounterOn) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0 && LOCAL_PredEntriesCounterOn) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
}
#endif /* FROZEN_STACKS */
#define COUNT_RETRY_ME_END \
(*_PREG) = NEXTOP((*_PREG), Otapl); \
GONext();
#define COUNT_TRUST_ME_INSTINIT \
CACHE_Y(B);
#ifdef YAPOR
#ifdef FROZEN_STACKS
#define COUNT_TRUST_ME_MIDDLE \
if (SCH_top_shared_cp(B)) { \
SCH_last_alternative((*_PREG), B_YREG); \
restore_args((*_PREG)->u.Otapl.s); \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B->cp_b); \
} \
else \
{ \
pop_yaam_regs(); \
pop_args((*_PREG)->u.Otapl.s); \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
}
#else /* FROZEN_STACKS */
#define COUNT_TRUST_ME_MIDDLE \
if (SCH_top_shared_cp(B)) { \
SCH_last_alternative((*_PREG), B_YREG); \
restore_args((*_PREG)->u.Otapl.s); \
set_cut(S_YREG, B->cp_b); \
} \
else \
{ \
pop_yaam_regs(); \
pop_args((*_PREG)->u.Otapl.s); \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
}
#endif /* FROZEN_STACKS */
#else /* YAPOR */
#ifdef FROZEN_STACKS
#define COUNT_TRUST_ME_MIDDLE \
{ \
pop_yaam_regs(); \
pop_args((*_PREG)->u.Otapl.s); \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
}
#else /* FROZEN_STACKS */
#define COUNT_TRUST_ME_MIDDLE \
{ \
pop_yaam_regs(); \
pop_args((*_PREG)->u.Otapl.s); \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
}
#endif /* FROZEN_STACKS */
#endif /* YAPOR */
#define COUNT_TRUST_ME_END \
LOCK(((PredEntry *)((*_PREG)->u.Otapl.p))->StatisticsForPred.lock); \
((PredEntry *)((*_PREG)->u.Otapl.p))->StatisticsForPred.NOfRetries++; \
UNLOCK(((PredEntry *)((*_PREG)->u.Otapl.p))->StatisticsForPred.lock); \
(*_PREG) = NEXTOP((*_PREG), Otapl); \
GONext();
#ifdef THREADS
#ifdef FROZEN_STACKS
#define COUNT_RETRY_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
YAAM_CHECK_TRAIL_TR; \
{ \
UInt timestamp; \
CACHE_Y(B); \
timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[(*_PREG)->u.OtaLl.s]); \
if (!VALID_TIMESTAMP(timestamp, (*_PREG)->u.OtaLl.d)) { \
(*_PREG)=(*_PREG)->u.OtaLl.n; \
JMPNext(); \
} \
restore_yaam_regs((*_PREG)->u.OtaLl.n); \
restore_args((*_PREG)->u.OtaLl.s); \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK((*_PREG)->u.OtaLl.d->ClPred->StatisticsForPred.lock); \
(*_PREG)->u.OtaLl.d->ClPred->StatisticsForPred.NOfRetries++; \
UNLOCK((*_PREG)->u.OtaLl.d->ClPred->StatisticsForPred.lock); \
PP = (*_PREG)->u.OtaLl.d->ClPred; \
(*_PREG) = (*_PREG)->u.OtaLl.d->ClCode; \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B->cp_b); \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
} \
JMPNext();
#else /* FROZEN_STACKS */
#define COUNT_RETRY_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
YAAM_CHECK_TRAIL_TR; \
{ \
UInt timestamp; \
CACHE_Y(B); \
timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[(*_PREG)->u.OtaLl.s]); \
if (!VALID_TIMESTAMP(timestamp, (*_PREG)->u.OtaLl.d)) { \
(*_PREG)=(*_PREG)->u.OtaLl.n; \
JMPNext(); \
} \
restore_yaam_regs((*_PREG)->u.OtaLl.n); \
restore_args((*_PREG)->u.OtaLl.s); \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK((*_PREG)->u.OtaLl.d->ClPred->StatisticsForPred.lock); \
(*_PREG)->u.OtaLl.d->ClPred->StatisticsForPred.NOfRetries++; \
UNLOCK((*_PREG)->u.OtaLl.d->ClPred->StatisticsForPred.lock); \
PP = (*_PREG)->u.OtaLl.d->ClPred; \
(*_PREG) = (*_PREG)->u.OtaLl.d->ClCode; \
set_cut(S_YREG, B_YREG->cp_b); \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
} \
JMPNext();
#endif /* FROZEN_STACKS */
#else /* THREADS */
#ifdef FROZEN_STACKS
#define COUNT_RETRY_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
YAAM_CHECK_TRAIL_TR; \
{ \
UInt timestamp; \
CACHE_Y(B); \
timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[(*_PREG)->u.OtaLl.s]); \
if (!VALID_TIMESTAMP(timestamp, (*_PREG)->u.OtaLl.d)) { \
(*_PREG)=(*_PREG)->u.OtaLl.n; \
JMPNext(); \
} \
restore_yaam_regs((*_PREG)->u.OtaLl.n); \
restore_args((*_PREG)->u.OtaLl.s); \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK((*_PREG)->u.OtaLl.d->ClPred->StatisticsForPred.lock); \
(*_PREG)->u.OtaLl.d->ClPred->StatisticsForPred.NOfRetries++; \
UNLOCK((*_PREG)->u.OtaLl.d->ClPred->StatisticsForPred.lock); \
(*_PREG) = (*_PREG)->u.OtaLl.d->ClCode; \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B->cp_b); \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
} \
JMPNext();
#else /* FROZEN_STACKS */
#define COUNT_RETRY_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
YAAM_CHECK_TRAIL_TR; \
{ \
UInt timestamp; \
CACHE_Y(B); \
timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[(*_PREG)->u.OtaLl.s]); \
if (!VALID_TIMESTAMP(timestamp, (*_PREG)->u.OtaLl.d)) { \
(*_PREG)=(*_PREG)->u.OtaLl.n; \
JMPNext(); \
} \
restore_yaam_regs((*_PREG)->u.OtaLl.n); \
restore_args((*_PREG)->u.OtaLl.s); \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK((*_PREG)->u.OtaLl.d->ClPred->StatisticsForPred.lock); \
(*_PREG)->u.OtaLl.d->ClPred->StatisticsForPred.NOfRetries++; \
UNLOCK((*_PREG)->u.OtaLl.d->ClPred->StatisticsForPred.lock); \
(*_PREG) = (*_PREG)->u.OtaLl.d->ClCode; \
set_cut(S_YREG, B_YREG->cp_b); \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
} \
JMPNext();
#endif /* FROZEN_STACKS */
#endif /* THREADS */
#define COUNT_RETRY_LOGICAL_END \
BLOCK = (CELL)COUNT_RETRY_LOGICAL_END;
#if MULTIPLE_STACKS
#ifdef YAPOR
#ifdef FROZEN_STACKS
#define COUNT_TRUST_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
CACHE_Y(B); \
{ \
LogUpdIndex *cl = (*_PREG)->u.OtILl.block; \
PredEntry *ap = cl->ClPred; \
LogUpdClause *lcl = (*_PREG)->u.OtILl.d; \
UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); \
if (!VALID_TIMESTAMP(timestamp, lcl)) { \
(*_PREG) = FAILCODE; \
} else { \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK(ap->StatisticsForPred.lock); \
ap->StatisticsForPred.NOfRetries++; \
UNLOCK(ap->StatisticsForPred.lock); \
(*_PREG) = lcl->ClCode; \
} \
PELOCK(2, ap); \
PP = ap; \
DEC_CLREF_COUNT(cl); \
--B->cp_tr; \
TR = B->cp_tr; \
if (cl->ClRefCount == 0 && (cl->ClFlags & (ErasedMask|DirtyMask))) { \
if ((*_PREG) != FAILCODE) { \
if (lcl->ClRefCount == 1) { \
INC_CLREF_COUNT(lcl); \
TRAIL_CLREF(lcl); \
} \
} \
if (cl->ClFlags & ErasedMask) { \
saveregs(); \
Yap_ErLogUpdIndex(cl); \
setregs(); \
} else { \
saveregs(); \
Yap_CleanUpIndex(cl); \
setregs(); \
} \
save_pc(); \
} \
if (SCH_top_shared_cp(B)) { \
SCH_last_alternative((*_PREG), B_YREG); \
restore_args(ap->ArityOfPE); \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B->cp_b); \
} else \
{ \
pop_yaam_regs(); \
pop_args(ap->ArityOfPE); \
S_YREG--; \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
JMPNext(); \
}
#else /* FROZEN_STACKS */
#define COUNT_TRUST_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
CACHE_Y(B); \
{ \
LogUpdIndex *cl = (*_PREG)->u.OtILl.block; \
PredEntry *ap = cl->ClPred; \
LogUpdClause *lcl = (*_PREG)->u.OtILl.d; \
UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); \
if (!VALID_TIMESTAMP(timestamp, lcl)) { \
(*_PREG) = FAILCODE; \
} else { \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK(ap->StatisticsForPred.lock); \
ap->StatisticsForPred.NOfRetries++; \
UNLOCK(ap->StatisticsForPred.lock); \
(*_PREG) = lcl->ClCode; \
} \
PELOCK(2, ap); \
PP = ap; \
DEC_CLREF_COUNT(cl); \
--B->cp_tr; \
TR = B->cp_tr; \
if (cl->ClRefCount == 0 && (cl->ClFlags & (ErasedMask|DirtyMask))) { \
if ((*_PREG) != FAILCODE) { \
if (lcl->ClRefCount == 1) { \
INC_CLREF_COUNT(lcl); \
TRAIL_CLREF(lcl); \
} \
} \
if (cl->ClFlags & ErasedMask) { \
saveregs(); \
Yap_ErLogUpdIndex(cl); \
setregs(); \
} else { \
saveregs(); \
Yap_CleanUpIndex(cl); \
setregs(); \
} \
save_pc(); \
} \
if (SCH_top_shared_cp(B)) { \
SCH_last_alternative((*_PREG), B_YREG); \
restore_args(ap->ArityOfPE); \
S_YREG++; \
set_cut(S_YREG, B->cp_b); \
} else \
{ \
pop_yaam_regs(); \
pop_args(ap->ArityOfPE); \
S_YREG--; \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
JMPNext(); \
}
#endif /* FROZEN_STACKS */
#else /* YAPOR */
#ifdef FROZEN_STACKS
#define COUNT_TRUST_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
CACHE_Y(B); \
{ \
LogUpdIndex *cl = (*_PREG)->u.OtILl.block; \
PredEntry *ap = cl->ClPred; \
LogUpdClause *lcl = (*_PREG)->u.OtILl.d; \
UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); \
if (!VALID_TIMESTAMP(timestamp, lcl)) { \
(*_PREG) = FAILCODE; \
} else { \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK(ap->StatisticsForPred.lock); \
ap->StatisticsForPred.NOfRetries++; \
UNLOCK(ap->StatisticsForPred.lock); \
(*_PREG) = lcl->ClCode; \
} \
PELOCK(2, ap); \
PP = ap; \
DEC_CLREF_COUNT(cl); \
--B->cp_tr; \
TR = B->cp_tr; \
if (cl->ClRefCount == 0 && (cl->ClFlags & (ErasedMask|DirtyMask))) { \
if ((*_PREG) != FAILCODE) { \
if (lcl->ClRefCount == 1) { \
INC_CLREF_COUNT(lcl); \
TRAIL_CLREF(lcl); \
} \
} \
if (cl->ClFlags & ErasedMask) { \
saveregs(); \
Yap_ErLogUpdIndex(cl); \
setregs(); \
} else { \
saveregs(); \
Yap_CleanUpIndex(cl); \
setregs(); \
} \
save_pc(); \
} \
{ \
pop_yaam_regs(); \
pop_args(ap->ArityOfPE); \
S_YREG--; \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
JMPNext(); \
}
#else /* FROZEN_STACKS */
#define COUNT_TRUST_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
CACHE_Y(B); \
{ \
LogUpdIndex *cl = (*_PREG)->u.OtILl.block; \
PredEntry *ap = cl->ClPred; \
LogUpdClause *lcl = (*_PREG)->u.OtILl.d; \
UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); \
if (!VALID_TIMESTAMP(timestamp, lcl)) { \
(*_PREG) = FAILCODE; \
} else { \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK(ap->StatisticsForPred.lock); \
ap->StatisticsForPred.NOfRetries++; \
UNLOCK(ap->StatisticsForPred.lock); \
(*_PREG) = lcl->ClCode; \
} \
PELOCK(2, ap); \
PP = ap; \
DEC_CLREF_COUNT(cl); \
--B->cp_tr; \
TR = B->cp_tr; \
if (cl->ClRefCount == 0 && (cl->ClFlags & (ErasedMask|DirtyMask))) { \
if ((*_PREG) != FAILCODE) { \
if (lcl->ClRefCount == 1) { \
INC_CLREF_COUNT(lcl); \
TRAIL_CLREF(lcl); \
} \
} \
if (cl->ClFlags & ErasedMask) { \
saveregs(); \
Yap_ErLogUpdIndex(cl); \
setregs(); \
} else { \
saveregs(); \
Yap_CleanUpIndex(cl); \
setregs(); \
} \
save_pc(); \
} \
{ \
pop_yaam_regs(); \
pop_args(ap->ArityOfPE); \
S_YREG--; \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
JMPNext(); \
}
#endif /* FROZEN_STACKS */
#endif /* YAPOR */
#else /* MULTIPLE_STACKS */
#if FROZEN_STACKS
#ifdef YAPOR
#ifdef FROZEN_STACKS
#define COUNT_TRUST_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
CACHE_Y(B); \
{ \
LogUpdIndex *cl = (*_PREG)->u.OtILl.block; \
PredEntry *ap = cl->ClPred; \
LogUpdClause *lcl = (*_PREG)->u.OtILl.d; \
UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); \
if (!VALID_TIMESTAMP(timestamp, lcl)) { \
(*_PREG) = FAILCODE; \
} else { \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK(ap->StatisticsForPred.lock); \
ap->StatisticsForPred.NOfRetries++; \
UNLOCK(ap->StatisticsForPred.lock); \
(*_PREG) = lcl->ClCode; \
} \
if (TrailTerm(B->cp_tr-1) == CLREF_TO_TRENTRY(cl) && \
B->cp_tr != B->cp_b->cp_tr) { \
cl->ClFlags &= ~InUseMask; \
--B->cp_tr; \
if (B->cp_tr > TR_FZ) \
{ \
TR = B->cp_tr; \
} if (cl->ClFlags & (ErasedMask|DirtyMask)) { \
if ((*_PREG) != FAILCODE) { \
if (lcl->ClRefCount == 1 && !(lcl->ClFlags & InUseMask)) { \
lcl->ClFlags |= InUseMask; \
TRAIL_CLREF(lcl); \
} \
} \
if (cl->ClFlags & ErasedMask) { \
saveregs(); \
Yap_ErLogUpdIndex(cl); \
setregs(); \
} else { \
saveregs(); \
Yap_CleanUpIndex(cl); \
setregs(); \
} \
save_pc(); \
} \
} \
if (SCH_top_shared_cp(B)) { \
SCH_last_alternative((*_PREG), B_YREG); \
restore_args(ap->ArityOfPE); \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B->cp_b); \
} else \
{ \
pop_yaam_regs(); \
pop_args(ap->ArityOfPE); \
S_YREG--; \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
JMPNext(); \
}
#else /* FROZEN_STACKS */
#define COUNT_TRUST_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
CACHE_Y(B); \
{ \
LogUpdIndex *cl = (*_PREG)->u.OtILl.block; \
PredEntry *ap = cl->ClPred; \
LogUpdClause *lcl = (*_PREG)->u.OtILl.d; \
UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); \
if (!VALID_TIMESTAMP(timestamp, lcl)) { \
(*_PREG) = FAILCODE; \
} else { \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK(ap->StatisticsForPred.lock); \
ap->StatisticsForPred.NOfRetries++; \
UNLOCK(ap->StatisticsForPred.lock); \
(*_PREG) = lcl->ClCode; \
} \
if (TrailTerm(B->cp_tr-1) == CLREF_TO_TRENTRY(cl) && \
B->cp_tr != B->cp_b->cp_tr) { \
cl->ClFlags &= ~InUseMask; \
--B->cp_tr; \
if (B->cp_tr > TR_FZ) \
{ \
TR = B->cp_tr; \
} if (cl->ClFlags & (ErasedMask|DirtyMask)) { \
if ((*_PREG) != FAILCODE) { \
if (lcl->ClRefCount == 1 && !(lcl->ClFlags & InUseMask)) { \
lcl->ClFlags |= InUseMask; \
TRAIL_CLREF(lcl); \
} \
} \
if (cl->ClFlags & ErasedMask) { \
saveregs(); \
Yap_ErLogUpdIndex(cl); \
setregs(); \
} else { \
saveregs(); \
Yap_CleanUpIndex(cl); \
setregs(); \
} \
save_pc(); \
} \
} \
if (SCH_top_shared_cp(B)) { \
SCH_last_alternative((*_PREG), B_YREG); \
restore_args(ap->ArityOfPE); \
S_YREG++; \
set_cut(S_YREG, B->cp_b); \
} else \
{ \
pop_yaam_regs(); \
pop_args(ap->ArityOfPE); \
S_YREG--; \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
JMPNext(); \
}
#endif /* FROZEN_STACKS */
#else /* YAPOR */
#ifdef FROZEN_STACKS
#define COUNT_TRUST_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
CACHE_Y(B); \
{ \
LogUpdIndex *cl = (*_PREG)->u.OtILl.block; \
PredEntry *ap = cl->ClPred; \
LogUpdClause *lcl = (*_PREG)->u.OtILl.d; \
UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); \
if (!VALID_TIMESTAMP(timestamp, lcl)) { \
(*_PREG) = FAILCODE; \
} else { \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK(ap->StatisticsForPred.lock); \
ap->StatisticsForPred.NOfRetries++; \
UNLOCK(ap->StatisticsForPred.lock); \
(*_PREG) = lcl->ClCode; \
} \
if (TrailTerm(B->cp_tr-1) == CLREF_TO_TRENTRY(cl) && \
B->cp_tr != B->cp_b->cp_tr) { \
cl->ClFlags &= ~InUseMask; \
--B->cp_tr; \
if (B->cp_tr > TR_FZ) \
{ \
TR = B->cp_tr; \
} if (cl->ClFlags & (ErasedMask|DirtyMask)) { \
if ((*_PREG) != FAILCODE) { \
if (lcl->ClRefCount == 1 && !(lcl->ClFlags & InUseMask)) { \
lcl->ClFlags |= InUseMask; \
TRAIL_CLREF(lcl); \
} \
} \
if (cl->ClFlags & ErasedMask) { \
saveregs(); \
Yap_ErLogUpdIndex(cl); \
setregs(); \
} else { \
saveregs(); \
Yap_CleanUpIndex(cl); \
setregs(); \
} \
save_pc(); \
} \
} \
{ \
pop_yaam_regs(); \
pop_args(ap->ArityOfPE); \
S_YREG--; \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
JMPNext(); \
}
#else /* FROZEN_STACKS */
#define COUNT_TRUST_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
CACHE_Y(B); \
{ \
LogUpdIndex *cl = (*_PREG)->u.OtILl.block; \
PredEntry *ap = cl->ClPred; \
LogUpdClause *lcl = (*_PREG)->u.OtILl.d; \
UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); \
if (!VALID_TIMESTAMP(timestamp, lcl)) { \
(*_PREG) = FAILCODE; \
} else { \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK(ap->StatisticsForPred.lock); \
ap->StatisticsForPred.NOfRetries++; \
UNLOCK(ap->StatisticsForPred.lock); \
(*_PREG) = lcl->ClCode; \
} \
if (TrailTerm(B->cp_tr-1) == CLREF_TO_TRENTRY(cl) && \
B->cp_tr != B->cp_b->cp_tr) { \
cl->ClFlags &= ~InUseMask; \
--B->cp_tr; \
if (B->cp_tr > TR_FZ) \
{ \
TR = B->cp_tr; \
} if (cl->ClFlags & (ErasedMask|DirtyMask)) { \
if ((*_PREG) != FAILCODE) { \
if (lcl->ClRefCount == 1 && !(lcl->ClFlags & InUseMask)) { \
lcl->ClFlags |= InUseMask; \
TRAIL_CLREF(lcl); \
} \
} \
if (cl->ClFlags & ErasedMask) { \
saveregs(); \
Yap_ErLogUpdIndex(cl); \
setregs(); \
} else { \
saveregs(); \
Yap_CleanUpIndex(cl); \
setregs(); \
} \
save_pc(); \
} \
} \
{ \
pop_yaam_regs(); \
pop_args(ap->ArityOfPE); \
S_YREG--; \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
JMPNext(); \
}
#endif /* FROZEN_STACKS */
#endif /* YAPOR */
#else /* FROZEN_STACKS */
#ifdef YAPOR
#ifdef FROZEN_STACKS
#define COUNT_TRUST_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
CACHE_Y(B); \
{ \
LogUpdIndex *cl = (*_PREG)->u.OtILl.block; \
PredEntry *ap = cl->ClPred; \
LogUpdClause *lcl = (*_PREG)->u.OtILl.d; \
UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); \
if (!VALID_TIMESTAMP(timestamp, lcl)) { \
(*_PREG) = FAILCODE; \
} else { \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK(ap->StatisticsForPred.lock); \
ap->StatisticsForPred.NOfRetries++; \
UNLOCK(ap->StatisticsForPred.lock); \
(*_PREG) = lcl->ClCode; \
} \
if (TrailTerm(B->cp_tr-1) == CLREF_TO_TRENTRY(cl) && \
B->cp_tr != B->cp_b->cp_tr) { \
cl->ClFlags &= ~InUseMask; \
--B->cp_tr; \
{ \
TR = B->cp_tr; \
} if (cl->ClFlags & (ErasedMask|DirtyMask)) { \
if ((*_PREG) != FAILCODE) { \
if (lcl->ClRefCount == 1 && !(lcl->ClFlags & InUseMask)) { \
lcl->ClFlags |= InUseMask; \
TRAIL_CLREF(lcl); \
} \
} \
if (cl->ClFlags & ErasedMask) { \
saveregs(); \
Yap_ErLogUpdIndex(cl); \
setregs(); \
} else { \
saveregs(); \
Yap_CleanUpIndex(cl); \
setregs(); \
} \
save_pc(); \
} \
} \
if (SCH_top_shared_cp(B)) { \
SCH_last_alternative((*_PREG), B_YREG); \
restore_args(ap->ArityOfPE); \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B->cp_b); \
} else \
{ \
pop_yaam_regs(); \
pop_args(ap->ArityOfPE); \
S_YREG--; \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
JMPNext(); \
}
#else /* FROZEN_STACKS */
#define COUNT_TRUST_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
CACHE_Y(B); \
{ \
LogUpdIndex *cl = (*_PREG)->u.OtILl.block; \
PredEntry *ap = cl->ClPred; \
LogUpdClause *lcl = (*_PREG)->u.OtILl.d; \
UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); \
if (!VALID_TIMESTAMP(timestamp, lcl)) { \
(*_PREG) = FAILCODE; \
} else { \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK(ap->StatisticsForPred.lock); \
ap->StatisticsForPred.NOfRetries++; \
UNLOCK(ap->StatisticsForPred.lock); \
(*_PREG) = lcl->ClCode; \
} \
if (TrailTerm(B->cp_tr-1) == CLREF_TO_TRENTRY(cl) && \
B->cp_tr != B->cp_b->cp_tr) { \
cl->ClFlags &= ~InUseMask; \
--B->cp_tr; \
{ \
TR = B->cp_tr; \
} if (cl->ClFlags & (ErasedMask|DirtyMask)) { \
if ((*_PREG) != FAILCODE) { \
if (lcl->ClRefCount == 1 && !(lcl->ClFlags & InUseMask)) { \
lcl->ClFlags |= InUseMask; \
TRAIL_CLREF(lcl); \
} \
} \
if (cl->ClFlags & ErasedMask) { \
saveregs(); \
Yap_ErLogUpdIndex(cl); \
setregs(); \
} else { \
saveregs(); \
Yap_CleanUpIndex(cl); \
setregs(); \
} \
save_pc(); \
} \
} \
if (SCH_top_shared_cp(B)) { \
SCH_last_alternative((*_PREG), B_YREG); \
restore_args(ap->ArityOfPE); \
S_YREG++; \
set_cut(S_YREG, B->cp_b); \
} else \
{ \
pop_yaam_regs(); \
pop_args(ap->ArityOfPE); \
S_YREG--; \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
JMPNext(); \
}
#endif /* FROZEN_STACKS */
#else /* YAPOR */
#ifdef FROZEN_STACKS
#define COUNT_TRUST_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
CACHE_Y(B); \
{ \
LogUpdIndex *cl = (*_PREG)->u.OtILl.block; \
PredEntry *ap = cl->ClPred; \
LogUpdClause *lcl = (*_PREG)->u.OtILl.d; \
UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); \
if (!VALID_TIMESTAMP(timestamp, lcl)) { \
(*_PREG) = FAILCODE; \
} else { \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK(ap->StatisticsForPred.lock); \
ap->StatisticsForPred.NOfRetries++; \
UNLOCK(ap->StatisticsForPred.lock); \
(*_PREG) = lcl->ClCode; \
} \
if (TrailTerm(B->cp_tr-1) == CLREF_TO_TRENTRY(cl) && \
B->cp_tr != B->cp_b->cp_tr) { \
cl->ClFlags &= ~InUseMask; \
--B->cp_tr; \
{ \
TR = B->cp_tr; \
} if (cl->ClFlags & (ErasedMask|DirtyMask)) { \
if ((*_PREG) != FAILCODE) { \
if (lcl->ClRefCount == 1 && !(lcl->ClFlags & InUseMask)) { \
lcl->ClFlags |= InUseMask; \
TRAIL_CLREF(lcl); \
} \
} \
if (cl->ClFlags & ErasedMask) { \
saveregs(); \
Yap_ErLogUpdIndex(cl); \
setregs(); \
} else { \
saveregs(); \
Yap_CleanUpIndex(cl); \
setregs(); \
} \
save_pc(); \
} \
} \
{ \
pop_yaam_regs(); \
pop_args(ap->ArityOfPE); \
S_YREG--; \
S_YREG = (CELL *) PROTECT_FROZEN_B(B_YREG); \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
JMPNext(); \
}
#else /* FROZEN_STACKS */
#define COUNT_TRUST_LOGICAL_INSTINIT \
BLOCKADDRESS = (CELL)(*_PREG); \
CACHE_Y(B); \
{ \
LogUpdIndex *cl = (*_PREG)->u.OtILl.block; \
PredEntry *ap = cl->ClPred; \
LogUpdClause *lcl = (*_PREG)->u.OtILl.d; \
UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); \
if (!VALID_TIMESTAMP(timestamp, lcl)) { \
(*_PREG) = FAILCODE; \
} else { \
LOCAL_RetriesCounter--; \
if (LOCAL_RetriesCounter == 0) { \
saveregs(); \
Yap_NilError(RETRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCAL_PredEntriesCounter--; \
if (LOCAL_PredEntriesCounter == 0) { \
saveregs(); \
Yap_NilError(PRED_ENTRY_COUNTER_UNDERFLOW,""); \
setregs(); \
JMPNext(); \
} \
LOCK(ap->StatisticsForPred.lock); \
ap->StatisticsForPred.NOfRetries++; \
UNLOCK(ap->StatisticsForPred.lock); \
(*_PREG) = lcl->ClCode; \
} \
if (TrailTerm(B->cp_tr-1) == CLREF_TO_TRENTRY(cl) && \
B->cp_tr != B->cp_b->cp_tr) { \
cl->ClFlags &= ~InUseMask; \
--B->cp_tr; \
{ \
TR = B->cp_tr; \
} if (cl->ClFlags & (ErasedMask|DirtyMask)) { \
if ((*_PREG) != FAILCODE) { \
if (lcl->ClRefCount == 1 && !(lcl->ClFlags & InUseMask)) { \
lcl->ClFlags |= InUseMask; \
TRAIL_CLREF(lcl); \
} \
} \
if (cl->ClFlags & ErasedMask) { \
saveregs(); \
Yap_ErLogUpdIndex(cl); \
setregs(); \
} else { \
saveregs(); \
Yap_CleanUpIndex(cl); \
setregs(); \
} \
save_pc(); \
} \
} \
{ \
pop_yaam_regs(); \
pop_args(ap->ArityOfPE); \
S_YREG--; \
set_cut(S_YREG, B); \
} \
SET_BB(B_YREG); \
ENDCACHE_Y(); \
JMPNext(); \
}
#endif /* FROZEN_STACKS */
#endif /* YAPOR */
#endif /* FROZEN_STACKS */
#endif /* MULTIPLE_STACKS */
#define COUNT_TRUST_LOGICAL_END \
BLOCK = (CELL)COUNT_TRUST_LOGICAL_END;