diff options
Diffstat (limited to 'gas/config/tc-v850.c')
-rw-r--r-- | gas/config/tc-v850.c | 310 |
1 files changed, 105 insertions, 205 deletions
diff --git a/gas/config/tc-v850.c b/gas/config/tc-v850.c index 2df12aa..4959054 100644 --- a/gas/config/tc-v850.c +++ b/gas/config/tc-v850.c @@ -43,7 +43,8 @@ static int machine = -1; static int processor_mask = -1; /* Structure to hold information about predefined registers. */ -struct reg_name { +struct reg_name +{ const char *name; int value; }; @@ -69,7 +70,8 @@ const char EXP_CHARS[] = "eE"; as in 0d1.0. */ const char FLT_CHARS[] = "dD"; -const relax_typeS md_relax_table[] = { +const relax_typeS md_relax_table[] = +{ /* Conditional branches. */ {0xff, -0x100, 2, 1}, {0x1fffff, -0x200000, 6, 0}, @@ -81,8 +83,10 @@ const relax_typeS md_relax_table[] = { static int v850_relax = 0; /* Fixups. */ -#define MAX_INSN_FIXUPS (5) -struct v850_fixup { +#define MAX_INSN_FIXUPS 5 + +struct v850_fixup +{ expressionS exp; int opindex; bfd_reloc_code_real_type reloc; @@ -152,20 +156,15 @@ struct v850_seg_entry v850_seg_table[] = #define CALL_TABLE_TEXT_SECTION 12 #define BSS_SECTION 13 -static void do_v850_seg PARAMS ((int, subsegT)); - static void -do_v850_seg (i, sub) - int i; - subsegT sub; +do_v850_seg (int i, subsegT sub) { struct v850_seg_entry *seg = v850_seg_table + i; obj_elf_section_change_hook (); + if (seg->s != NULL) - { - subseg_set (seg->s, sub); - } + subseg_set (seg->s, sub); else { seg->s = subseg_new (seg->name, sub); @@ -175,11 +174,8 @@ do_v850_seg (i, sub) } } -static void v850_seg PARAMS ((int i)); - static void -v850_seg (i) - int i; +v850_seg (int i) { subsegT sub = get_absolute_expression (); @@ -187,11 +183,8 @@ v850_seg (i) demand_empty_rest_of_line (); } -static void v850_offset PARAMS ((int)); - static void -v850_offset (ignore) - int ignore ATTRIBUTE_UNUSED; +v850_offset (int ignore ATTRIBUTE_UNUSED) { char *pfrag; int temp = get_absolute_expression (); @@ -205,11 +198,8 @@ v850_offset (ignore) /* Copied from obj_elf_common() in gas/config/obj-elf.c. */ -static void v850_comm PARAMS ((int)); - static void -v850_comm (area) - int area; +v850_comm (int area) { char *name; char c; @@ -261,11 +251,9 @@ v850_comm (area) if (S_GET_VALUE (symbolP) != 0) { if (S_GET_VALUE (symbolP) != size) - { - /* xgettext:c-format */ - as_warn (_("Length of .comm \"%s\" is already %ld. Not changed to %d."), - S_GET_NAME (symbolP), (long) S_GET_VALUE (symbolP), size); - } + /* xgettext:c-format */ + as_warn (_("Length of .comm \"%s\" is already %ld. Not changed to %d."), + S_GET_NAME (symbolP), (long) S_GET_VALUE (symbolP), size); } know (symbol_get_frag (symbolP) == &zero_address_frag); @@ -441,8 +429,10 @@ v850_comm (area) input_line_pointer--; goto bad_common_segment; } + while (*input_line_pointer++ != '"') ; + goto allocate_common; } @@ -466,11 +456,8 @@ v850_comm (area) } } -static void set_machine PARAMS ((int)); - static void -set_machine (number) - int number; +set_machine (int number) { machine = number; bfd_set_arch_mach (stdoutput, TARGET_ARCH, machine); @@ -483,11 +470,8 @@ set_machine (number) } } -static void v850_longcode PARAMS ((int)); - static void -v850_longcode (type) - int type; +v850_longcode (int type) { expressionS ex; @@ -552,10 +536,10 @@ static struct hash_control *v850_hash; /* This table is sorted. Suitable for searching by a binary search. */ static const struct reg_name pre_defined_registers[] = { - { "ep", 30 }, /* ep - element ptr */ - { "gp", 4 }, /* gp - global ptr */ - { "hp", 2 }, /* hp - handler stack ptr */ - { "lp", 31 }, /* lp - link ptr */ + { "ep", 30 }, /* ep - element ptr. */ + { "gp", 4 }, /* gp - global ptr. */ + { "hp", 2 }, /* hp - handler stack ptr. */ + { "lp", 31 }, /* lp - link ptr. */ { "r0", 0 }, { "r1", 1 }, { "r10", 10 }, @@ -588,8 +572,8 @@ static const struct reg_name pre_defined_registers[] = { "r7", 7 }, { "r8", 8 }, { "r9", 9 }, - { "sp", 3 }, /* sp - stack ptr */ - { "tp", 5 }, /* tp - text ptr */ + { "sp", 3 }, /* sp - stack ptr. */ + { "tp", 5 }, /* tp - text ptr. */ { "zero", 0 }, }; @@ -663,15 +647,11 @@ static const struct reg_name cc_names[] = valid regiter name. Return the register number from the array on success, or -1 on failure. */ -static int reg_name_search - PARAMS ((const struct reg_name *, int, const char *, bfd_boolean)); - static int -reg_name_search (regs, regcount, name, accept_numbers) - const struct reg_name *regs; - int regcount; - const char *name; - bfd_boolean accept_numbers; +reg_name_search (const struct reg_name *regs, + int regcount, + const char *name, + bfd_boolean accept_numbers) { int middle, low, high; int cmp; @@ -683,10 +663,8 @@ reg_name_search (regs, regcount, name, accept_numbers) /* If the symbol is an alias for another name then use that. If the symbol is an alias for a number, then return the number. */ if (symbol_equated_p (symbolP)) - { - name - = S_GET_NAME (symbol_get_value_expression (symbolP)->X_add_symbol); - } + name + = S_GET_NAME (symbol_get_value_expression (symbolP)->X_add_symbol); else if (accept_numbers) { int reg = S_GET_VALUE (symbolP); @@ -726,11 +704,8 @@ reg_name_search (regs, regcount, name, accept_numbers) Input_line_pointer->(next non-blank) char after operand, or is in its original state. */ -static bfd_boolean register_name PARAMS ((expressionS *)); - static bfd_boolean -register_name (expressionP) - expressionS *expressionP; +register_name (expressionS *expressionP) { int reg_number; char *name; @@ -783,14 +758,10 @@ register_name (expressionP) Input_line_pointer->(next non-blank) char after operand, or is in its original state. */ -static bfd_boolean system_register_name - PARAMS ((expressionS *, bfd_boolean, bfd_boolean)); - static bfd_boolean -system_register_name (expressionP, accept_numbers, accept_list_names) - expressionS *expressionP; - bfd_boolean accept_numbers; - bfd_boolean accept_list_names; +system_register_name (expressionS *expressionP, + bfd_boolean accept_numbers, + bfd_boolean accept_list_names) { int reg_number; char *name; @@ -821,9 +792,7 @@ system_register_name (expressionP, accept_numbers, accept_list_names) if (reg_number < 0 || (reg_number > 5 && reg_number < 16) || reg_number > 27) - { - reg_number = -1; - } + reg_number = -1; } else if (accept_list_names) { @@ -867,11 +836,8 @@ system_register_name (expressionP, accept_numbers, accept_list_names) Input_line_pointer->(next non-blank) char after operand, or is in its original state. */ -static bfd_boolean cc_name PARAMS ((expressionS *)); - static bfd_boolean -cc_name (expressionP) - expressionS *expressionP; +cc_name (expressionS *expressionP) { int reg_number; char *name; @@ -908,10 +874,8 @@ cc_name (expressionP) } } -static void skip_white_space PARAMS ((void)); - static void -skip_white_space () +skip_white_space (void) { while (*input_line_pointer == ' ' || *input_line_pointer == '\t') @@ -943,23 +907,22 @@ skip_white_space () and so on upwards. System registers are considered to be very high numbers. */ -static char *parse_register_list - PARAMS ((unsigned long *, const struct v850_operand *)); - static char * -parse_register_list (insn, operand) - unsigned long *insn; - const struct v850_operand *operand; +parse_register_list (unsigned long *insn, + const struct v850_operand *operand) { - static int type1_regs[32] = { + static int type1_regs[32] = + { 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 29, 28, 23, 22, 21, 20, 27, 26, 25, 24 }; - static int type2_regs[32] = { + static int type2_regs[32] = + { 19, 18, 17, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 29, 28, 23, 22, 21, 20, 27, 26, 25, 24 }; - static int type3_regs[32] = { + static int type3_regs[32] = + { 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 15, 13, 12, 7, 6, 5, 4, 11, 10, 9, 8 }; @@ -1143,15 +1106,15 @@ parse_register_list (insn, operand) const char *md_shortopts = "m:"; -struct option md_longopts[] = { +struct option md_longopts[] = +{ {NULL, no_argument, NULL, 0} }; size_t md_longopts_size = sizeof (md_longopts); void -md_show_usage (stream) - FILE *stream; +md_show_usage (FILE *stream) { fprintf (stream, _(" V850 options:\n")); fprintf (stream, _(" -mwarn-signed-overflow Warn if signed immediate values overflow\n")); @@ -1164,9 +1127,7 @@ md_show_usage (stream) } int -md_parse_option (c, arg) - int c; - char *arg; +md_parse_option (int c, char *arg) { if (c != 'm') return 0; @@ -1210,17 +1171,13 @@ md_parse_option (c, arg) } symbolS * -md_undefined_symbol (name) - char *name ATTRIBUTE_UNUSED; +md_undefined_symbol (char *name ATTRIBUTE_UNUSED) { return 0; } char * -md_atof (type, litp, sizep) - int type; - char *litp; - int *sizep; +md_atof (int type, char *litp, int *sizep) { int prec; LITTLENUM_TYPE words[4]; @@ -1260,10 +1217,9 @@ md_atof (type, litp, sizep) /* Very gross. */ void -md_convert_frag (abfd, sec, fragP) - bfd *abfd ATTRIBUTE_UNUSED; - asection *sec; - fragS *fragP; +md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, + asection *sec, + fragS *fragP) { subseg_change (sec, 0); @@ -1311,16 +1267,14 @@ md_convert_frag (abfd, sec, fragP) } valueT -md_section_align (seg, addr) - asection *seg; - valueT addr; +md_section_align (asection *seg, valueT addr) { int align = bfd_get_section_alignment (stdoutput, seg); return ((addr + (1 << align) - 1) & (-1 << align)); } void -md_begin () +md_begin (void) { char *prev_name = ""; const struct v850_opcode *op; @@ -1394,12 +1348,8 @@ handle_lo16 (const struct v850_operand *operand) return BFD_RELOC_LO16; } -static bfd_reloc_code_real_type handle_ctoff - PARAMS ((const struct v850_operand *)); - static bfd_reloc_code_real_type -handle_ctoff (operand) - const struct v850_operand *operand; +handle_ctoff (const struct v850_operand *operand) { if (operand == NULL) return BFD_RELOC_V850_CALLT_16_16_OFFSET; @@ -1414,12 +1364,8 @@ handle_ctoff (operand) return BFD_RELOC_V850_CALLT_6_7_OFFSET; } -static bfd_reloc_code_real_type handle_sdaoff - PARAMS ((const struct v850_operand *)); - static bfd_reloc_code_real_type -handle_sdaoff (operand) - const struct v850_operand *operand; +handle_sdaoff (const struct v850_operand *operand) { if (operand == NULL) return BFD_RELOC_V850_SDA_16_16_OFFSET; @@ -1440,12 +1386,8 @@ handle_sdaoff (operand) return BFD_RELOC_V850_SDA_16_16_OFFSET; } -static bfd_reloc_code_real_type handle_zdaoff - PARAMS ((const struct v850_operand *)); - static bfd_reloc_code_real_type -handle_zdaoff (operand) - const struct v850_operand *operand; +handle_zdaoff (const struct v850_operand *operand) { if (operand == NULL) return BFD_RELOC_V850_ZDA_16_16_OFFSET; @@ -1467,31 +1409,27 @@ handle_zdaoff (operand) return BFD_RELOC_V850_ZDA_16_16_OFFSET; } -static bfd_reloc_code_real_type handle_tdaoff - PARAMS ((const struct v850_operand *)); - static bfd_reloc_code_real_type -handle_tdaoff (operand) - const struct v850_operand *operand; +handle_tdaoff (const struct v850_operand *operand) { if (operand == NULL) /* Data item, not an instruction. */ return BFD_RELOC_V850_TDA_7_7_OFFSET; if (operand->bits == 6 && operand->shift == 1) - /* sld.w/sst.w, operand: D8_6 */ + /* sld.w/sst.w, operand: D8_6. */ return BFD_RELOC_V850_TDA_6_8_OFFSET; if (operand->bits == 4 && operand->insert != NULL) - /* sld.hu, operand: D5-4 */ + /* sld.hu, operand: D5-4. */ return BFD_RELOC_V850_TDA_4_5_OFFSET; if (operand->bits == 4 && operand->insert == NULL) - /* sld.bu, operand: D4 */ + /* sld.bu, operand: D4. */ return BFD_RELOC_V850_TDA_4_4_OFFSET; if (operand->bits == 16 && operand->shift == 16) - /* set1 & chums, operands: D16 */ + /* set1 & chums, operands: D16. */ return BFD_RELOC_V850_TDA_16_16_OFFSET; if (operand->bits != 7) @@ -1502,20 +1440,16 @@ handle_tdaoff (operand) } return operand->insert != NULL - ? BFD_RELOC_V850_TDA_7_8_OFFSET /* sld.h/sst.h, operand: D8_7 */ - : BFD_RELOC_V850_TDA_7_7_OFFSET; /* sld.b/sst.b, operand: D7 */ + ? BFD_RELOC_V850_TDA_7_8_OFFSET /* sld.h/sst.h, operand: D8_7. */ + : BFD_RELOC_V850_TDA_7_7_OFFSET; /* sld.b/sst.b, operand: D7. */ } /* Warning: The code in this function relies upon the definitions in the v850_operands[] array (defined in opcodes/v850-opc.c) matching the hard coded values contained herein. */ -static bfd_reloc_code_real_type v850_reloc_prefix - PARAMS ((const struct v850_operand *)); - static bfd_reloc_code_real_type -v850_reloc_prefix (operand) - const struct v850_operand *operand; +v850_reloc_prefix (const struct v850_operand *operand) { bfd_boolean paren_skipped = FALSE; @@ -1551,18 +1485,13 @@ v850_reloc_prefix (operand) /* Insert an operand value into an instruction. */ -static unsigned long v850_insert_operand - PARAMS ((unsigned long, const struct v850_operand *, offsetT, char *, - unsigned int, char *)); - static unsigned long -v850_insert_operand (insn, operand, val, file, line, str) - unsigned long insn; - const struct v850_operand *operand; - offsetT val; - char *file; - unsigned int line; - char *str; +v850_insert_operand (unsigned long insn, + const struct v850_operand *operand, + offsetT val, + char *file, + unsigned int line, + char *str) { if (operand->insert) { @@ -1656,8 +1585,7 @@ v850_insert_operand (insn, operand, val, file, line, str) static char copy_of_instruction[128]; void -md_assemble (str) - char *str; +md_assemble (char *str) { char *s; char *start_of_operands; @@ -1731,9 +1659,7 @@ md_assemble (str) bfd_reloc_code_real_type reloc; if (next_opindex == 0) - { - operand = &v850_operands[*opindex_ptr]; - } + operand = &v850_operands[*opindex_ptr]; else { operand = &v850_operands[next_opindex]; @@ -1856,9 +1782,7 @@ md_assemble (str) if ((operand->flags & V850_OPERAND_REG) != 0) { if (!register_name (&ex)) - { - errmsg = _("invalid register name"); - } + errmsg = _("invalid register name"); else if ((operand->flags & V850_NOT_R0) && ex.X_add_number == 0) { @@ -1873,9 +1797,7 @@ md_assemble (str) else if ((operand->flags & V850_OPERAND_SRG) != 0) { if (!system_register_name (&ex, TRUE, FALSE)) - { - errmsg = _("invalid system register name"); - } + errmsg = _("invalid system register name"); } else if ((operand->flags & V850_OPERAND_EP) != 0) { @@ -1903,9 +1825,7 @@ md_assemble (str) else if ((operand->flags & V850_OPERAND_CC) != 0) { if (!cc_name (&ex)) - { - errmsg = _("invalid condition code name"); - } + errmsg = _("invalid condition code name"); } else if (operand->flags & V850E_PUSH_POP) { @@ -1997,14 +1917,12 @@ md_assemble (str) } else if (system_register_name (&ex, FALSE, FALSE) && (operand->flags & V850_OPERAND_SRG) == 0) - { - errmsg = _("syntax error: system register not expected"); - } + errmsg = _("syntax error: system register not expected"); + else if (cc_name (&ex) && (operand->flags & V850_OPERAND_CC) == 0) - { - errmsg = _("syntax error: condition code not expected"); - } + errmsg = _("syntax error: condition code not expected"); + else { expression (&ex); @@ -2041,14 +1959,12 @@ md_assemble (str) goto error; } insn = v850_insert_operand (insn, operand, ex.X_add_number, - (char *) NULL, 0, - copy_of_instruction); + NULL, 0, copy_of_instruction); break; case O_constant: insn = v850_insert_operand (insn, operand, ex.X_add_number, - (char *) NULL, 0, - copy_of_instruction); + NULL, 0, copy_of_instruction); break; default: @@ -2239,14 +2155,12 @@ md_assemble (str) then it is done here. */ arelent * -tc_gen_reloc (seg, fixp) - asection *seg ATTRIBUTE_UNUSED; - fixS *fixp; +tc_gen_reloc (asection *seg ATTRIBUTE_UNUSED, fixS *fixp) { arelent *reloc; - reloc = (arelent *) xmalloc (sizeof (arelent)); - reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); + reloc = xmalloc (sizeof (arelent)); + reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); reloc->address = fixp->fx_frag->fr_address + fixp->fx_where; @@ -2267,7 +2181,7 @@ tc_gen_reloc (seg, fixp) reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type); - if (reloc->howto == (reloc_howto_type *) NULL) + if (reloc->howto == NULL) { as_bad_where (fixp->fx_file, fixp->fx_line, /* xgettext:c-format */ @@ -2283,8 +2197,7 @@ tc_gen_reloc (seg, fixp) } void -v850_handle_align (frag) - fragS * frag; +v850_handle_align (fragS * frag) { if (v850_relax && frag->fr_type == rs_align @@ -2301,9 +2214,7 @@ v850_handle_align (frag) /* Return current size of variable part of frag. */ int -md_estimate_size_before_relax (fragp, seg) - fragS *fragp; - asection *seg ATTRIBUTE_UNUSED; +md_estimate_size_before_relax (fragS *fragp, asection *seg ATTRIBUTE_UNUSED) { if (fragp->fr_subtype >= sizeof (md_relax_table) / sizeof (md_relax_table[0])) abort (); @@ -2312,9 +2223,7 @@ md_estimate_size_before_relax (fragp, seg) } long -v850_pcrel_from_section (fixp, section) - fixS *fixp; - segT section; +v850_pcrel_from_section (fixS *fixp, segT section) { /* If the symbol is undefined, or in a section other than our own, or it is weak (in which case it may well be in another section, @@ -2329,10 +2238,7 @@ v850_pcrel_from_section (fixp, section) } void -md_apply_fix3 (fixP, valueP, seg) - fixS *fixP; - valueT *valueP; - segT seg ATTRIBUTE_UNUSED; +md_apply_fix3 (fixS *fixP, valueT *valueP, segT seg ATTRIBUTE_UNUSED) { valueT value = * valueP; char *where; @@ -2361,11 +2267,9 @@ md_apply_fix3 (fixP, valueP, seg) if (S_GET_SEGMENT (fixP->fx_subsy) == absolute_section) value -= S_GET_VALUE (fixP->fx_subsy); else - { - /* We don't actually support subtracting a symbol. */ - as_bad_where (fixP->fx_file, fixP->fx_line, - _("expression too complex")); - } + /* We don't actually support subtracting a symbol. */ + as_bad_where (fixP->fx_file, fixP->fx_line, + _("expression too complex")); } fixP->fx_addnumber = value; } @@ -2432,8 +2336,7 @@ md_apply_fix3 (fixP, valueP, seg) on the v850. */ void -parse_cons_expression_v850 (exp) - expressionS *exp; +parse_cons_expression_v850 (expressionS *exp) { /* See if there's a reloc prefix like hi() we have to handle. */ hold_cons_reloc = v850_reloc_prefix (NULL); @@ -2447,11 +2350,10 @@ parse_cons_expression_v850 (exp) appropriate one based on the size of the expression. */ void -cons_fix_new_v850 (frag, where, size, exp) - fragS *frag; - int where; - int size; - expressionS *exp; +cons_fix_new_v850 (fragS *frag, + int where, + int size, + expressionS *exp) { if (hold_cons_reloc == BFD_RELOC_UNUSED) { @@ -2472,8 +2374,7 @@ cons_fix_new_v850 (frag, where, size, exp) } bfd_boolean -v850_fix_adjustable (fixP) - fixS *fixP; +v850_fix_adjustable (fixS *fixP) { if (fixP->fx_addsy == NULL) return 1; @@ -2491,8 +2392,7 @@ v850_fix_adjustable (fixP) } int -v850_force_relocation (fixP) - struct fix *fixP; +v850_force_relocation (struct fix *fixP) { if (fixP->fx_r_type == BFD_RELOC_V850_LONGCALL || fixP->fx_r_type == BFD_RELOC_V850_LONGJUMP) |