]> oss.titaniummirror.com Git - msp430-binutils.git/blobdiff - gas/config/tc-sparc.c
Merge commit 'upstream/2.20'
[msp430-binutils.git] / gas / config / tc-sparc.c
index 3b07fecfd81baf3f61e8e77ed11d6abad4b25051..1be7760c77d502ae75d83e704ff5d2e4476be15d 100644 (file)
@@ -1,6 +1,6 @@
 /* tc-sparc.c -- Assemble for the SPARC
    Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
    Free Software Foundation, Inc.
    This file is part of GAS, the GNU Assembler.
 
 #define U0xffffffff ((((unsigned long) 1 << 16) << 16) - 1)
 #define U0x80000000 ((((unsigned long) 1 << 16) << 15))
 
-static struct sparc_arch *lookup_arch PARAMS ((char *));
-static void init_default_arch PARAMS ((void));
-static int sparc_ip PARAMS ((char *, const struct sparc_opcode **));
-static int in_signed_range PARAMS ((bfd_signed_vma, bfd_signed_vma));
-static int in_unsigned_range PARAMS ((bfd_vma, bfd_vma));
-static int in_bitfield_range PARAMS ((bfd_signed_vma, bfd_signed_vma));
-static int sparc_ffs PARAMS ((unsigned int));
-static void synthetize_setuw PARAMS ((const struct sparc_opcode *));
-static void synthetize_setsw PARAMS ((const struct sparc_opcode *));
-static void synthetize_setx PARAMS ((const struct sparc_opcode *));
-static bfd_vma BSR PARAMS ((bfd_vma, int));
-static int cmp_reg_entry PARAMS ((const PTR, const PTR));
-static int parse_keyword_arg PARAMS ((int (*) (const char *), char **, int *));
-static int parse_const_expr_arg PARAMS ((char **, int *));
-static int get_expression PARAMS ((char *str));
+static int sparc_ip (char *, const struct sparc_opcode **);
+static int parse_keyword_arg (int (*) (const char *), char **, int *);
+static int parse_const_expr_arg (char **, int *);
+static int get_expression (char *);
 
 /* Default architecture.  */
 /* ??? The default value should be V8, but sparclite support was added
@@ -131,17 +120,16 @@ int sparc_cie_data_alignment;
 /* Handle of the OPCODE hash table.  */
 static struct hash_control *op_hash;
 
-static int mylog2 PARAMS ((int));
-static void s_data1 PARAMS ((void));
-static void s_seg PARAMS ((int));
-static void s_proc PARAMS ((int));
-static void s_reserve PARAMS ((int));
-static void s_common PARAMS ((int));
-static void s_empty PARAMS ((int));
-static void s_uacons PARAMS ((int));
-static void s_ncons PARAMS ((int));
+static void s_data1 (void);
+static void s_seg (int);
+static void s_proc (int);
+static void s_reserve (int);
+static void s_common (int);
+static void s_empty (int);
+static void s_uacons (int);
+static void s_ncons (int);
 #ifdef OBJ_ELF
-static void s_register PARAMS ((int));
+static void s_register (int);
 #endif
 
 const pseudo_typeS md_pseudo_table[] =
@@ -217,8 +205,7 @@ struct sparc_it
 
 struct sparc_it the_insn, set_insn;
 
-static void output_insn
-  PARAMS ((const struct sparc_opcode *, struct sparc_it *));
+static void output_insn (const struct sparc_opcode *, struct sparc_it *);
 \f
 /* Table of arguments to -A.
    The sparc_opcode_arch table in sparc-opc.c is insufficient and incorrect
@@ -260,8 +247,7 @@ static struct sparc_arch {
 static enum sparc_arch_types default_arch_type;
 
 static struct sparc_arch *
-lookup_arch (name)
-     char *name;
+lookup_arch (char *name)
 {
   struct sparc_arch *sa;
 
@@ -277,7 +263,7 @@ lookup_arch (name)
    architecture name.  */
 
 static void
-init_default_arch ()
+init_default_arch (void)
 {
   struct sparc_arch *sa = lookup_arch (default_arch);
 
@@ -296,7 +282,7 @@ init_default_arch ()
 /* Called by TARGET_FORMAT.  */
 
 const char *
-sparc_target_format ()
+sparc_target_format (void)
 {
   /* We don't get a chance to initialize anything before we're called,
      so handle that now.  */
@@ -451,9 +437,7 @@ struct option md_longopts[] = {
 size_t md_longopts_size = sizeof (md_longopts);
 
 int
-md_parse_option (c, arg)
-     int c;
-     char *arg;
+md_parse_option (int c, char *arg)
 {
   /* We don't get a chance to initialize anything before we're called,
      so handle that now.  */
@@ -558,6 +542,10 @@ md_parse_option (c, arg)
          as_fatal (_("No compiled in support for %d bit object file format"),
                    sparc_arch_size);
        free (list);
+
+       if (sparc_arch_size == 64
+           && max_architecture < SPARC_OPCODE_ARCH_V9)
+         max_architecture = SPARC_OPCODE_ARCH_V9;
       }
       break;
 
@@ -622,8 +610,7 @@ md_parse_option (c, arg)
 }
 
 void
-md_show_usage (stream)
-     FILE *stream;
+md_show_usage (FILE *stream)
 {
   const struct sparc_arch *arch;
   int column;
@@ -768,13 +755,18 @@ struct priv_reg_entry hpriv_reg_table[] =
   {"", -1},                    /* End marker.  */
 };
 
-/* v9a specific asrs.  */
+/* v9a specific asrs.  This table is ordered by initial
+   letter, in reverse.  */
 
 struct priv_reg_entry v9a_asr_table[] =
 {
   {"tick_cmpr", 23},
   {"sys_tick_cmpr", 25},
   {"sys_tick", 24},
+  {"stick_cmpr", 25},
+  {"stick", 24},
+  {"softint_clear", 21},
+  {"softint_set", 20},
   {"softint", 22},
   {"set_softint", 20},
   {"pic", 17},
@@ -786,9 +778,7 @@ struct priv_reg_entry v9a_asr_table[] =
 };
 
 static int
-cmp_reg_entry (parg, qarg)
-     const PTR parg;
-     const PTR qarg;
+cmp_reg_entry (const void *parg, const void *qarg)
 {
   const struct priv_reg_entry *p = (const struct priv_reg_entry *) parg;
   const struct priv_reg_entry *q = (const struct priv_reg_entry *) qarg;
@@ -801,7 +791,7 @@ cmp_reg_entry (parg, qarg)
    need.  */
 
 void
-md_begin ()
+md_begin (void)
 {
   register const char *retval = NULL;
   int lose = 0;
@@ -819,7 +809,7 @@ md_begin ()
   while (i < (unsigned int) sparc_num_opcodes)
     {
       const char *name = sparc_opcodes[i].name;
-      retval = hash_insert (op_hash, name, (PTR) &sparc_opcodes[i]);
+      retval = hash_insert (op_hash, name, (void *) &sparc_opcodes[i]);
       if (retval != NULL)
        {
          as_bad (_("Internal error: can't hash `%s': %s\n"),
@@ -855,7 +845,8 @@ md_begin ()
        }
       else
        {
-         retval = hash_insert (op_hash, native_op_table[i].name, (PTR) insn);
+         retval = hash_insert (op_hash, native_op_table[i].name,
+                               (void *) insn);
          if (retval != NULL)
            {
              as_bad (_("Internal error: can't hash `%s': %s\n"),
@@ -899,7 +890,7 @@ md_begin ()
 /* Called after all assembly has been done.  */
 
 void
-sparc_md_end ()
+sparc_md_end (void)
 {
   unsigned long mach = bfd_mach_sparc;
 
@@ -927,9 +918,8 @@ sparc_md_end ()
 \f
 /* Return non-zero if VAL is in the range -(MAX+1) to MAX.  */
 
-static INLINE int
-in_signed_range (val, max)
-     bfd_signed_vma val, max;
+static inline int
+in_signed_range (bfd_signed_vma val, bfd_signed_vma max)
 {
   if (max <= 0)
     abort ();
@@ -949,9 +939,8 @@ in_signed_range (val, max)
 
 /* Return non-zero if VAL is in the range 0 to MAX.  */
 
-static INLINE int
-in_unsigned_range (val, max)
-     bfd_vma val, max;
+static inline int
+in_unsigned_range (bfd_vma val, bfd_vma max)
 {
   if (val > max)
     return 0;
@@ -961,9 +950,8 @@ in_unsigned_range (val, max)
 /* Return non-zero if VAL is in the range -(MAX/2+1) to MAX.
    (e.g. -15 to +31).  */
 
-static INLINE int
-in_bitfield_range (val, max)
-     bfd_signed_vma val, max;
+static inline int
+in_bitfield_range (bfd_signed_vma val, bfd_signed_vma max)
 {
   if (max <= 0)
     abort ();
@@ -975,8 +963,7 @@ in_bitfield_range (val, max)
 }
 
 static int
-sparc_ffs (mask)
-     unsigned int mask;
+sparc_ffs (unsigned int mask)
 {
   int i;
 
@@ -990,9 +977,7 @@ sparc_ffs (mask)
 
 /* Implement big shift right.  */
 static bfd_vma
-BSR (val, amount)
-     bfd_vma val;
-     int amount;
+BSR (bfd_vma val, int amount)
 {
   if (sizeof (bfd_vma) <= 4 && amount >= 32)
     as_fatal (_("Support for 64-bit arithmetic not compiled in."));
@@ -1029,8 +1014,7 @@ static unsigned long last_opcode;
 /* Handle the set and setuw synthetic instructions.  */
 
 static void
-synthetize_setuw (insn)
-     const struct sparc_opcode *insn;
+synthetize_setuw (const struct sparc_opcode *insn)
 {
   int need_hi22_p = 0;
   int rd = (the_insn.opcode & RD (~0)) >> 25;
@@ -1088,8 +1072,7 @@ synthetize_setuw (insn)
 /* Handle the setsw synthetic instruction.  */
 
 static void
-synthetize_setsw (insn)
-     const struct sparc_opcode *insn;
+synthetize_setsw (const struct sparc_opcode *insn)
 {
   int low32, rd, opc;
 
@@ -1140,8 +1123,7 @@ synthetize_setsw (insn)
 /* Handle the setsw synthetic instruction.  */
 
 static void
-synthetize_setx (insn)
-     const struct sparc_opcode *insn;
+synthetize_setx (const struct sparc_opcode *insn)
 {
   int upper32, lower32;
   int tmpreg = (the_insn.opcode & RS1 (~0)) >> 14;
@@ -1307,8 +1289,7 @@ synthetize_setx (insn)
 /* Main entry point to assemble one instruction.  */
 
 void
-md_assemble (str)
-     char *str;
+md_assemble (char *str)
 {
   const struct sparc_opcode *insn;
   int special_case;
@@ -1375,7 +1356,7 @@ md_assemble (str)
           The workaround is to add an fmovs of the destination register to
           itself just after the instruction.  This was true on machines
           with Weitek 1165 float chips, such as the Sun-4/260 and /280.  */
-       assert (the_insn.reloc == BFD_RELOC_NONE);
+       gas_assert (the_insn.reloc == BFD_RELOC_NONE);
        the_insn.opcode = FMOVS_INSN | rd | RD (rd);
        output_insn (insn, &the_insn);
        return;
@@ -1389,9 +1370,7 @@ md_assemble (str)
 /* Subroutine of md_assemble to do the actual parsing.  */
 
 static int
-sparc_ip (str, pinsn)
-     char *str;
-     const struct sparc_opcode **pinsn;
+sparc_ip (char *str, const struct sparc_opcode **pinsn)
 {
   char *error_message = "";
   char *s;
@@ -1860,7 +1839,7 @@ sparc_ip (str, pinsn)
            case '\0':          /* End of args.  */
              if (s[0] == ',' && s[1] == '%')
                {
-                 static const struct tls_ops
+                 static const struct ops
                  {
                    /* The name as it appears in assembler.  */
                    char *name;
@@ -1868,10 +1847,10 @@ sparc_ip (str, pinsn)
                    int len;
                    /* The reloc this pseudo-op translates to.  */
                    int reloc;
-                   /* 1 if call.  */
-                   int call;
+                   /* 1 if tls call.  */
+                   int tls_call;
                  }
-                 tls_ops[] =
+                 ops[] =
                  {
                    { "tgd_add", 7, BFD_RELOC_SPARC_TLS_GD_ADD, 0 },
                    { "tgd_call", 8, BFD_RELOC_SPARC_TLS_GD_CALL, 1 },
@@ -1881,13 +1860,14 @@ sparc_ip (str, pinsn)
                    { "tie_ldx", 7, BFD_RELOC_SPARC_TLS_IE_LDX, 0 },
                    { "tie_ld", 6, BFD_RELOC_SPARC_TLS_IE_LD, 0 },
                    { "tie_add", 7, BFD_RELOC_SPARC_TLS_IE_ADD, 0 },
+                   { "gdop", 4, BFD_RELOC_SPARC_GOTDATA_OP, 0 },
                    { NULL, 0, 0, 0 }
                  };
-                 const struct tls_ops *o;
+                 const struct ops *o;
                  char *s1;
                  int npar = 0;
 
-                 for (o = tls_ops; o->name; o++)
+                 for (o = ops; o->name; o++)
                    if (strncmp (s + 2, o->name, o->len) == 0)
                      break;
                  if (o->name == NULL)
@@ -1899,14 +1879,14 @@ sparc_ip (str, pinsn)
                      return special_case;
                    }
 
-                 if (! o->call && the_insn.reloc != BFD_RELOC_NONE)
+                 if (! o->tls_call && the_insn.reloc != BFD_RELOC_NONE)
                    {
                      as_bad (_("Illegal operands: %%%s cannot be used together with other relocs in the insn ()"),
                              o->name);
                      return special_case;
                    }
 
-                 if (o->call
+                 if (o->tls_call
                      && (the_insn.reloc != BFD_RELOC_32_PCREL_S2
                          || the_insn.exp.X_add_number != 0
                          || the_insn.exp.X_add_symbol
@@ -2308,6 +2288,8 @@ sparc_ip (str, pinsn)
                      { "lox", 3, BFD_RELOC_SPARC_LOX10, 1, 0 },
                      { "hi", 2, BFD_RELOC_HI22, 0, 1 },
                      { "lo", 2, BFD_RELOC_LO10, 0, 1 },
+                     { "pc22", 4, BFD_RELOC_SPARC_PC22, 0, 1 },
+                     { "pc10", 4, BFD_RELOC_SPARC_PC10, 0, 1 },
                      { "hh", 2, BFD_RELOC_SPARC_HH22, 1, 1 },
                      { "hm", 2, BFD_RELOC_SPARC_HM10, 1, 1 },
                      { "lm", 2, BFD_RELOC_SPARC_LM22, 1, 1 },
@@ -2328,6 +2310,10 @@ sparc_ip (str, pinsn)
                      { "tie_lo10", 8, BFD_RELOC_SPARC_TLS_IE_LO10, 0, 0 },
                      { "tle_hix22", 9, BFD_RELOC_SPARC_TLS_LE_HIX22, 0, 0 },
                      { "tle_lox10", 9, BFD_RELOC_SPARC_TLS_LE_LOX10, 0, 0 },
+                     { "gdop_hix22", 10, BFD_RELOC_SPARC_GOTDATA_OP_HIX22,
+                       0, 0 },
+                     { "gdop_lox10", 10, BFD_RELOC_SPARC_GOTDATA_OP_LOX10,
+                       0, 0 },
                      { NULL, 0, 0, 0, 0 }
                    };
                    const struct ops *o;
@@ -2759,7 +2745,7 @@ sparc_ip (str, pinsn)
                sparc_ffs (SPARC_OPCODE_SUPPORTED (max_architecture)
                           & needed_arch_mask);
 
-             assert (needed_architecture <= SPARC_OPCODE_ARCH_MAX);
+             gas_assert (needed_architecture <= SPARC_OPCODE_ARCH_MAX);
              if (warn_on_bump
                  && needed_architecture > warn_after_architecture)
                {
@@ -2820,10 +2806,9 @@ sparc_ip (str, pinsn)
    If successful, INPUT_POINTER is updated.  */
 
 static int
-parse_keyword_arg (lookup_fn, input_pointerP, valueP)
-     int (*lookup_fn) PARAMS ((const char *));
-     char **input_pointerP;
-     int *valueP;
+parse_keyword_arg (int (*lookup_fn) (const char *),
+                  char **input_pointerP,
+                  int *valueP)
 {
   int value;
   char c, *p, *q;
@@ -2848,9 +2833,7 @@ parse_keyword_arg (lookup_fn, input_pointerP, valueP)
    The result is a boolean indicating success.  */
 
 static int
-parse_const_expr_arg (input_pointerP, valueP)
-     char **input_pointerP;
-     int *valueP;
+parse_const_expr_arg (char **input_pointerP, int *valueP)
 {
   char *save = input_line_pointer;
   expressionS exp;
@@ -2880,8 +2863,7 @@ parse_const_expr_arg (input_pointerP, valueP)
 /* Subroutine of sparc_ip to parse an expression.  */
 
 static int
-get_expression (str)
-     char *str;
+get_expression (char *str)
 {
   char *save_in;
   segT seg;
@@ -2908,9 +2890,7 @@ get_expression (str)
 /* Subroutine of md_assemble to output one insn.  */
 
 static void
-output_insn (insn, the_insn)
-     const struct sparc_opcode *insn;
-     struct sparc_it *the_insn;
+output_insn (const struct sparc_opcode *insn, struct sparc_it *the_insn)
 {
   char *toP = frag_more (4);
 
@@ -2946,93 +2926,17 @@ output_insn (insn, the_insn)
 #endif
 }
 \f
-/* This is identical to the md_atof in m68k.c.  I think this is right,
-   but I'm not sure.
-
-   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
-   returned, or NULL on OK.  */
-
-/* Equal to MAX_PRECISION in atof-ieee.c.  */
-#define MAX_LITTLENUMS 6
-
 char *
-md_atof (type, litP, sizeP)
-     char type;
-     char *litP;
-     int *sizeP;
+md_atof (int type, char *litP, int *sizeP)
 {
-  int i, prec;
-  LITTLENUM_TYPE words[MAX_LITTLENUMS];
-  char *t;
-
-  switch (type)
-    {
-    case 'f':
-    case 'F':
-    case 's':
-    case 'S':
-      prec = 2;
-      break;
-
-    case 'd':
-    case 'D':
-    case 'r':
-    case 'R':
-      prec = 4;
-      break;
-
-    case 'x':
-    case 'X':
-      prec = 6;
-      break;
-
-    case 'p':
-    case 'P':
-      prec = 6;
-      break;
-
-    default:
-      *sizeP = 0;
-      return _("Bad call to MD_ATOF()");
-    }
-
-  t = atof_ieee (input_line_pointer, type, words);
-  if (t)
-    input_line_pointer = t;
-  *sizeP = prec * sizeof (LITTLENUM_TYPE);
-
-  if (target_big_endian)
-    {
-      for (i = 0; i < prec; i++)
-       {
-         md_number_to_chars (litP, (valueT) words[i],
-                             sizeof (LITTLENUM_TYPE));
-         litP += sizeof (LITTLENUM_TYPE);
-       }
-    }
-  else
-    {
-      for (i = prec - 1; i >= 0; i--)
-       {
-         md_number_to_chars (litP, (valueT) words[i],
-                             sizeof (LITTLENUM_TYPE));
-         litP += sizeof (LITTLENUM_TYPE);
-       }
-    }
-
-  return 0;
+  return ieee_md_atof (type, litP, sizeP, target_big_endian);
 }
 
 /* Write a value out to the object file, using the appropriate
    endianness.  */
 
 void
-md_number_to_chars (buf, val, n)
-     char *buf;
-     valueT val;
-     int n;
+md_number_to_chars (char *buf, valueT val, int n)
 {
   if (target_big_endian)
     number_to_chars_bigendian (buf, val, n);
@@ -3049,16 +2953,13 @@ md_number_to_chars (buf, val, n)
    hold.  */
 
 void
-md_apply_fix (fixP, valP, segment)
-     fixS *fixP;
-     valueT *valP;
-     segT segment ATTRIBUTE_UNUSED;
+md_apply_fix (fixS *fixP, valueT *valP, segT segment ATTRIBUTE_UNUSED)
 {
   char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
   offsetT val = * (offsetT *) valP;
   long insn;
 
-  assert (fixP->fx_r_type < BFD_RELOC_UNUSED);
+  gas_assert (fixP->fx_r_type < BFD_RELOC_UNUSED);
 
   fixP->fx_addnumber = val;    /* Remember value for emit_reloc.  */
 
@@ -3440,9 +3341,7 @@ md_apply_fix (fixP, valP, segment)
    format.  */
 
 arelent **
-tc_gen_reloc (section, fixp)
-     asection *section;
-     fixS *fixp;
+tc_gen_reloc (asection *section, fixS *fixp)
 {
   static arelent *relocs[3];
   arelent *reloc;
@@ -3464,6 +3363,8 @@ tc_gen_reloc (section, fixp)
     case BFD_RELOC_32_PCREL_S2:
     case BFD_RELOC_SPARC13:
     case BFD_RELOC_SPARC22:
+    case BFD_RELOC_SPARC_PC22:
+    case BFD_RELOC_SPARC_PC10:
     case BFD_RELOC_SPARC_BASE13:
     case BFD_RELOC_SPARC_WDISP16:
     case BFD_RELOC_SPARC_WDISP19:
@@ -3518,6 +3419,9 @@ tc_gen_reloc (section, fixp)
     case BFD_RELOC_SPARC_TLS_LE_LOX10:
     case BFD_RELOC_SPARC_TLS_DTPOFF32:
     case BFD_RELOC_SPARC_TLS_DTPOFF64:
+    case BFD_RELOC_SPARC_GOTDATA_OP_HIX22:
+    case BFD_RELOC_SPARC_GOTDATA_OP_LOX10:
+    case BFD_RELOC_SPARC_GOTDATA_OP:
       code = fixp->fx_r_type;
       break;
     default:
@@ -3665,8 +3569,7 @@ tc_gen_reloc (section, fixp)
 /* We have no need to default values of symbols.  */
 
 symbolS *
-md_undefined_symbol (name)
-     char *name ATTRIBUTE_UNUSED;
+md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
 {
   return 0;
 }
@@ -3674,9 +3577,7 @@ md_undefined_symbol (name)
 /* Round up a section size to the appropriate boundary.  */
 
 valueT
-md_section_align (segment, size)
-     segT segment ATTRIBUTE_UNUSED;
-     valueT size;
+md_section_align (segT segment ATTRIBUTE_UNUSED, valueT size)
 {
 #ifndef OBJ_ELF
   /* This is not right for ELF; a.out wants it, and COFF will force
@@ -3699,8 +3600,7 @@ md_section_align (segment, size)
    its size.  This gets us to the following instruction.
    (??? Is this right?  FIXME-SOON)  */
 long
-md_pcrel_from (fixP)
-     fixS *fixP;
+md_pcrel_from (fixS *fixP)
 {
   long ret;
 
@@ -3716,8 +3616,7 @@ md_pcrel_from (fixP)
    of two.  */
 
 static int
-mylog2 (value)
-     int value;
+mylog2 (int value)
 {
   int shift;
 
@@ -3737,8 +3636,7 @@ static int max_alignment = 15;
 #endif
 
 static void
-s_reserve (ignore)
-     int ignore ATTRIBUTE_UNUSED;
+s_reserve (int ignore ATTRIBUTE_UNUSED)
 {
   char *name;
   char *p;
@@ -3874,16 +3772,15 @@ s_reserve (ignore)
     }
   else
     {
-      as_warn ("Ignoring attempt to re-define symbol %s",
+      as_warn (_("Ignoring attempt to re-define symbol %s"),
               S_GET_NAME (symbolP));
-    }                          /* if not redefining.  */
+    }
 
   demand_empty_rest_of_line ();
 }
 
 static void
-s_common (ignore)
-     int ignore ATTRIBUTE_UNUSED;
+s_common (int ignore ATTRIBUTE_UNUSED)
 {
   char *name;
   char c;
@@ -4062,8 +3959,7 @@ s_common (ignore)
    invalid delay slot usage.  */
 
 static void
-s_empty (ignore)
-     int ignore ATTRIBUTE_UNUSED;
+s_empty (int ignore ATTRIBUTE_UNUSED)
 {
   /* The easy way to implement is to just forget about the last
      instruction.  */
@@ -4071,8 +3967,7 @@ s_empty (ignore)
 }
 
 static void
-s_seg (ignore)
-     int ignore ATTRIBUTE_UNUSED;
+s_seg (int ignore ATTRIBUTE_UNUSED)
 {
 
   if (strncmp (input_line_pointer, "\"text\"", 6) == 0)
@@ -4107,15 +4002,14 @@ s_seg (ignore)
 }
 
 static void
-s_data1 ()
+s_data1 (void)
 {
   subseg_set (data_section, 1);
   demand_empty_rest_of_line ();
 }
 
 static void
-s_proc (ignore)
-     int ignore ATTRIBUTE_UNUSED;
+s_proc (int ignore ATTRIBUTE_UNUSED)
 {
   while (!is_end_of_line[(unsigned char) *input_line_pointer])
     {
@@ -4139,8 +4033,7 @@ static const char *sparc_cons_special_reloc;
    to be aligned.  */
 
 static void
-s_uacons (bytes)
-     int bytes;
+s_uacons (int bytes)
 {
   /* Tell sparc_cons_align not to align this value.  */
   sparc_no_align_cons = 1;
@@ -4153,8 +4046,7 @@ s_uacons (bytes)
    sparc_arch_size 64 it is equivalent to .xword.  */
 
 static void
-s_ncons (bytes)
-     int bytes ATTRIBUTE_UNUSED;
+s_ncons (int bytes ATTRIBUTE_UNUSED)
 {
   cons (sparc_arch_size == 32 ? 4 : 8);
 }
@@ -4168,8 +4060,7 @@ s_ncons (bytes)
 */
 
 static void
-s_register (ignore)
-     int ignore ATTRIBUTE_UNUSED;
+s_register (int ignore ATTRIBUTE_UNUSED)
 {
   char c;
   int reg;
@@ -4257,7 +4148,7 @@ s_register (ignore)
    symbols which need it.  */
 
 void
-sparc_adjust_symtab ()
+sparc_adjust_symtab (void)
 {
   symbolS *sym;
 
@@ -4288,8 +4179,7 @@ sparc_adjust_symtab ()
    option to check for it.  */
 
 void
-sparc_cons_align (nbytes)
-     int nbytes;
+sparc_cons_align (int nbytes)
 {
   int nalign;
   char *p;
@@ -4306,7 +4196,7 @@ sparc_cons_align (nbytes)
   if (nalign == 0)
     return;
 
-  assert (nalign > 0);
+  gas_assert (nalign > 0);
 
   if (now_seg == absolute_section)
     {
@@ -4324,8 +4214,7 @@ sparc_cons_align (nbytes)
 /* This is called from HANDLE_ALIGN in tc-sparc.h.  */
 
 void
-sparc_handle_align (fragp)
-     fragS *fragp;
+sparc_handle_align (fragS *fragp)
 {
   int count, fix;
   char *p;
@@ -4381,7 +4270,7 @@ sparc_handle_align (fragp)
 /* Some special processing for a Sparc ELF file.  */
 
 void
-sparc_elf_final_processing ()
+sparc_elf_final_processing (void)
 {
   /* Set the Sparc ELF flag bits.  FIXME: There should probably be some
      sort of BFD interface for this.  */
@@ -4408,9 +4297,7 @@ sparc_elf_final_processing ()
 }
 
 void
-sparc_cons (exp, size)
-     expressionS *exp;
-     int size;
+sparc_cons (expressionS *exp, int size)
 {
   char *save;
 
@@ -4551,11 +4438,10 @@ sparc_cons (exp, size)
    we want to handle little endian relocs specially.  */
 
 void
-cons_fix_new_sparc (frag, where, nbytes, exp)
-     fragS *frag;
-     int where;
-     unsigned int nbytes;
-     expressionS *exp;
+cons_fix_new_sparc (fragS *frag,
+                   int where,
+                   unsigned int nbytes,
+                   expressionS *exp)
 {
   bfd_reloc_code_real_type r;
 
@@ -4608,7 +4494,7 @@ cons_fix_new_sparc (frag, where, nbytes, exp)
 }
 
 void
-sparc_cfi_frame_initial_instructions ()
+sparc_cfi_frame_initial_instructions (void)
 {
   cfi_add_CFA_def_cfa (14, sparc_arch_size == 64 ? 0x7ff : 0);
 }