Add md expression support; Cleanup alpha warnings
authorMichael Meissner <gnu@the-meissners.org>
Mon, 18 Oct 1999 22:29:15 +0000 (22:29 +0000)
committerMichael Meissner <gnu@the-meissners.org>
Mon, 18 Oct 1999 22:29:15 +0000 (22:29 +0000)
gas/ChangeLog
gas/config/tc-alpha.c
gas/expr.c
gas/expr.h
include/opcode/ChangeLog
include/opcode/alpha.h
opcodes/ChangeLog
opcodes/alpha-opc.c

index 8afc9fe..6cfad1d 100644 (file)
@@ -1,3 +1,47 @@
+1999-10-18  Michael Meissner  <meissner@cygnus.com>
+
+       * expr.h (operatorT): Add machine dependent operators md1..md8.
+       (expressionS): Make X_op 8 bits instead of 7.  Add a X_md field
+       for the machine dependent operators to use.
+
+       * expr.c (op_rank): Add machine dependent operators.
+
+       * config/tc-alpha.c (O_pregister): Define as a machine dependent
+       operator.
+       (O_cpregister): Ditto.
+       (md_begin): Change X_op test that field is wide enough to use
+       O_max instead of O_alpha_max.
+       (cpu_types): Fill in missing initializer.
+       (alpha_num_macros): Make unsigned.
+       (md_assemble): Make opnamelen be size_t.
+       (md_apply_fix): Cast alpha_num_operands to int before testing.
+       (alpha_force_relocation): Ditto.
+       (alpha_fix_adjustable): Ditto.
+       (alpha_fix_adjustable): Mark unused arguments ATTRIBUTE_UNUSED.
+       (tc_gen_reloc): Ditto.
+       (tc_get_register): Ditto.
+       (emit_ldgp): Ditto.
+       (emit_lda): Ditto.
+       (emit_ldah): Ditto.
+       (emit_ldil): Ditto.
+       (s_alpha_ent): Ditto.
+       (s_alpha_end): Ditto.
+       (s_alpha_frame): Ditto.
+       (s_alpha_prologue): Ditto.
+       (s_alpha_file): Ditto.
+       (s_alpha_gprel32): Ditto.
+       (s_alpha_proc): Ditto.
+       (s_alpha_set): Ditto.
+       (s_alpha_base): Ditto.
+       (s_alpha_align): Ditto.
+       (s_alpha_arch): Ditto.
+       (alpha_align): Ditto.
+       (assemble_insn): Suppress unused variable warning.
+       (emit_insn): Ditto.
+       (assemble_insn): Don't assume X_op and X_unsigned are in a given
+       order in the structure.
+       (s_alpha_coff_wrapper): Avoid int/unsigned comparison.
+
 Sun Oct 17 17:15:58 1999  Jeffrey A Law  (law@cygnus.com)
 
        * config/tc-hppa.c (md_apply_fix): Make "fmt" an int.
index 69432dc..3ca8e63 100644 (file)
@@ -93,12 +93,10 @@ struct alpha_macro
   enum alpha_macro_arg argsets[16];
 };
 
-/* Two extra symbols we want to see in our input.  This is a blatent
-   misuse of the expressionS.X_op field.  */
+/* Extra expression types. */
 
-#define O_pregister  ((operatorT) (O_max+1)) /* O_register, in parentheses */
-#define O_cpregister ((operatorT) (O_pregister+1)) /* + a leading comma */
-#define O_alpha_max  ((operatorT) (O_cpregister+1))
+#define O_pregister    O_md1   /* O_register, in parentheses */
+#define O_cpregister   O_md2   /* + a leading comma */
 
 /* Macros for extracting the type and number of encoded register tokens */
 
@@ -467,7 +465,7 @@ static const struct cpu_type
   { "ev6", AXP_OPCODE_BASE|AXP_OPCODE_BWX|AXP_OPCODE_MAX|AXP_OPCODE_CIX },
 
   { "all", AXP_OPCODE_BASE },
-  { 0 }
+  { 0, 0 }
 };
 
 /* The macro table */
@@ -696,7 +694,7 @@ static const struct alpha_macro alpha_macros[] = {
       MACRO_EOA } },
 };
 
-static const int alpha_num_macros
+static const unsigned int alpha_num_macros
   = sizeof(alpha_macros) / sizeof(*alpha_macros);
 \f
 /* Public interface functions */
@@ -713,8 +711,8 @@ md_begin ()
   /* Verify that X_op field is wide enough.  */
   {
     expressionS e;
-    e.X_op = O_alpha_max;
-    assert (e.X_op == O_alpha_max);
+    e.X_op = O_max;
+    assert (e.X_op == O_max);
   }
 
   /* Create the opcode hash table */
@@ -824,7 +822,8 @@ md_assemble (str)
 {
   char opname[32];                     /* current maximum is 13 */
   expressionS tok[MAX_INSN_ARGS];
-  int ntok, opnamelen, trunclen;
+  int ntok, trunclen;
+  size_t opnamelen;
 
   /* split off the opcode */
   opnamelen = strspn (str, "abcdefghijklmnopqrstuvwxyz_/468");
@@ -1173,7 +1172,7 @@ md_apply_fix (fixP, valueP)
          as_fatal (_("unhandled relocation type %s"),
                    bfd_get_reloc_code_name (fixP->fx_r_type));
 
-       assert (-(int)fixP->fx_r_type < alpha_num_operands);
+       assert (-(int)fixP->fx_r_type < (int)alpha_num_operands);
        operand = &alpha_operands[-(int)fixP->fx_r_type];
 
        /* The rest of these fixups only exist internally during symbol
@@ -1334,7 +1333,7 @@ alpha_force_relocation (f)
       return 0;
 
     default:
-      assert((int)f->fx_r_type < 0 && -(int)f->fx_r_type < alpha_num_operands);
+      assert((int)f->fx_r_type < 0 && -(int)f->fx_r_type < (int)alpha_num_operands);
       return 0;
     }
 }
@@ -1384,7 +1383,7 @@ alpha_fix_adjustable (f)
 
     default:
       assert ((int)f->fx_r_type < 0
-             && - (int)f->fx_r_type < alpha_num_operands);
+             && - (int)f->fx_r_type < (int)alpha_num_operands);
       return 1;
     }
   /*NOTREACHED*/
@@ -1395,7 +1394,7 @@ alpha_fix_adjustable (f)
 
 arelent *
 tc_gen_reloc (sec, fixp)
-     asection *sec;
+     asection *sec ATTRIBUTE_UNUSED;
      fixS *fixp;
 {
   arelent *reloc;
@@ -1459,7 +1458,7 @@ tc_gen_reloc (sec, fixp)
 
 int
 tc_get_register (frame)
-     int frame;
+     int frame ATTRIBUTE_UNUSED;
 {
   int framereg = AXP_REG_SP;
 
@@ -1846,7 +1845,7 @@ assemble_insn(opcode, tok, ntok, insn)
   for (argidx = opcode->operands; *argidx; ++argidx)
     {
       const struct alpha_operand *operand = &alpha_operands[*argidx];
-      const expressionS *t;
+      const expressionS *t = (const expressionS *)0;
 
       if (operand->flags & AXP_OPERAND_FAKE)
        {
@@ -1867,8 +1866,10 @@ assemble_insn(opcode, tok, ntok, insn)
              break;
            case AXP_OPERAND_DEFAULT_ZERO:
              {
-               static const expressionS zero_exp = { 0, 0, 0, O_constant, 1 };
+               static expressionS zero_exp;
                t = &zero_exp;
+               zero_exp.X_op = O_constant;
+               zero_exp.X_unsigned = 1;
              }
              break;
            default:
@@ -1935,7 +1936,7 @@ emit_insn (insn)
   /* Apply the fixups in order */
   for (i = 0; i < insn->nfixups; ++i)
     {
-      const struct alpha_operand *operand;
+      const struct alpha_operand *operand = (const struct alpha_operand *)0;
       struct alpha_fixup *fixup = &insn->fixups[i];
       int size, pcrel;
       fixS *fixP;
@@ -2105,8 +2106,8 @@ static const char * const ldXu_op[] = { "ldbu", "ldwu", NULL, NULL };
 static void
 emit_ldgp (tok, ntok, unused)
      const expressionS *tok;
-     int ntok;
-     const PTR unused;
+     int ntok ATTRIBUTE_UNUSED;
+     const PTR unused ATTRIBUTE_UNUSED;
 {
 #ifdef OBJ_AOUT
 FIXME
@@ -2589,7 +2590,7 @@ static void
 emit_lda (tok, ntok, unused)
      const expressionS *tok;
      int ntok;
-     const PTR unused;
+     const PTR unused ATTRIBUTE_UNUSED;
 {
   int basereg;
 
@@ -2607,8 +2608,8 @@ emit_lda (tok, ntok, unused)
 static void
 emit_ldah (tok, ntok, unused)
      const expressionS *tok;
-     int ntok;
-     const PTR unused;
+     int ntok ATTRIBUTE_UNUSED;
+     const PTR unused ATTRIBUTE_UNUSED;
 {
   expressionS newtok[3];
 
@@ -2843,7 +2844,7 @@ static void
 emit_ldil (tok, ntok, unused)
      const expressionS *tok;
      int ntok;
-     const PTR unused;
+     const PTR unused ATTRIBUTE_UNUSED;
 {
   expressionS newtok[2];
 
@@ -3544,7 +3545,7 @@ s_alpha_section (ignore)
 
 static void
 s_alpha_ent (dummy)
-     int dummy;
+     int dummy ATTRIBUTE_UNUSED;
 {
   if (ECOFF_DEBUGGING)
     ecoff_directive_ent (0);
@@ -3588,7 +3589,7 @@ s_alpha_ent (dummy)
 
 static void
 s_alpha_end (dummy)
-     int dummy;
+     int dummy ATTRIBUTE_UNUSED;
 {
   if (ECOFF_DEBUGGING)
     ecoff_directive_end (0);
@@ -3648,7 +3649,7 @@ s_alpha_mask (fp)
 
 static void
 s_alpha_frame (dummy)
-     int dummy;
+     int dummy ATTRIBUTE_UNUSED;
 {
   if (ECOFF_DEBUGGING)
     ecoff_directive_frame (0);
@@ -3658,7 +3659,7 @@ s_alpha_frame (dummy)
 
 static void
 s_alpha_prologue (ignore)
-     int ignore;
+     int ignore ATTRIBUTE_UNUSED;
 {
   symbolS *sym;
   int arg;
@@ -3706,7 +3707,7 @@ s_alpha_coff_wrapper (which)
     ecoff_directive_loc,
   };
 
-  assert (which >= 0 && which < sizeof(fns)/sizeof(*fns));
+  assert (which >= 0 && which < (int)(sizeof(fns)/sizeof(*fns)));
 
   if (ECOFF_DEBUGGING)
     (*fns[which])(0);
@@ -4171,7 +4172,7 @@ s_alpha_file (ignore)
 
 static void
 s_alpha_gprel32 (ignore)
-     int ignore;
+     int ignore ATTRIBUTE_UNUSED;
 {
   expressionS e;
   char *p;
@@ -4266,7 +4267,7 @@ s_alpha_float_cons (type)
 
 static void
 s_alpha_proc (is_static)
-     int is_static;
+     int is_static ATTRIBUTE_UNUSED;
 {
   char *name;
   char c;
@@ -4305,7 +4306,7 @@ s_alpha_proc (is_static)
 
 static void
 s_alpha_set (x)
-     int x;
+     int x ATTRIBUTE_UNUSED;
 {
   char *name, ch, *s;
   int yesno = 1;
@@ -4342,7 +4343,7 @@ s_alpha_set (x)
 
 static void
 s_alpha_base (ignore)
-     int ignore;
+     int ignore ATTRIBUTE_UNUSED;
 {
 #if 0
   if (first_32bit_quadrant)
@@ -4377,7 +4378,7 @@ s_alpha_base (ignore)
 
 static void
 s_alpha_align (ignore)
-     int ignore;
+     int ignore ATTRIBUTE_UNUSED;
 {
   int align;
   char fill, *pfill;
@@ -4475,7 +4476,7 @@ s_alpha_ucons (bytes)
 
 static void
 s_alpha_arch (ignored)
-     int ignored;
+     int ignored ATTRIBUTE_UNUSED;
 {
   char *name, ch;
   const struct cpu_type *p;
@@ -4719,7 +4720,7 @@ alpha_align (n, pfill, label, force)
      int n;
      char *pfill;
      symbolS *label;
-     int force;
+     int force ATTRIBUTE_UNUSED;
 {
   if (alpha_current_align >= n)
     return;
index acf2804..bb4fd55 100644 (file)
@@ -1484,6 +1484,14 @@ static operator_rankT op_rank[] =
   3,   /* O_logical_and */
   2,   /* O_logical_or */
   1,   /* O_index */
+  0,   /* O_md1 */
+  0,   /* O_md2 */
+  0,   /* O_md3 */
+  0,   /* O_md4 */
+  0,   /* O_md5 */
+  0,   /* O_md6 */
+  0,   /* O_md7 */
+  0,   /* O_md8 */
 };
 
 /* Unfortunately, in MRI mode for the m68k, multiplication and
index e376409..d7c7a3b 100644 (file)
@@ -104,6 +104,22 @@ typedef enum
   O_logical_or,
   /* X_op_symbol [ X_add_symbol ] */
   O_index,
+  /* machine dependent #1 */
+  O_md1,
+  /* machine dependent #2 */
+  O_md2,
+  /* machine dependent #3 */
+  O_md3,
+  /* machine dependent #4 */
+  O_md4,
+  /* machine dependent #5 */
+  O_md5,
+  /* machine dependent #6 */
+  O_md6,
+  /* machine dependent #7 */
+  O_md7,
+  /* machine dependent #8 */
+  O_md8,
   /* this must be the largest value */
   O_max
 } operatorT;
@@ -116,20 +132,27 @@ typedef struct expressionS
   symbolS *X_op_symbol;
   /* A number to add.  */
   offsetT X_add_number;
+
   /* The type of the expression.  We can't assume that an arbitrary
      compiler can handle a bitfield of enum type.  FIXME: We could
      check this using autoconf.  */
 #ifdef __GNUC__
-  operatorT X_op : 7;
+  operatorT X_op : 8;
 #else
-  unsigned X_op : 7;
+  unsigned char X_op;
 #endif
+
   /* Non-zero if X_add_number should be regarded as unsigned.  This is
      only valid for O_constant expressions.  It is only used when an
      O_constant must be extended into a bignum (i.e., it is not used
      when performing arithmetic on these values).
      FIXME: This field is not set very reliably.  */
   unsigned int X_unsigned : 1;
+
+  /* 7 additional bits can be defined if needed.  */
+
+  /* Machine dependent field */
+  unsigned short X_md;
 } expressionS;
 
 /* "result" should be type (expressionS *). */
index 15298df..71aa204 100644 (file)
@@ -1,3 +1,8 @@
+1999-10-18  Michael Meissner  <meissner@cygnus.com>
+
+       * alpha.h (alpha_num_opcodes): Convert to unsigned.
+       (alpha_num_operands): Ditto.
+
 Sun Oct 10 01:46:56 1999  Jerry Quinn <jerry.quinn.adv91@alum.dartmouth.org>
 
        * hppa.h (pa_opcodes):  Add load and store cache control to
index d18eb04..6f31e9a 100644 (file)
@@ -54,7 +54,7 @@ struct alpha_opcode
    in the order in which the disassembler should consider
    instructions.  */
 extern const struct alpha_opcode alpha_opcodes[];
-extern const int alpha_num_opcodes;
+extern const unsigned alpha_num_opcodes;
 
 /* Values defined for the flags field of a struct alpha_opcode.  */
 
@@ -135,7 +135,7 @@ struct alpha_operand
    the operands field of the alpha_opcodes table.  */
 
 extern const struct alpha_operand alpha_operands[];
-extern const int alpha_num_operands;
+extern const unsigned alpha_num_operands;
 
 /* Values defined for the flags field of a struct alpha_operand.  */
 
index 42c5afe..c4f4045 100644 (file)
@@ -1,3 +1,17 @@
+1999-10-18  Michael Meissner  <meissner@cygnus.com>
+
+       * alpha-opc.c (alpha_operands): Fill in missing initializer.
+       (alpha_num_operands): Convert to unsigned.
+       (alpha_num_opcodes): Ditto.
+       (insert_rba): Declare unused arguments ATTRIBUTE_UNUSED.
+       (insert_rca): Ditto.
+       (insert_za): Ditto.
+       (insert_zb): Ditto.
+       (insert_zc): Ditto.
+       (extract_bdisp): Ditto.
+       (extract_jhint): Ditto.
+       (extract_ev6hwjhint): Ditto.
+
 Sun Oct 10 01:48:01 1999  Jerry Quinn <jerry.quinn.adv91@alum.dartmouth.org>
 
        * hppa-dis.c (print_insn_hppa):  Add new codes 'cc', 'cd', 'cC',
index 9e63a5d..7a8ca59 100644 (file)
@@ -81,7 +81,7 @@ const struct alpha_operand alpha_operands[] =
   /* The fields are bits, shift, insert, extract, flags */
   /* The zero index is used to indicate end-of-list */
 #define UNUSED         0
-  { 0, 0, 0, 0, 0 },
+  { 0, 0, 0, 0, 0, 0 },
 
   /* The plain integer register fields */
 #define RA             (UNUSED + 1)
@@ -207,7 +207,7 @@ const struct alpha_operand alpha_operands[] =
     insert_ev6hwjhint, extract_ev6hwjhint }
 };
 
-const int alpha_num_operands = sizeof(alpha_operands)/sizeof(*alpha_operands);
+const unsigned alpha_num_operands = sizeof(alpha_operands)/sizeof(*alpha_operands);
 
 /* The RB field when it is the same as the RA field in the same insn.
    This operand is marked fake.  The insertion function just copies
@@ -218,8 +218,8 @@ const int alpha_num_operands = sizeof(alpha_operands)/sizeof(*alpha_operands);
 static unsigned
 insert_rba(insn, value, errmsg)
      unsigned insn;
-     int value;
-     const char **errmsg;
+     int value ATTRIBUTE_UNUSED;
+     const char **errmsg ATTRIBUTE_UNUSED;
 {
   return insn | (((insn >> 21) & 0x1f) << 16);
 }
@@ -242,8 +242,8 @@ extract_rba(insn, invalid)
 static unsigned
 insert_rca(insn, value, errmsg)
      unsigned insn;
-     int value;
-     const char **errmsg;
+     int value ATTRIBUTE_UNUSED;
+     const char **errmsg ATTRIBUTE_UNUSED;
 {
   return insn | ((insn >> 21) & 0x1f);
 }
@@ -266,8 +266,8 @@ extract_rca(insn, invalid)
 static unsigned
 insert_za(insn, value, errmsg)
      unsigned insn;
-     int value;
-     const char **errmsg;
+     int value ATTRIBUTE_UNUSED;
+     const char **errmsg ATTRIBUTE_UNUSED;
 {
   return insn | (31 << 21);
 }
@@ -286,8 +286,8 @@ extract_za(insn, invalid)
 static unsigned
 insert_zb(insn, value, errmsg)
      unsigned insn;
-     int value;
-     const char **errmsg;
+     int value ATTRIBUTE_UNUSED;
+     const char **errmsg ATTRIBUTE_UNUSED;
 {
   return insn | (31 << 16);
 }
@@ -306,8 +306,8 @@ extract_zb(insn, invalid)
 static unsigned
 insert_zc(insn, value, errmsg)
      unsigned insn;
-     int value;
-     const char **errmsg;
+     int value ATTRIBUTE_UNUSED;
+     const char **errmsg ATTRIBUTE_UNUSED;
 {
   return insn | 31;
 }
@@ -340,7 +340,7 @@ insert_bdisp(insn, value, errmsg)
 static int
 extract_bdisp(insn, invalid)
      unsigned insn;
-     int *invalid;
+     int *invalid ATTRIBUTE_UNUSED;
 {
   return 4 * (((insn & 0x1FFFFF) ^ 0x100000) - 0x100000);
 }
@@ -363,7 +363,7 @@ insert_jhint(insn, value, errmsg)
 static int
 extract_jhint(insn, invalid)
      unsigned insn;
-     int *invalid;
+     int *invalid ATTRIBUTE_UNUSED;
 {
   return 4 * (((insn & 0x3FFF) ^ 0x2000) - 0x2000);
 }
@@ -385,7 +385,7 @@ insert_ev6hwjhint(insn, value, errmsg)
 static int
 extract_ev6hwjhint(insn, invalid)
      unsigned insn;
-     int *invalid;
+     int *invalid ATTRIBUTE_UNUSED;
 {
   return 4 * (((insn & 0x1FFF) ^ 0x1000) - 0x1000);
 }
@@ -1543,4 +1543,4 @@ const struct alpha_opcode alpha_opcodes[] = {
   { "bgt",             BRA(0x3F), BASE, ARG_BRA },
 };
 
-const int alpha_num_opcodes = sizeof(alpha_opcodes)/sizeof(*alpha_opcodes);
+const unsigned alpha_num_opcodes = sizeof(alpha_opcodes)/sizeof(*alpha_opcodes);