From 150f24a284293f28cc74a5469fb5d4b242336154 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Wed, 7 Jun 2000 23:14:22 +0000 Subject: [PATCH] Patch from David Mosberger, cleanups to improve 32b-x-64b cross support. * config/tc-ia64.c: Add missing prototypes. (generate_unwind_image): Cast argument to output_unw_records call. --- gas/ChangeLog | 5 ++ gas/config/tc-ia64.c | 129 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 133 insertions(+), 1 deletion(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index a1720ea3336..71831dd12bb 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2000-06-07 David Mosberger + + * config/tc-ia64.c: Add missing prototypes. + (generate_unwind_image): Cast argument to output_unw_records call. + Wed Jun 7 22:44:14 2000 Denis Chertykov * config/tc-avr.c (avr_operand): fix the fomratting of the comment. diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c index a00eac2a8c9..0c2a70a3358 100644 --- a/gas/config/tc-ia64.c +++ b/gas/config/tc-ia64.c @@ -598,8 +598,12 @@ static void dot_special_section PARAMS ((int)); static void dot_proc PARAMS ((int)); static void dot_fframe PARAMS ((int)); static void dot_vframe PARAMS ((int)); +static void dot_vframesp PARAMS ((int)); +static void dot_vframepsp PARAMS ((int)); static void dot_save PARAMS ((int)); static void dot_restore PARAMS ((int)); +static void dot_restorereg PARAMS ((int)); +static void dot_restorereg_p PARAMS ((int)); static void dot_handlerdata PARAMS ((int)); static void dot_unwentry PARAMS ((int)); static void dot_altrp PARAMS ((int)); @@ -609,6 +613,12 @@ static void dot_savef PARAMS ((int)); static void dot_saveb PARAMS ((int)); static void dot_savegf PARAMS ((int)); static void dot_spill PARAMS ((int)); +static void dot_spillreg PARAMS ((int)); +static void dot_spillmem PARAMS ((int)); +static void dot_spillreg_p PARAMS ((int)); +static void dot_spillmem_p PARAMS ((int)); +static void dot_label_state PARAMS ((int)); +static void dot_copy_state PARAMS ((int)); static void dot_unwabi PARAMS ((int)); static void dot_personality PARAMS ((int)); static void dot_body PARAMS ((int)); @@ -629,6 +639,7 @@ static void dot_xfloat_cons PARAMS ((int)); static void dot_xstringer PARAMS ((int)); static void dot_xdata_ua PARAMS ((int)); static void dot_xfloat_cons_ua PARAMS ((int)); +static void print_prmask PARAMS ((valueT mask)); static void dot_pred_rel PARAMS ((int)); static void dot_reg_val PARAMS ((int)); static void dot_dv_mode PARAMS ((int)); @@ -648,6 +659,8 @@ static void fix_insn PARAMS ((fixS *, const struct ia64_operand *, valueT)); static bfd_reloc_code_real_type ia64_gen_real_reloc_type PARAMS ((struct symbol *sym, bfd_reloc_code_real_type r_type)); static void insn_group_break PARAMS ((int, int, int)); +static void mark_resource PARAMS ((struct ia64_opcode *, const struct ia64_dependency *, + struct rsrc *, int depind, int path)); static void add_qp_mutex PARAMS((valueT mask)); static void add_qp_imply PARAMS((int p1, int p2)); static void clear_qp_branch_flag PARAMS((valueT mask)); @@ -655,16 +668,130 @@ static void clear_qp_mutex PARAMS((valueT mask)); static void clear_qp_implies PARAMS((valueT p1_mask, valueT p2_mask)); static void clear_register_values PARAMS ((void)); static void print_dependency PARAMS ((const char *action, int depind)); +static void instruction_serialization PARAMS ((void)); +static void data_serialization PARAMS ((void)); +static void remove_marked_resource PARAMS ((struct rsrc *)); static int is_conditional_branch PARAMS ((struct ia64_opcode *)); +static int is_taken_branch PARAMS ((struct ia64_opcode *)); static int is_interruption_or_rfi PARAMS ((struct ia64_opcode *)); +static int depends_on PARAMS ((int, struct ia64_opcode *)); +static int specify_resource PARAMS ((const struct ia64_dependency *, + struct ia64_opcode *, int, struct rsrc [], int, int)); static int check_dv PARAMS((struct ia64_opcode *idesc)); static void check_dependencies PARAMS((struct ia64_opcode *)); static void mark_resources PARAMS((struct ia64_opcode *)); static void update_dependencies PARAMS((struct ia64_opcode *)); static void note_register_values PARAMS((struct ia64_opcode *)); +static int qp_mutex PARAMS ((int, int, int)); +static int resources_match PARAMS ((struct rsrc *, struct ia64_opcode *, int, int, int)); +static void output_vbyte_mem PARAMS ((int, char *, char *)); +static void count_output PARAMS ((int, char *, char *)); +static void output_R1_format PARAMS ((vbyte_func, unw_record_type, int)); +static void output_R2_format PARAMS ((vbyte_func, int, int, unsigned long)); static void output_R3_format PARAMS ((vbyte_func, unw_record_type, unsigned long)); +static void output_P1_format PARAMS ((vbyte_func, int)); +static void output_P2_format PARAMS ((vbyte_func, int, int)); +static void output_P3_format PARAMS ((vbyte_func, unw_record_type, int)); +static void output_P4_format PARAMS ((vbyte_func, unsigned char *, unsigned long)); +static void output_P5_format PARAMS ((vbyte_func, int, unsigned long)); +static void output_P6_format PARAMS ((vbyte_func, unw_record_type, int)); +static void output_P7_format PARAMS ((vbyte_func, unw_record_type, unsigned long, unsigned long)); +static void output_P8_format PARAMS ((vbyte_func, unw_record_type, unsigned long)); +static void output_P9_format PARAMS ((vbyte_func, int, int)); +static void output_P10_format PARAMS ((vbyte_func, int, int)); +static void output_B1_format PARAMS ((vbyte_func, unw_record_type, unsigned long)); +static void output_B2_format PARAMS ((vbyte_func, unsigned long, unsigned long)); static void output_B3_format PARAMS ((vbyte_func, unsigned long, unsigned long)); static void output_B4_format PARAMS ((vbyte_func, unw_record_type, unsigned long)); +static char format_ab_reg PARAMS ((int, int)); +static void output_X1_format PARAMS ((vbyte_func, unw_record_type, int, int, unsigned long, + unsigned long)); +static void output_X2_format PARAMS ((vbyte_func, int, int, int, int, int, unsigned long)); +static void output_X3_format PARAMS ((vbyte_func, unw_record_type, int, int, int, unsigned long, + unsigned long)); +static void output_X4_format PARAMS ((vbyte_func, int, int, int, int, int, int, unsigned long)); +static void free_list_records PARAMS ((unw_rec_list *)); +static unw_rec_list *output_prologue PARAMS ((void)); +static unw_rec_list *output_prologue_gr PARAMS ((unsigned int, unsigned int)); +static unw_rec_list *output_body PARAMS ((void)); +static unw_rec_list *output_mem_stack_f PARAMS ((unsigned int)); +static unw_rec_list *output_mem_stack_v PARAMS ((void)); +static unw_rec_list *output_psp_gr PARAMS ((unsigned int)); +static unw_rec_list *output_psp_sprel PARAMS ((unsigned int)); +static unw_rec_list *output_rp_when PARAMS ((void)); +static unw_rec_list *output_rp_gr PARAMS ((unsigned int)); +static unw_rec_list *output_rp_br PARAMS ((unsigned int)); +static unw_rec_list *output_rp_psprel PARAMS ((unsigned int)); +static unw_rec_list *output_rp_sprel PARAMS ((unsigned int)); +static unw_rec_list *output_pfs_when PARAMS ((void)); +static unw_rec_list *output_pfs_gr PARAMS ((unsigned int)); +static unw_rec_list *output_pfs_psprel PARAMS ((unsigned int)); +static unw_rec_list *output_pfs_sprel PARAMS ((unsigned int)); +static unw_rec_list *output_preds_when PARAMS ((void)); +static unw_rec_list *output_preds_gr PARAMS ((unsigned int)); +static unw_rec_list *output_preds_psprel PARAMS ((unsigned int)); +static unw_rec_list *output_preds_sprel PARAMS ((unsigned int)); +static unw_rec_list *output_fr_mem PARAMS ((unsigned int)); +static unw_rec_list *output_frgr_mem PARAMS ((unsigned int, unsigned int)); +static unw_rec_list *output_gr_gr PARAMS ((unsigned int, unsigned int)); +static unw_rec_list *output_gr_mem PARAMS ((unsigned int)); +static unw_rec_list *output_br_mem PARAMS ((unsigned int)); +static unw_rec_list *output_br_gr PARAMS ((unsigned int, unsigned int)); +static unw_rec_list *output_spill_base PARAMS ((unsigned int)); +static unw_rec_list *output_unat_when PARAMS ((void)); +static unw_rec_list *output_unat_gr PARAMS ((unsigned int)); +static unw_rec_list *output_unat_psprel PARAMS ((unsigned int)); +static unw_rec_list *output_unat_sprel PARAMS ((unsigned int)); +static unw_rec_list *output_lc_when PARAMS ((void)); +static unw_rec_list *output_lc_gr PARAMS ((unsigned int)); +static unw_rec_list *output_lc_psprel PARAMS ((unsigned int)); +static unw_rec_list *output_lc_sprel PARAMS ((unsigned int)); +static unw_rec_list *output_fpsr_when PARAMS ((void)); +static unw_rec_list *output_fpsr_gr PARAMS ((unsigned int)); +static unw_rec_list *output_fpsr_psprel PARAMS ((unsigned int)); +static unw_rec_list *output_fpsr_sprel PARAMS ((unsigned int)); +static unw_rec_list *output_priunat_when_gr PARAMS ((void)); +static unw_rec_list *output_priunat_when_mem PARAMS ((void)); +static unw_rec_list *output_priunat_gr PARAMS ((unsigned int)); +static unw_rec_list *output_priunat_psprel PARAMS ((unsigned int)); +static unw_rec_list *output_priunat_sprel PARAMS ((unsigned int)); +static unw_rec_list *output_bsp_when PARAMS ((void)); +static unw_rec_list *output_bsp_gr PARAMS ((unsigned int)); +static unw_rec_list *output_bsp_psprel PARAMS ((unsigned int)); +static unw_rec_list *output_bsp_sprel PARAMS ((unsigned int)); +static unw_rec_list *output_bspstore_when PARAMS ((void)); +static unw_rec_list *output_bspstore_gr PARAMS ((unsigned int)); +static unw_rec_list *output_bspstore_psprel PARAMS ((unsigned int)); +static unw_rec_list *output_bspstore_sprel PARAMS ((unsigned int)); +static unw_rec_list *output_rnat_when PARAMS ((void)); +static unw_rec_list *output_rnat_gr PARAMS ((unsigned int)); +static unw_rec_list *output_rnat_psprel PARAMS ((unsigned int)); +static unw_rec_list *output_rnat_sprel PARAMS ((unsigned int)); +static unw_rec_list *output_unwabi PARAMS ((unsigned long, unsigned long)); +static unw_rec_list *output_epilogue PARAMS ((unsigned long)); +static unw_rec_list *output_label_state PARAMS ((unsigned long)); +static unw_rec_list *output_copy_state PARAMS ((unsigned long)); +static unw_rec_list *output_spill_psprel PARAMS ((unsigned int, unsigned int, unsigned int)); +static unw_rec_list *output_spill_sprel PARAMS ((unsigned int, unsigned int, unsigned int)); +static unw_rec_list *output_spill_psprel_p PARAMS ((unsigned int, unsigned int, unsigned int, + unsigned int)); +static unw_rec_list *output_spill_sprel_p PARAMS ((unsigned int, unsigned int, unsigned int, + unsigned int)); +static unw_rec_list *output_spill_reg PARAMS ((unsigned int, unsigned int, unsigned int, + unsigned int)); +static unw_rec_list *output_spill_reg_p PARAMS ((unsigned int, unsigned int, unsigned int, + unsigned int, unsigned int)); +static void process_one_record PARAMS ((unw_rec_list *, vbyte_func)); +static void process_unw_records PARAMS ((unw_rec_list *, vbyte_func)); +static int calc_record_size PARAMS ((unw_rec_list *)); +static void set_imask PARAMS ((unw_rec_list *, unsigned long, unsigned long, unsigned int)); +static int count_bits PARAMS ((unsigned long)); +static unsigned long slot_index PARAMS ((unsigned long, unsigned long)); +static void fixup_unw_records PARAMS ((unw_rec_list *)); +static int output_unw_records PARAMS ((unw_rec_list *, void **)); +static int convert_expr_to_ab_reg PARAMS ((expressionS *, unsigned int *, unsigned int *)); +static int convert_expr_to_xy_reg PARAMS ((expressionS *, unsigned int *, unsigned int *)); +static int generate_unwind_image PARAMS ((void)); /* Determine if application register REGNUM resides in the integer unit (as opposed to the memory unit). */ @@ -2816,7 +2943,7 @@ generate_unwind_image () unsigned char *unw_rec; /* Generate the unwind record. */ - size = output_unw_records (unwind.list, &unw_rec); + size = output_unw_records (unwind.list, (void **) &unw_rec); if (size % 8 != 0) as_bad ("Unwind record is not a multiple of 8 bytes."); -- 2.30.2