gas/
[deliverable/binutils-gdb.git] / gas / config / tc-i860.c
index 56cad24b3e5b8d8b6b36572047cab6eadaac07c2..813b7b1a6517c456428a14962330d9d2ffcb1425 100644 (file)
@@ -1,5 +1,5 @@
 /* tc-i860.c -- Assembler for the Intel i860 architecture.
-   Copyright (C) 1989, 1992, 1993, 1994, 1995, 1998, 1999, 2000
+   Copyright 1989, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002
    Free Software Foundation, Inc.
 
    Brought back from the dead and completely reworked
    with GAS; see the file COPYING.  If not, write to the Free Software
    Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include <ctype.h>
 #include <stdio.h>
 #include <string.h>
 #include "as.h"
+#include "safe-ctype.h"
 #include "subsegs.h"
 #include "opcode/i860.h"
 #include "elf/i860.h"
 
-
 /* Defined by default since this is primarily a SVR4/860 assembler.
    However, I'm trying to leave the door open for Intel syntax. Of course,
    if full support for anything other than SVR4 is done, then we should
    select this based on a command-line flag.  */
 #define SYNTAX_SVR4
 
-
 /* The opcode hash table.  */
 static struct hash_control *op_hash = NULL;
 
@@ -56,7 +54,6 @@ const char EXP_CHARS[] = "eE";
    As in 0f12.456 or 0d1.2345e12.  */
 const char FLT_CHARS[] = "rRsSfFdDxXpP";
 
-
 /* Register prefix.  */
 #ifdef SYNTAX_SVR4
 static const char reg_prefix = '%';
@@ -64,7 +61,6 @@ static const char reg_prefix = '%';
 static const char reg_prefix = 0;
 #endif
 
-
 struct i860_it
 {
   char *error;
@@ -84,7 +80,6 @@ static char last_expand;
 /* If true, then warn if any pseudo operations were expanded.  */
 static int target_warn_expand = 0;
 
-
 /* Prototypes.  */
 static void i860_process_insn  PARAMS ((char *));
 static void s_dual             PARAMS ((int));
@@ -97,7 +92,6 @@ static bfd_reloc_code_real_type obtain_reloc_for_imm16
 static void print_insn         PARAMS ((struct i860_it *));
 #endif
 
-
 const pseudo_typeS md_pseudo_table[] =
 {
 #ifdef OBJ_ELF
@@ -109,7 +103,6 @@ const pseudo_typeS md_pseudo_table[] =
   {NULL,      0,             0},
 };
 
-
 /* Dual-instruction mode handling.  */
 enum dual
 {
@@ -117,7 +110,6 @@ enum dual
 };
 static enum dual dual_mode = DUAL_OFF;
 
-
 /* Handle ".dual" directive.  */
 static void
 s_dual (ignore)
@@ -126,7 +118,6 @@ s_dual (ignore)
   dual_mode = DUAL_ON;
 }
 
-
 /* Handle ".enddual" directive.  */
 static void
 s_enddual (ignore)
@@ -135,7 +126,6 @@ s_enddual (ignore)
   dual_mode = DUAL_OFF;
 }
 
-
 /* Temporary register used when expanding assembler pseudo operations.  */
 static int atmp = 31;
 
@@ -170,7 +160,6 @@ s_atmp (ignore)
   demand_empty_rest_of_line ();
 }
 
-
 /* This function is called once, at assembler startup time.  It should
    set up all the tables and data structures that the MD part of the
    assembler will need.  */
@@ -212,7 +201,6 @@ md_begin ()
     as_fatal (_("Defective assembler.  No assembly attempted."));
 }
 
-
 /* This is the core of the machine-dependent assembler.  STR points to a
    machine dependent instruction.  This function emits the frags/bytes
    it assembles to.  */
@@ -390,7 +378,7 @@ md_assemble (str)
                             the_insn.reloc);
 
          /* Despite the odd name, this is a scratch field.  We use
-            it to encode operand type information.  */ 
+            it to encode operand type information.  */
          fix->fx_addnumber = the_insn.fup;
        }
       the_insn = pseudo[++i];
@@ -399,7 +387,6 @@ md_assemble (str)
 
 }
 
-
 /* Assemble the instruction pointed to by STR.  */
 static void
 i860_process_insn (str)
@@ -422,7 +409,7 @@ i860_process_insn (str)
   opcode = 0;
 #endif
 
-  for (s = str; islower (*s) || *s == '.' || *s == '3'
+  for (s = str; ISLOWER (*s) || *s == '.' || *s == '3'
        || *s == '2' || *s == '1'; ++s)
     ;
 
@@ -498,9 +485,9 @@ i860_process_insn (str)
 
            /* Must be at least one digit.  */
            case '#':
-             if (isdigit (*s++))
+             if (ISDIGIT (*s++))
                {
-                 while (isdigit (*s))
+                 while (ISDIGIT (*s))
                    ++s;
                  continue;
                }
@@ -541,11 +528,11 @@ i860_process_insn (str)
                /* Any register r0..r31.  */
                case 'r':
                  s++;
-                 if (!isdigit (c = *s++))
+                 if (!ISDIGIT (c = *s++))
                    {
                      goto error;
                    }
-                 if (isdigit (*s))
+                 if (ISDIGIT (*s))
                    {
                      if ((c = 10 * (c - '0') + (*s++ - '0')) >= 32)
                        goto error;
@@ -588,10 +575,10 @@ i860_process_insn (str)
              else
                s++;
 
-             if (*s++ == 'f' && isdigit (*s))
+             if (*s++ == 'f' && ISDIGIT (*s))
                {
                  mask = *s++;
-                 if (isdigit (*s))
+                 if (ISDIGIT (*s))
                    {
                      mask = 10 * (mask - '0') + (*s++ - '0');
                      if (mask >= 32)
@@ -869,7 +856,6 @@ i860_process_insn (str)
   the_insn.opcode = opcode;
 }
 
-
 static int
 i860_get_expression (str)
      char *str;
@@ -894,7 +880,6 @@ i860_get_expression (str)
   return 0;
 }
 
-
 /* 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,
@@ -913,7 +898,6 @@ md_atof (type, litP, sizeP)
   LITTLENUM_TYPE words[MAX_LITTLENUMS];
   LITTLENUM_TYPE *wordP;
   char *t;
-  char *atof_ieee ();
 
   switch (type)
     {
@@ -957,7 +941,6 @@ md_atof (type, litP, sizeP)
   return 0;
 }
 
-
 /* Write out in current endian mode.  */
 void
 md_number_to_chars (buf, val, n)
@@ -971,29 +954,6 @@ md_number_to_chars (buf, val, n)
     number_to_chars_littleendian (buf, val, n);
 }
 
-
-/* This should never be called for i860.  */
-void
-md_number_to_disp (buf, val, n)
-     char *buf ATTRIBUTE_UNUSED;
-     long val ATTRIBUTE_UNUSED;
-     int n ATTRIBUTE_UNUSED;
-{
-  as_fatal (_("md_number_to_disp\n"));
-}
-
-
-/* This should never be called for i860.  */
-void
-md_number_to_field (buf, val, fix)
-     char *buf ATTRIBUTE_UNUSED;
-     long val ATTRIBUTE_UNUSED;
-     void *fix ATTRIBUTE_UNUSED;
-{
-  as_fatal (_("i860_number_to_field\n"));
-}
-
-
 /* This should never be called for i860.  */
 int
 md_estimate_size_before_relax (fragP, segtype)
@@ -1003,7 +963,6 @@ md_estimate_size_before_relax (fragP, segtype)
   as_fatal (_("i860_estimate_size_before_relax\n"));
 }
 
-
 #ifdef DEBUG_I860
 static void
 print_insn (insn)
@@ -1031,15 +990,13 @@ print_insn (insn)
 }
 #endif /* DEBUG_I860 */
 
-
 \f
 #ifdef OBJ_ELF
-CONST char *md_shortopts = "VQ:";
+const char *md_shortopts = "VQ:";
 #else
-CONST char *md_shortopts = "";
+const char *md_shortopts = "";
 #endif
 
-
 #define OPTION_EB              (OPTION_MD_BASE + 0)
 #define OPTION_EL              (OPTION_MD_BASE + 1)
 #define OPTION_WARN_EXPAND     (OPTION_MD_BASE + 2)
@@ -1052,7 +1009,6 @@ struct option md_longopts[] = {
 };
 size_t md_longopts_size = sizeof (md_longopts);
 
-
 int
 md_parse_option (c, arg)
      int c;
@@ -1091,7 +1047,6 @@ md_parse_option (c, arg)
   return 1;
 }
 
-
 void
 md_show_usage (stream)
      FILE *stream;
@@ -1117,7 +1072,6 @@ md_undefined_symbol (name)
   return 0;
 }
 
-
 /* The i860 denotes auto-increment with '++'.  */
 void
 md_operand (exp)
@@ -1136,7 +1090,6 @@ md_operand (exp)
     }
 }
 
-
 /* Round up a section size to the appropriate boundary.  */
 valueT
 md_section_align (segment, size)
@@ -1147,7 +1100,6 @@ md_section_align (segment, size)
   return size;
 }
 
-
 /* On the i860, a PC-relative offset is relative to the address of the
    of the offset plus its size.  */
 long
@@ -1157,7 +1109,6 @@ md_pcrel_from (fixP)
   return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
 }
 
-
 /* Determine the relocation needed for non PC-relative 16-bit immediates.
    Also adjust the given immediate as necessary.  Finally, check that
    all constraints (such as alignment) are satisfied.   */
@@ -1167,7 +1118,7 @@ obtain_reloc_for_imm16 (fix, val)
      long *val;
 {
   valueT fup = fix->fx_addnumber;
-  bfd_reloc_code_real_type reloc;  
+  bfd_reloc_code_real_type reloc;
 
   if (fix->fx_pcrel)
     abort ();
@@ -1253,19 +1204,18 @@ obtain_reloc_for_imm16 (fix, val)
   return reloc;
 }
 
-
 /* Attempt to simplify or eliminate a fixup. To indicate that a fixup
    has been eliminated, set fix->fx_done. If fix->fx_addsy is non-NULL,
    we will have to generate a reloc entry.  */
-int
-md_apply_fix3 (fix, valuep, seg)
-     fixS *fix;
-     valueT *valuep;
+
+void
+md_apply_fix3 (fix, valP, seg)
+     fixS * fix;
+     valueT * valP;
      segT seg ATTRIBUTE_UNUSED;
 {
-
   char *buf;
-  long val = (long)(*valuep);
+  long val = *valP;
   unsigned long insn;
   valueT fup;
 
@@ -1309,9 +1259,8 @@ md_apply_fix3 (fix, valuep, seg)
        }
     }
   else if (fup & OP_IMM_U16)
-    {
-      abort ();
-    }
+    abort ();
+
   else if (fup & OP_IMM_SPLIT16)
     {
       fix->fx_r_type = obtain_reloc_for_imm16 (fix, &val);
@@ -1327,7 +1276,7 @@ md_apply_fix3 (fix, valuep, seg)
          fix->fx_r_type = BFD_RELOC_NONE;
          fix->fx_done = 1;
        }
-    } 
+    }
   else if (fup & OP_IMM_BR16)
     {
       if (val & 0x3)
@@ -1375,8 +1324,8 @@ md_apply_fix3 (fix, valuep, seg)
     }
   else if (fup != OP_NONE)
     {
-      as_bad_where (fix->fx_file, fix->fx_line, 
-                   _("Unrecognized fix-up (0x%08x)"), fup);
+      as_bad_where (fix->fx_file, fix->fx_line,
+                   _("Unrecognized fix-up (0x%08lx)"), (unsigned long) fup);
       abort ();
     }
   else
@@ -1396,12 +1345,8 @@ md_apply_fix3 (fix, valuep, seg)
          fix->fx_done = 1;
        }
     }
-
-  /* Return value ignored.  */
-  return 0;
 }
 
-
 /* Generate a machine dependent reloc from a fixup.  */
 arelent*
 tc_gen_reloc (section, fixp)
@@ -1425,4 +1370,3 @@ tc_gen_reloc (section, fixp)
     }
   return reloc;
 }
-
This page took 0.028194 seconds and 4 git commands to generate.