[AArch64][SVE 08/32] Generalise aarch64_double_precision_fmovable
[deliverable/binutils-gdb.git] / gas / config / tc-tic4x.c
index ec6753c1ed77ca4377813c4d521d890ccafe9598..407fe177c01225973f9ddcc8ec0a6721dbf61381 100644 (file)
@@ -1,5 +1,5 @@
 /* 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-2016 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 +7,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,
 
    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, 51 Franklin Street - Fifth Floor, 
+   the Free Software Foundation, 51 Franklin Street - Fifth Floor,
    Boston, MA 02110-1301, USA.  */
 /*
   TODOs:
   ------
    Boston, MA 02110-1301, USA.  */
 /*
   TODOs:
   ------
-  
+
   o .align cannot handle fill-data-width larger than 0xFF/8-bits. It
     should be possible to define a 32-bits pattern.
 
   o .align cannot handle fill-data-width larger than 0xFF/8-bits. It
     should be possible to define a 32-bits pattern.
 
-  o .align fills all section with NOP's when used regardless if has
-    been used in .text or .data. (However the .align is primarily
-    intended used in .text sections. If you require something else,
-    use .align <size>,0x00)
-
   o .align: Implement a 'bu' insn if the number of nop's exceeds 4
     within the align frag. if(fragsize>4words) insert bu fragend+1
     first.
   o .align: Implement a 'bu' insn if the number of nop's exceeds 4
     within the align frag. if(fragsize>4words) insert bu fragend+1
     first.
   o Evaluation of constant floating point expressions (expr.c needs
     work!)
 
   o Evaluation of constant floating point expressions (expr.c needs
     work!)
 
-  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 "as.h"
+#include "safe-ctype.h"
 #include "opcode/tic4x.h"
 #include "subsegs.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
@@ -90,7 +80,7 @@ static unsigned long tic4x_oplevel = 0;   /* Opcode level */
 #define OPTION_ENHANCED (OPTION_MD_BASE + 7)
 #define OPTION_REV      (OPTION_MD_BASE + 8)
 
 #define OPTION_ENHANCED (OPTION_MD_BASE + 7)
 #define OPTION_REV      (OPTION_MD_BASE + 8)
 
-CONST char *md_shortopts = "bm:prs";
+const char *md_shortopts = "bm:prs";
 struct option md_longopts[] =
 {
   { "mcpu",   required_argument, NULL, OPTION_CPU },
 struct option md_longopts[] =
 {
   { "mcpu",   required_argument, NULL, OPTION_CPU },
@@ -134,7 +124,8 @@ typedef struct tic4x_insn
     unsigned int nchars;       /* This is always 4 for the C30.  */
     unsigned long opcode;      /* Opcode number.  */
     expressionS exp;           /* Expression required for relocation.  */
     unsigned int nchars;       /* This is always 4 for the C30.  */
     unsigned long opcode;      /* Opcode number.  */
     expressionS exp;           /* Expression required for relocation.  */
-    int reloc;                 /* Relocation type required.  */
+    /* Relocation type required.  */
+    bfd_reloc_code_real_type reloc;
     int pcrel;                 /* True if relocation PC relative.  */
     char *pname;               /* Name of instruction in parallel.  */
     unsigned int num_operands; /* Number of operands in total.  */
     int pcrel;                 /* True if relocation PC relative.  */
     char *pname;               /* Name of instruction in parallel.  */
     unsigned int num_operands; /* Number of operands in total.  */
@@ -146,80 +137,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 *, offsetT *));
-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
@@ -268,10 +196,10 @@ const char comment_chars[] = ";";
 
 /* This array holds the chars that only start a comment at the beginning of
    a line.  If the line seems to have the form '# 123 filename'
 
 /* This array holds the chars that only start a comment at the beginning of
    a line.  If the line seems to have the form '# 123 filename'
-   .line and .file directives will appear in the pre-processed output. 
+   .line and .file directives will appear in the pre-processed output.
    Note that input_file.c hand checks for '#' at the beginning of the
    first line of the input file.  This is because the compiler outputs
    Note that input_file.c hand checks for '#' at the beginning of the
    first line of the input file.  This is because the compiler outputs
-   #NO_APP at the beginning of its output. 
+   #NO_APP at the beginning of its output.
    Also note that comments like this one will always work.  */
 const char line_comment_chars[] = "#*";
 
    Also note that comments like this one will always work.  */
 const char line_comment_chars[] = "#*";
 
@@ -304,10 +232,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.  */
@@ -326,7 +251,7 @@ tic4x_gen_to_words (flonum, words, precision)
      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.
-     
+
      By Michael P. Hayes <m.hayes@elec.canterbury.ac.nz>
      Here is how a generic floating point number is stored using
      flonums (an extension of bignums) where p is a pointer to an
      By Michael P. Hayes <m.hayes@elec.canterbury.ac.nz>
      Here is how a generic floating point number is stored using
      flonums (an extension of bignums) where p is a pointer to an
@@ -464,7 +389,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;
     }
@@ -474,7 +399,7 @@ tic4x_gen_to_words (flonum, words, precision)
       /* +INF:  Replace with maximum float.  */
       if (precision == S_PRECISION)
        words[0] = 0x77ff;
       /* +INF:  Replace with maximum float.  */
       if (precision == S_PRECISION)
        words[0] = 0x77ff;
-      else 
+      else
        {
          words[0] = 0x7f7f;
          words[1] = 0xffff;
        {
          words[0] = 0x7f7f;
          words[1] = 0xffff;
@@ -491,7 +416,7 @@ tic4x_gen_to_words (flonum, words, precision)
       /* -INF:  Replace with maximum float.  */
       if (precision == S_PRECISION)
        words[0] = 0x7800;
       /* -INF:  Replace with maximum float.  */
       if (precision == S_PRECISION)
        words[0] = 0x7800;
-      else 
+      else
         words[0] = 0x7f80;
       if (precision == E_PRECISION)
         words[2] = 0x8000;
         words[0] = 0x7f80;
       if (precision == E_PRECISION)
         words[2] = 0x8000;
@@ -586,7 +511,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;
@@ -621,10 +546,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.  */
@@ -672,7 +594,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);
     }
 
@@ -682,7 +604,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);
     }
 
@@ -696,10 +618,8 @@ tic4x_atof (str, what_kind, words)
   return return_value;
 }
 
   return return_value;
 }
 
-static void 
-tic4x_insert_reg (regname, regnum)
-     char *regname;
-     int regnum;
+static void
+tic4x_insert_reg (const char *regname, int regnum)
 {
   char buf[32];
   int i;
 {
   char buf[32];
   int i;
@@ -714,10 +634,8 @@ tic4x_insert_reg (regname, regnum)
                                   &zero_address_frag));
 }
 
                                   &zero_address_frag));
 }
 
-static void 
-tic4x_insert_sym (symname, value)
-     char *symname;
-     int value;
+static void
+tic4x_insert_sym (const char *symname, int value)
 {
   symbolS *symbolP;
 
 {
   symbolS *symbolP;
 
@@ -728,9 +646,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;
@@ -744,9 +660,7 @@ tic4x_expression (str, exp)
 }
 
 static char *
 }
 
 static char *
-tic4x_expression_abs (str, value)
-     char *str;
-     offsetT *value;
+tic4x_expression_abs (char *str, offsetT *value)
 {
   char *s;
   char *t;
 {
   char *s;
   char *t;
@@ -759,10 +673,8 @@ tic4x_expression_abs (str, value)
   return s;
 }
 
   return s;
 }
 
-static void 
-tic4x_emit_char (c,b)
-     char c;
-     int b;
+static void
+tic4x_emit_char (char c, int b)
 {
   expressionS exp;
 
 {
   expressionS exp;
 
@@ -771,12 +683,11 @@ tic4x_emit_char (c,b)
   emit_expr (&exp, b);
 }
 
   emit_expr (&exp, b);
 }
 
-static void 
-tic4x_seg_alloc (name, seg, size, symbolP)
-     char *name ATTRIBUTE_UNUSED;
-     segT seg ATTRIBUTE_UNUSED;
-     int size;
-     symbolS *symbolP;
+static void
+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.  */
@@ -797,14 +708,12 @@ tic4x_seg_alloc (name, seg, size, symbolP)
 }
 
 /* .asg ["]character-string["], symbol */
 }
 
 /* .asg ["]character-string["], symbol */
-static void 
-tic4x_asg (x)
-     int x ATTRIBUTE_UNUSED;
+static void
+tic4x_asg (int x ATTRIBUTE_UNUSED)
 {
   char c;
   char *name;
   char *str;
 {
   char c;
   char *name;
   char *str;
-  char *tmp;
 
   SKIP_WHITESPACE ();
   str = input_line_pointer;
 
   SKIP_WHITESPACE ();
   str = input_line_pointer;
@@ -814,30 +723,24 @@ 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';
-  name = input_line_pointer;
-  c = get_symbol_end ();       /* Get terminator.  */
-  tmp = xmalloc (strlen (str) + 1);
-  strcpy (tmp, str);
-  str = tmp;
-  tmp = xmalloc (strlen (name) + 1);
-  strcpy (tmp, name);
-  name = tmp;
+  c = get_symbol_name (&name); /* Get terminator.  */
+  str = xstrdup (str);
+  name = xstrdup (name);
   if (hash_find (tic4x_asg_hash, name))
   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);
-  *input_line_pointer = c;
+    hash_insert (tic4x_asg_hash, name, (void *) str);
+  (void) restore_line_pointer (c);
   demand_empty_rest_of_line ();
 }
 
 /* .bss symbol, size  */
   demand_empty_rest_of_line ();
 }
 
 /* .bss symbol, size  */
-static void 
-tic4x_bss (x)
-     int x ATTRIBUTE_UNUSED;
+static void
+tic4x_bss (int x ATTRIBUTE_UNUSED)
 {
   char c;
   char *name;
 {
   char c;
   char *name;
@@ -851,11 +754,12 @@ tic4x_bss (x)
   current_subseg = now_subseg; /* Save current subseg.  */
 
   SKIP_WHITESPACE ();
   current_subseg = now_subseg; /* Save current subseg.  */
 
   SKIP_WHITESPACE ();
-  name = input_line_pointer;
-  c = get_symbol_end ();       /* Get terminator.  */
+  c = get_symbol_name (&name); /* Get terminator.  */
+  if (c == '"')
+    c = * ++ input_line_pointer;
   if (c != ',')
     {
   if (c != ',')
     {
-      as_bad (".bss size argument missing\n");
+      as_bad (_(".bss size argument missing\n"));
       return;
     }
 
       return;
     }
 
@@ -863,7 +767,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 %ld < 0!", (long) size);
+      as_bad (_(".bss size %ld < 0!"), (long) size);
       return;
     }
   subseg_set (bss_section, 0);
       return;
     }
   subseg_set (bss_section, 0);
@@ -891,8 +795,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;
@@ -900,12 +803,12 @@ tic4x_globl (ignore)
 
   do
     {
 
   do
     {
-      name = input_line_pointer;
-      c = get_symbol_end ();
+      c = get_symbol_name (&name);
       symbolP = symbol_find_or_make (name);
       *input_line_pointer = c;
       symbolP = symbol_find_or_make (name);
       *input_line_pointer = c;
-      SKIP_WHITESPACE ();
+      SKIP_WHITESPACE_AFTER_NAME ();
       S_SET_STORAGE_CLASS (symbolP, C_EXT);
       S_SET_STORAGE_CLASS (symbolP, C_EXT);
+      S_SET_EXTERNAL (symbolP);
       if (c == ',')
        {
          input_line_pointer++;
       if (c == ',')
        {
          input_line_pointer++;
@@ -920,11 +823,10 @@ tic4x_globl (ignore)
 }
 
 /* Handle .byte, .word. .int, .long */
 }
 
 /* Handle .byte, .word. .int, .long */
-static void 
-tic4x_cons (bytes)
-     int bytes;
+static void
+tic4x_cons (int bytes)
 {
 {
-  register unsigned int c;
+  unsigned int c;
   do
     {
       SKIP_WHITESPACE ();
   do
     {
       SKIP_WHITESPACE ();
@@ -964,12 +866,11 @@ tic4x_cons (bytes)
 }
 
 /* Handle .ascii, .asciz, .string */
 }
 
 /* Handle .ascii, .asciz, .string */
-static void 
-tic4x_stringer (append_zero)
-     int append_zero; /*ex: bytes */
+static void
+tic4x_stringer (int append_zero)
 {
   int bytes;
 {
   int bytes;
-  register unsigned int c;
+  unsigned int c;
 
   bytes = 0;
   do
 
   bytes = 0;
   do
@@ -999,7 +900,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 */
@@ -1018,9 +919,8 @@ tic4x_stringer (append_zero)
 }
 
 /* .eval expression, symbol */
 }
 
 /* .eval expression, symbol */
-static void 
-tic4x_eval (x)
-     int x ATTRIBUTE_UNUSED;
+static void
+tic4x_eval (int x ATTRIBUTE_UNUSED)
 {
   char c;
   offsetT value;
 {
   char c;
   offsetT value;
@@ -1031,32 +931,29 @@ 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;
     }
       return;
     }
-  name = input_line_pointer;
-  c = get_symbol_end ();       /* Get terminator.  */
-  demand_empty_rest_of_line ();
+  c = get_symbol_name (&name); /* Get terminator.  */
   tic4x_insert_sym (name, value);
   tic4x_insert_sym (name, value);
+  (void) restore_line_pointer (c);
+  demand_empty_rest_of_line ();
 }
 
 /* Reset local labels.  */
 }
 
 /* Reset local labels.  */
-static void 
-tic4x_newblock (x)
-     int x ATTRIBUTE_UNUSED;
+static void
+tic4x_newblock (int x ATTRIBUTE_UNUSED)
 {
   dollar_label_clear ();
 }
 
 /* .sect "section-name" [, value] */
 /* .sect ["]section-name[:subsection-name]["] [, value] */
 {
   dollar_label_clear ();
 }
 
 /* .sect "section-name" [, value] */
 /* .sect ["]section-name[:subsection-name]["] [, value] */
-static void 
-tic4x_sect (x)
-     int x ATTRIBUTE_UNUSED;
+static void
+tic4x_sect (int x ATTRIBUTE_UNUSED)
 {
   char c;
   char *section_name;
 {
   char c;
   char *section_name;
-  char *subsection_name;
   char *name;
   segT seg;
   offsetT num;
   char *name;
   segT seg;
   offsetT num;
@@ -1064,11 +961,11 @@ tic4x_sect (x)
   SKIP_WHITESPACE ();
   if (*input_line_pointer == '"')
     input_line_pointer++;
   SKIP_WHITESPACE ();
   if (*input_line_pointer == '"')
     input_line_pointer++;
-  section_name = input_line_pointer;
-  c = get_symbol_end ();       /* Get terminator.  */
+  c = get_symbol_name (&section_name); /* Get terminator.  */
+  if (c == '"')
+    c = * ++ input_line_pointer;
   input_line_pointer++;                /* Skip null symbol terminator.  */
   input_line_pointer++;                /* Skip null symbol terminator.  */
-  name = xmalloc (input_line_pointer - section_name + 1);
-  strcpy (name, section_name);
+  name = xstrdup (section_name);
 
   /* TI C from version 5.0 allows a section name to contain a
      subsection name as well. The subsection name is separated by a
 
   /* TI C from version 5.0 allows a section name to contain a
      subsection name as well. The subsection name is separated by a
@@ -1077,14 +974,16 @@ tic4x_sect (x)
      Volker Kuhlmann  <v.kuhlmann@elec.canterbury.ac.nz>.  */
   if (c == ':')
     {
      Volker Kuhlmann  <v.kuhlmann@elec.canterbury.ac.nz>.  */
   if (c == ':')
     {
-      subsection_name = input_line_pointer;
-      c = get_symbol_end ();   /* Get terminator.  */
+      char *subname;
+      c = get_symbol_name (&subname);  /* Get terminator.  */
+      if (c == '"')
+       c = * ++ input_line_pointer;
       input_line_pointer++;    /* Skip null symbol 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
-     symbol name will be overwritten with a \0 by get_symbol_end()
+     symbol name will be overwritten with a \0 by get_symbol_name()
      [VK].  */
 
   if (c == ',')
      [VK].  */
 
   if (c == ',')
@@ -1108,11 +1007,11 @@ 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 ()));
     }
 
-  /* If the last character overwritten by get_symbol_end() was an
+  /* If the last character overwritten by get_symbol_name() was an
      end-of-line, we must restore it or the end of the line will not be
      recognised and scanning extends into the next line, stopping with
      an error (blame Volker Kuhlmann <v.kuhlmann@elec.canterbury.ac.nz>
      end-of-line, we must restore it or the end of the line will not be
      recognised and scanning extends into the next line, stopping with
      an error (blame Volker Kuhlmann <v.kuhlmann@elec.canterbury.ac.nz>
@@ -1124,9 +1023,8 @@ tic4x_sect (x)
 }
 
 /* symbol[:] .set value  or  .set symbol, value */
 }
 
 /* symbol[:] .set value  or  .set symbol, value */
-static void 
-tic4x_set (x)
-     int x ATTRIBUTE_UNUSED;
+static void
+tic4x_set (int x ATTRIBUTE_UNUSED)
 {
   symbolS *symbolP;
 
 {
   symbolS *symbolP;
 
@@ -1136,11 +1034,12 @@ tic4x_set (x)
       char c;
       char *name;
 
       char c;
       char *name;
 
-      name = input_line_pointer;
-      c = get_symbol_end ();   /* Get terminator.  */
+      c = get_symbol_name (&name);     /* Get terminator.  */
+      if (c == '"')
+       c = * ++ input_line_pointer;
       if (c != ',')
        {
       if (c != ',')
        {
-         as_bad (".set syntax invalid\n");
+         as_bad (_(".set syntax invalid\n"));
          ignore_rest_of_line ();
          return;
        }
          ignore_rest_of_line ();
          return;
        }
@@ -1155,9 +1054,8 @@ tic4x_set (x)
 }
 
 /* [symbol] .usect ["]section-name["], size-in-words [, alignment-flag] */
 }
 
 /* [symbol] .usect ["]section-name["], size-in-words [, alignment-flag] */
-static void 
-tic4x_usect (x)
-     int x ATTRIBUTE_UNUSED;
+static void
+tic4x_usect (int x ATTRIBUTE_UNUSED)
 {
   char c;
   char *name;
 {
   char c;
   char *name;
@@ -1173,11 +1071,11 @@ tic4x_usect (x)
   SKIP_WHITESPACE ();
   if (*input_line_pointer == '"')
     input_line_pointer++;
   SKIP_WHITESPACE ();
   if (*input_line_pointer == '"')
     input_line_pointer++;
-  section_name = input_line_pointer;
-  c = get_symbol_end ();       /* Get terminator.  */
+  c = get_symbol_name (&section_name); /* Get terminator.  */
+  if (c == '"')
+    c = * ++ input_line_pointer;
   input_line_pointer++;                /* Skip null symbol terminator.  */
   input_line_pointer++;                /* Skip null symbol terminator.  */
-  name = xmalloc (input_line_pointer - section_name + 1);
-  strcpy (name, section_name);
+  name = xstrdup (section_name);
 
   if (c == ',')
     input_line_pointer =
 
   if (c == ',')
     input_line_pointer =
@@ -1199,7 +1097,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 +1108,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);
 
@@ -1222,26 +1120,25 @@ tic4x_usect (x)
 }
 
 /* .version cpu-version.  */
 }
 
 /* .version cpu-version.  */
-static void 
-tic4x_version (x)
-     int x ATTRIBUTE_UNUSED;
+static void
+tic4x_version (int x ATTRIBUTE_UNUSED)
 {
   offsetT temp;
 
   input_line_pointer =
     tic4x_expression_abs (input_line_pointer, &temp);
   if (!IS_CPU_TIC3X (temp) && !IS_CPU_TIC4X (temp))
 {
   offsetT 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 %ld",
+    as_bad (_("This assembler does not support processor generation %ld"),
            (long) temp);
 
   if (tic4x_cpu && temp != (offsetT) tic4x_cpu)
            (long) temp);
 
   if (tic4x_cpu && temp != (offsetT) tic4x_cpu)
-    as_warn ("Changing processor generation on fly not supported...");
+    as_warn (_("Changing processor generation on fly not supported..."));
   tic4x_cpu = temp;
   demand_empty_rest_of_line ();
 }
 
   tic4x_cpu = temp;
   demand_empty_rest_of_line ();
 }
 
-static void 
-tic4x_init_regtable ()
+static void
+tic4x_init_regtable (void)
 {
   unsigned int i;
 
 {
   unsigned int i;
 
@@ -1258,8 +1155,8 @@ tic4x_init_regtable ()
     }
 }
 
     }
 }
 
-static void 
-tic4x_init_symbols ()
+static void
+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 !
@@ -1289,7 +1186,7 @@ tic4x_init_symbols ()
      Source: TI: TMS320C3x/C4x Assembly Language Tools User's Guide,
      1997, SPRU035C, p. 3-17/3-18.  */
   tic4x_insert_sym (".REGPARM", tic4x_reg_args);
      Source: TI: TMS320C3x/C4x Assembly Language Tools User's Guide,
      1997, SPRU035C, p. 3-17/3-18.  */
   tic4x_insert_sym (".REGPARM", tic4x_reg_args);
-  tic4x_insert_sym (".MEMPARM", !tic4x_reg_args);      
+  tic4x_insert_sym (".MEMPARM", !tic4x_reg_args);
   tic4x_insert_sym (".BIGMODEL", tic4x_big_model);
   tic4x_insert_sym (".C30INTERRUPT", 0);
   tic4x_insert_sym (".TMS320xx", tic4x_cpu == 0 ? 40 : tic4x_cpu);
   tic4x_insert_sym (".BIGMODEL", tic4x_big_model);
   tic4x_insert_sym (".C30INTERRUPT", 0);
   tic4x_insert_sym (".TMS320xx", tic4x_cpu == 0 ? 40 : tic4x_cpu);
@@ -1315,9 +1212,8 @@ tic4x_init_symbols ()
 }
 
 /* Insert a new instruction template into hash table.  */
 }
 
 /* Insert a new instruction template into hash table.  */
-static int 
-tic4x_inst_insert (inst)
-     tic4x_inst_t *inst;
+static int
+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 +1222,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,43 +1233,38 @@ 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 (const char *name, unsigned long opcode, const char *args)
 {
   static tic4x_inst_t *insts = NULL;
   static char *names = NULL;
 {
   static tic4x_inst_t *insts = NULL;
   static char *names = NULL;
-  static int index = 0;
+  static int iindex = 0;
 
   if (insts == NULL)
     {
       /* Allocate memory to store name strings.  */
 
   if (insts == NULL)
     {
       /* Allocate memory to store name strings.  */
-      names = (char *) xmalloc (sizeof (char) * 8192);
+      names = XNEWVEC (char, 8192);
       /* Allocate memory for additional insts.  */
       /* Allocate memory for additional insts.  */
-      insts = (tic4x_inst_t *)
-       xmalloc (sizeof (tic4x_inst_t) * 1024);
+      insts = XNEWVEC (tic4x_inst_t, 1024);
     }
     }
-  insts[index].name = names;
-  insts[index].opcode = opcode;
-  insts[index].opmask = 0xffffffff;
-  insts[index].args = args;
-  index++;
+  insts[iindex].name = names;
+  insts[iindex].opcode = opcode;
+  insts[iindex].opmask = 0xffffffff;
+  insts[iindex].args = args;
+  iindex++;
 
   do
     *names++ = *name++;
   while (*name);
   *names++ = '\0';
 
 
   do
     *names++ = *name++;
   while (*name);
   *names++ = '\0';
 
-  return &insts[index - 1];
+  return &insts[iindex - 1];
 }
 
 /* Add instruction template, creating dynamic templates as required.  */
 }
 
 /* Add instruction template, creating dynamic templates as required.  */
-static int 
-tic4x_inst_add (insts)
-     tic4x_inst_t *insts;
+static int
+tic4x_inst_add (const tic4x_inst_t *insts)
 {
 {
-  char *s = insts->name;
+  const char *s = insts->name;
   char *d;
   unsigned int i;
   int ok = 1;
   char *d;
   unsigned int i;
   int ok = 1;
@@ -1382,8 +1273,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)
@@ -1397,7 +1288,7 @@ tic4x_inst_add (insts)
            {
              tic4x_inst_t *inst;
              int k = 0;
            {
              tic4x_inst_t *inst;
              int k = 0;
-             char *c = tic4x_conds[i].name;
+             const char *c = tic4x_conds[i].name;
              char *e = d;
 
              while (*c)
              char *e = d;
 
              while (*c)
@@ -1441,8 +1332,8 @@ tic4x_inst_add (insts)
 /* This function is called once, at assembler startup time.  It should
    set up all the tables, etc., that the MD part of the assembler will
    need.  */
 /* This function is called once, at assembler startup time.  It should
    set up all the tables, etc., that the MD part of the assembler will
    need.  */
-void 
-md_begin ()
+void
+md_begin (void)
 {
   int ok = 1;
   unsigned int i;
 {
   int ok = 1;
   unsigned int i;
@@ -1483,7 +1374,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, "");
@@ -1498,19 +1389,18 @@ md_begin ()
   tic4x_init_symbols ();
 }
 
   tic4x_init_symbols ();
 }
 
-void 
-tic4x_end ()
+void
+tic4x_end (void)
 {
 {
-  bfd_set_arch_mach (stdoutput, bfd_arch_tic4x, 
+  bfd_set_arch_mach (stdoutput, bfd_arch_tic4x,
                     IS_CPU_TIC4X (tic4x_cpu) ? bfd_mach_tic4x : bfd_mach_tic3x);
 }
 
                     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;
+static int
+tic4x_indirect_parse (tic4x_operand_t *operand,
+                     const tic4x_indirect_t *indirect)
 {
 {
-  char *n = indirect->name;
+  const char *n = indirect->name;
   char *s = input_line_pointer;
   char *b;
   symbolS *symbolP;
   char *s = input_line_pointer;
   char *b;
   symbolS *symbolP;
@@ -1540,7 +1430,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 +1444,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 +1462,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 +1496,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;
@@ -1616,23 +1504,22 @@ tic4x_operand_parse (s, operand)
   expressionS *exp = &operand->expr;
   char *save = input_line_pointer;
   char *str;
   expressionS *exp = &operand->expr;
   char *save = input_line_pointer;
   char *str;
-  char *new;
+  char *new_pointer;
   struct hash_entry *entry = NULL;
 
   input_line_pointer = s;
   SKIP_WHITESPACE ();
 
   struct hash_entry *entry = NULL;
 
   input_line_pointer = s;
   SKIP_WHITESPACE ();
 
-  str = input_line_pointer;
-  c = get_symbol_end ();       /* Get terminator.  */
-  new = input_line_pointer;
+  c = get_symbol_name (&str);  /* Get terminator.  */
+  new_pointer = input_line_pointer;
   if (strlen (str) && (entry = hash_find (tic4x_asg_hash, str)) != NULL)
     {
   if (strlen (str) && (entry = hash_find (tic4x_asg_hash, str)) != NULL)
     {
-      *input_line_pointer = c;
+      (void) restore_line_pointer (c);
       input_line_pointer = (char *) entry;
     }
   else
     {
       input_line_pointer = (char *) entry;
     }
   else
     {
-      *input_line_pointer = c;
+      (void) restore_line_pointer (c);
       input_line_pointer = str;
     }
 
       input_line_pointer = str;
     }
 
@@ -1643,7 +1530,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 +1542,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 +1565,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 +1582,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 +1617,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 +1634,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,
@@ -1766,21 +1653,18 @@ tic4x_operand_parse (s, operand)
 #endif
     }
   if (entry == NULL)
 #endif
     }
   if (entry == NULL)
-    new = input_line_pointer;
+    new_pointer = input_line_pointer;
   input_line_pointer = save;
   input_line_pointer = save;
-  return new;
+  return new_pointer;
 }
 
 }
 
-static int 
-tic4x_operands_match (inst, insn, check)
-     tic4x_inst_t *inst;
-     tic4x_insn_t *insn;
-     int check;
+static int
+tic4x_operands_match (tic4x_inst_t *inst, tic4x_insn_t *tinsn, int check)
 {
   const char *args = inst->args;
   unsigned long opcode = inst->opcode;
 {
   const char *args = inst->args;
   unsigned long opcode = inst->opcode;
-  int num_operands = insn->num_operands;
-  tic4x_operand_t *operand = insn->operands;
+  int num_operands = tinsn->num_operands;
+  tic4x_operand_t *operand = tinsn->operands;
   expressionS *exp = &operand->expr;
   int ret = 1;
   int reg;
   expressionS *exp = &operand->expr;
   int ret = 1;
   int reg;
@@ -1791,13 +1675,13 @@ tic4x_operands_match (inst, insn, check)
      If an operand matches, we modify insn or opcode appropriately,
      and do a "continue".  If an operand fails to match, we "break".  */
 
      If an operand matches, we modify insn or opcode appropriately,
      and do a "continue".  If an operand fails to match, we "break".  */
 
-  insn->nchars = 4;            /* Instructions always 4 bytes.  */
-  insn->reloc = NO_RELOC;
-  insn->pcrel = 0;
+  tinsn->nchars = 4;           /* Instructions always 4 bytes.  */
+  tinsn->reloc = NO_RELOC;
+  tinsn->pcrel = 0;
 
   if (*args == '\0')
     {
 
   if (*args == '\0')
     {
-      insn->opcode = opcode;
+      tinsn->opcode = opcode;
       return num_operands == 0;
     }
 
       return num_operands == 0;
     }
 
@@ -1809,7 +1693,7 @@ tic4x_operands_match (inst, insn, check)
        case '\0':              /* End of args.  */
          if (num_operands == 1)
            {
        case '\0':              /* End of args.  */
          if (num_operands == 1)
            {
-             insn->opcode = opcode;
+             tinsn->opcode = opcode;
              return ret;
            }
          break;                /* Too many operands.  */
              return ret;
            }
          break;                /* Too many operands.  */
@@ -1830,7 +1714,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;
@@ -1838,8 +1722,8 @@ tic4x_operands_match (inst, insn, check)
            }
          else if (exp->X_op == O_symbol)
            {
            }
          else if (exp->X_op == O_symbol)
            {
-             insn->reloc = BFD_RELOC_HI16;
-             insn->exp = *exp;
+             tinsn->reloc = BFD_RELOC_HI16;
+             tinsn->exp = *exp;
              continue;
            }
          break;                /* Not direct (dp) addressing.  */
              continue;
            }
          break;                /* Not direct (dp) addressing.  */
@@ -1855,8 +1739,8 @@ tic4x_operands_match (inst, insn, check)
            }
          else if (exp->X_op == O_symbol)
            {
            }
          else if (exp->X_op == O_symbol)
            {
-             insn->reloc = BFD_RELOC_LO16;
-             insn->exp = *exp;
+             tinsn->reloc = BFD_RELOC_LO16;
+             tinsn->exp = *exp;
              continue;
            }
          break;                /* Not direct addressing.  */
              continue;
            }
          break;                /* Not direct addressing.  */
@@ -1870,7 +1754,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 +1773,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;
@@ -1897,15 +1781,15 @@ tic4x_operands_match (inst, insn, check)
            }
          if (IS_CPU_TIC4X (tic4x_cpu))
            {
            }
          if (IS_CPU_TIC4X (tic4x_cpu))
            {
-             insn->reloc = BFD_RELOC_24_PCREL;
-             insn->pcrel = 1;
+             tinsn->reloc = BFD_RELOC_24_PCREL;
+             tinsn->pcrel = 1;
            }
          else
            {
            }
          else
            {
-             insn->reloc = BFD_RELOC_24;
-             insn->pcrel = 0;
+             tinsn->reloc = BFD_RELOC_24;
+             tinsn->pcrel = 0;
            }
            }
-         insn->exp = *exp;
+         tinsn->exp = *exp;
          continue;
 
        case 'C':
          continue;
 
        case 'C':
@@ -1918,7 +1802,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;
            }
@@ -1936,13 +1820,13 @@ tic4x_operands_match (inst, insn, check)
           if (!(operand->mode == M_REGISTER))
             break;
          reg = exp->X_add_number;
           if (!(operand->mode == M_REGISTER))
             break;
          reg = exp->X_add_number;
-         if ( (reg >= REG_R0 && reg <= REG_R7) 
+         if ( (reg >= REG_R0 && reg <= REG_R7)
                || (IS_CPU_TIC4X (tic4x_cpu) && reg >= REG_R8 && reg <= REG_R11) )
            INSERTU (opcode, reg, 7, 0);
          else
            {
               if (!check)
                || (IS_CPU_TIC4X (tic4x_cpu) && reg >= REG_R8 && reg <= REG_R11) )
            INSERTU (opcode, reg, 7, 0);
          else
            {
               if (!check)
-                as_bad ("Register must be Rn");
+                as_bad (_("Register must be Rn"));
              ret = -1;
            }
           continue;
              ret = -1;
            }
           continue;
@@ -1976,13 +1860,13 @@ tic4x_operands_match (inst, insn, check)
          if (operand->mode != M_REGISTER)
            break;
          reg = exp->X_add_number;
          if (operand->mode != M_REGISTER)
            break;
          reg = exp->X_add_number;
-         if ( (reg >= REG_R0 && reg <= REG_R7) 
+         if ( (reg >= REG_R0 && reg <= REG_R7)
                || (IS_CPU_TIC4X (tic4x_cpu) && reg >= REG_R8 && reg <= REG_R11) )
            INSERTU (opcode, reg, 15, 8);
          else
            {
               if (!check)
                || (IS_CPU_TIC4X (tic4x_cpu) && reg >= REG_R8 && reg <= REG_R11) )
            INSERTU (opcode, reg, 15, 8);
          else
            {
               if (!check)
-                as_bad ("Register must be Rn");
+                as_bad (_("Register must be Rn"));
              ret = -1;
            }
           continue;
              ret = -1;
            }
           continue;
@@ -1996,7 +1880,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 +1904,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 +1932,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 +1950,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 +1964,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 +1978,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 +1992,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 +2007,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,15 +2029,15 @@ 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;
                }
            }
-         insn->reloc = BFD_RELOC_16_PCREL;
-         insn->pcrel = 1;
-         insn->exp = *exp;
+         tinsn->reloc = BFD_RELOC_16_PCREL;
+         tinsn->pcrel = 1;
+         tinsn->exp = *exp;
          continue;
 
        case 'Q':
          continue;
 
        case 'Q':
@@ -2167,13 +2051,13 @@ tic4x_operands_match (inst, insn, check)
          if (operand->mode != M_REGISTER)
            break;
          reg = exp->X_add_number;
          if (operand->mode != M_REGISTER)
            break;
          reg = exp->X_add_number;
-         if ( (reg >= REG_R0 && reg <= REG_R7) 
+         if ( (reg >= REG_R0 && reg <= REG_R7)
                || (IS_CPU_TIC4X (tic4x_cpu) && reg >= REG_R8 && reg <= REG_R11) )
            INSERTU (opcode, reg, 15, 0);
          else
            {
               if (!check)
                || (IS_CPU_TIC4X (tic4x_cpu) && reg >= REG_R8 && reg <= REG_R11) )
            INSERTU (opcode, reg, 15, 0);
          else
            {
               if (!check)
-                as_bad ("Register must be Rn");
+                as_bad (_("Register must be Rn"));
              ret = -1;
            }
           continue;
              ret = -1;
            }
           continue;
@@ -2189,13 +2073,13 @@ tic4x_operands_match (inst, insn, check)
          if (operand->mode != M_REGISTER)
            break;
          reg = exp->X_add_number;
          if (operand->mode != M_REGISTER)
            break;
          reg = exp->X_add_number;
-         if ( (reg >= REG_R0 && reg <= REG_R7) 
+         if ( (reg >= REG_R0 && reg <= REG_R7)
                || (IS_CPU_TIC4X (tic4x_cpu) && reg >= REG_R8 && reg <= REG_R11) )
            INSERTU (opcode, reg, 20, 16);
          else
            {
               if (!check)
                || (IS_CPU_TIC4X (tic4x_cpu) && reg >= REG_R8 && reg <= REG_R11) )
            INSERTU (opcode, reg, 20, 16);
          else
            {
               if (!check)
-                as_bad ("Register must be Rn");
+                as_bad (_("Register must be Rn"));
              ret = -1;
            }
           continue;
              ret = -1;
            }
           continue;
@@ -2206,7 +2090,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 +2104,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;
@@ -2230,21 +2114,21 @@ tic4x_operands_match (inst, insn, check)
            {
              if (operand->mode == M_HI)
                {
            {
              if (operand->mode == M_HI)
                {
-                 insn->reloc = BFD_RELOC_HI16;
+                 tinsn->reloc = BFD_RELOC_HI16;
                }
              else
                {
                }
              else
                {
-                 insn->reloc = BFD_RELOC_LO16;
+                 tinsn->reloc = BFD_RELOC_LO16;
                }
                }
-             insn->exp = *exp;
+             tinsn->exp = *exp;
              continue;
            }
          /* Handle cases like ldi foo - $, ar0  where foo
             is a forward reference.  Perhaps we should check
             for X_op == O_symbol and disallow things like
             ldi foo, ar0.  */
              continue;
            }
          /* Handle cases like ldi foo - $, ar0  where foo
             is a forward reference.  Perhaps we should check
             for X_op == O_symbol and disallow things like
             ldi foo, ar0.  */
-         insn->reloc = BFD_RELOC_16;
-         insn->exp = *exp;
+         tinsn->reloc = BFD_RELOC_16;
+         tinsn->exp = *exp;
          continue;
 
        case 'T':               /* 5-bit immediate value for tic4x stik.  */
          continue;
 
        case 'T':               /* 5-bit immediate value for tic4x stik.  */
@@ -2262,7 +2146,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 +2167,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;
@@ -2292,15 +2176,15 @@ tic4x_operands_match (inst, insn, check)
          else if (exp->X_op == O_symbol)
            {
              if (operand->mode == M_HI)
          else if (exp->X_op == O_symbol)
            {
              if (operand->mode == M_HI)
-               insn->reloc = BFD_RELOC_HI16;
+               tinsn->reloc = BFD_RELOC_HI16;
              else
              else
-               insn->reloc = BFD_RELOC_LO16;
+               tinsn->reloc = BFD_RELOC_LO16;
 
 
-             insn->exp = *exp;
+             tinsn->exp = *exp;
              continue;
            }
              continue;
            }
-         insn->reloc = BFD_RELOC_16;
-         insn->exp = *exp;
+         tinsn->reloc = BFD_RELOC_16;
+         tinsn->exp = *exp;
          continue;
 
        case 'V':               /* Trap numbers (immediate field).  */
          continue;
 
        case 'V':               /* Trap numbers (immediate field).  */
@@ -2321,7 +2205,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 +2221,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,14 +2235,14 @@ 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;
                }
            }
-         insn->reloc = BFD_RELOC_16;
-         insn->exp = *exp;
+         tinsn->reloc = BFD_RELOC_16;
+         tinsn->exp = *exp;
          continue;
 
        case 'X':               /* Expansion register for tic4x.  */
          continue;
 
        case 'X':               /* Expansion register for tic4x.  */
@@ -2370,7 +2254,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 +2268,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 +2282,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;
@@ -2412,7 +2296,7 @@ tic4x_operands_match (inst, insn, check)
          continue;
 
        case '|':               /* treat as `,' if have ldi_ldi form.  */
          continue;
 
        case '|':               /* treat as `,' if have ldi_ldi form.  */
-         if (insn->parallel)
+         if (tinsn->parallel)
            {
              if (--num_operands < 0)
                break;          /* Too few operands.  */
            {
              if (--num_operands < 0)
                break;          /* Too few operands.  */
@@ -2446,68 +2330,63 @@ tic4x_operands_match (inst, insn, check)
 }
 
 static void
 }
 
 static void
-tic4x_insn_check (insn)
-     tic4x_insn_t *insn;
+tic4x_insn_check (tic4x_insn_t *tinsn)
 {
 {
-  
-  if (!strcmp(insn->name, "lda"))
+
+  if (!strcmp (tinsn->name, "lda"))
     {
     {
-      if (insn->num_operands < 2 || insn->num_operands > 2)
+      if (tinsn->num_operands < 2 || tinsn->num_operands > 2)
         as_fatal ("Illegal internal LDA insn definition");
 
         as_fatal ("Illegal internal LDA insn definition");
 
-      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");
+      if (tinsn->operands[0].mode == M_REGISTER
+         && tinsn->operands[1].mode == M_REGISTER
+         && tinsn->operands[0].expr.X_add_number == tinsn->operands[1].expr.X_add_number )
+        as_bad (_("Source and destination register should not be equal"));
     }
     }
-  else if( !strcmp(insn->name, "ldi_ldi")
-           || !strcmp(insn->name, "ldi1_ldi2")
-           || !strcmp(insn->name, "ldi2_ldi1")
-           || !strcmp(insn->name, "ldf_ldf")
-           || !strcmp(insn->name, "ldf1_ldf2")
-           || !strcmp(insn->name, "ldf2_ldf1") )
+  else if (!strcmp (tinsn->name, "ldi_ldi")
+           || !strcmp (tinsn->name, "ldi1_ldi2")
+           || !strcmp (tinsn->name, "ldi2_ldi1")
+           || !strcmp (tinsn->name, "ldf_ldf")
+           || !strcmp (tinsn->name, "ldf1_ldf2")
+           || !strcmp (tinsn->name, "ldf2_ldf1") )
     {
     {
-      if ( insn->num_operands < 4 && insn->num_operands > 5 )
-        as_fatal ("Illegal internal %s insn definition", insn->name);
-      
-      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");
+      if (tinsn->num_operands < 4 || tinsn->num_operands > 5)
+        as_fatal ("Illegal internal %s insn definition", tinsn->name);
+
+      if (tinsn->operands[1].mode == M_REGISTER
+         && tinsn->operands[tinsn->num_operands-1].mode == M_REGISTER
+         && tinsn->operands[1].expr.X_add_number == tinsn->operands[tinsn->num_operands-1].expr.X_add_number )
+        as_warn (_("Equal parallell destination registers, one result will be discarded"));
     }
 }
 
     }
 }
 
-static void 
-tic4x_insn_output (insn)
-     tic4x_insn_t *insn;
+static void
+tic4x_insn_output (tic4x_insn_t *tinsn)
 {
   char *dst;
 
   /* Grab another fragment for opcode.  */
 {
   char *dst;
 
   /* Grab another fragment for opcode.  */
-  dst = frag_more (insn->nchars);
+  dst = frag_more (tinsn->nchars);
 
   /* Put out opcode word as a series of bytes in little endian order.  */
 
   /* Put out opcode word as a series of bytes in little endian order.  */
-  md_number_to_chars (dst, insn->opcode, insn->nchars);
+  md_number_to_chars (dst, tinsn->opcode, tinsn->nchars);
 
   /* Put out the symbol-dependent stuff.  */
 
   /* Put out the symbol-dependent stuff.  */
-  if (insn->reloc != NO_RELOC)
+  if (tinsn->reloc != NO_RELOC)
     {
       /* Where is the offset into the fragment for this instruction.  */
       fix_new_exp (frag_now,
                   dst - frag_now->fr_literal,  /* where */
     {
       /* Where is the offset into the fragment for this instruction.  */
       fix_new_exp (frag_now,
                   dst - frag_now->fr_literal,  /* where */
-                  insn->nchars,        /* size */
-                  &insn->exp,
-                  insn->pcrel,
-                  insn->reloc);
+                  tinsn->nchars,       /* size */
+                  &tinsn->exp,
+                  tinsn->pcrel,
+                  tinsn->reloc);
     }
 }
 
 /* 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 +2397,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;
@@ -2527,14 +2406,14 @@ tic4x_operands_parse (s, operands, num_operands)
 /* Assemble a single instruction.  Its label has already been handled
    by the generic front end.  We just parse mnemonic and operands, and
    produce the bytes of data and relocation.  */
 /* Assemble a single instruction.  Its label has already been handled
    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;
+void
+md_assemble (char *str)
 {
   int ok = 0;
   char *s;
   int i;
   int parsed = 0;
 {
   int ok = 0;
   char *s;
   int i;
   int parsed = 0;
+  size_t len;
   tic4x_inst_t *inst;          /* Instruction template.  */
   tic4x_inst_t *first_inst;
 
   tic4x_inst_t *inst;          /* Instruction template.  */
   tic4x_inst_t *first_inst;
 
@@ -2544,17 +2423,17 @@ md_assemble (str)
       s = str;
       while (*s && *s != '|')
         s++;
       s = str;
       while (*s && *s != '|')
         s++;
-      
+
       if (*s && s[1]=='|')
         {
           if(insn->parallel)
             {
       if (*s && s[1]=='|')
         {
           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;
             }
-          
+
           /* Lets take care of the first part of the parallel insn */
           *s++ = 0;
           md_assemble(str);
           /* Lets take care of the first part of the parallel insn */
           *s++ = 0;
           md_assemble(str);
@@ -2563,7 +2442,7 @@ md_assemble (str)
           /* .. and let the second run though here */
         }
     }
           /* .. and let the second run though here */
         }
     }
-  
+
   if (str && insn->parallel)
     {
       /* Find mnemonic (second part of parallel instruction).  */
   if (str && insn->parallel)
     {
       /* Find mnemonic (second part of parallel instruction).  */
@@ -2573,8 +2452,8 @@ md_assemble (str)
        s++;
       if (*s)                  /* Null terminate for hash_find.  */
        *s++ = '\0';            /* and skip past null.  */
        s++;
       if (*s)                  /* Null terminate for hash_find.  */
        *s++ = '\0';            /* and skip past null.  */
-      strcat (insn->name, "_");
-      strncat (insn->name, str, TIC4X_NAME_MAX - strlen (insn->name));
+      len = strlen (insn->name);
+      snprintf (insn->name + len, TIC4X_NAME_MAX - len, "_%s", str);
 
       insn->operands[insn->num_operands++].mode = M_PARALLEL;
 
 
       insn->operands[insn->num_operands++].mode = M_PARALLEL;
 
@@ -2594,7 +2473,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 +2501,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)
@@ -2636,7 +2515,8 @@ md_assemble (str)
        s++;
       if (*s)                  /* Null terminate for hash_find.  */
        *s++ = '\0';            /* and skip past null.  */
        s++;
       if (*s)                  /* Null terminate for hash_find.  */
        *s++ = '\0';            /* and skip past null.  */
-      strncpy (insn->name, str, TIC4X_NAME_MAX - 3);
+      strncpy (insn->name, str, TIC4X_NAME_MAX - 1);
+      insn->name[TIC4X_NAME_MAX - 1] = '\0';
 
       if ((i = tic4x_operands_parse (s, insn->operands, 0)) < 0)
        {
 
       if ((i = tic4x_operands_parse (s, insn->operands, 0)) < 0)
        {
@@ -2654,7 +2534,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,14 +2542,11 @@ 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.  */
 
    returned, or NULL on OK.  */
 
-char *
-md_atof (type, litP, sizeP)
-     int type;
-     char *litP;
-     int *sizeP;
+const char *
+md_atof (int type, char *litP, int *sizeP)
 {
   int prec;
   int ieee;
 {
   int prec;
   int ieee;
@@ -2679,36 +2556,36 @@ md_atof (type, litP, sizeP)
 
   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)
@@ -2723,10 +2600,10 @@ md_atof (type, litP, sizeP)
      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
      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 +2615,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 
-md_apply_fix (fixP, value, seg)
-     fixS *fixP;
-     valueT *value;
-     segT seg ATTRIBUTE_UNUSED;
+void
+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 +2654,7 @@ md_apply_fix (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;
     }
 
@@ -2788,44 +2662,40 @@ md_apply_fix (fixP, value, seg)
 }
 
 /* Should never be called for tic4x.  */
 }
 
 /* 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;
+void
+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 +2703,7 @@ md_estimate_size_before_relax (fragP, segtype)
 
 
 int
 
 
 int
-md_parse_option (c, arg)
-     int c;
-     char *arg;
+md_parse_option (int c, const char *arg)
 {
   switch (c)
     {
 {
   switch (c)
     {
@@ -2844,7 +2712,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 +2720,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 OPTION_MEMPARM:         /* push args */
       tic4x_reg_args = 0;
       break;
 
-    case 'r':                  
-      as_warn ("Option -r is depreciated, please use -mregparm");
+    case 'r':
+      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 +2763,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"
@@ -2923,9 +2790,8 @@ md_show_usage (stream)
 /* This is called when a line is unrecognized.  This is used to handle
    definitions of TI C3x tools style local labels $n where n is a single
    decimal digit.  */
 /* This is called when a line is unrecognized.  This is used to handle
    definitions of TI C3x tools style local labels $n where n is a single
    decimal digit.  */
-int 
-tic4x_unrecognized_line (c)
-     int c;
+int
+tic4x_unrecognized_line (int c)
 {
   int lab;
   char *s;
 {
   int lab;
   char *s;
@@ -2945,7 +2811,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 +2824,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 +2856,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?  */
 }
 
 {
   return size;                 /* Byte (i.e., 32-bit) alignment is fine?  */
 }
 
-static int 
-tic4x_pc_offset (op)
-     unsigned int op;
+static int
+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,8 +2930,7 @@ 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;
   unsigned int op;
 {
   unsigned char *buf;
   unsigned int op;
@@ -3084,41 +2944,42 @@ md_pcrel_from (fixP)
 
 /* Fill the alignment area with NOP's on .text, unless fill-data
    was specified. */
 
 /* 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;
+int
+tic4x_do_align (int alignment,
+               const char *fill,
+               int len,
+               int max)
 {
 {
-  unsigned long nop = TIC_NOP_OPCODE;
-
   /* Because we are talking lwords, not bytes, adjust alignment to do words */
   alignment += 2;
   /* Because we are talking lwords, not bytes, adjust alignment to do words */
   alignment += 2;
-  
+
   if (alignment != 0 && !need_pass_2)
     {
       if (fill == NULL)
         {
   if (alignment != 0 && !need_pass_2)
     {
       if (fill == NULL)
         {
-          /*if (subseg_text_p (now_seg))*/  /* FIXME: doesn't work for .text for some reason */
-          frag_align_pattern( alignment, (const char *)&nop, sizeof(nop), max);
-          return 1;
-          /*else
-            frag_align (alignment, 0, max);*/
+          if (subseg_text_p (now_seg))
+           {
+             char nop[4];
+
+             md_number_to_chars (nop, TIC_NOP_OPCODE, 4);
+             frag_align_pattern (alignment, nop, sizeof (nop), max);
+           }
+          else
+            frag_align (alignment, 0, max);
        }
       else if (len <= 1)
        frag_align (alignment, *fill, max);
       else
        frag_align_pattern (alignment, fill, len, max);
     }
        }
       else if (len <= 1)
        frag_align (alignment, *fill, max);
       else
        frag_align_pattern (alignment, fill, len, max);
     }
-  
+
   /* Return 1 to skip the default alignment function */
   return 1;
 }
 
 /* Look for and remove parallel instruction operator ||.  */
   /* Return 1 to skip the default alignment function */
   return 1;
 }
 
 /* Look for and remove parallel instruction operator ||.  */
-void 
-tic4x_start_line ()
+void
+tic4x_start_line (void)
 {
   char *s = input_line_pointer;
 
 {
   char *s = input_line_pointer;
 
@@ -3146,15 +3007,13 @@ 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;
 
-  reloc = (arelent *) xmalloc (sizeof (arelent));
+  reloc = XNEW (arelent);
 
 
-  reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
+  reloc->sym_ptr_ptr = XNEW (asymbol *);
   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy);
   reloc->address = fixP->fx_frag->fr_address + fixP->fx_where;
   reloc->address /= OCTETS_PER_BYTE;
   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy);
   reloc->address = fixP->fx_frag->fr_address + fixP->fx_where;
   reloc->address /= OCTETS_PER_BYTE;
@@ -3162,7 +3021,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;
     }
This page took 0.051848 seconds and 4 git commands to generate.