x86: fold individual Jump* attributes into a single Jump one
[deliverable/binutils-gdb.git] / gas / config / tc-xstormy16.c
index e27c7a74a963a4d94c57515cbd40fcf2b2bfc7fa..1c708b63625f75be673aaa36a072f0db9cf3d55f 100644 (file)
@@ -1,11 +1,11 @@
 /* tc-xstormy16.c -- Assembler for the Sanyo XSTORMY16.
 /* tc-xstormy16.c -- Assembler for the Sanyo XSTORMY16.
-   Copyright 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation.
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
    This file is part of GAS, the GNU Assembler.
 
    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, 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 
-#include <stdio.h>
 #include "as.h"
 #include "subsegs.h"
 #include "symcat.h"
 #include "as.h"
 #include "subsegs.h"
 #include "symcat.h"
@@ -66,16 +65,14 @@ struct option md_longopts[] =
 size_t md_longopts_size = sizeof (md_longopts);
 
 int
 size_t md_longopts_size = sizeof (md_longopts);
 
 int
-md_parse_option (c, arg)
-     int    c ATTRIBUTE_UNUSED;
-     char * arg ATTRIBUTE_UNUSED;
+md_parse_option (int    c ATTRIBUTE_UNUSED,
+                const char * arg ATTRIBUTE_UNUSED)
 {
   return 0;
 }
 
 void
 {
   return 0;
 }
 
 void
-md_show_usage (stream)
-  FILE * stream;
+md_show_usage (FILE * stream)
 {
   fprintf (stream, _(" XSTORMY16 specific command line options:\n"));
 }
 {
   fprintf (stream, _(" XSTORMY16 specific command line options:\n"));
 }
@@ -89,7 +86,7 @@ const pseudo_typeS md_pseudo_table[] =
 
 \f
 void
 
 \f
 void
-md_begin ()
+md_begin (void)
 {
   /* Initialize the `cgen' interface.  */
 
 {
   /* Initialize the `cgen' interface.  */
 
@@ -107,8 +104,7 @@ md_begin ()
 static bfd_boolean skipping_fptr = FALSE;
 
 void
 static bfd_boolean skipping_fptr = FALSE;
 
 void
-md_assemble (str)
-     char * str;
+md_assemble (char * str)
 {
   xstormy16_insn insn;
   char *    errmsg;
 {
   xstormy16_insn insn;
   char *    errmsg;
@@ -125,7 +121,7 @@ md_assemble (str)
 
   if (!insn.insn)
     {
 
   if (!insn.insn)
     {
-      as_bad (errmsg);
+      as_bad ("%s", errmsg);
       return;
     }
 
       return;
     }
 
@@ -135,8 +131,7 @@ md_assemble (str)
 }
 
 void
 }
 
 void
-md_operand (e)
-     expressionS * e;
+md_operand (expressionS * e)
 {
   if (*input_line_pointer != '@')
     return;
 {
   if (*input_line_pointer != '@')
     return;
@@ -147,7 +142,7 @@ md_operand (e)
       SKIP_WHITESPACE ();
       if (*input_line_pointer != '(')
        {
       SKIP_WHITESPACE ();
       if (*input_line_pointer != '(')
        {
-         as_bad ("Expected '('");
+         as_bad (_("Expected '('"));
          goto err;
        }
       input_line_pointer++;
          goto err;
        }
       input_line_pointer++;
@@ -156,14 +151,14 @@ md_operand (e)
 
       if (*input_line_pointer != ')')
        {
 
       if (*input_line_pointer != ')')
        {
-         as_bad ("Missing ')'");
+         as_bad (_("Missing ')'"));
          goto err;
        }
       input_line_pointer++;
       SKIP_WHITESPACE ();
 
       if (e->X_op != O_symbol)
          goto err;
        }
       input_line_pointer++;
       SKIP_WHITESPACE ();
 
       if (e->X_op != O_symbol)
-       as_bad ("Not a symbolic expression");
+       as_bad (_("Not a symbolic expression"));
       else if (* input_line_pointer == '-')
        /* We are computing the difference of two function pointers
           like this:
       else if (* input_line_pointer == '-')
        /* We are computing the difference of two function pointers
           like this:
@@ -195,15 +190,12 @@ md_operand (e)
    Create BFD_RELOC_XSTORMY16_FPTR16 relocations.  */
 
 void
    Create BFD_RELOC_XSTORMY16_FPTR16 relocations.  */
 
 void
-xstormy16_cons_fix_new (f, where, nbytes, exp)
-     fragS *f;
-     int where;
-     int nbytes;
-     expressionS *exp;
+xstormy16_cons_fix_new (fragS *f,
+                       int where,
+                       int nbytes,
+                       expressionS *exp,
+                       bfd_reloc_code_real_type code)
 {
 {
-  bfd_reloc_code_real_type code;
-  fixS *fix;
-
   if (exp->X_op == O_fptr_symbol)
     {
       switch (nbytes)
   if (exp->X_op == O_fptr_symbol)
     {
       switch (nbytes)
@@ -212,21 +204,23 @@ xstormy16_cons_fix_new (f, where, nbytes, exp)
          /* This can happen when gcc is generating debug output.
             For example it can create a stab with the address of
             a function:
          /* This can happen when gcc is generating debug output.
             For example it can create a stab with the address of
             a function:
-            
+
                .stabs  "foo:F(0,21)",36,0,0,@fptr(foo)
                .stabs  "foo:F(0,21)",36,0,0,@fptr(foo)
+
             Since this does not involve switching code pages, we
             just allow the reloc to be generated without any
             @fptr behaviour.  */
          exp->X_op = O_symbol;
          code = BFD_RELOC_32;
          break;
             Since this does not involve switching code pages, we
             just allow the reloc to be generated without any
             @fptr behaviour.  */
          exp->X_op = O_symbol;
          code = BFD_RELOC_32;
          break;
+
        case 2:
          exp->X_op = O_symbol;
          code = BFD_RELOC_XSTORMY16_FPTR16;
          break;
        case 2:
          exp->X_op = O_symbol;
          code = BFD_RELOC_XSTORMY16_FPTR16;
          break;
+
        default:
        default:
-         as_bad ("unsupported fptr fixup size %d", nbytes);
+         as_bad (_("unsupported fptr fixup size %d"), nbytes);
          return;
        }
     }
          return;
        }
     }
@@ -238,25 +232,24 @@ xstormy16_cons_fix_new (f, where, nbytes, exp)
     code = BFD_RELOC_32;
   else
     {
     code = BFD_RELOC_32;
   else
     {
-      as_bad ("unsupported fixup size %d", nbytes);
+      as_bad (_("unsupported fixup size %d"), nbytes);
       return;
     }
 
       return;
     }
 
-  fix = fix_new_exp (f, where, nbytes, exp, 0, code);
+  fix_new_exp (f, where, nbytes, exp, 0, code);
 }
 
 /* Called while parsing an instruction to create a fixup.
    Create BFD_RELOC_XSTORMY16_FPTR16 relocations.  */
 
 fixS *
 }
 
 /* Called while parsing an instruction to create a fixup.
    Create BFD_RELOC_XSTORMY16_FPTR16 relocations.  */
 
 fixS *
-xstormy16_cgen_record_fixup_exp (frag, where, insn, length, operand, opinfo, exp)
-     fragS *              frag;
-     int                  where;
-     const CGEN_INSN *    insn;
-     int                  length;
-     const CGEN_OPERAND * operand;
-     int                  opinfo;
-     expressionS *        exp;
+xstormy16_cgen_record_fixup_exp (fragS *              frag,
+                                int                  where,
+                                const CGEN_INSN *    insn,
+                                int                  length,
+                                const CGEN_OPERAND * operand,
+                                int                  opinfo,
+                                expressionS *        exp)
 {
   fixS *fixP;
   operatorT op = exp->X_op;
 {
   fixS *fixP;
   operatorT op = exp->X_op;
@@ -270,7 +263,7 @@ xstormy16_cgen_record_fixup_exp (frag, where, insn, length, operand, opinfo, exp
   if (op == O_fptr_symbol)
     {
       if (operand->type != XSTORMY16_OPERAND_IMM16)
   if (op == O_fptr_symbol)
     {
       if (operand->type != XSTORMY16_OPERAND_IMM16)
-       as_bad ("unsupported fptr fixup");
+       as_bad (_("unsupported fptr fixup"));
       else
        {
          fixP->fx_r_type = BFD_RELOC_XSTORMY16_FPTR16;
       else
        {
          fixP->fx_r_type = BFD_RELOC_XSTORMY16_FPTR16;
@@ -282,17 +275,15 @@ xstormy16_cgen_record_fixup_exp (frag, where, insn, length, operand, opinfo, exp
 }
 
 valueT
 }
 
 valueT
-md_section_align (segment, size)
-     segT   segment;
-     valueT size;
+md_section_align (segT segment, valueT size)
 {
 {
-  int align = bfd_get_section_alignment (stdoutput, segment);
-  return ((size + (1 << align) - 1) & (-1 << align));
+  int align = bfd_section_alignment (segment);
+
+  return ((size + (1 << align) - 1) & -(1 << align));
 }
 
 symbolS *
 }
 
 symbolS *
-md_undefined_symbol (name)
-  char * name ATTRIBUTE_UNUSED;
+md_undefined_symbol (char * name ATTRIBUTE_UNUSED)
 {
   return 0;
 }
 {
   return 0;
 }
@@ -309,9 +300,8 @@ md_undefined_symbol (name)
    0 value.  */
 
 int
    0 value.  */
 
 int
-md_estimate_size_before_relax (fragP, segment)
-     fragS * fragP ATTRIBUTE_UNUSED;
-     segT    segment ATTRIBUTE_UNUSED;
+md_estimate_size_before_relax (fragS * fragP ATTRIBUTE_UNUSED,
+                              segT    segment ATTRIBUTE_UNUSED)
 {
   /* No assembler relaxation is defined (or necessary) for this port.  */
   abort ();
 {
   /* No assembler relaxation is defined (or necessary) for this port.  */
   abort ();
@@ -325,10 +315,9 @@ md_estimate_size_before_relax (fragP, segment)
    fragP->fr_subtype is the subtype of what the address relaxed to.  */
 
 void
    fragP->fr_subtype is the subtype of what the address relaxed to.  */
 
 void
-md_convert_frag (abfd, sec, fragP)
-  bfd *   abfd ATTRIBUTE_UNUSED;
-  segT    sec ATTRIBUTE_UNUSED;
-  fragS * fragP ATTRIBUTE_UNUSED;
+md_convert_frag (bfd *   abfd ATTRIBUTE_UNUSED,
+                segT    sec ATTRIBUTE_UNUSED,
+                fragS * fragP ATTRIBUTE_UNUSED)
 {
   /* No assembler relaxation is defined (or necessary) for this port.  */
   abort ();
 {
   /* No assembler relaxation is defined (or necessary) for this port.  */
   abort ();
@@ -340,9 +329,7 @@ md_convert_frag (abfd, sec, fragP)
    given a PC relative reloc.  */
 
 long
    given a PC relative reloc.  */
 
 long
-md_pcrel_from_section (fixP, sec)
-     fixS * fixP;
-     segT   sec;
+md_pcrel_from_section (fixS * fixP, segT sec)
 {
   if ((fixP->fx_addsy != (symbolS *) NULL
        && (! S_IS_DEFINED (fixP->fx_addsy)
 {
   if ((fixP->fx_addsy != (symbolS *) NULL
        && (! S_IS_DEFINED (fixP->fx_addsy)
@@ -350,7 +337,7 @@ md_pcrel_from_section (fixP, sec)
       || xstormy16_force_relocation (fixP))
     /* The symbol is undefined,
        or it is defined but not in this section,
       || xstormy16_force_relocation (fixP))
     /* The symbol is undefined,
        or it is defined but not in this section,
-       or the relocation will be relative to this symbol not the section symbol.        
+       or the relocation will be relative to this symbol not the section symbol.
        Let the linker figure it out.  */
     return 0;
 
        Let the linker figure it out.  */
     return 0;
 
@@ -362,10 +349,9 @@ md_pcrel_from_section (fixP, sec)
    *FIXP may be modified if desired.  */
 
 bfd_reloc_code_real_type
    *FIXP may be modified if desired.  */
 
 bfd_reloc_code_real_type
-md_cgen_lookup_reloc (insn, operand, fixP)
-     const CGEN_INSN *    insn ATTRIBUTE_UNUSED;
-     const CGEN_OPERAND * operand;
-     fixS *               fixP;
+md_cgen_lookup_reloc (const CGEN_INSN *    insn ATTRIBUTE_UNUSED,
+                     const CGEN_OPERAND * operand,
+                     fixS *               fixP)
 {
   switch (operand->type)
     {
 {
   switch (operand->type)
     {
@@ -396,6 +382,7 @@ md_cgen_lookup_reloc (insn, operand, fixP)
 
     case XSTORMY16_OPERAND_REL8_4:
       fixP->fx_addnumber -= 2;
 
     case XSTORMY16_OPERAND_REL8_4:
       fixP->fx_addnumber -= 2;
+      /* Fall through.  */
     case XSTORMY16_OPERAND_REL8_2:
       fixP->fx_addnumber -= 2;
       fixP->fx_pcrel = 1;
     case XSTORMY16_OPERAND_REL8_2:
       fixP->fx_addnumber -= 2;
       fixP->fx_pcrel = 1;
@@ -403,7 +390,7 @@ md_cgen_lookup_reloc (insn, operand, fixP)
 
     case XSTORMY16_OPERAND_REL12:
       fixP->fx_where += 2;
 
     case XSTORMY16_OPERAND_REL12:
       fixP->fx_where += 2;
-      /* Fall through...  */
+      /* Fall through.  */
     case XSTORMY16_OPERAND_REL12A:
       fixP->fx_addnumber -= 2;
       fixP->fx_pcrel = 1;
     case XSTORMY16_OPERAND_REL12A:
       fixP->fx_addnumber -= 2;
       fixP->fx_pcrel = 1;
@@ -419,8 +406,7 @@ md_cgen_lookup_reloc (insn, operand, fixP)
    relaxing.  */
 
 int
    relaxing.  */
 
 int
-xstormy16_force_relocation (fix)
-     fixS * fix;
+xstormy16_force_relocation (fixS * fix)
 {
   if (fix->fx_r_type == BFD_RELOC_XSTORMY16_FPTR16)
     return 1;
 {
   if (fix->fx_r_type == BFD_RELOC_XSTORMY16_FPTR16)
     return 1;
@@ -432,28 +418,26 @@ xstormy16_force_relocation (fix)
    a relocation against section+offset.  */
 
 bfd_boolean
    a relocation against section+offset.  */
 
 bfd_boolean
-xstormy16_fix_adjustable (fixP)
-   fixS * fixP;
+xstormy16_fix_adjustable (fixS * fixP)
 {
   /* We need the symbol name for the VTABLE entries.  */
   if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
       || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
 {
   /* We need the symbol name for the VTABLE entries.  */
   if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
       || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
-    return 0;
+    return FALSE;
 
   if (fixP->fx_r_type == BFD_RELOC_XSTORMY16_FPTR16)
 
   if (fixP->fx_r_type == BFD_RELOC_XSTORMY16_FPTR16)
-    return 0;
+    return FALSE;
 
 
-  return 1;
+  return TRUE;
 }
 
 }
 
-/* This is a copy of gas_cgen_md_apply_fix3, with some enhancements to
+/* This is a copy of gas_cgen_md_apply_fix, with some enhancements to
    do various things that would not be valid for all ports.  */
 
 void
    do various things that would not be valid for all ports.  */
 
 void
-xstormy16_md_apply_fix3 (fixP, valueP, seg)
-     fixS *   fixP;
-     valueT * valueP;
-     segT     seg ATTRIBUTE_UNUSED;
+xstormy16_md_apply_fix (fixS *   fixP,
+                        valueT * valueP,
+                        segT     seg ATTRIBUTE_UNUSED)
 {
   char *where = fixP->fx_frag->fr_literal + fixP->fx_where;
   valueT value = *valueP;
 {
   char *where = fixP->fx_frag->fr_literal + fixP->fx_where;
   valueT value = *valueP;
@@ -470,8 +454,7 @@ xstormy16_md_apply_fix3 (fixP, valueP, seg)
      it must deal with turning a BFD_RELOC_{8,16,32,64} into a
      BFD_RELOC_*_PCREL for the case of
 
      it must deal with turning a BFD_RELOC_{8,16,32,64} into a
      BFD_RELOC_*_PCREL for the case of
 
-       .word something-.
-  */
+       .word something-.  */
   if (fixP->fx_pcrel)
     switch (fixP->fx_r_type)
       {
   if (fixP->fx_pcrel)
     switch (fixP->fx_r_type)
       {
@@ -504,13 +487,14 @@ xstormy16_md_apply_fix3 (fixP, valueP, seg)
       const CGEN_OPERAND *operand = cgen_operand_lookup_by_num (cd, opindex);
       const char *errmsg;
       bfd_reloc_code_real_type reloc_type;
       const CGEN_OPERAND *operand = cgen_operand_lookup_by_num (cd, opindex);
       const char *errmsg;
       bfd_reloc_code_real_type reloc_type;
-      CGEN_FIELDS *fields = alloca (CGEN_CPU_SIZEOF_FIELDS (cd));
       const CGEN_INSN *insn = fixP->fx_cgen.insn;
 
       /* If the reloc has been fully resolved finish the operand here.  */
       /* FIXME: This duplicates the capabilities of code in BFD.  */
       if (fixP->fx_done)
        {
       const CGEN_INSN *insn = fixP->fx_cgen.insn;
 
       /* If the reloc has been fully resolved finish the operand here.  */
       /* FIXME: This duplicates the capabilities of code in BFD.  */
       if (fixP->fx_done)
        {
+         CGEN_FIELDS *fields = xmalloc (CGEN_CPU_SIZEOF_FIELDS (cd));
+
          CGEN_CPU_SET_FIELDS_BITSIZE (cd) (fields, CGEN_INSN_BITSIZE (insn));
          CGEN_CPU_SET_VMA_OPERAND (cd) (cd, opindex, fields, (bfd_vma) value);
 
          CGEN_CPU_SET_FIELDS_BITSIZE (cd) (fields, CGEN_INSN_BITSIZE (insn));
          CGEN_CPU_SET_VMA_OPERAND (cd) (cd, opindex, fields, (bfd_vma) value);
 
@@ -534,6 +518,8 @@ xstormy16_md_apply_fix3 (fixP, valueP, seg)
 #endif
          if (errmsg)
            as_bad_where (fixP->fx_file, fixP->fx_line, "%s", errmsg);
 #endif
          if (errmsg)
            as_bad_where (fixP->fx_file, fixP->fx_line, "%s", errmsg);
+
+         free (fields);
        }
 
       if (fixP->fx_done)
        }
 
       if (fixP->fx_done)
@@ -546,9 +532,7 @@ xstormy16_md_apply_fix3 (fixP, valueP, seg)
 
       reloc_type = md_cgen_lookup_reloc (insn, operand, fixP);
       if (reloc_type != BFD_RELOC_NONE)
 
       reloc_type = md_cgen_lookup_reloc (insn, operand, fixP);
       if (reloc_type != BFD_RELOC_NONE)
-       {
-         fixP->fx_r_type = reloc_type;
-       }
+       fixP->fx_r_type = reloc_type;
       else
        {
          as_bad_where (fixP->fx_file, fixP->fx_line,
       else
        {
          as_bad_where (fixP->fx_file, fixP->fx_line,
@@ -608,65 +592,13 @@ xstormy16_md_apply_fix3 (fixP, valueP, seg)
 /* Write a value out to the object file, using the appropriate endianness.  */
 
 void
 /* 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)
 {
   number_to_chars_littleendian (buf, val, n);
 }
 
 {
   number_to_chars_littleendian (buf, val, n);
 }
 
-/* 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;
+const char *
+md_atof (int type, char * litP, int * sizeP)
 {
 {
-  int              prec;
-  LITTLENUM_TYPE   words [MAX_LITTLENUMS];
-  LITTLENUM_TYPE   *wordP;
-  char *           t;
-
-  switch (type)
-    {
-    case 'f':
-    case 'F':
-      prec = 2;
-      break;
-
-    case 'd':
-    case 'D':
-      prec = 4;
-      break;
-
-   /* FIXME: Some targets allow other format chars for bigger sizes here.  */
-
-    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);
-
-  *sizeP = prec * sizeof (LITTLENUM_TYPE);
-  /* This loops outputs the LITTLENUMs in REVERSE order; in accord with
-     the littleendianness of the processor.  */
-  for (wordP = words + prec - 1; prec--;)
-    {
-      md_number_to_chars (litP, (valueT) (*wordP--), sizeof (LITTLENUM_TYPE));
-      litP += sizeof (LITTLENUM_TYPE);
-    }
-
-  return 0;
+  return ieee_md_atof (type, litP, sizeP, FALSE);
 }
 }
This page took 0.028893 seconds and 4 git commands to generate.