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:
Ricardo Rocha 2010-03-12 20:02:32 +00:00
parent df6b9a8511
commit ee0022bb47
8 changed files with 35 additions and 36 deletions

View File

@ -1614,8 +1614,8 @@ Yap_InitYaamRegs(void)
#ifdef SBA #ifdef SBA
BSEG = BSEG =
#endif /* SBA */ #endif /* SBA */
BBREG = B_FZ = B_BASE; BBREG = B_FZ = (choiceptr) Yap_LocalBase;
TR = TR_FZ = TR_BASE; TR = TR_FZ = (tr_fr_ptr) Yap_TrailBase;
#endif /* FROZEN_STACKS */ #endif /* FROZEN_STACKS */
LOCK(SignalLock); LOCK(SignalLock);
CreepFlag = CalculateStackGap(); CreepFlag = CalculateStackGap();

View File

@ -176,7 +176,7 @@ void Yap_init_local(void) {
#ifdef YAPOR #ifdef YAPOR
/* local data related to or-parallelism */ /* local data related to or-parallelism */
LOCAL = REMOTE + worker_id; 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_top_or_fr = GLOBAL_root_or_fr;
LOCAL_load = 0; LOCAL_load = 0;
LOCAL_share_request = MAX_WORKERS; LOCAL_share_request = MAX_WORKERS;
@ -193,7 +193,7 @@ void Yap_init_local(void) {
LOCAL_top_sg_fr = NULL; LOCAL_top_sg_fr = NULL;
LOCAL_top_dep_fr = GLOBAL_root_dep_fr; LOCAL_top_dep_fr = GLOBAL_root_dep_fr;
#ifdef YAPOR #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; LOCAL_top_susp_or_fr = GLOBAL_root_or_fr;
#endif /* YAPOR */ #endif /* YAPOR */
#endif /* TABLING */ #endif /* TABLING */
@ -210,7 +210,7 @@ void make_root_frames(void) {
INIT_LOCK(OrFr_lock(or_fr)); INIT_LOCK(OrFr_lock(or_fr));
OrFr_alternative(or_fr) = NULL; OrFr_alternative(or_fr) = NULL;
BITMAP_copy(OrFr_members(or_fr), GLOBAL_bm_present_workers); 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_nearest_livenode(or_fr) = NULL;
OrFr_depth(or_fr) = 0; OrFr_depth(or_fr) = 0;
Set_OrFr_pend_prune_cp(or_fr, NULL); Set_OrFr_pend_prune_cp(or_fr, NULL);

View File

@ -29,10 +29,6 @@
extern int Yap_page_size; 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 #if SIZEOF_INT_P == 4
#define ALIGN 3 #define ALIGN 3
#define ALIGNMASK 0xfffffffc #define ALIGNMASK 0xfffffffc

View File

@ -79,7 +79,7 @@ void make_root_choice_point(void) {
void free_root_choice_point(void) { void free_root_choice_point(void) {
B = LOCAL_top_cp->cp_b; B = LOCAL_top_cp->cp_b;
LOCAL_top_cp = B_BASE; LOCAL_top_cp = (choiceptr) Yap_LocalBase;
return; return;
} }

View File

@ -123,7 +123,7 @@ void free_root_choice_point(void) {
#ifdef TABLING #ifdef TABLING
LOCAL_top_cp_on_stack = LOCAL_top_cp_on_stack =
#endif /* TABLING */ #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; return;
} }
@ -224,13 +224,13 @@ int q_share_work(int worker_p) {
RESET_VARIABLE(aux_cell); RESET_VARIABLE(aux_cell);
#ifdef TABLING #ifdef TABLING
} else if (IsPairTerm(aux_cell)) { } else if (IsPairTerm(aux_cell)) {
/* avoid frozen segments */
aux_cell = (CELL) RepPair(aux_cell); 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; TR = (tr_fr_ptr) aux_cell;
#ifdef TABLING_ERRORS #ifdef TABLING_ERRORS
if (TR > (tr_fr_ptr) TrailTop) if (TR > (tr_fr_ptr) Yap_TrailTop)
TABLING_ERROR_MESSAGE("TR > TrailTop (q_share_work)"); TABLING_ERROR_MESSAGE("TR > Yap_TrailTop (q_share_work)");
if (TR < aux_tr) if (TR < aux_tr)
TABLING_ERROR_MESSAGE("TR < aux_tr (q_share_work)"); TABLING_ERROR_MESSAGE("TR < aux_tr (q_share_work)");
#endif /* TABLING_ERRORS */ #endif /* TABLING_ERRORS */
@ -338,9 +338,9 @@ sync_with_p:
} }
#ifdef TABLING #ifdef TABLING
} else if (IsPairTerm(aux_cell)) { } else if (IsPairTerm(aux_cell)) {
/* avoid frozen segments */
aux_cell = (CELL) RepPair(aux_cell); 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; aux_tr = (tr_fr_ptr) aux_cell;
#endif /* TABLING */ #endif /* TABLING */
#ifdef MULTI_ASSIGNMENT_VARIABLES #ifdef MULTI_ASSIGNMENT_VARIABLES

View File

@ -103,9 +103,9 @@ void make_root_choice_point(void) {
LOCAL_load = 0; LOCAL_load = 0;
LOCAL_prune_request = NULL; LOCAL_prune_request = NULL;
BRANCH(worker_id, 0) = 0; BRANCH(worker_id, 0) = 0;
H_FZ = H_BASE; H_FZ = (CELL *) Yap_GlobalBase;
B_FZ = B_BASE; B_FZ = (choiceptr) Yap_LocalBase;
TR_FZ = TR_BASE; 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); reset_trail(LOCAL_top_cp->cp_tr, TR);
TR = LOCAL_top_cp->cp_tr; TR = LOCAL_top_cp->cp_tr;
B = LOCAL_top_cp->cp_b; B = LOCAL_top_cp->cp_b;
LOCAL_top_cp = B_BASE; LOCAL_top_cp = (choiceptr) Yap_LocalBase;
H_FZ = H_BASE; H_FZ = (CELL *) Yap_GlobalBase;
B_FZ = B_BASE; B_FZ = (choiceptr) Yap_LocalBase;
TR_FZ = TR_BASE; TR_FZ = (tr_fr_ptr) Yap_TrailBase;
} }

View File

@ -96,11 +96,11 @@ void make_root_choice_point(void) {
void free_root_choice_point(void) { void free_root_choice_point(void) {
B = Get_LOCAL_top_cp()->cp_b; B = Get_LOCAL_top_cp()->cp_b;
#ifdef TABLING #ifdef TABLING
Set_LOCAL_top_cp_on_stack(B_BASE); Set_LOCAL_top_cp_on_stack((choiceptr) Yap_LocalBase);
#endif /* TABLING */ #endif /* TABLING */
Set_GLOBAL_root_cp( B_BASE ); Set_GLOBAL_root_cp((choiceptr) Yap_LocalBase);
Set_LOCAL_top_cp( B_BASE ); Set_LOCAL_top_cp((choiceptr) Yap_LocalBase);
SetOrFr_node(GLOBAL_root_or_fr, B_BASE); SetOrFr_node(GLOBAL_root_or_fr, (choiceptr) Yap_LocalBase);
return; return;
} }

View File

@ -492,7 +492,7 @@ void unbind_variables(tr_fr_ptr unbind_tr, tr_fr_ptr end_tr) {
RESET_VARIABLE(ref); RESET_VARIABLE(ref);
} else if (IsPairTerm(ref)) { } else if (IsPairTerm(ref)) {
ref = (CELL) RepPair(ref); ref = (CELL) RepPair(ref);
if ((ADDR)ref >= Yap_TrailBase) { if (IN_BETWEEN(Yap_TrailBase, ref, Yap_TrailTop)) {
/* avoid frozen segments */ /* avoid frozen segments */
unbind_tr = (tr_fr_ptr) ref; unbind_tr = (tr_fr_ptr) ref;
#ifdef TABLING_ERRORS #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); *((CELL *)ref) = TrailVal(rebind_tr);
} else if (IsPairTerm(ref)) { } else if (IsPairTerm(ref)) {
ref = (CELL) RepPair(ref); ref = (CELL) RepPair(ref);
if ((ADDR)ref >= Yap_TrailBase) { if (IN_BETWEEN(Yap_TrailBase, ref, Yap_TrailTop)) {
/* avoid frozen segments */ /* avoid frozen segments */
rebind_tr = (tr_fr_ptr) ref; rebind_tr = (tr_fr_ptr) ref;
#ifdef TABLING_ERRORS #ifdef TABLING_ERRORS
@ -575,7 +575,8 @@ void restore_bindings(tr_fr_ptr unbind_tr, tr_fr_ptr rebind_tr) {
RESET_VARIABLE(ref); RESET_VARIABLE(ref);
} else if (IsPairTerm(ref)) { } else if (IsPairTerm(ref)) {
ref = (CELL) RepPair(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; unbind_tr = (tr_fr_ptr) ref;
#ifdef TABLING_ERRORS #ifdef TABLING_ERRORS
if (unbind_tr > (tr_fr_ptr) Yap_TrailTop) 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); ref = (CELL) TrailTerm(--end_tr);
if (IsPairTerm(ref)) { if (IsPairTerm(ref)) {
ref = (CELL) RepPair(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; end_tr = (tr_fr_ptr) ref;
#ifdef TABLING_ERRORS #ifdef TABLING_ERRORS
if (end_tr > (tr_fr_ptr) Yap_TrailTop) 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); *((CELL *)ref) = TrailVal(rebind_tr);
} else if (IsPairTerm(ref)) { } else if (IsPairTerm(ref)) {
ref = (CELL) RepPair(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; rebind_tr = (tr_fr_ptr) ref;
#ifdef TABLING_ERRORS #ifdef TABLING_ERRORS
if (rebind_tr > (tr_fr_ptr) Yap_TrailTop) if (rebind_tr > (tr_fr_ptr) Yap_TrailTop)
@ -818,9 +821,9 @@ void resume_frozen_cp(choiceptr frozen_cp) {
static inline static inline
void abolish_all_frozen_cps(void) { void abolish_all_frozen_cps(void) {
B_FZ = B_BASE; B_FZ = (choiceptr) Yap_LocalBase;
H_FZ = H_BASE; H_FZ = (CELL *) Yap_GlobalBase;
TR_FZ = TR_BASE; TR_FZ = (tr_fr_ptr) Yap_TrailBase;
return; return;
} }