23#if defined(SUBGOAL_TRIE_LOCK_AT_ENTRY_LEVEL) || defined(THREADS_NO_SHARING)
31#ifdef MODE_DIRECTED_TABLING
32 int* mode_directed_array;
34#ifdef THREADS_NO_SHARING
43#define TabEnt_lock(X) ((X)->lock)
44#define TabEnt_pe(X) ((X)->pred_entry)
45#define TabEnt_atom(X) ((X)->pred_atom)
46#define TabEnt_arity(X) ((X)->pred_arity)
47#define TabEnt_flags(X) ((X)->pred_flags)
48#define TabEnt_mode(X) ((X)->execution_mode)
49#define TabEnt_mode_directed(X) ((X)->mode_directed_array)
50#define TabEnt_subgoal_trie(X) ((X)->subgoal_trie)
51#define TabEnt_hash_chain(X) ((X)->hash_chain)
52#define TabEnt_next(X) ((X)->next)
65#ifdef SUBGOAL_TRIE_LOCK_USING_NODE_FIELD
71 OPCODE trie_instruction;
79#ifdef ANSWER_TRIE_LOCK_USING_NODE_FIELD
89#ifdef GLOBAL_TRIE_LOCK_USING_NODE_FIELD
94#define TrNode_instr(X) ((X)->trie_instruction)
95#define TrNode_or_arg(X) ((X)->or_arg)
96#define TrNode_entry(X) ((X)->entry)
97#define TrNode_parent(X) ((X)->parent)
98#define TrNode_child(X) ((X)->child)
99#define TrNode_sg_fr(X) ((X)->child)
100#define TrNode_sg_ent(X) ((X)->child)
101#define TrNode_next(X) ((X)->next)
102#define TrNode_lock(X) ((X)->lock)
110#ifdef THREADS_FULL_SHARING
111typedef struct answer_ref_node {
113 struct answer_ref_node *next;
114 struct answer_ref_node *previous;
118#define RefNode_answer(X) ((X)->ans_node)
119#define RefNode_next(X) ((X)->next)
120#define RefNode_previous(X) ((X)->previous)
132 int number_of_buckets;
135#ifdef USE_PAGES_MALLOC
144 int number_of_buckets;
147#ifdef MODE_DIRECTED_TABLING
157 int number_of_buckets;
160#ifdef USE_PAGES_MALLOC
165#define Hash_mark(X) ((X)->mark)
166#define Hash_num_buckets(X) ((X)->number_of_buckets)
167#define Hash_buckets(X) ((X)->buckets)
168#define Hash_num_nodes(X) ((X)->number_of_nodes)
169#define Hash_previous(X) ((X)->previous)
170#define Hash_next(X) ((X)->next)
186#ifdef LOW_LEVEL_TRACER
191#ifdef DETERMINISTIC_TABLING
192struct deterministic_generator_choicept {
193 struct deterministic_choicept cp;
195#ifdef LOW_LEVEL_TRACER
204#ifdef LOW_LEVEL_TRACER
212#ifdef LOW_LEVEL_TRACER
241#if defined(YAPOR) || defined(THREADS_FULL_SHARING) || defined(THREADS_CONSUMER_SHARING)
244 yamop *code_of_subgoal;
249#ifdef MODE_DIRECTED_TABLING
250 int* mode_directed_array;
253#ifdef INCOMPLETE_TABLING
260 struct or_frame *top_or_frame_on_generator_branch;
262#if defined(YAPOR) || defined(THREADS_CONSUMER_SHARING)
263 int generator_worker;
265#if defined(THREADS_FULL_SHARING) || defined(THREADS_CONSUMER_SHARING)
266 subgoal_state_flag state_flag;
272#define SgEnt_lock(X) ((X)->lock)
273#define SgEnt_code(X) ((X)->code_of_subgoal)
274#define SgEnt_tab_ent(X) (((X)->code_of_subgoal)->y_u.Otapl.te)
275#define SgEnt_arity(X) (((X)->code_of_subgoal)->y_u.Otapl.s)
276#define SgEnt_hash_chain(X) ((X)->hash_chain)
277#define SgEnt_answer_trie(X) ((X)->answer_trie)
278#define SgEnt_first_answer(X) ((X)->first_answer)
279#define SgEnt_last_answer(X) ((X)->last_answer)
280#define SgEnt_mode_directed(X) ((X)->mode_directed_array)
281#define SgEnt_invalid_chain(X) ((X)->invalid_chain)
282#define SgEnt_try_answer(X) ((X)->try_answer)
283#define SgEnt_previous(X) ((X)->previous)
284#define SgEnt_gen_top_or_fr(X) ((X)->top_or_frame_on_generator_branch)
285#define SgEnt_gen_worker(X) ((X)->generator_worker)
286#define SgEnt_sg_ent_state(X) ((X)->state_flag)
287#define SgEnt_active_workers(X) ((X)->active_workers)
288#define SgEnt_sg_fr(X) ((X)->subgoal_frame)
297#if defined(THREADS_FULL_SHARING) || defined(THREADS_CONSUMER_SHARING)
299#ifdef THREADS_FULL_SHARING
301 struct answer_ref_node *batched_cached_answers;
306 subgoal_state_flag state_flag;
312#if defined(THREADS_FULL_SHARING) || defined(THREADS_CONSUMER_SHARING)
313#define SUBGOAL_ENTRY(X) SgFr_sg_ent(X)->
315#define SUBGOAL_ENTRY(X) (X)->subgoal_entry.
317#define SgFr_lock(X) (SUBGOAL_ENTRY(X) lock)
318#define SgFr_code(X) (SUBGOAL_ENTRY(X) code_of_subgoal)
319#define SgFr_tab_ent(X) ((SUBGOAL_ENTRY(X) code_of_subgoal)->y_u.Otapl.te)
320#define SgFr_arity(X) ((SUBGOAL_ENTRY(X) code_of_subgoal)->y_u.Otapl.s)
321#define SgFr_hash_chain(X) (SUBGOAL_ENTRY(X) hash_chain)
322#define SgFr_answer_trie(X) (SUBGOAL_ENTRY(X) answer_trie)
323#define SgFr_first_answer(X) (SUBGOAL_ENTRY(X) first_answer)
324#define SgFr_last_answer(X) (SUBGOAL_ENTRY(X) last_answer)
325#define SgFr_mode_directed(X) (SUBGOAL_ENTRY(X) mode_directed_array)
326#define SgFr_invalid_chain(X) (SUBGOAL_ENTRY(X) invalid_chain)
327#define SgFr_try_answer(X) (SUBGOAL_ENTRY(X) try_answer)
328#define SgFr_previous(X) (SUBGOAL_ENTRY(X) previous)
329#define SgFr_gen_top_or_fr(X) (SUBGOAL_ENTRY(X) top_or_frame_on_generator_branch)
330#define SgFr_gen_worker(X) (SUBGOAL_ENTRY(X) generator_worker)
331#define SgFr_sg_ent_state(X) (SUBGOAL_ENTRY(X) state_flag)
332#define SgFr_active_workers(X) (SUBGOAL_ENTRY(X) active_workers)
334#define SgFr_sg_ent(X) ((X)->subgoal_entry)
335#define SgFr_batched_last_answer(X) ((X)->batched_last_answer)
336#define SgFr_batched_cached_answers(X) ((X)->batched_cached_answers)
337#define SgFr_state(X) ((X)->state_flag)
338#define SgFr_gen_cp(X) ((X)->generator_choice_point)
339#define SgFr_next(X) ((X)->next)
384 int leader_dependency_is_on_stack;
386#ifdef TIMESTAMP_CHECK
390#ifdef THREADS_CONSUMER_SHARING
391 int generator_is_external;
400#define DepFr_lock(X) ((X)->lock)
401#define DepFr_leader_dep_is_on_stack(X) ((X)->leader_dependency_is_on_stack)
402#define DepFr_top_or_fr(X) ((X)->top_or_frame)
403#define DepFr_timestamp(X) ((X)->timestamp)
404#define DepFr_external(X) ((X)->generator_is_external)
405#define DepFr_backchain_cp(X) ((X)->backchain_choice_point)
406#define DepFr_leader_cp(X) ((X)->leader_choice_point)
407#define DepFr_cons_cp(X) ((X)->consumer_choice_point)
408#define DepFr_last_answer(X) ((X)->last_consumed_answer)
409#define DepFr_next(X) ((X)->next)
440typedef struct suspension_frame {
441 struct or_frame *top_or_frame_on_stack;
444 struct suspended_block {
445 void *resume_register;
448 } global_block, local_block, trail_block;
449 struct suspension_frame *next;
453#define SuspFr_top_or_fr_on_stack(X) ((X)->top_or_frame_on_stack)
454#define SuspFr_top_dep_fr(X) ((X)->top_dependency_frame)
455#define SuspFr_top_sg_fr(X) ((X)->top_subgoal_frame)
456#define SuspFr_global_reg(X) ((X)->global_block.resume_register)
457#define SuspFr_global_start(X) ((X)->global_block.block_start)
458#define SuspFr_global_size(X) ((X)->global_block.block_size)
459#define SuspFr_local_reg(X) ((X)->local_block.resume_register)
460#define SuspFr_local_start(X) ((X)->local_block.block_start)
461#define SuspFr_local_size(X) ((X)->local_block.block_size)
462#define SuspFr_trail_reg(X) ((X)->trail_block.resume_register)
463#define SuspFr_trail_start(X) ((X)->trail_block.block_start)
464#define SuspFr_trail_size(X) ((X)->trail_block.block_size)
465#define SuspFr_next(X) ((X)->next)