diff --git a/packages/prism/src/c/core/bpx.c b/packages/prism/src/c/core/bpx.c index eaa5bcf5c..e0eea2f00 100644 --- a/packages/prism/src/c/core/bpx.c +++ b/packages/prism/src/c/core/bpx.c @@ -127,10 +127,12 @@ bool bpx_is_identical(TERM t1, TERM t2) TERM bpx_get_call_arg(BPLONG i, BPLONG arity) { - if (i < 1 || i > arity) { - bpx_raise("index out of range"); - } - return ARG(i, arity); + CACHE_REGS + + if (i < 1 || i > arity) { + bpx_raise("index out of range"); + } + return ARG(i, arity); } BPLONG bpx_get_integer(TERM t) @@ -245,6 +247,7 @@ TERM bpx_get_cdr(TERM t) TERM bpx_build_var(void) { + CACHE_REGS TERM term; REQUIRE_HEAP(1); @@ -260,6 +263,7 @@ TERM bpx_build_integer(BPLONG n) TERM bpx_build_float(double x) { + CACHE_REGS REQUIRE_HEAP(4); return encodefloat1(x); } @@ -274,6 +278,7 @@ TERM bpx_build_atom(const char *name) TERM bpx_build_list(void) { + CACHE_REGS TERM term; REQUIRE_HEAP(2); @@ -290,6 +295,7 @@ TERM bpx_build_nil(void) TERM bpx_build_structure(const char *name, BPLONG arity) { + CACHE_REGS SYM_REC_PTR sym; TERM term; @@ -314,6 +320,7 @@ bool bpx_unify(TERM t1, TERM t2) TERM bpx_string_2_term(const char *s) { + CACHE_REGS TERM term, vars; int result; diff --git a/packages/prism/src/c/core/bpx.h b/packages/prism/src/c/core/bpx.h index 451841425..f15f36704 100644 --- a/packages/prism/src/c/core/bpx.h +++ b/packages/prism/src/c/core/bpx.h @@ -80,6 +80,27 @@ long int XTAG(TERM t) } } +extern inline TERM ADDTAG(void * t,int tag); +extern inline int is_UNIFIABLE(TERM t1, TERM t2); +extern inline int is_IDENTICAL(TERM t1, TERM t2); +extern inline char *bp_term_2_string(TERM t); +extern inline int bp_string_2_term(const char *s, TERM to, TERM tv); +extern inline SYM_REC_PTR insert(const char *name, int size, int arity); +extern inline int compare(TERM t1, TERM t2); +extern inline void write_term(TERM t); +extern inline void numberVarTermOpt(TERM t); +extern inline TERM unnumberVarTerm(TERM t, BPLONG_PTR pt1, BPLONG_PTR pt2); +extern inline int unifyNumberedTerms(TERM t1, TERM t2); + +int bpx_call_term(TERM t); +int bpx_call_string(const char *s); +int bpx_call_string(const char *s); +int bpx_mount_query_string(const char *s); +int bpx_next_solution(void); +void bpx_write(TERM t); +int bpx_printf(const char *fmt, ...); + + extern inline TERM ADDTAG(void * t,int tag) { if (tag == ATM) return MkAtomTerm((Atom)t); @@ -210,13 +231,13 @@ list_length(BPLONG t1, BPLONG t2) #define PRE_NUMBER_VAR(X) -static inline void +extern inline void numberVarTermOpt(TERM t) { YAP_NumberVars(t, 0); } -static inline TERM +extern inline TERM unnumberVarTerm(TERM t, BPLONG_PTR pt1, BPLONG_PTR pt2) { return YAP_UnNumberVars(t); diff --git a/packages/prism/src/c/core/idtable.c b/packages/prism/src/c/core/idtable.c index ed1bac53f..f9cb9acdd 100644 --- a/packages/prism/src/c/core/idtable.c +++ b/packages/prism/src/c/core/idtable.c @@ -170,6 +170,7 @@ int id_table_count(const ID_TABLE *this) TERM unnumber_var_term(TERM term) { + CACHE_REGS BPLONG mvn = -1; return unnumberVarTerm(term, local_top, &mvn); } diff --git a/packages/prism/src/c/core/idtable_preds.c b/packages/prism/src/c/core/idtable_preds.c index 8f0c1e802..9d364d2f5 100644 --- a/packages/prism/src/c/core/idtable_preds.c +++ b/packages/prism/src/c/core/idtable_preds.c @@ -15,6 +15,38 @@ char * bp_term_2_string(TERM); /* unify.c */ int unify(TERM, TERM); +int prism_goal_id_register(TERM term); +int prism_sw_id_register(TERM term); +int prism_sw_ins_id_register(TERM term); +int prism_goal_id_get(TERM term); +int prism_sw_id_get(TERM term); +int prism_sw_ins_id_get(TERM term); +int prism_goal_count(void); +int prism_sw_count(void); +int prism_sw_ins_count(void); +TERM prism_goal_term(IDNUM i); +TERM prism_sw_term(IDNUM i); +TERM prism_sw_ins_term(IDNUM i); +char * prism_goal_string(IDNUM i); +char * prism_sw_string(IDNUM i); +char * prism_sw_ins_string(IDNUM i); +char * copy_prism_goal_string(IDNUM i); +char * copy_prism_sw_string(IDNUM i); +char * copy_prism_sw_ins_string(IDNUM i); +int pc_prism_id_table_init_0(void); +int pc_prism_goal_id_register_2(void); +int pc_prism_sw_id_register_2(void); +int pc_prism_sw_ins_id_register_2(void); +int pc_prism_goal_id_get_2(void); +int pc_prism_sw_id_get_2(void); +int pc_prism_sw_ins_id_get_2(void); +int pc_prism_goal_count_1(void); +int pc_prism_sw_count_1(void); +int pc_prism_sw_ins_count_1(void); +int pc_prism_goal_term_2(void); +int pc_prism_sw_term_2(void); +int pc_prism_sw_ins_term_2(void); + /*--------------------------------------------------------------------*/ int prism_goal_id_register(TERM term) @@ -125,6 +157,7 @@ int pc_prism_id_table_init_0(void) int pc_prism_goal_id_register_2(void) { + CACHE_REGS TERM term; IDNUM id; @@ -137,6 +170,7 @@ int pc_prism_goal_id_register_2(void) int pc_prism_sw_id_register_2(void) { + CACHE_REGS TERM term; IDNUM id; @@ -149,6 +183,7 @@ int pc_prism_sw_id_register_2(void) int pc_prism_sw_ins_id_register_2(void) { + CACHE_REGS TERM term; IDNUM id; @@ -161,6 +196,7 @@ int pc_prism_sw_ins_id_register_2(void) int pc_prism_goal_id_get_2(void) { + CACHE_REGS TERM term; IDNUM id; @@ -175,6 +211,7 @@ int pc_prism_goal_id_get_2(void) int pc_prism_sw_id_get_2(void) { + CACHE_REGS TERM term; IDNUM id; @@ -188,6 +225,7 @@ int pc_prism_sw_id_get_2(void) int pc_prism_sw_ins_id_get_2(void) { + CACHE_REGS TERM term; IDNUM id; @@ -201,21 +239,25 @@ int pc_prism_sw_ins_id_get_2(void) int pc_prism_goal_count_1(void) { + CACHE_REGS return unify(MAKEINT(prism_goal_count()), ARG(1,1)); } int pc_prism_sw_count_1(void) { + CACHE_REGS return unify(MAKEINT(prism_sw_count()), ARG(1,1)); } int pc_prism_sw_ins_count_1(void) { + CACHE_REGS return unify(MAKEINT(prism_sw_ins_count()), ARG(1,1)); } int pc_prism_goal_term_2(void) { + CACHE_REGS TERM id, term; id = ARG(1,2); @@ -227,6 +269,7 @@ int pc_prism_goal_term_2(void) int pc_prism_sw_term_2(void) { + CACHE_REGS TERM id, term; id = ARG(1,2); @@ -239,6 +282,7 @@ int pc_prism_sw_term_2(void) int pc_prism_sw_ins_term_2(void) { + CACHE_REGS TERM id, term; id = ARG(1,2); diff --git a/packages/prism/src/c/core/random.c b/packages/prism/src/c/core/random.c index 97c30f232..43cca4e81 100644 --- a/packages/prism/src/c/core/random.c +++ b/packages/prism/src/c/core/random.c @@ -247,18 +247,21 @@ double random_gaussian(void) int pc_random_auto_seed_1(void) { + CACHE_REGS BPLONG seed = (BPLONG)(time(NULL)); return bpx_unify(ARG(1,1), bpx_build_integer(seed)); } int pc_random_init_by_seed_1(void) { + CACHE_REGS init_genrand((unsigned long)(bpx_get_integer(ARG(1,1)))); return BP_TRUE; } int pc_random_init_by_list_1(void) { + CACHE_REGS unsigned long *seed; TERM t, u; @@ -278,16 +281,19 @@ int pc_random_init_by_list_1(void) int pc_random_float_1(void) { + CACHE_REGS return bpx_unify(ARG(1,1), bpx_build_float(random_float())); } int pc_random_gaussian_1(void) { + CACHE_REGS return bpx_unify(ARG(1,1), bpx_build_float(random_gaussian(0.0,1.0))); } int pc_random_int_2(void) { + CACHE_REGS int n_max = bpx_get_integer(ARG(1,2)); int n_out = random_int(n_max); return bpx_unify(ARG(2,2), bpx_build_integer((BPLONG)(n_out))); @@ -295,6 +301,7 @@ int pc_random_int_2(void) int pc_random_int_3(void) { + CACHE_REGS int n_min = bpx_get_integer(ARG(1,3)); int n_max = bpx_get_integer(ARG(2,3)); int n_out = random_int(n_max - n_min + 1) + n_min; @@ -305,6 +312,7 @@ int pc_random_int_3(void) int pc_random_get_state_1(void) { + CACHE_REGS int i, j; TERM t, u; unsigned long temp; @@ -333,6 +341,7 @@ int pc_random_get_state_1(void) int pc_random_set_state_1(void) { + CACHE_REGS int i, j; TERM term; unsigned long temp; diff --git a/packages/prism/src/c/core/termpool.c b/packages/prism/src/c/core/termpool.c index 565ef17ed..45a803193 100644 --- a/packages/prism/src/c/core/termpool.c +++ b/packages/prism/src/c/core/termpool.c @@ -62,6 +62,7 @@ static ptrdiff_t trail_pos0 = 0; static void number_vars(TERM term) { + CACHE_REGS assert(trail_pos0 == 0); trail_pos0 = trail_up_addr - trail_top; @@ -75,6 +76,7 @@ static void number_vars(TERM term) static void revert_vars(void) { + CACHE_REGS BPLONG_PTR trail_top0; assert(trail_pos0 != 0); @@ -90,6 +92,7 @@ static void revert_vars(void) */ static BPULONG prism_hash_value(TERM term) { + CACHE_REGS TERM t, *rest; BPLONG i, n; SYM_REC_PTR sym; diff --git a/packages/prism/src/c/up/graph.c b/packages/prism/src/c/up/graph.c index 385e25cc4..c64d048ee 100644 --- a/packages/prism/src/c/up/graph.c +++ b/packages/prism/src/c/up/graph.c @@ -770,6 +770,7 @@ int pc_get_snode_expectation_2(void) int pc_import_occ_switches_3(void) { + CACHE_REGS TERM p_sw_list,p_sw_list0,p_sw_list1; TERM p_sw_ins_list0,p_sw_ins_list1,sw,sw_ins; TERM p_num_sw, p_num_sw_ins;