From ee0022bb47dbecbacc890066809e563783d25668 Mon Sep 17 00:00:00 2001 From: Ricardo Rocha Date: Fri, 12 Mar 2010 20:02:32 +0000 Subject: [PATCH] checking for frozen segments in the trail stack in now done using the macro IN_BETWEEN(Yap_TrailBase, ref, Yap_TrailTop) --- C/exec.c | 4 ++-- OPTYap/opt.init.c | 6 +++--- OPTYap/opt.macros.h | 4 ---- OPTYap/or.cowengine.c | 2 +- OPTYap/or.engine.c | 14 +++++++------- OPTYap/or.sbaengine.c | 14 +++++++------- OPTYap/or.threadengine.c | 8 ++++---- OPTYap/tab.macros.h | 19 +++++++++++-------- 8 files changed, 35 insertions(+), 36 deletions(-) diff --git a/C/exec.c b/C/exec.c index 91da5760c..b7a14bd5b 100644 --- a/C/exec.c +++ b/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(); diff --git a/OPTYap/opt.init.c b/OPTYap/opt.init.c index 6dfbae84f..3e579399b 100644 --- a/OPTYap/opt.init.c +++ b/OPTYap/opt.init.c @@ -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); diff --git a/OPTYap/opt.macros.h b/OPTYap/opt.macros.h index 0064feaa4..f52595e2e 100644 --- a/OPTYap/opt.macros.h +++ b/OPTYap/opt.macros.h @@ -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 diff --git a/OPTYap/or.cowengine.c b/OPTYap/or.cowengine.c index 3ac324071..4bf967cb0 100644 --- a/OPTYap/or.cowengine.c +++ b/OPTYap/or.cowengine.c @@ -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; } diff --git a/OPTYap/or.engine.c b/OPTYap/or.engine.c index 6bb5ed7f9..f0ac8a2d7 100644 --- a/OPTYap/or.engine.c +++ b/OPTYap/or.engine.c @@ -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 diff --git a/OPTYap/or.sbaengine.c b/OPTYap/or.sbaengine.c index 28dc49391..36c686e5c 100644 --- a/OPTYap/or.sbaengine.c +++ b/OPTYap/or.sbaengine.c @@ -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; } diff --git a/OPTYap/or.threadengine.c b/OPTYap/or.threadengine.c index 194d75946..62dc5774f 100644 --- a/OPTYap/or.threadengine.c +++ b/OPTYap/or.threadengine.c @@ -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; } diff --git a/OPTYap/tab.macros.h b/OPTYap/tab.macros.h index 906665ede..da22d394f 100644 --- a/OPTYap/tab.macros.h +++ b/OPTYap/tab.macros.h @@ -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; }