Add support for Xilinx MicroBlaze processor.
[external/binutils.git] / gas / config / tc-tic4x.c
index 77f2ec6..e77661b 100644 (file)
@@ -1,5 +1,6 @@
 /* tc-tic4x.c -- Assemble for the Texas Instruments TMS320C[34]x.
 /* tc-tic4x.c -- Assemble for the Texas Instruments TMS320C[34]x.
-   Copyright (C) 1997,1998, 2002, 2003, 2005 Free Software Foundation.
+   Copyright (C) 1997,1998, 2002, 2003, 2005, 2006, 2007, 2008, 2009
+   Free Software Foundation. Inc.
 
    Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz)
 
 
    Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz)
 
@@ -7,7 +8,7 @@
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    GAS is distributed in the hope that it will be useful,
    any later version.
 
    GAS is distributed in the hope that it will be useful,
@@ -17,8 +18,8 @@
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to
-   the Free Software Foundation, 59 Temple Place - Suite 330
-   Boston, MA 02111-1307, USA.  */
+   the Free Software Foundation, 51 Franklin Street - Fifth Floor
+   Boston, MA 02110-1301, USA.  */
 /*
   TODOs:
   ------
 /*
   TODOs:
   ------
   o Support 'abc' constants (that is 0x616263)
 */
 
   o Support 'abc' constants (that is 0x616263)
 */
 
-#include <stdio.h>
 #include "safe-ctype.h"
 #include "as.h"
 #include "opcode/tic4x.h"
 #include "subsegs.h"
 #include "obstack.h"
 #include "safe-ctype.h"
 #include "as.h"
 #include "opcode/tic4x.h"
 #include "subsegs.h"
 #include "obstack.h"
-#include "symbols.h"
-#include "listing.h"
 
 /* OK, we accept a syntax similar to the other well known C30
    assembly tools.  With TIC4X_ALT_SYNTAX defined we are more
 
 /* OK, we accept a syntax similar to the other well known C30
    assembly tools.  With TIC4X_ALT_SYNTAX defined we are more
@@ -146,80 +144,17 @@ tic4x_insn_t;
 static tic4x_insn_t the_insn;  /* Info about our instruction.  */
 static tic4x_insn_t *insn = &the_insn;
 
 static tic4x_insn_t the_insn;  /* Info about our instruction.  */
 static tic4x_insn_t *insn = &the_insn;
 
-static int tic4x_gen_to_words
-  PARAMS ((FLONUM_TYPE, LITTLENUM_TYPE *, int ));
-static char *tic4x_atof
-  PARAMS ((char *, char, LITTLENUM_TYPE * ));
-static void tic4x_insert_reg
-  PARAMS ((char *, int ));
-static void tic4x_insert_sym
-  PARAMS ((char *, int ));
-static char *tic4x_expression
-  PARAMS ((char *, expressionS *));
-static char *tic4x_expression_abs
-  PARAMS ((char *, int *));
-static void tic4x_emit_char
-  PARAMS ((char, int));
-static void tic4x_seg_alloc
-  PARAMS ((char *, segT, int, symbolS *));
-static void tic4x_asg
-  PARAMS ((int));
-static void tic4x_bss
-  PARAMS ((int));
-static void tic4x_globl
-  PARAMS ((int));
-static void tic4x_cons
-  PARAMS ((int));
-static void tic4x_stringer
-  PARAMS ((int));
-static void tic4x_eval
-  PARAMS ((int));
-static void tic4x_newblock
-  PARAMS ((int));
-static void tic4x_sect
-  PARAMS ((int));
-static void tic4x_set
-  PARAMS ((int));
-static void tic4x_usect
-  PARAMS ((int));
-static void tic4x_version
-  PARAMS ((int));
-static void tic4x_init_regtable
-  PARAMS ((void));
-static void tic4x_init_symbols
-  PARAMS ((void));
-static int tic4x_inst_insert
-  PARAMS ((tic4x_inst_t *));
-static tic4x_inst_t *tic4x_inst_make
-  PARAMS ((char *, unsigned long, char *));
-static int tic4x_inst_add
-  PARAMS ((tic4x_inst_t *));
-void tic4x_end
-  PARAMS ((void));
-static int tic4x_indirect_parse
-  PARAMS ((tic4x_operand_t *, const tic4x_indirect_t *));
-static char *tic4x_operand_parse
-  PARAMS ((char *, tic4x_operand_t *));
-static int tic4x_operands_match
-  PARAMS ((tic4x_inst_t *, tic4x_insn_t *, int));
-static void tic4x_insn_check
-  PARAMS ((tic4x_insn_t *));
-static void tic4x_insn_output
-  PARAMS ((tic4x_insn_t *));
-static int tic4x_operands_parse
-  PARAMS ((char *, tic4x_operand_t *, int ));
-void tic4x_cleanup
-  PARAMS ((void));
-int tic4x_unrecognized_line
-  PARAMS ((int));
-static int tic4x_pc_offset
-  PARAMS ((unsigned int));
-int tic4x_do_align
-  PARAMS ((int, const char *, int, int));
-void tic4x_start_line
-  PARAMS ((void));
-arelent *tc_gen_reloc
-  PARAMS ((asection *, fixS *));
+static void tic4x_asg (int);
+static void tic4x_bss (int);
+static void tic4x_globl (int);
+static void tic4x_cons (int);
+static void tic4x_stringer (int);
+static void tic4x_eval (int);
+static void tic4x_newblock (int);
+static void tic4x_sect (int);
+static void tic4x_set (int);
+static void tic4x_usect (int);
+static void tic4x_version (int);
 
 
 const pseudo_typeS
 
 
 const pseudo_typeS
@@ -257,7 +192,6 @@ const pseudo_typeS
 
 int md_short_jump_size = 4;
 int md_long_jump_size = 4;
 
 int md_short_jump_size = 4;
 int md_long_jump_size = 4;
-const int md_reloc_size = RELSZ;       /* Coff headers.  */
 
 /* This array holds the chars that always start a comment.  If the
    pre-processor is disabled, these aren't very useful.  */
 
 /* This array holds the chars that always start a comment.  If the
    pre-processor is disabled, these aren't very useful.  */
@@ -305,10 +239,7 @@ extern FLONUM_TYPE generic_floating_point_number;
 
 /* Turn generic_floating_point_number into a real short/float/double.  */
 static int
 
 /* Turn generic_floating_point_number into a real short/float/double.  */
 static int
-tic4x_gen_to_words (flonum, words, precision)
-     FLONUM_TYPE flonum;
-     LITTLENUM_TYPE *words;
-     int precision;
+tic4x_gen_to_words (FLONUM_TYPE flonum, LITTLENUM_TYPE *words, int precision)
 {
   int return_value = 0;
   LITTLENUM_TYPE *p;           /* Littlenum pointer.  */
 {
   int return_value = 0;
   LITTLENUM_TYPE *p;           /* Littlenum pointer.  */
@@ -323,7 +254,7 @@ tic4x_gen_to_words (flonum, words, precision)
   unsigned int rbit;            /* Round bit. */
   int shift;                   /* Shift count.  */
 
   unsigned int rbit;            /* Round bit. */
   int shift;                   /* Shift count.  */
 
-  /* NOTE: Svein Seldal <Svein.Seldal@solidas.com>
+  /* NOTE: Svein Seldal <Svein@dev.seldal.com>
      The code in this function is altered slightly to support floats
      with 31-bits mantissas, thus the documentation below may be a
      little bit inaccurate.
      The code in this function is altered slightly to support floats
      with 31-bits mantissas, thus the documentation below may be a
      little bit inaccurate.
@@ -465,7 +396,7 @@ tic4x_gen_to_words (flonum, words, precision)
       || flonum.sign == 0) /* = NaN */
     {
       if(flonum.sign == 0)
       || flonum.sign == 0) /* = NaN */
     {
       if(flonum.sign == 0)
-        as_bad ("Nan, using zero.");
+        as_bad (_("Nan, using zero."));
       words[0] = 0x8000;
       return return_value;
     }
       words[0] = 0x8000;
       return return_value;
     }
@@ -587,7 +518,7 @@ tic4x_gen_to_words (flonum, words, precision)
     }
 
   if (abs (exponent) >= (1 << (exponent_bits - 1)))
     }
 
   if (abs (exponent) >= (1 << (exponent_bits - 1)))
-    as_bad ("Cannot represent exponent in %d bits", exponent_bits);
+    as_bad (_("Cannot represent exponent in %d bits"), exponent_bits);
 
   /* Force exponent to fit in desired field width.  */
   exponent &= (1 << (exponent_bits)) - 1;
 
   /* Force exponent to fit in desired field width.  */
   exponent &= (1 << (exponent_bits)) - 1;
@@ -622,10 +553,7 @@ tic4x_gen_to_words (flonum, words, precision)
 
 /* Returns pointer past text consumed.  */
 static char *
 
 /* Returns pointer past text consumed.  */
 static char *
-tic4x_atof (str, what_kind, words)
-     char *str;
-     char what_kind;
-     LITTLENUM_TYPE *words;
+tic4x_atof (char *str, char what_kind, LITTLENUM_TYPE *words)
 {
   /* Extra bits for zeroed low-order bits.  The 1st MAX_PRECISION are
      zeroed, the last contain flonum bits.  */
 {
   /* Extra bits for zeroed low-order bits.  The 1st MAX_PRECISION are
      zeroed, the last contain flonum bits.  */
@@ -673,7 +601,7 @@ tic4x_atof (str, what_kind, words)
       break;
 
     default:
       break;
 
     default:
-      as_bad ("Invalid floating point number");
+      as_bad (_("Invalid floating point number"));
       return (NULL);
     }
 
       return (NULL);
     }
 
@@ -683,7 +611,7 @@ tic4x_atof (str, what_kind, words)
   if (atof_generic (&return_value, ".", EXP_CHARS,
                    &generic_floating_point_number))
     {
   if (atof_generic (&return_value, ".", EXP_CHARS,
                    &generic_floating_point_number))
     {
-      as_bad ("Invalid floating point number");
+      as_bad (_("Invalid floating point number"));
       return (NULL);
     }
 
       return (NULL);
     }
 
@@ -698,9 +626,7 @@ tic4x_atof (str, what_kind, words)
 }
 
 static void 
 }
 
 static void 
-tic4x_insert_reg (regname, regnum)
-     char *regname;
-     int regnum;
+tic4x_insert_reg (char *regname, int regnum)
 {
   char buf[32];
   int i;
 {
   char buf[32];
   int i;
@@ -716,9 +642,7 @@ tic4x_insert_reg (regname, regnum)
 }
 
 static void 
 }
 
 static void 
-tic4x_insert_sym (symname, value)
-     char *symname;
-     int value;
+tic4x_insert_sym (char *symname, int value)
 {
   symbolS *symbolP;
 
 {
   symbolS *symbolP;
 
@@ -729,9 +653,7 @@ tic4x_insert_sym (symname, value)
 }
 
 static char *
 }
 
 static char *
-tic4x_expression (str, exp)
-     char *str;
-     expressionS *exp;
+tic4x_expression (char *str, expressionS *exp)
 {
   char *s;
   char *t;
 {
   char *s;
   char *t;
@@ -745,9 +667,7 @@ tic4x_expression (str, exp)
 }
 
 static char *
 }
 
 static char *
-tic4x_expression_abs (str, value)
-     char *str;
-     int *value;
+tic4x_expression_abs (char *str, offsetT *value)
 {
   char *s;
   char *t;
 {
   char *s;
   char *t;
@@ -761,9 +681,7 @@ tic4x_expression_abs (str, value)
 }
 
 static void 
 }
 
 static void 
-tic4x_emit_char (c,b)
-     char c;
-     int b;
+tic4x_emit_char (char c, int b)
 {
   expressionS exp;
 
 {
   expressionS exp;
 
@@ -773,11 +691,10 @@ tic4x_emit_char (c,b)
 }
 
 static void 
 }
 
 static void 
-tic4x_seg_alloc (name, seg, size, symbolP)
-     char *name ATTRIBUTE_UNUSED;
-     segT seg ATTRIBUTE_UNUSED;
-     int size;
-     symbolS *symbolP;
+tic4x_seg_alloc (char *name ATTRIBUTE_UNUSED,
+                segT seg ATTRIBUTE_UNUSED,
+                int size,
+                symbolS *symbolP)
 {
   /* Note that the size is in words
      so we multiply it by 4 to get the number of bytes to allocate.  */
 {
   /* Note that the size is in words
      so we multiply it by 4 to get the number of bytes to allocate.  */
@@ -799,8 +716,7 @@ tic4x_seg_alloc (name, seg, size, symbolP)
 
 /* .asg ["]character-string["], symbol */
 static void 
 
 /* .asg ["]character-string["], symbol */
 static void 
-tic4x_asg (x)
-     int x ATTRIBUTE_UNUSED;
+tic4x_asg (int x ATTRIBUTE_UNUSED)
 {
   char c;
   char *name;
 {
   char c;
   char *name;
@@ -815,7 +731,7 @@ tic4x_asg (x)
     input_line_pointer++;
   if (*input_line_pointer != ',')
     {
     input_line_pointer++;
   if (*input_line_pointer != ',')
     {
-      as_bad ("Comma expected\n");
+      as_bad (_("Comma expected\n"));
       return;
     }
   *input_line_pointer++ = '\0';
       return;
     }
   *input_line_pointer++ = '\0';
@@ -828,22 +744,21 @@ tic4x_asg (x)
   strcpy (tmp, name);
   name = tmp;
   if (hash_find (tic4x_asg_hash, name))
   strcpy (tmp, name);
   name = tmp;
   if (hash_find (tic4x_asg_hash, name))
-    hash_replace (tic4x_asg_hash, name, (PTR) str);
+    hash_replace (tic4x_asg_hash, name, (void *) str);
   else
   else
-    hash_insert (tic4x_asg_hash, name, (PTR) str);
+    hash_insert (tic4x_asg_hash, name, (void *) str);
   *input_line_pointer = c;
   demand_empty_rest_of_line ();
 }
 
 /* .bss symbol, size  */
 static void 
   *input_line_pointer = c;
   demand_empty_rest_of_line ();
 }
 
 /* .bss symbol, size  */
 static void 
-tic4x_bss (x)
-     int x ATTRIBUTE_UNUSED;
+tic4x_bss (int x ATTRIBUTE_UNUSED)
 {
   char c;
   char *name;
   char *p;
 {
   char c;
   char *name;
   char *p;
-  int size;
+  offsetT size;
   segT current_seg;
   subsegT current_subseg;
   symbolS *symbolP;
   segT current_seg;
   subsegT current_subseg;
   symbolS *symbolP;
@@ -856,7 +771,7 @@ tic4x_bss (x)
   c = get_symbol_end ();       /* Get terminator.  */
   if (c != ',')
     {
   c = get_symbol_end ();       /* Get terminator.  */
   if (c != ',')
     {
-      as_bad (".bss size argument missing\n");
+      as_bad (_(".bss size argument missing\n"));
       return;
     }
 
       return;
     }
 
@@ -864,7 +779,7 @@ tic4x_bss (x)
     tic4x_expression_abs (++input_line_pointer, &size);
   if (size < 0)
     {
     tic4x_expression_abs (++input_line_pointer, &size);
   if (size < 0)
     {
-      as_bad (".bss size %d < 0!", size);
+      as_bad (_(".bss size %ld < 0!"), (long) size);
       return;
     }
   subseg_set (bss_section, 0);
       return;
     }
   subseg_set (bss_section, 0);
@@ -892,8 +807,7 @@ tic4x_bss (x)
 }
 
 static void
 }
 
 static void
-tic4x_globl (ignore)
-     int ignore ATTRIBUTE_UNUSED;
+tic4x_globl (int ignore ATTRIBUTE_UNUSED)
 {
   char *name;
   int c;
 {
   char *name;
   int c;
@@ -907,6 +821,7 @@ tic4x_globl (ignore)
       *input_line_pointer = c;
       SKIP_WHITESPACE ();
       S_SET_STORAGE_CLASS (symbolP, C_EXT);
       *input_line_pointer = c;
       SKIP_WHITESPACE ();
       S_SET_STORAGE_CLASS (symbolP, C_EXT);
+      S_SET_EXTERNAL (symbolP);
       if (c == ',')
        {
          input_line_pointer++;
       if (c == ',')
        {
          input_line_pointer++;
@@ -922,8 +837,7 @@ tic4x_globl (ignore)
 
 /* Handle .byte, .word. .int, .long */
 static void 
 
 /* Handle .byte, .word. .int, .long */
 static void 
-tic4x_cons (bytes)
-     int bytes;
+tic4x_cons (int bytes)
 {
   register unsigned int c;
   do
 {
   register unsigned int c;
   do
@@ -966,8 +880,7 @@ tic4x_cons (bytes)
 
 /* Handle .ascii, .asciz, .string */
 static void 
 
 /* Handle .ascii, .asciz, .string */
 static void 
-tic4x_stringer (append_zero)
-     int append_zero; /*ex: bytes */
+tic4x_stringer (int append_zero)
 {
   int bytes;
   register unsigned int c;
 {
   int bytes;
   register unsigned int c;
@@ -1000,7 +913,7 @@ tic4x_stringer (append_zero)
          input_line_pointer = tic4x_expression (input_line_pointer, &exp);
          if (exp.X_op != O_constant)
             {
          input_line_pointer = tic4x_expression (input_line_pointer, &exp);
          if (exp.X_op != O_constant)
             {
-              as_bad("Non-constant symbols not allowed\n");
+              as_bad (_("Non-constant symbols not allowed\n"));
               return;
             }
           exp.X_add_number &= 255; /* Limit numeber to 8-bit */
               return;
             }
           exp.X_add_number &= 255; /* Limit numeber to 8-bit */
@@ -1020,11 +933,10 @@ tic4x_stringer (append_zero)
 
 /* .eval expression, symbol */
 static void 
 
 /* .eval expression, symbol */
 static void 
-tic4x_eval (x)
-     int x ATTRIBUTE_UNUSED;
+tic4x_eval (int x ATTRIBUTE_UNUSED)
 {
   char c;
 {
   char c;
-  int value;
+  offsetT value;
   char *name;
 
   SKIP_WHITESPACE ();
   char *name;
 
   SKIP_WHITESPACE ();
@@ -1032,7 +944,7 @@ tic4x_eval (x)
     tic4x_expression_abs (input_line_pointer, &value);
   if (*input_line_pointer++ != ',')
     {
     tic4x_expression_abs (input_line_pointer, &value);
   if (*input_line_pointer++ != ',')
     {
-      as_bad ("Symbol missing\n");
+      as_bad (_("Symbol missing\n"));
       return;
     }
   name = input_line_pointer;
       return;
     }
   name = input_line_pointer;
@@ -1043,8 +955,7 @@ tic4x_eval (x)
 
 /* Reset local labels.  */
 static void 
 
 /* Reset local labels.  */
 static void 
-tic4x_newblock (x)
-     int x ATTRIBUTE_UNUSED;
+tic4x_newblock (int x ATTRIBUTE_UNUSED)
 {
   dollar_label_clear ();
 }
 {
   dollar_label_clear ();
 }
@@ -1052,15 +963,14 @@ tic4x_newblock (x)
 /* .sect "section-name" [, value] */
 /* .sect ["]section-name[:subsection-name]["] [, value] */
 static void 
 /* .sect "section-name" [, value] */
 /* .sect ["]section-name[:subsection-name]["] [, value] */
 static void 
-tic4x_sect (x)
-     int x ATTRIBUTE_UNUSED;
+tic4x_sect (int x ATTRIBUTE_UNUSED)
 {
   char c;
   char *section_name;
   char *subsection_name;
   char *name;
   segT seg;
 {
   char c;
   char *section_name;
   char *subsection_name;
   char *name;
   segT seg;
-  int num;
+  offsetT num;
 
   SKIP_WHITESPACE ();
   if (*input_line_pointer == '"')
 
   SKIP_WHITESPACE ();
   if (*input_line_pointer == '"')
@@ -1081,7 +991,7 @@ tic4x_sect (x)
       subsection_name = input_line_pointer;
       c = get_symbol_end ();   /* Get terminator.  */
       input_line_pointer++;    /* Skip null symbol terminator.  */
       subsection_name = input_line_pointer;
       c = get_symbol_end ();   /* Get terminator.  */
       input_line_pointer++;    /* Skip null symbol terminator.  */
-      as_warn (".sect: subsection name ignored");
+      as_warn (_(".sect: subsection name ignored"));
     }
 
   /* We might still have a '"' to discard, but the character after a
     }
 
   /* We might still have a '"' to discard, but the character after a
@@ -1109,7 +1019,7 @@ tic4x_sect (x)
   if (bfd_get_section_flags (stdoutput, seg) == SEC_NO_FLAGS)
     {
       if (!bfd_set_section_flags (stdoutput, seg, SEC_DATA))
   if (bfd_get_section_flags (stdoutput, seg) == SEC_NO_FLAGS)
     {
       if (!bfd_set_section_flags (stdoutput, seg, SEC_DATA))
-       as_warn ("Error setting flags for \"%s\": %s", name,
+       as_warn (_("Error setting flags for \"%s\": %s"), name,
                 bfd_errmsg (bfd_get_error ()));
     }
 
                 bfd_errmsg (bfd_get_error ()));
     }
 
@@ -1126,8 +1036,7 @@ tic4x_sect (x)
 
 /* symbol[:] .set value  or  .set symbol, value */
 static void 
 
 /* symbol[:] .set value  or  .set symbol, value */
 static void 
-tic4x_set (x)
-     int x ATTRIBUTE_UNUSED;
+tic4x_set (int x ATTRIBUTE_UNUSED)
 {
   symbolS *symbolP;
 
 {
   symbolS *symbolP;
 
@@ -1141,10 +1050,11 @@ tic4x_set (x)
       c = get_symbol_end ();   /* Get terminator.  */
       if (c != ',')
        {
       c = get_symbol_end ();   /* Get terminator.  */
       if (c != ',')
        {
-         as_bad (".set syntax invalid\n");
+         as_bad (_(".set syntax invalid\n"));
          ignore_rest_of_line ();
          return;
        }
          ignore_rest_of_line ();
          return;
        }
+      ++input_line_pointer;
       symbolP = symbol_find_or_make (name);
     }
   else
       symbolP = symbol_find_or_make (name);
     }
   else
@@ -1156,14 +1066,13 @@ tic4x_set (x)
 
 /* [symbol] .usect ["]section-name["], size-in-words [, alignment-flag] */
 static void 
 
 /* [symbol] .usect ["]section-name["], size-in-words [, alignment-flag] */
 static void 
-tic4x_usect (x)
-     int x ATTRIBUTE_UNUSED;
+tic4x_usect (int x ATTRIBUTE_UNUSED)
 {
   char c;
   char *name;
   char *section_name;
   segT seg;
 {
   char c;
   char *name;
   char *section_name;
   segT seg;
-  int size, alignment_flag;
+  offsetT size, alignment_flag;
   segT current_seg;
   subsegT current_subseg;
 
   segT current_seg;
   subsegT current_subseg;
 
@@ -1199,7 +1108,7 @@ tic4x_usect (x)
   else
     alignment_flag = 0;
   if (alignment_flag)
   else
     alignment_flag = 0;
   if (alignment_flag)
-    as_warn (".usect: non-zero alignment flag ignored");
+    as_warn (_(".usect: non-zero alignment flag ignored"));
 
   seg = subseg_new (name, 0);
   if (line_label != NULL)
 
   seg = subseg_new (name, 0);
   if (line_label != NULL)
@@ -1210,7 +1119,7 @@ tic4x_usect (x)
     }
   seg_info (seg)->bss = 1;     /* Uninitialised data.  */
   if (!bfd_set_section_flags (stdoutput, seg, SEC_ALLOC))
     }
   seg_info (seg)->bss = 1;     /* Uninitialised data.  */
   if (!bfd_set_section_flags (stdoutput, seg, SEC_ALLOC))
-    as_warn ("Error setting flags for \"%s\": %s", name,
+    as_warn (_("Error setting flags for \"%s\": %s"), name,
             bfd_errmsg (bfd_get_error ()));
   tic4x_seg_alloc (name, seg, size, line_label);
 
             bfd_errmsg (bfd_get_error ()));
   tic4x_seg_alloc (name, seg, size, line_label);
 
@@ -1223,25 +1132,24 @@ tic4x_usect (x)
 
 /* .version cpu-version.  */
 static void 
 
 /* .version cpu-version.  */
 static void 
-tic4x_version (x)
-     int x ATTRIBUTE_UNUSED;
+tic4x_version (int x ATTRIBUTE_UNUSED)
 {
 {
-  unsigned int temp;
+  offsetT temp;
 
   input_line_pointer =
     tic4x_expression_abs (input_line_pointer, &temp);
   if (!IS_CPU_TIC3X (temp) && !IS_CPU_TIC4X (temp))
 
   input_line_pointer =
     tic4x_expression_abs (input_line_pointer, &temp);
   if (!IS_CPU_TIC3X (temp) && !IS_CPU_TIC4X (temp))
-    as_bad ("This assembler does not support processor generation %d",
-           temp);
+    as_bad (_("This assembler does not support processor generation %ld"),
+           (long) temp);
 
 
-  if (tic4x_cpu && temp != tic4x_cpu)
-    as_warn ("Changing processor generation on fly not supported...");
+  if (tic4x_cpu && temp != (offsetT) tic4x_cpu)
+    as_warn (_("Changing processor generation on fly not supported..."));
   tic4x_cpu = temp;
   demand_empty_rest_of_line ();
 }
 
 static void 
   tic4x_cpu = temp;
   demand_empty_rest_of_line ();
 }
 
 static void 
-tic4x_init_regtable ()
+tic4x_init_regtable (void)
 {
   unsigned int i;
 
 {
   unsigned int i;
 
@@ -1259,7 +1167,7 @@ tic4x_init_regtable ()
 }
 
 static void 
 }
 
 static void 
-tic4x_init_symbols ()
+tic4x_init_symbols (void)
 {
   /* The TI tools accept case insensitive versions of these symbols,
      we don't !
 {
   /* The TI tools accept case insensitive versions of these symbols,
      we don't !
@@ -1316,8 +1224,7 @@ tic4x_init_symbols ()
 
 /* Insert a new instruction template into hash table.  */
 static int 
 
 /* Insert a new instruction template into hash table.  */
 static int 
-tic4x_inst_insert (inst)
-     tic4x_inst_t *inst;
+tic4x_inst_insert (const tic4x_inst_t *inst)
 {
   static char prev_name[16];
   const char *retval = NULL;
 {
   static char prev_name[16];
   const char *retval = NULL;
@@ -1326,7 +1233,7 @@ tic4x_inst_insert (inst)
   if (!strcmp (inst->name, prev_name) || inst->name[0] == '\0')
     return 1;
 
   if (!strcmp (inst->name, prev_name) || inst->name[0] == '\0')
     return 1;
 
-  retval = hash_insert (tic4x_op_hash, inst->name, (PTR) inst);
+  retval = hash_insert (tic4x_op_hash, inst->name, (void *) inst);
   if (retval != NULL)
     fprintf (stderr, "internal error: can't hash `%s': %s\n",
             inst->name, retval);
   if (retval != NULL)
     fprintf (stderr, "internal error: can't hash `%s': %s\n",
             inst->name, retval);
@@ -1337,10 +1244,7 @@ tic4x_inst_insert (inst)
 
 /* Make a new instruction template.  */
 static tic4x_inst_t *
 
 /* Make a new instruction template.  */
 static tic4x_inst_t *
-tic4x_inst_make (name, opcode, args)
-     char *name;
-     unsigned long opcode;
-     char *args;
+tic4x_inst_make (char *name, unsigned long opcode, char *args)
 {
   static tic4x_inst_t *insts = NULL;
   static char *names = NULL;
 {
   static tic4x_inst_t *insts = NULL;
   static char *names = NULL;
@@ -1370,8 +1274,7 @@ tic4x_inst_make (name, opcode, args)
 
 /* Add instruction template, creating dynamic templates as required.  */
 static int 
 
 /* Add instruction template, creating dynamic templates as required.  */
 static int 
-tic4x_inst_add (insts)
-     tic4x_inst_t *insts;
+tic4x_inst_add (const tic4x_inst_t *insts)
 {
   char *s = insts->name;
   char *d;
 {
   char *s = insts->name;
   char *d;
@@ -1382,8 +1285,8 @@ tic4x_inst_add (insts)
   d = name;
 
   /* We do not care about INSNs that is not a part of our
   d = name;
 
   /* We do not care about INSNs that is not a part of our
-     oplevel setting */
-  if (!insts->oplevel & tic4x_oplevel)
+     oplevel setting */
+  if ((insts->oplevel & tic4x_oplevel) == 0)
     return ok;
 
   while (1)
     return ok;
 
   while (1)
@@ -1442,7 +1345,7 @@ tic4x_inst_add (insts)
    set up all the tables, etc., that the MD part of the assembler will
    need.  */
 void 
    set up all the tables, etc., that the MD part of the assembler will
    need.  */
 void 
-md_begin ()
+md_begin (void)
 {
   int ok = 1;
   unsigned int i;
 {
   int ok = 1;
   unsigned int i;
@@ -1483,7 +1386,7 @@ md_begin ()
 
   /* Add mnemonics to hash table, expanding conditional mnemonics on fly.  */
   for (i = 0; i < tic4x_num_insts; i++)
 
   /* Add mnemonics to hash table, expanding conditional mnemonics on fly.  */
   for (i = 0; i < tic4x_num_insts; i++)
-    ok &= tic4x_inst_add ((void *) &tic4x_insts[i]);
+    ok &= tic4x_inst_add (tic4x_insts + i);
 
   /* Create dummy inst to avoid errors accessing end of table.  */
   tic4x_inst_make ("", 0, "");
 
   /* Create dummy inst to avoid errors accessing end of table.  */
   tic4x_inst_make ("", 0, "");
@@ -1499,16 +1402,15 @@ md_begin ()
 }
 
 void 
 }
 
 void 
-tic4x_end ()
+tic4x_end (void)
 {
   bfd_set_arch_mach (stdoutput, bfd_arch_tic4x, 
                     IS_CPU_TIC4X (tic4x_cpu) ? bfd_mach_tic4x : bfd_mach_tic3x);
 }
 
 static int 
 {
   bfd_set_arch_mach (stdoutput, bfd_arch_tic4x, 
                     IS_CPU_TIC4X (tic4x_cpu) ? bfd_mach_tic4x : bfd_mach_tic3x);
 }
 
 static int 
-tic4x_indirect_parse (operand, indirect)
-     tic4x_operand_t *operand;
-     const tic4x_indirect_t *indirect;
+tic4x_indirect_parse (tic4x_operand_t *operand,
+                     const tic4x_indirect_t *indirect)
 {
   char *n = indirect->name;
   char *s = input_line_pointer;
 {
   char *n = indirect->name;
   char *s = input_line_pointer;
@@ -1540,7 +1442,7 @@ tic4x_indirect_parse (operand, indirect)
          if (operand->aregno >= REG_AR0 && operand->aregno <= REG_AR7)
            break;
 
          if (operand->aregno >= REG_AR0 && operand->aregno <= REG_AR7)
            break;
 
-         as_bad ("Auxiliary register AR0--AR7 required for indirect");
+         as_bad (_("Auxiliary register AR0--AR7 required for indirect"));
          return -1;
 
        case 'd':               /* Need to match constant for disp.  */
          return -1;
 
        case 'd':               /* Need to match constant for disp.  */
@@ -1554,7 +1456,7 @@ tic4x_indirect_parse (operand, indirect)
          operand->disp = operand->expr.X_add_number;
          if (operand->disp < 0 || operand->disp > 255)
            {
          operand->disp = operand->expr.X_add_number;
          if (operand->disp < 0 || operand->disp > 255)
            {
-             as_bad ("Bad displacement %d (require 0--255)\n",
+             as_bad (_("Bad displacement %d (require 0--255)\n"),
                      operand->disp);
              return -1;
            }
                      operand->disp);
              return -1;
            }
@@ -1572,7 +1474,7 @@ tic4x_indirect_parse (operand, indirect)
          if (operand->expr.X_add_number != REG_IR0
              && operand->expr.X_add_number != REG_IR1)
            {
          if (operand->expr.X_add_number != REG_IR0
              && operand->expr.X_add_number != REG_IR1)
            {
-             as_bad ("Index register IR0,IR1 required for displacement");
+             as_bad (_("Index register IR0,IR1 required for displacement"));
              return -1;
            }
 
              return -1;
            }
 
@@ -1606,9 +1508,7 @@ tic4x_indirect_parse (operand, indirect)
 }
 
 static char *
 }
 
 static char *
-tic4x_operand_parse (s, operand)
-     char *s;
-     tic4x_operand_t *operand;
+tic4x_operand_parse (char *s, tic4x_operand_t *operand)
 {
   unsigned int i;
   char c;
 {
   unsigned int i;
   char c;
@@ -1643,7 +1543,7 @@ tic4x_operand_parse (s, operand)
     case '%':
       input_line_pointer = tic4x_expression (++input_line_pointer, exp);
       if (exp->X_op != O_register)
     case '%':
       input_line_pointer = tic4x_expression (++input_line_pointer, exp);
       if (exp->X_op != O_register)
-       as_bad ("Expecting a register name");
+       as_bad (_("Expecting a register name"));
       operand->mode = M_REGISTER;
       break;
 
       operand->mode = M_REGISTER;
       break;
 
@@ -1655,7 +1555,7 @@ tic4x_operand_parse (s, operand)
       else if (exp->X_op == O_big)
        {
          if (exp->X_add_number)
       else if (exp->X_op == O_big)
        {
          if (exp->X_add_number)
-           as_bad ("Number too large");        /* bignum required */
+           as_bad (_("Number too large"));     /* bignum required */
          else
            {
              tic4x_gen_to_words (generic_floating_point_number,
          else
            {
              tic4x_gen_to_words (generic_floating_point_number,
@@ -1678,7 +1578,7 @@ tic4x_operand_parse (s, operand)
       else if (exp->X_op == O_big)
        {
          if (exp->X_add_number > 0)
       else if (exp->X_op == O_big)
        {
          if (exp->X_add_number > 0)
-           as_bad ("Number too large");        /* bignum required.  */
+           as_bad (_("Number too large"));     /* bignum required.  */
          else
            {
              tic4x_gen_to_words (generic_floating_point_number,
          else
            {
              tic4x_gen_to_words (generic_floating_point_number,
@@ -1695,18 +1595,18 @@ tic4x_operand_parse (s, operand)
        }
 
       else
        }
 
       else
-       as_bad ("Expecting a constant value");
+       as_bad (_("Expecting a constant value"));
       break;
     case '\\':
 #endif
     case '@':
       input_line_pointer = tic4x_expression (++input_line_pointer, exp);
       if (exp->X_op != O_constant && exp->X_op != O_symbol)
       break;
     case '\\':
 #endif
     case '@':
       input_line_pointer = tic4x_expression (++input_line_pointer, exp);
       if (exp->X_op != O_constant && exp->X_op != O_symbol)
-       as_bad ("Bad direct addressing construct %s", s);
+       as_bad (_("Bad direct addressing construct %s"), s);
       if (exp->X_op == O_constant)
        {
          if (exp->X_add_number < 0)
       if (exp->X_op == O_constant)
        {
          if (exp->X_add_number < 0)
-           as_bad ("Direct value of %ld is not suitable",
+           as_bad (_("Direct value of %ld is not suitable"),
                    (long) exp->X_add_number);
        }
       operand->mode = M_DIRECT;
                    (long) exp->X_add_number);
        }
       operand->mode = M_DIRECT;
@@ -1730,7 +1630,7 @@ tic4x_operand_parse (s, operand)
            operand->expr.X_add_number = 0x18;
        }
       else
            operand->expr.X_add_number = 0x18;
        }
       else
-       as_bad ("Unknown indirect addressing mode");
+       as_bad (_("Unknown indirect addressing mode"));
       break;
 
     default:
       break;
 
     default:
@@ -1747,7 +1647,7 @@ tic4x_operand_parse (s, operand)
       else if (exp->X_op == O_big)
        {
          if (exp->X_add_number > 0)
       else if (exp->X_op == O_big)
        {
          if (exp->X_add_number > 0)
-           as_bad ("Number too large");        /* bignum required.  */
+           as_bad (_("Number too large"));     /* bignum required.  */
          else
            {
              tic4x_gen_to_words (generic_floating_point_number,
          else
            {
              tic4x_gen_to_words (generic_floating_point_number,
@@ -1772,10 +1672,7 @@ tic4x_operand_parse (s, operand)
 }
 
 static int 
 }
 
 static int 
-tic4x_operands_match (inst, insn, check)
-     tic4x_inst_t *inst;
-     tic4x_insn_t *insn;
-     int check;
+tic4x_operands_match (tic4x_inst_t *inst, tic4x_insn_t *insn, int check)
 {
   const char *args = inst->args;
   unsigned long opcode = inst->opcode;
 {
   const char *args = inst->args;
   unsigned long opcode = inst->opcode;
@@ -1830,7 +1727,7 @@ tic4x_operands_match (inst, insn, check)
               else
                 {
                  if (!check)
               else
                 {
                  if (!check)
-                    as_bad ("Immediate value of %ld is too large for ldf",
+                    as_bad (_("Immediate value of %ld is too large for ldf"),
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
@@ -1870,7 +1767,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Destination register must be ARn");
+                as_bad (_("Destination register must be ARn"));
              ret = -1;
            }
          continue;
              ret = -1;
            }
          continue;
@@ -1889,7 +1786,7 @@ tic4x_operands_match (inst, insn, check)
              else
                {
                  if (!check)
              else
                {
                  if (!check)
-                    as_bad ("Immediate value of %ld is too large",
+                    as_bad (_("Immediate value of %ld is too large"),
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
@@ -1918,7 +1815,7 @@ tic4x_operands_match (inst, insn, check)
              && operand->expr.X_add_number != 0x18)
            {
               if (!check)
              && operand->expr.X_add_number != 0x18)
            {
               if (!check)
-                as_bad ("Invalid indirect addressing mode");
+                as_bad (_("Invalid indirect addressing mode"));
               ret = -1;
              continue;
            }
               ret = -1;
              continue;
            }
@@ -1942,7 +1839,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Register must be Rn");
+                as_bad (_("Register must be Rn"));
              ret = -1;
            }
           continue;
              ret = -1;
            }
           continue;
@@ -1982,7 +1879,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Register must be Rn");
+                as_bad (_("Register must be Rn"));
              ret = -1;
            }
           continue;
              ret = -1;
            }
           continue;
@@ -1996,7 +1893,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Register must be R0--R7");
+                as_bad (_("Register must be R0--R7"));
              ret = -1;
            }
          continue;
              ret = -1;
            }
          continue;
@@ -2020,7 +1917,7 @@ tic4x_operands_match (inst, insn, check)
              if (IS_CPU_TIC4X (tic4x_cpu))
                break;
               if (!check)
              if (IS_CPU_TIC4X (tic4x_cpu))
                break;
               if (!check)
-                as_bad ("Invalid indirect addressing mode displacement %d",
+                as_bad (_("Invalid indirect addressing mode displacement %d"),
                         operand->disp);
              ret = -1;
              continue;
                         operand->disp);
              ret = -1;
              continue;
@@ -2048,7 +1945,7 @@ tic4x_operands_match (inst, insn, check)
              if (IS_CPU_TIC4X (tic4x_cpu))
                break;
               if (!check)
              if (IS_CPU_TIC4X (tic4x_cpu))
                break;
               if (!check)
-                as_bad ("Invalid indirect addressing mode displacement %d",
+                as_bad (_("Invalid indirect addressing mode displacement %d"),
                         operand->disp);
              ret = -1;
              continue;
                         operand->disp);
              ret = -1;
              continue;
@@ -2066,7 +1963,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Register must be R0--R7");
+                as_bad (_("Register must be R0--R7"));
              ret = -1;
            }
          continue;
              ret = -1;
            }
          continue;
@@ -2080,7 +1977,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Register must be R0--R7");
+                as_bad (_("Register must be R0--R7"));
              ret = -1;
            }
          continue;
              ret = -1;
            }
          continue;
@@ -2094,7 +1991,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Destination register must be R2 or R3");
+                as_bad (_("Destination register must be R2 or R3"));
              ret = -1;
            }
          continue;
              ret = -1;
            }
          continue;
@@ -2108,7 +2005,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Destination register must be R0 or R1");
+                as_bad (_("Destination register must be R0 or R1"));
              ret = -1;
            }
          continue;
              ret = -1;
            }
          continue;
@@ -2123,7 +2020,7 @@ tic4x_operands_match (inst, insn, check)
              && operand->expr.X_add_number != 0x18)
            {
               if (!check)
              && operand->expr.X_add_number != 0x18)
            {
               if (!check)
-                as_bad ("Invalid indirect addressing mode");
+                as_bad (_("Invalid indirect addressing mode"));
              ret = -1;
              continue;
            }
              ret = -1;
              continue;
            }
@@ -2145,7 +2042,7 @@ tic4x_operands_match (inst, insn, check)
              else
                {
                   if (!check)
              else
                {
                   if (!check)
-                    as_bad ("Displacement value of %ld is too large",
+                    as_bad (_("Displacement value of %ld is too large"),
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
@@ -2173,7 +2070,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Register must be Rn");
+                as_bad (_("Register must be Rn"));
              ret = -1;
            }
           continue;
              ret = -1;
            }
           continue;
@@ -2195,7 +2092,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Register must be Rn");
+                as_bad (_("Register must be Rn"));
              ret = -1;
            }
           continue;
              ret = -1;
            }
           continue;
@@ -2206,7 +2103,7 @@ tic4x_operands_match (inst, insn, check)
          if (exp->X_op == O_big)
            {
               if (!check)
          if (exp->X_op == O_big)
            {
               if (!check)
-                as_bad ("Floating point number not valid in expression");
+                as_bad (_("Floating point number not valid in expression"));
              ret = -1;
              continue;
            }
              ret = -1;
              continue;
            }
@@ -2220,7 +2117,7 @@ tic4x_operands_match (inst, insn, check)
              else
                {
                  if (!check)
              else
                {
                  if (!check)
-                    as_bad ("Signed immediate value %ld too large",
+                    as_bad (_("Signed immediate value %ld too large"),
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
@@ -2262,7 +2159,7 @@ tic4x_operands_match (inst, insn, check)
              else
                {
                   if (!check)
              else
                {
                   if (!check)
-                    as_bad ("Immediate value of %ld is too large",
+                    as_bad (_("Immediate value of %ld is too large"),
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
@@ -2283,7 +2180,7 @@ tic4x_operands_match (inst, insn, check)
              else
                {
                   if (!check)
              else
                {
                   if (!check)
-                    as_bad ("Unsigned immediate value %ld too large",
+                    as_bad (_("Unsigned immediate value %ld too large"),
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
@@ -2321,7 +2218,7 @@ tic4x_operands_match (inst, insn, check)
              else
                {
                   if (!check)
              else
                {
                   if (!check)
-                    as_bad ("Immediate value of %ld is too large",
+                    as_bad (_("Immediate value of %ld is too large"),
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
@@ -2337,7 +2234,7 @@ tic4x_operands_match (inst, insn, check)
          if (exp->X_op == O_big)
            {
               if (!check)
          if (exp->X_op == O_big)
            {
               if (!check)
-                as_bad ("Floating point number not valid in expression");
+                as_bad (_("Floating point number not valid in expression"));
              ret = -1;
              continue;
            }
              ret = -1;
              continue;
            }
@@ -2351,7 +2248,7 @@ tic4x_operands_match (inst, insn, check)
              else
                {
                   if (!check)
              else
                {
                   if (!check)
-                    as_bad ("Immediate value %ld too large",
+                    as_bad (_("Immediate value %ld too large"),
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
                             (long) exp->X_add_number);
                  ret = -1;
                  continue;
@@ -2370,7 +2267,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Register must be ivtp or tvtp");
+                as_bad (_("Register must be ivtp or tvtp"));
              ret = -1;
            }
          continue;
              ret = -1;
            }
          continue;
@@ -2384,7 +2281,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Register must be address register");
+                as_bad (_("Register must be address register"));
              ret = -1;
            }
          continue;
              ret = -1;
            }
          continue;
@@ -2398,7 +2295,7 @@ tic4x_operands_match (inst, insn, check)
          else
            {
               if (!check)
          else
            {
               if (!check)
-                as_bad ("Register must be ivtp or tvtp");
+                as_bad (_("Register must be ivtp or tvtp"));
              ret = -1;
            }
          continue;
              ret = -1;
            }
          continue;
@@ -2446,8 +2343,7 @@ tic4x_operands_match (inst, insn, check)
 }
 
 static void
 }
 
 static void
-tic4x_insn_check (insn)
-     tic4x_insn_t *insn;
+tic4x_insn_check (tic4x_insn_t *insn)
 {
   
   if (!strcmp(insn->name, "lda"))
 {
   
   if (!strcmp(insn->name, "lda"))
@@ -2458,7 +2354,7 @@ tic4x_insn_check (insn)
       if ( insn->operands[0].mode == M_REGISTER
            && insn->operands[1].mode == M_REGISTER
            && insn->operands[0].expr.X_add_number == insn->operands[1].expr.X_add_number )
       if ( insn->operands[0].mode == M_REGISTER
            && insn->operands[1].mode == M_REGISTER
            && insn->operands[0].expr.X_add_number == insn->operands[1].expr.X_add_number )
-        as_bad ("Source and destination register should not be equal");
+        as_bad (_("Source and destination register should not be equal"));
     }
   else if( !strcmp(insn->name, "ldi_ldi")
            || !strcmp(insn->name, "ldi1_ldi2")
     }
   else if( !strcmp(insn->name, "ldi_ldi")
            || !strcmp(insn->name, "ldi1_ldi2")
@@ -2473,13 +2369,12 @@ tic4x_insn_check (insn)
       if ( insn->operands[1].mode == M_REGISTER
            && insn->operands[insn->num_operands-1].mode == M_REGISTER
            && insn->operands[1].expr.X_add_number == insn->operands[insn->num_operands-1].expr.X_add_number )
       if ( insn->operands[1].mode == M_REGISTER
            && insn->operands[insn->num_operands-1].mode == M_REGISTER
            && insn->operands[1].expr.X_add_number == insn->operands[insn->num_operands-1].expr.X_add_number )
-        as_warn ("Equal parallell destination registers, one result will be discarded");
+        as_warn (_("Equal parallell destination registers, one result will be discarded"));
     }
 }
 
 static void 
     }
 }
 
 static void 
-tic4x_insn_output (insn)
-     tic4x_insn_t *insn;
+tic4x_insn_output (tic4x_insn_t *insn)
 {
   char *dst;
 
 {
   char *dst;
 
@@ -2503,11 +2398,8 @@ tic4x_insn_output (insn)
 }
 
 /* Parse the operands.  */
 }
 
 /* Parse the operands.  */
-int 
-tic4x_operands_parse (s, operands, num_operands)
-     char *s;
-     tic4x_operand_t *operands;
-     int num_operands;
+static int 
+tic4x_operands_parse (char *s, tic4x_operand_t *operands, int num_operands)
 {
   if (!*s)
     return num_operands;
 {
   if (!*s)
     return num_operands;
@@ -2518,7 +2410,7 @@ tic4x_operands_parse (s, operands, num_operands)
 
   if (num_operands > TIC4X_OPERANDS_MAX)
     {
 
   if (num_operands > TIC4X_OPERANDS_MAX)
     {
-      as_bad ("Too many operands scanned");
+      as_bad (_("Too many operands scanned"));
       return -1;
     }
   return num_operands;
       return -1;
     }
   return num_operands;
@@ -2528,8 +2420,7 @@ tic4x_operands_parse (s, operands, num_operands)
    by the generic front end.  We just parse mnemonic and operands, and
    produce the bytes of data and relocation.  */
 void 
    by the generic front end.  We just parse mnemonic and operands, and
    produce the bytes of data and relocation.  */
 void 
-md_assemble (str)
-     char *str;
+md_assemble (char *str)
 {
   int ok = 0;
   char *s;
 {
   int ok = 0;
   char *s;
@@ -2549,7 +2440,7 @@ md_assemble (str)
         {
           if(insn->parallel)
             {
         {
           if(insn->parallel)
             {
-              as_bad ("Parallel opcode cannot contain more than two instructions");
+              as_bad (_("Parallel opcode cannot contain more than two instructions"));
               insn->parallel = 0;
               insn->in_use = 0;
               return;
               insn->parallel = 0;
               insn->in_use = 0;
               return;
@@ -2594,7 +2485,7 @@ md_assemble (str)
       if ((insn->inst = (struct tic4x_inst *)
           hash_find (tic4x_op_hash, insn->name)) == NULL)
        {
       if ((insn->inst = (struct tic4x_inst *)
           hash_find (tic4x_op_hash, insn->name)) == NULL)
        {
-         as_bad ("Unknown opcode `%s'.", insn->name);
+         as_bad (_("Unknown opcode `%s'."), insn->name);
          insn->parallel = 0;
          insn->in_use = 0;
          return;
          insn->parallel = 0;
          insn->in_use = 0;
          return;
@@ -2622,10 +2513,10 @@ md_assemble (str)
         {
           if (first_inst)
             tic4x_operands_match (first_inst, insn, 0);
         {
           if (first_inst)
             tic4x_operands_match (first_inst, insn, 0);
-          as_bad ("Invalid operands for %s", insn->name);
+          as_bad (_("Invalid operands for %s"), insn->name);
         }
       else
         }
       else
-       as_bad ("Invalid instruction %s", insn->name);
+       as_bad (_("Invalid instruction %s"), insn->name);
     }
 
   if (str && !parsed)
     }
 
   if (str && !parsed)
@@ -2640,7 +2531,7 @@ md_assemble (str)
 
       if ((i = tic4x_operands_parse (s, insn->operands, 0)) < 0)
        {
 
       if ((i = tic4x_operands_parse (s, insn->operands, 0)) < 0)
        {
-         insn->inst = NULL;    /* Flag that error occured.  */
+         insn->inst = NULL;    /* Flag that error occurred.  */
          insn->parallel = 0;
          insn->in_use = 0;
          return;
          insn->parallel = 0;
          insn->in_use = 0;
          return;
@@ -2654,7 +2545,7 @@ md_assemble (str)
 }
 
 void
 }
 
 void
-tic4x_cleanup ()
+tic4x_cleanup (void)
 {
   if (insn->in_use)
     md_assemble (NULL);
 {
   if (insn->in_use)
     md_assemble (NULL);
@@ -2662,53 +2553,50 @@ tic4x_cleanup ()
 
 /* Turn a string in input_line_pointer into a floating point constant
    of type type, and store the appropriate bytes in *litP.  The number
 
 /* Turn a string in input_line_pointer into a floating point constant
    of type type, and store the appropriate bytes in *litP.  The number
-   of LITTLENUMS emitted is stored in *sizeP.  An error message is
+   of chars emitted is stored in *sizeP.  An error message is
    returned, or NULL on OK.  */
 
 char *
    returned, or NULL on OK.  */
 
 char *
-md_atof (type, litP, sizeP)
-     int type;
-     char *litP;
-     int *sizeP;
+md_atof (int type, char *litP, int *sizeP)
 {
   int prec;
   int ieee;
   LITTLENUM_TYPE words[MAX_LITTLENUMS];
   LITTLENUM_TYPE *wordP;
 {
   int prec;
   int ieee;
   LITTLENUM_TYPE words[MAX_LITTLENUMS];
   LITTLENUM_TYPE *wordP;
-  unsigned char *t;
+  char *t;
 
   switch (type)
     {
 
   switch (type)
     {
-    case 's':                  /* .single */
+    case 's':          /* .single  */
     case 'S':
       ieee = 0;
       prec = 1;
       break;
 
     case 'S':
       ieee = 0;
       prec = 1;
       break;
 
-    case 'd':                  /* .double */
+    case 'd':          /* .double  */
     case 'D':
     case 'D':
-    case 'f':                  /* .float or .single */
+    case 'f':          /* .float  */
     case 'F':
       ieee = 0;
     case 'F':
       ieee = 0;
-      prec = 2;                        /* 1 32-bit word */
+      prec = 2;                /* 1 32-bit word */
       break;
 
       break;
 
-    case 'i':                  /* .ieee */
+    case 'i':          /* .ieee */
     case 'I':
       prec = 2;
       ieee = 1;
     case 'I':
       prec = 2;
       ieee = 1;
-      type = 'f';  /* Rewrite type to be usable by atof_ieee() */
+      type = 'f';  /* Rewrite type to be usable by atof_ieee() */
       break;
 
       break;
 
-    case 'e':                  /* .ldouble */
+    case 'e':          /* .ldouble */
     case 'E':
     case 'E':
-      prec = 4;                        /* 2 32-bit words */
+      prec = 4;                /* 2 32-bit words */
       ieee = 0;
       break;
 
     default:
       *sizeP = 0;
       ieee = 0;
       break;
 
     default:
       *sizeP = 0;
-      return "Bad call to md_atof()";
+      return _("Unrecognized or unsupported floating point constant");
     }
 
   if (ieee)
     }
 
   if (ieee)
@@ -2718,15 +2606,15 @@ md_atof (type, litP, sizeP)
   if (t)
     input_line_pointer = t;
   *sizeP = prec * sizeof (LITTLENUM_TYPE);
   if (t)
     input_line_pointer = t;
   *sizeP = prec * sizeof (LITTLENUM_TYPE);
-  t = litP;
+
   /* This loops outputs the LITTLENUMs in REVERSE order; in accord with
      little endian byte order.  */
   /* SES: However it is required to put the words (32-bits) out in the
      correct order, hence we write 2 and 2 littlenums in little endian
   /* This loops outputs the LITTLENUMs in REVERSE order; in accord with
      little endian byte order.  */
   /* SES: However it is required to put the words (32-bits) out in the
      correct order, hence we write 2 and 2 littlenums in little endian
-     order, while we keep the original order on successive words. */
-  for(wordP = words; wordP<(words+prec) ; wordP+=2)
+     order, while we keep the original order on successive words.  */
+  for (wordP = words; wordP<(words+prec) ; wordP+=2)
     {
     {
-      if (wordP<(words+prec-1)) /* Dump wordP[1] (if we have one) */
+      if (wordP < (words + prec - 1)) /* Dump wordP[1] (if we have one).  */
         {
           md_number_to_chars (litP, (valueT) (wordP[1]),
                               sizeof (LITTLENUM_TYPE));
         {
           md_number_to_chars (litP, (valueT) (wordP[1]),
                               sizeof (LITTLENUM_TYPE));
@@ -2738,14 +2626,11 @@ md_atof (type, litP, sizeP)
                           sizeof (LITTLENUM_TYPE));
       litP += sizeof (LITTLENUM_TYPE);
     }
                           sizeof (LITTLENUM_TYPE));
       litP += sizeof (LITTLENUM_TYPE);
     }
-  return 0;
+  return NULL;
 }
 
 void 
 }
 
 void 
-md_apply_fix3 (fixP, value, seg)
-     fixS *fixP;
-     valueT *value;
-     segT seg ATTRIBUTE_UNUSED;
+md_apply_fix (fixS *fixP, valueT *value, segT seg ATTRIBUTE_UNUSED)
 {
   char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
   valueT val = *value;
 {
   char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
   valueT val = *value;
@@ -2780,7 +2665,7 @@ md_apply_fix3 (fixP, value, seg)
 
     case NO_RELOC:
     default:
 
     case NO_RELOC:
     default:
-      as_bad ("Bad relocation type: 0x%02x", fixP->fx_r_type);
+      as_bad (_("Bad relocation type: 0x%02x"), fixP->fx_r_type);
       break;
     }
 
       break;
     }
 
@@ -2789,43 +2674,39 @@ md_apply_fix3 (fixP, value, seg)
 
 /* Should never be called for tic4x.  */
 void 
 
 /* Should never be called for tic4x.  */
 void 
-md_convert_frag (headers, sec, fragP)
-     bfd *headers ATTRIBUTE_UNUSED;
-     segT sec ATTRIBUTE_UNUSED;
-     fragS *fragP ATTRIBUTE_UNUSED;
+md_convert_frag (bfd *headers ATTRIBUTE_UNUSED,
+                segT sec ATTRIBUTE_UNUSED,
+                fragS *fragP ATTRIBUTE_UNUSED)
 {
   as_fatal ("md_convert_frag");
 }
 
 /* Should never be called for tic4x.  */
 void
 {
   as_fatal ("md_convert_frag");
 }
 
 /* Should never be called for tic4x.  */
 void
-md_create_short_jump (ptr, from_addr, to_addr, frag, to_symbol)
-     char *ptr ATTRIBUTE_UNUSED;
-     addressT from_addr ATTRIBUTE_UNUSED;
-     addressT to_addr ATTRIBUTE_UNUSED;
-     fragS *frag ATTRIBUTE_UNUSED;
-     symbolS *to_symbol ATTRIBUTE_UNUSED;
+md_create_short_jump (char *ptr ATTRIBUTE_UNUSED,
+                     addressT from_addr ATTRIBUTE_UNUSED,
+                     addressT to_addr ATTRIBUTE_UNUSED,
+                     fragS *frag ATTRIBUTE_UNUSED,
+                     symbolS *to_symbol ATTRIBUTE_UNUSED)
 {
   as_fatal ("md_create_short_jmp\n");
 }
 
 /* Should never be called for tic4x.  */
 void
 {
   as_fatal ("md_create_short_jmp\n");
 }
 
 /* Should never be called for tic4x.  */
 void
-md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
-     char *ptr ATTRIBUTE_UNUSED;
-     addressT from_addr ATTRIBUTE_UNUSED;
-     addressT to_addr ATTRIBUTE_UNUSED;
-     fragS *frag ATTRIBUTE_UNUSED;
-     symbolS *to_symbol ATTRIBUTE_UNUSED;
+md_create_long_jump (char *ptr ATTRIBUTE_UNUSED,
+                    addressT from_addr ATTRIBUTE_UNUSED,
+                    addressT to_addr ATTRIBUTE_UNUSED,
+                    fragS *frag ATTRIBUTE_UNUSED,
+                    symbolS *to_symbol ATTRIBUTE_UNUSED)
 {
   as_fatal ("md_create_long_jump\n");
 }
 
 /* Should never be called for tic4x.  */
 int
 {
   as_fatal ("md_create_long_jump\n");
 }
 
 /* Should never be called for tic4x.  */
 int
-md_estimate_size_before_relax (fragP, segtype)
-     register fragS *fragP ATTRIBUTE_UNUSED;
-     segT segtype ATTRIBUTE_UNUSED;
+md_estimate_size_before_relax (fragS *fragP ATTRIBUTE_UNUSED,
+                              segT segtype ATTRIBUTE_UNUSED)
 {
   as_fatal ("md_estimate_size_before_relax\n");
   return 0;
 {
   as_fatal ("md_estimate_size_before_relax\n");
   return 0;
@@ -2833,9 +2714,7 @@ md_estimate_size_before_relax (fragP, segtype)
 
 
 int
 
 
 int
-md_parse_option (c, arg)
-     int c;
-     char *arg;
+md_parse_option (int c, char *arg)
 {
   switch (c)
     {
 {
   switch (c)
     {
@@ -2844,7 +2723,7 @@ md_parse_option (c, arg)
        arg++;
       tic4x_cpu = atoi (arg);
       if (!IS_CPU_TIC3X (tic4x_cpu) && !IS_CPU_TIC4X (tic4x_cpu))
        arg++;
       tic4x_cpu = atoi (arg);
       if (!IS_CPU_TIC3X (tic4x_cpu) && !IS_CPU_TIC4X (tic4x_cpu))
-       as_warn ("Unsupported processor generation %d", tic4x_cpu);
+       as_warn (_("Unsupported processor generation %d"), tic4x_cpu);
       break;
 
     case OPTION_REV:             /* cpu revision */
       break;
 
     case OPTION_REV:             /* cpu revision */
@@ -2852,25 +2731,25 @@ md_parse_option (c, arg)
       break;
 
     case 'b':
       break;
 
     case 'b':
-      as_warn ("Option -b is depreciated, please use -mbig");
+      as_warn (_("Option -b is depreciated, please use -mbig"));
     case OPTION_BIG:             /* big model */
       tic4x_big_model = 1;
       break;
 
     case 'p':
     case OPTION_BIG:             /* big model */
       tic4x_big_model = 1;
       break;
 
     case 'p':
-      as_warn ("Option -p is depreciated, please use -mmemparm");
+      as_warn (_("Option -p is depreciated, please use -mmemparm"));
     case OPTION_MEMPARM:         /* push args */
       tic4x_reg_args = 0;
       break;
 
     case 'r':                  
     case OPTION_MEMPARM:         /* push args */
       tic4x_reg_args = 0;
       break;
 
     case 'r':                  
-      as_warn ("Option -r is depreciated, please use -mregparm");
+      as_warn (_("Option -r is depreciated, please use -mregparm"));
     case OPTION_REGPARM:        /* register args */
       tic4x_reg_args = 1;
       break;
 
     case 's':
     case OPTION_REGPARM:        /* register args */
       tic4x_reg_args = 1;
       break;
 
     case 's':
-      as_warn ("Option -s is depreciated, please use -msmall");
+      as_warn (_("Option -s is depreciated, please use -msmall"));
     case OPTION_SMALL:         /* small model */
       tic4x_big_model = 0;
       break;
     case OPTION_SMALL:         /* small model */
       tic4x_big_model = 0;
       break;
@@ -2895,8 +2774,7 @@ md_parse_option (c, arg)
 }
 
 void
 }
 
 void
-md_show_usage (stream)
-     FILE *stream;
+md_show_usage (FILE *stream)
 {
   fprintf (stream,
       _("\nTIC4X options:\n"
 {
   fprintf (stream,
       _("\nTIC4X options:\n"
@@ -2924,8 +2802,7 @@ md_show_usage (stream)
    definitions of TI C3x tools style local labels $n where n is a single
    decimal digit.  */
 int 
    definitions of TI C3x tools style local labels $n where n is a single
    decimal digit.  */
 int 
-tic4x_unrecognized_line (c)
-     int c;
+tic4x_unrecognized_line (int c)
 {
   int lab;
   char *s;
 {
   int lab;
   char *s;
@@ -2945,7 +2822,7 @@ tic4x_unrecognized_line (c)
 
   if (dollar_label_defined (lab))
     {
 
   if (dollar_label_defined (lab))
     {
-      as_bad ("Label \"$%d\" redefined", lab);
+      as_bad (_("Label \"$%d\" redefined"), lab);
       return 0;
     }
 
       return 0;
     }
 
@@ -2958,8 +2835,7 @@ tic4x_unrecognized_line (c)
 
 /* Handle local labels peculiar to us referred to in an expression.  */
 symbolS *
 
 /* Handle local labels peculiar to us referred to in an expression.  */
 symbolS *
-md_undefined_symbol (name)
-     char *name;
+md_undefined_symbol (char *name)
 {
   /* Look for local labels of the form $n.  */
   if (name[0] == '$' && ISDIGIT (name[1]))
 {
   /* Look for local labels of the form $n.  */
   if (name[0] == '$' && ISDIGIT (name[1]))
@@ -2991,23 +2867,19 @@ md_undefined_symbol (name)
 
 /* Parse an operand that is machine-specific.  */
 void
 
 /* Parse an operand that is machine-specific.  */
 void
-md_operand (expressionP)
-     expressionS *expressionP ATTRIBUTE_UNUSED;
+md_operand (expressionS *expressionP ATTRIBUTE_UNUSED)
 {
 }
 
 /* Round up a section size to the appropriate boundary---do we need this?  */
 valueT
 {
 }
 
 /* Round up a section size to the appropriate boundary---do we need this?  */
 valueT
-md_section_align (segment, size)
-     segT segment ATTRIBUTE_UNUSED;
-     valueT size;
+md_section_align (segT segment ATTRIBUTE_UNUSED, valueT size)
 {
   return size;                 /* Byte (i.e., 32-bit) alignment is fine?  */
 }
 
 static int 
 {
   return size;                 /* Byte (i.e., 32-bit) alignment is fine?  */
 }
 
 static int 
-tic4x_pc_offset (op)
-     unsigned int op;
+tic4x_pc_offset (unsigned int op)
 {
   /* Determine the PC offset for a C[34]x instruction.
      This could be simplified using some boolean algebra
 {
   /* Determine the PC offset for a C[34]x instruction.
      This could be simplified using some boolean algebra
@@ -3069,12 +2941,12 @@ tic4x_pc_offset (op)
    DBcondD, BcondD  disp + PC + 3 => PC
  */
 long
    DBcondD, BcondD  disp + PC + 3 => PC
  */
 long
-md_pcrel_from (fixP)
-     fixS *fixP;
+md_pcrel_from (fixS *fixP)
 {
 {
-  unsigned char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
+  unsigned char *buf;
   unsigned int op;
 
   unsigned int op;
 
+  buf = (unsigned char *) fixP->fx_frag->fr_literal + fixP->fx_where;
   op = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
 
   return ((fixP->fx_where + fixP->fx_frag->fr_address) >> 2) +
   op = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
 
   return ((fixP->fx_where + fixP->fx_frag->fr_address) >> 2) +
@@ -3084,11 +2956,10 @@ md_pcrel_from (fixP)
 /* Fill the alignment area with NOP's on .text, unless fill-data
    was specified. */
 int 
 /* Fill the alignment area with NOP's on .text, unless fill-data
    was specified. */
 int 
-tic4x_do_align (alignment, fill, len, max)
-     int alignment ATTRIBUTE_UNUSED;
-     const char *fill ATTRIBUTE_UNUSED;
-     int len ATTRIBUTE_UNUSED;
-     int max ATTRIBUTE_UNUSED;
+tic4x_do_align (int alignment ATTRIBUTE_UNUSED,
+               const char *fill ATTRIBUTE_UNUSED,
+               int len ATTRIBUTE_UNUSED,
+               int max ATTRIBUTE_UNUSED)
 {
   unsigned long nop = TIC_NOP_OPCODE;
 
 {
   unsigned long nop = TIC_NOP_OPCODE;
 
@@ -3117,7 +2988,7 @@ tic4x_do_align (alignment, fill, len, max)
 
 /* Look for and remove parallel instruction operator ||.  */
 void 
 
 /* Look for and remove parallel instruction operator ||.  */
 void 
-tic4x_start_line ()
+tic4x_start_line (void)
 {
   char *s = input_line_pointer;
 
 {
   char *s = input_line_pointer;
 
@@ -3145,9 +3016,7 @@ tic4x_start_line ()
 }
 
 arelent *
 }
 
 arelent *
-tc_gen_reloc (seg, fixP)
-     asection *seg ATTRIBUTE_UNUSED;
-     fixS *fixP;
+tc_gen_reloc (asection *seg ATTRIBUTE_UNUSED, fixS *fixP)
 {
   arelent *reloc;
 
 {
   arelent *reloc;
 
@@ -3161,7 +3030,7 @@ tc_gen_reloc (seg, fixP)
   if (reloc->howto == (reloc_howto_type *) NULL)
     {
       as_bad_where (fixP->fx_file, fixP->fx_line,
   if (reloc->howto == (reloc_howto_type *) NULL)
     {
       as_bad_where (fixP->fx_file, fixP->fx_line,
-                   "Reloc %d not supported by object file format",
+                   _("Reloc %d not supported by object file format"),
                    (int) fixP->fx_r_type);
       return NULL;
     }
                    (int) fixP->fx_r_type);
       return NULL;
     }