diff --git a/C/amasm.c b/C/amasm.c index 1e5126d82..0a909ee86 100755 --- a/C/amasm.c +++ b/C/amasm.c @@ -3685,7 +3685,7 @@ do_pass(int pass_no, yamop **entry_codep, int assembling, int *clause_has_blobsp case count_retry_op: code_p = a_pl(_count_retry, (PredEntry *)(cip->cpc->rnd1), code_p, pass_no); break; - case fetch_args_for_bccall: + case fetch_args_for_bccall_op: if (cip->cpc->nextInst->op != bccall_op) { Yap_Error(INTERNAL_COMPILER_ERROR, TermNil, "compiling binary test", (int) cip->cpc->op); save_machine_regs(); diff --git a/C/compiler.c b/C/compiler.c index 897abbc35..087d0a0dd 100644 --- a/C/compiler.c +++ b/C/compiler.c @@ -447,7 +447,7 @@ c_var(Term t, Int argno, unsigned int arity, unsigned int level, compiler_struct } break; case bt1_flag: - Yap_emit(fetch_args_for_bccall, t, 0, &cglobs->cint); + Yap_emit(fetch_args_for_bccall_op, t, 0, &cglobs->cint); break; case bt2_flag: Yap_emit(bccall_op, t, (CELL)cglobs->current_p0, &cglobs->cint); @@ -2196,7 +2196,7 @@ usesvar(compiler_vm_op ic) case save_pair_op: case f_val_op: case f_var_op: - case fetch_args_for_bccall: + case fetch_args_for_bccall_op: case bccall_op: return TRUE; default: @@ -2963,7 +2963,7 @@ c_layout(compiler_struct *cglobs) case unify_s_var_op: case unify_s_val_op: #endif - case fetch_args_for_bccall: + case fetch_args_for_bccall_op: case bccall_op: checktemp(arg, rn, ic, cglobs); break; diff --git a/C/computils.c b/C/computils.c index 68efd847d..e7316161e 100644 --- a/C/computils.c +++ b/C/computils.c @@ -67,7 +67,7 @@ static char SccsId[] = "%W% %G%"; #endif #ifdef DEBUG -static void ShowOp(char *, struct PSEUDO *); +static void ShowOp(const char *, struct PSEUDO *); #endif /* DEBUG */ /* @@ -446,7 +446,7 @@ write_functor(Functor f) } static void -ShowOp (char *f, struct PSEUDO *cpc) +ShowOp (const char *f, struct PSEUDO *cpc) { char ch; Int arg = cpc->rnd1; @@ -468,6 +468,7 @@ ShowOp (char *f, struct PSEUDO *cpc) #endif case 'a': case 'n': + case 'S': Yap_DebugPlWrite ((Term) arg); break; case 'b': @@ -666,143 +667,286 @@ ShowOp (char *f, struct PSEUDO *cpc) Yap_DebugErrorPutc ('\n'); } -static char *opformat[] = -{ - "nop", - "get_var\t\t%v,%r", - "put_var\t\t%v,%r", - "get_val\t\t%v,%r", - "put_val\t\t%v,%r", - "get_atom\t%a,%r", - "put_atom\t%a,%r", - "get_num\t\t%n,%r", - "put_num\t\t%n,%r", - "get_float\t\t%w,%r", - "put_float\t\t%w,%r", - "get_dbterm\t%w,%r", - "put_dbterm\t%w,%r", - "get_longint\t\t%w,%r", - "put_longint\t\t%w,%r", - "get_bigint\t\t%l,%r", - "put_bigint\t\t%l,%r", - "get_list\t%r", - "put_list\t%r", - "get_struct\t%f,%r", - "put_struct\t%f,%r", - "put_unsafe\t%v,%r", - "unify_var\t%v", - "write_var\t%v", - "unify_val\t%v", - "write_val\t%v", - "unify_atom\t%a", - "write_atom\t%a", - "unify_num\t%n", - "write_num\t%n", - "unify_float\t%w", - "write_float\t%w", - "unify_dbterm\t%w", - "write_dbterm\t%w", - "unify_longint\t%w", - "write_longint\t%w", - "unify_bigint\t%l", - "write_bigint\t%l", - "unify_list", - "write_list", - "unify_struct\t%f", - "write_struct\t%f", - "write_unsafe\t%v", - "unify_local\t%v", - "write local\t%v", - "unify_last_list", - "write_last_list", - "unify_last_struct\t%f", - "write_last_struct\t%f", - "unify_last_var\t%v", - "unify_last_val\t%v", - "unify_last_local\t%v", - "unify_last_atom\t%a", - "unify_last_num\t%n", - "unify_last_float\t%w", - "unify_last_dbterm\t%w", - "unify_last_longint\t%w", - "unify_last_bigint\t%l", - "ensure_space", - "native_code", - "function_to_var\t%v,%B", - "function_to_val\t%v,%B", - "function_to_0\t%B", - "align_float", - "fail", - "cut", - "cutexit", - "allocate", - "deallocate", - "try_me_else\t\t%l\t%x", - "jump\t\t%l", - "jump\t\t%l", - "proceed", - "call\t\t%p,%d,%z", - "execute\t\t%p", - "sys\t\t%p", - "%l:", - "name\t\t%m,%d", - "pop\t\t%l", - "retry_me_else\t\t%l\t%x", - "trust_me_else_fail\t%x", - "either_me\t\t%l,%d,%z", - "or_else\t\t%l,%z", - "or_last", - "push_or", - "pushpop_or", - "pop_or", - "save_by\t\t%v", - "commit_by\t\t%v", - "patch_by\t\t%v", - "try\t\t%g\t%x", - "retry\t\t%g\t%x", - "trust\t\t%g\t%x", - "try_in\t\t%g\t%x", - "jump_if_var\t\t%g", - "jump_if_nonvar\t\t%g", - "cache_arg\t%r", - "cache_sub_arg\t%d", - "user_index", - "switch_on_type\t%h\t%h\t%h\t%h", - "switch_on_constant\t%i\n%c", - "if_constant\t%i\n%c", - "switch_on_functor\t%i\n%e", - "if_functor\t%i\n%e", - "if_not_then\t%i\t%h\t%h\t%h", - "index_on_dbref", - "index_on_blob", - "index_on_long", - "check_var\t %r", - "save_pair\t%v", - "save_appl\t%v", - "pvar_bitmap\t%l,%b", - "pvar_live_regs\t%l,%b", - "fetch_reg1_reg2\t%N,%N", - "fetch_constant_reg\t%l,%N", - "fetch_reg_constant\t%l,%N", - "fetch_integer_reg\t%d,%N", - "fetch_reg_integer\t%d,%N", - "enter_profiling\t\t%g", - "retry_profiled\t\t%g", - "count_call_op\t\t%g", - "count_retry_op\t\t%g", - "restore_temps\t\t%l", - "restore_temps_and_skip\t\t%l", - "enter_lu", - "empty_call\t\t%l,%d", +static const char * +getFormat(compiler_vm_op ic) { + switch( ic ) { + case nop_op: + return "nop"; + case get_var_op: + return "get_var\t\t%v,%r"; + case put_var_op: + return "put_var\t\t%v,%r"; + case get_val_op: + return "get_val\t\t%v,%r"; + case put_val_op: + return "put_val\t\t%v,%r"; + case get_atom_op: + return "get_atom\t%a,%r"; + case put_atom_op: + return "put_atom\t%a,%r"; + case get_num_op: + return "get_num\t\t%n,%r"; + case put_num_op: + return "put_num\t\t%n,%r"; + case get_float_op: + return "get_float\t\t%w,%r"; + case put_float_op: + return "put_float\t\t%w,%r"; + case get_string_op: + return "get_string\t\t%w,%S"; + case put_string_op: + return "put_string\t\t%w,%S"; + case get_dbterm_op: + return "get_dbterm\t%w,%r"; + case put_dbterm_op: + return "put_dbterm\t%w,%r"; + case get_longint_op: + return "get_longint\t\t%w,%r"; + case put_longint_op: + return "put_longint\t\t%w,%r"; + case get_bigint_op: + return "get_bigint\t\t%l,%r"; + case put_bigint_op: + return "put_bigint\t\t%l,%r"; + case get_list_op: + return "get_list\t%r"; + case put_list_op: + return "put_list\t%r"; + case get_struct_op: + return "get_struct\t%f,%r"; + case put_struct_op: + return "put_struct\t%f,%r"; + case put_unsafe_op: + return "put_unsafe\t%v,%r"; + case unify_var_op: + return "unify_var\t%v"; + case write_var_op: + return "write_var\t%v"; + case unify_val_op: + return "unify_val\t%v"; + case write_val_op: + return "write_val\t%v"; + case unify_atom_op: + return "unify_atom\t%a"; + case write_atom_op: + return "write_atom\t%a"; + case unify_num_op: + return "unify_num\t%n"; + case write_num_op: + return "write_num\t%n"; + case unify_float_op: + return "unify_float\t%w"; + case write_float_op: + return "write_float\t%w"; + case unify_string_op: + return "unify_string\t%S"; + case write_string_op: + return "write_string\t%S"; + case unify_dbterm_op: + return "unify_dbterm\t%w"; + case write_dbterm_op: + return "write_dbterm\t%w"; + case unify_longint_op: + return "unify_longint\t%w"; + case write_longint_op: + return "write_longint\t%w"; + case unify_bigint_op: + return "unify_bigint\t%l"; + case write_bigint_op: + return "write_bigint\t%l"; + case unify_list_op: + return "unify_list"; + case write_list_op: + return "write_list"; + case unify_struct_op: + return "unify_struct\t%f"; + case write_struct_op: + return "write_struct\t%f"; + case write_unsafe_op: + return "write_unsafe\t%v"; + case unify_local_op: + return "unify_local\t%v"; + case write_local_op: + return "write local\t%v"; + case unify_last_list_op: + return "unify_last_list"; + case write_last_list_op: + return "write_last_list"; + case unify_last_struct_op: + return "unify_last_struct\t%f"; + case write_last_struct_op: + return "write_last_struct\t%f"; + case unify_last_var_op: + return "unify_last_var\t%v"; + case unify_last_val_op: + return "unify_last_val\t%v"; + case unify_last_local_op: + return "unify_last_local\t%v"; + case unify_last_atom_op: + return "unify_last_atom\t%a"; + case unify_last_num_op: + return "unify_last_num\t%n"; + case unify_last_float_op: + return "unify_last_float\t%w"; + case unify_last_string_op: + return "unify_last_string\t%S"; + case unify_last_dbterm_op: + return "unify_last_dbterm\t%w"; + case unify_last_longint_op: + return "unify_last_longint\t%w"; + case unify_last_bigint_op: + return "unify_last_bigint\t%l"; + case ensure_space_op: + return "ensure_space"; + case native_op: + return "native_code"; + case f_var_op: + return "function_to_var\t%v,%B"; + case f_val_op: + return "function_to_val\t%v,%B"; + case f_0_op: + return "function_to_0\t%B"; + case align_float_op: + return "align_float"; + case fail_op: + return "fail"; + case cut_op: + return "cut"; + case cutexit_op: + return "cutexit"; + case allocate_op: + return "allocate"; + case deallocate_op: + return "deallocate"; + case tryme_op: + return "try_me_else\t\t%l\t%x"; + case jump_op: + return "jump\t\t%l"; + case jumpi_op: + return "jump_in_indexing\t\t%i"; + case procceed_op: + return "proceed"; + case call_op: + return "call\t\t%p,%d,%z"; + case execute_op: + return "execute\t\t%p"; + case safe_call_op: + return "sys\t\t%p"; + case label_op: + return "%l:"; + case name_op: + return "name\t\t%m,%d"; + case pop_op: + return "pop\t\t%l"; + case retryme_op: + return "retry_me_else\t\t%l\t%x"; + case trustme_op: + return "trust_me_else_fail\t%x"; + case either_op: + return "either_me\t\t%l,%d,%z"; + case orelse_op: + return "or_else\t\t%l,%z"; + case orlast_op: + return "or_last"; + case push_or_op: + return "push_or"; + case pop_or_op: + return "pop_or"; + case pushpop_or_op: + return "pushpop_or"; + case save_b_op: + return "save_by\t\t%v"; + case commit_b_op: + return "commit_by\t\t%v"; + case patch_b_op: + return "patch_by\t\t%v"; + case try_op: + return "try\t\t%g\t%x"; + case retry_op: + return "retry\t\t%g\t%x"; + case trust_op: + return "trust\t\t%g\t%x"; + case try_in_op: + return "try_in\t\t%g\t%x"; + case jump_v_op: + return "jump_if_var\t\t%g"; + case jump_nv_op: + return "jump_if_nonvar\t\t%g"; + case cache_arg_op: + return "cache_arg\t%r"; + case cache_sub_arg_op: + return "cache_sub_arg\t%d"; + case user_switch_op: + return "user_switch"; + case switch_on_type_op: + return "switch_on_type\t%h\t%h\t%h\t%h"; + case switch_c_op: + return "switch_on_constant\t%i\n%c"; + case if_c_op: + return "if_constant\t%i\n%c"; + case switch_f_op: + return "switch_on_functor\t%i\n%e"; + case if_f_op: + return "if_functor\t%i\n%e"; + case if_not_op: + return "if_not_then\t%i\t%h\t%h\t%h"; + case index_dbref_op: + return "index_on_dbref"; + case index_blob_op: + return "index_on_blob"; + case index_long_op: + return "index_on_blob"; + case index_string_op: + return "index_on_string"; + case if_nonvar_op: + return "check_var\t %r"; + case save_pair_op: + return "save_pair\t%v"; + case save_appl_op: + return "save_appl\t%v"; + case mark_initialised_pvars_op: + return "pvar_bitmap\t%l,%b"; + case mark_live_regs_op: + return "pvar_live_regs\t%l,%b"; + case fetch_args_vv_op: + return "fetch_reg1_reg2\t%N,%N"; + case fetch_args_cv_op: + return "fetch_constant_reg\t%l,%N"; + case fetch_args_vc_op: + return "fetch_reg_constant\t%l,%N"; + case fetch_args_iv_op: + return "fetch_integer_reg\t%d,%N"; + case fetch_args_vi_op: + return "fetch_reg_integer\t%d,%N"; + case enter_profiling_op: + return "enter_profiling\t\t%g"; + case retry_profiled_op: + return "retry_profiled\t\t%g"; + case count_call_op: + return "count_call_op\t\t%g"; + case count_retry_op: + return "count_retry_op\t\t%g"; + case restore_tmps_op: + return "restore_temps\t\t%l"; + case restore_tmps_and_skip_op: + return "restore_temps_and_skip\t\t%l"; + case enter_lu_op: + return "enter_lu"; + case empty_call_op: + return "empty_call\t\t%l,%d"; #ifdef YAPOR - "sync", + case sync_op: + return "sync"; #endif /* YAPOR */ #ifdef TABLING - "table_new_answer", - "table_try_single\t%g\t%x", + case table_new_answer_op: + return "table_new_answer"; + case table_try_single_op: + return "table_try_single\t%g\t%x"; #endif /* TABLING */ #ifdef TABLING_INNER_CUTS - "clause_with_cut", + case "clause_with_cut": + return clause_with_cut_op; #endif /* TABLING_INNER_CUTS */ #ifdef BEAM "run_op %1,%4", @@ -828,10 +972,16 @@ static char *opformat[] = "equal_op", "exit", #endif - "fetch_args_for_bccall\t%v", - "binary_cfunc\t\t%v,%P", - "blob\t%O", - "label_control\t" + case fetch_args_for_bccall_op: + return "fetch_args_for_bccall\t%v"; + case bccall_op: + return "binary_cfunc\t\t%v,%P"; + case blob_op: + return "blob\t%O"; + case string_op: + return "string\t%O"; + case label_ctl_op: + return "label_control\t"; #ifdef SFUNC , "get_s_f_op\t%f,%r", @@ -849,14 +999,13 @@ static char *opformat[] = "unify_s_end", "write_s_end" #endif -}; - + } +} void Yap_ShowCode (struct intermediates *cint) { CACHE_REGS - CELL *oldH = HR; struct PSEUDO *cpc; cpc = cint->CodeStart; @@ -865,12 +1014,11 @@ Yap_ShowCode (struct intermediates *cint) while (cpc) { compiler_vm_op ic = cpc->op; if (ic != nop_op) { - ShowOp (opformat[ic], cpc); - } + } + ShowOp (getFormat(ic), cpc); cpc = cpc->nextInst; } Yap_DebugErrorPutc ('\n'); - HR = oldH; } #endif /* DEBUG */ diff --git a/H/compile.h b/H/compile.h index c4a508006..60863826b 100644 --- a/H/compile.h +++ b/H/compile.h @@ -185,7 +185,7 @@ typedef enum compiler_op { equal_op, exit_op, #endif - fetch_args_for_bccall, + fetch_args_for_bccall_op, bccall_op, blob_op, string_op,