From f65b701bae99e85261ed1fd1357e8dcd5961582d Mon Sep 17 00:00:00 2001 From: John van Groningen Date: Mon, 3 Sep 2007 11:49:18 +0000 Subject: add code_desc0, code_jmp_upd and code_jmp_ap_upd --- cgcode.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) diff --git a/cgcode.c b/cgcode.c index bfacd23..de605fa 100644 --- a/cgcode.c +++ b/cgcode.c @@ -3580,6 +3580,15 @@ void code_get_desc_arity (int a_offset) s_push_b (graph_7); } +void code_get_desc0_number (void) +{ + INSTRUCTION_GRAPH graph_1,graph_2; + + graph_1=s_pop_b(); + graph_2=g_load_id (-2-2*STACK_ELEMENT_SIZE,graph_1); + s_push_b (graph_2); +} + void code_get_node_arity (int a_offset) { INSTRUCTION_GRAPH graph_1,graph_2,graph_3,graph_4,graph_5,graph_6; @@ -3954,12 +3963,79 @@ void code_jmp (char label_name[]) } } +void code_jmp_upd (char label_name[]) +{ + LABEL *label; + int a_stack_size,b_stack_size,n_a_and_f_registers; + ULONG *vector; + + label=enter_label (label_name,0); + + if (demand_flag){ + a_stack_size=demanded_a_stack_size; + b_stack_size=demanded_b_stack_size; + vector=demanded_vector; + + end_basic_block_with_registers (a_stack_size,b_stack_size,vector); + } else + error ("Directive .d missing before jmp_upd instruction"); + + n_a_and_f_registers=0; + + if (mc68881_flag){ + int parameter_n; + + for (parameter_n=0; parameter_nlabel_id>=0) + error_s ("Label %d defined twice\n",label_name); + label->label_id=next_label_id++; + + label->label_descriptor=string_label; + +#ifdef FUNCTION_LEVEL_LINKING + as_new_data_module(); + if (assembly_flag) + w_as_new_data_module(); +#endif + +#ifdef G_A64 + store_word64_in_data_section (desc0_number); +#else + store_long_word_in_data_section (desc0_number); +#endif + if (assembly_flag) +#ifdef G_A64 + w_as_word64_in_data_section ((int_64)desc0_number); +#else + w_as_long_in_data_section (desc0_number); +#endif + + if (!parallel_flag){ + store_descriptor_in_data_section (label); + if (assembly_flag) + w_as_descriptor_in_data_section (label->label_name); + } + + define_data_label (label); + if (assembly_flag) + w_as_define_label (label); + + store_2_words_in_data_section (0,0); + if (assembly_flag){ + w_as_word_in_data_section (0); + w_as_word_in_data_section (0); + } + + code_new_descriptor (0,0); + + w_descriptor_string (descriptor_name,descriptor_name_length,string_code_label_id,string_label); +} + void code_descn (char label_name[],char node_entry_label_name[],int arity,int lazy_record_flag,char descriptor_name[], int descriptor_name_length) { -- cgit v1.2.3