checking for frozen segments in the trail stack in now done using the
macro IN_BETWEEN(Yap_TrailBase, ref, Yap_TrailTop)
This commit is contained in:
parent
df6b9a8511
commit
ee0022bb47
4
C/exec.c
4
C/exec.c
@ -1614,8 +1614,8 @@ Yap_InitYaamRegs(void)
|
||||
#ifdef SBA
|
||||
BSEG =
|
||||
#endif /* SBA */
|
||||
BBREG = B_FZ = B_BASE;
|
||||
TR = TR_FZ = TR_BASE;
|
||||
BBREG = B_FZ = (choiceptr) Yap_LocalBase;
|
||||
TR = TR_FZ = (tr_fr_ptr) Yap_TrailBase;
|
||||
#endif /* FROZEN_STACKS */
|
||||
LOCK(SignalLock);
|
||||
CreepFlag = CalculateStackGap();
|
||||
|
@ -176,7 +176,7 @@ void Yap_init_local(void) {
|
||||
#ifdef YAPOR
|
||||
/* local data related to or-parallelism */
|
||||
LOCAL = REMOTE + worker_id;
|
||||
Set_LOCAL_top_cp(B_BASE);
|
||||
Set_LOCAL_top_cp((choiceptr) Yap_LocalBase);
|
||||
LOCAL_top_or_fr = GLOBAL_root_or_fr;
|
||||
LOCAL_load = 0;
|
||||
LOCAL_share_request = MAX_WORKERS;
|
||||
@ -193,7 +193,7 @@ void Yap_init_local(void) {
|
||||
LOCAL_top_sg_fr = NULL;
|
||||
LOCAL_top_dep_fr = GLOBAL_root_dep_fr;
|
||||
#ifdef YAPOR
|
||||
Set_LOCAL_top_cp_on_stack(B_BASE); /* ??? */
|
||||
Set_LOCAL_top_cp_on_stack((choiceptr) Yap_LocalBase); /* ??? */
|
||||
LOCAL_top_susp_or_fr = GLOBAL_root_or_fr;
|
||||
#endif /* YAPOR */
|
||||
#endif /* TABLING */
|
||||
@ -210,7 +210,7 @@ void make_root_frames(void) {
|
||||
INIT_LOCK(OrFr_lock(or_fr));
|
||||
OrFr_alternative(or_fr) = NULL;
|
||||
BITMAP_copy(OrFr_members(or_fr), GLOBAL_bm_present_workers);
|
||||
SetOrFr_node(or_fr, B_BASE);
|
||||
SetOrFr_node(or_fr, (choiceptr) Yap_LocalBase);
|
||||
OrFr_nearest_livenode(or_fr) = NULL;
|
||||
OrFr_depth(or_fr) = 0;
|
||||
Set_OrFr_pend_prune_cp(or_fr, NULL);
|
||||
|
@ -29,10 +29,6 @@
|
||||
|
||||
extern int Yap_page_size;
|
||||
|
||||
#define H_BASE ((CELL *) Yap_GlobalBase)
|
||||
#define B_BASE ((choiceptr) Yap_LocalBase)
|
||||
#define TR_BASE ((tr_fr_ptr) Yap_TrailBase)
|
||||
|
||||
#if SIZEOF_INT_P == 4
|
||||
#define ALIGN 3
|
||||
#define ALIGNMASK 0xfffffffc
|
||||
|
@ -79,7 +79,7 @@ void make_root_choice_point(void) {
|
||||
|
||||
void free_root_choice_point(void) {
|
||||
B = LOCAL_top_cp->cp_b;
|
||||
LOCAL_top_cp = B_BASE;
|
||||
LOCAL_top_cp = (choiceptr) Yap_LocalBase;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -123,7 +123,7 @@ void free_root_choice_point(void) {
|
||||
#ifdef TABLING
|
||||
LOCAL_top_cp_on_stack =
|
||||
#endif /* TABLING */
|
||||
LOCAL_top_cp = GLOBAL_root_cp = OrFr_node(GLOBAL_root_or_fr) = B_BASE;
|
||||
LOCAL_top_cp = GLOBAL_root_cp = OrFr_node(GLOBAL_root_or_fr) = (choiceptr) Yap_LocalBase;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -224,13 +224,13 @@ int q_share_work(int worker_p) {
|
||||
RESET_VARIABLE(aux_cell);
|
||||
#ifdef TABLING
|
||||
} else if (IsPairTerm(aux_cell)) {
|
||||
/* avoid frozen segments */
|
||||
aux_cell = (CELL) RepPair(aux_cell);
|
||||
if ((ADDR) aux_cell >= TrailBase) {
|
||||
if (IN_BETWEEN(Yap_TrailBase, aux_cell, Yap_TrailTop)) {
|
||||
/* avoid frozen segments */
|
||||
TR = (tr_fr_ptr) aux_cell;
|
||||
#ifdef TABLING_ERRORS
|
||||
if (TR > (tr_fr_ptr) TrailTop)
|
||||
TABLING_ERROR_MESSAGE("TR > TrailTop (q_share_work)");
|
||||
if (TR > (tr_fr_ptr) Yap_TrailTop)
|
||||
TABLING_ERROR_MESSAGE("TR > Yap_TrailTop (q_share_work)");
|
||||
if (TR < aux_tr)
|
||||
TABLING_ERROR_MESSAGE("TR < aux_tr (q_share_work)");
|
||||
#endif /* TABLING_ERRORS */
|
||||
@ -338,9 +338,9 @@ sync_with_p:
|
||||
}
|
||||
#ifdef TABLING
|
||||
} else if (IsPairTerm(aux_cell)) {
|
||||
/* avoid frozen segments */
|
||||
aux_cell = (CELL) RepPair(aux_cell);
|
||||
if ((ADDR) aux_cell >= TrailBase)
|
||||
if (IN_BETWEEN(Yap_TrailBase, aux_cell, Yap_TrailTop)) {
|
||||
/* avoid frozen segments */
|
||||
aux_tr = (tr_fr_ptr) aux_cell;
|
||||
#endif /* TABLING */
|
||||
#ifdef MULTI_ASSIGNMENT_VARIABLES
|
||||
|
@ -103,9 +103,9 @@ void make_root_choice_point(void) {
|
||||
LOCAL_load = 0;
|
||||
LOCAL_prune_request = NULL;
|
||||
BRANCH(worker_id, 0) = 0;
|
||||
H_FZ = H_BASE;
|
||||
B_FZ = B_BASE;
|
||||
TR_FZ = TR_BASE;
|
||||
H_FZ = (CELL *) Yap_GlobalBase;
|
||||
B_FZ = (choiceptr) Yap_LocalBase;
|
||||
TR_FZ = (tr_fr_ptr) Yap_TrailBase;
|
||||
}
|
||||
|
||||
|
||||
@ -113,10 +113,10 @@ void free_root_choice_point(void) {
|
||||
reset_trail(LOCAL_top_cp->cp_tr, TR);
|
||||
TR = LOCAL_top_cp->cp_tr;
|
||||
B = LOCAL_top_cp->cp_b;
|
||||
LOCAL_top_cp = B_BASE;
|
||||
H_FZ = H_BASE;
|
||||
B_FZ = B_BASE;
|
||||
TR_FZ = TR_BASE;
|
||||
LOCAL_top_cp = (choiceptr) Yap_LocalBase;
|
||||
H_FZ = (CELL *) Yap_GlobalBase;
|
||||
B_FZ = (choiceptr) Yap_LocalBase;
|
||||
TR_FZ = (tr_fr_ptr) Yap_TrailBase;
|
||||
}
|
||||
|
||||
|
||||
|
@ -96,11 +96,11 @@ void make_root_choice_point(void) {
|
||||
void free_root_choice_point(void) {
|
||||
B = Get_LOCAL_top_cp()->cp_b;
|
||||
#ifdef TABLING
|
||||
Set_LOCAL_top_cp_on_stack(B_BASE);
|
||||
Set_LOCAL_top_cp_on_stack((choiceptr) Yap_LocalBase);
|
||||
#endif /* TABLING */
|
||||
Set_GLOBAL_root_cp( B_BASE );
|
||||
Set_LOCAL_top_cp( B_BASE );
|
||||
SetOrFr_node(GLOBAL_root_or_fr, B_BASE);
|
||||
Set_GLOBAL_root_cp((choiceptr) Yap_LocalBase);
|
||||
Set_LOCAL_top_cp((choiceptr) Yap_LocalBase);
|
||||
SetOrFr_node(GLOBAL_root_or_fr, (choiceptr) Yap_LocalBase);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -492,7 +492,7 @@ void unbind_variables(tr_fr_ptr unbind_tr, tr_fr_ptr end_tr) {
|
||||
RESET_VARIABLE(ref);
|
||||
} else if (IsPairTerm(ref)) {
|
||||
ref = (CELL) RepPair(ref);
|
||||
if ((ADDR)ref >= Yap_TrailBase) {
|
||||
if (IN_BETWEEN(Yap_TrailBase, ref, Yap_TrailTop)) {
|
||||
/* avoid frozen segments */
|
||||
unbind_tr = (tr_fr_ptr) ref;
|
||||
#ifdef TABLING_ERRORS
|
||||
@ -531,7 +531,7 @@ void rebind_variables(tr_fr_ptr rebind_tr, tr_fr_ptr end_tr) {
|
||||
*((CELL *)ref) = TrailVal(rebind_tr);
|
||||
} else if (IsPairTerm(ref)) {
|
||||
ref = (CELL) RepPair(ref);
|
||||
if ((ADDR)ref >= Yap_TrailBase) {
|
||||
if (IN_BETWEEN(Yap_TrailBase, ref, Yap_TrailTop)) {
|
||||
/* avoid frozen segments */
|
||||
rebind_tr = (tr_fr_ptr) ref;
|
||||
#ifdef TABLING_ERRORS
|
||||
@ -575,7 +575,8 @@ void restore_bindings(tr_fr_ptr unbind_tr, tr_fr_ptr rebind_tr) {
|
||||
RESET_VARIABLE(ref);
|
||||
} else if (IsPairTerm(ref)) {
|
||||
ref = (CELL) RepPair(ref);
|
||||
if ((ADDR)ref >= Yap_TrailBase) {
|
||||
if (IN_BETWEEN(Yap_TrailBase, ref, Yap_TrailTop)) {
|
||||
/* avoid frozen segments */
|
||||
unbind_tr = (tr_fr_ptr) ref;
|
||||
#ifdef TABLING_ERRORS
|
||||
if (unbind_tr > (tr_fr_ptr) Yap_TrailTop)
|
||||
@ -601,7 +602,8 @@ void restore_bindings(tr_fr_ptr unbind_tr, tr_fr_ptr rebind_tr) {
|
||||
ref = (CELL) TrailTerm(--end_tr);
|
||||
if (IsPairTerm(ref)) {
|
||||
ref = (CELL) RepPair(ref);
|
||||
if ((ADDR)ref >= Yap_TrailBase) {
|
||||
if (IN_BETWEEN(Yap_TrailBase, ref, Yap_TrailTop)) {
|
||||
/* avoid frozen segments */
|
||||
end_tr = (tr_fr_ptr) ref;
|
||||
#ifdef TABLING_ERRORS
|
||||
if (end_tr > (tr_fr_ptr) Yap_TrailTop)
|
||||
@ -618,7 +620,8 @@ void restore_bindings(tr_fr_ptr unbind_tr, tr_fr_ptr rebind_tr) {
|
||||
*((CELL *)ref) = TrailVal(rebind_tr);
|
||||
} else if (IsPairTerm(ref)) {
|
||||
ref = (CELL) RepPair(ref);
|
||||
if ((ADDR)ref >= Yap_TrailBase) {
|
||||
if (IN_BETWEEN(Yap_TrailBase, ref, Yap_TrailTop)) {
|
||||
/* avoid frozen segments */
|
||||
rebind_tr = (tr_fr_ptr) ref;
|
||||
#ifdef TABLING_ERRORS
|
||||
if (rebind_tr > (tr_fr_ptr) Yap_TrailTop)
|
||||
@ -818,9 +821,9 @@ void resume_frozen_cp(choiceptr frozen_cp) {
|
||||
|
||||
static inline
|
||||
void abolish_all_frozen_cps(void) {
|
||||
B_FZ = B_BASE;
|
||||
H_FZ = H_BASE;
|
||||
TR_FZ = TR_BASE;
|
||||
B_FZ = (choiceptr) Yap_LocalBase;
|
||||
H_FZ = (CELL *) Yap_GlobalBase;
|
||||
TR_FZ = (tr_fr_ptr) Yap_TrailBase;
|
||||
return;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user