* pj.h (pj_opc_info_t): Add union.
authorAlan Modra <amodra@gmail.com>
Thu, 12 Dec 2002 21:52:06 +0000 (21:52 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 12 Dec 2002 21:52:06 +0000 (21:52 +0000)
* pj-dis.c (print_insn_pj): Adjust for pj_opc_info_t change.

* config/tc-pj.c (little, big, parse_exp_save_ilp): Prototype.
(c_to_r, ipush_code, fake_opcode, alias): Likewise.
(fake_opcode): Adjust for pj_opc_int_t change.
(md_begin): Likewise.
(md_assemble): Likewise.
(ipush_code): Correct parse_exp_save_ilp call.  Test pending_reloc
instead of non-existent third arg of parse_exp_save_ilp.
(md_parse_option): Correct "little" and "big" calls.

gas/ChangeLog
gas/config/tc-pj.c
include/opcode/ChangeLog
include/opcode/pj.h
opcodes/ChangeLog
opcodes/pj-dis.c

index 1ec063c..7cddfbb 100644 (file)
@@ -1,5 +1,13 @@
 2002-12-13  Alan Modra  <amodra@bigpond.net.au>
 
+       * config/tc-pj.c (little, big, parse_exp_save_ilp): Prototype.
+       (c_to_r, ipush_code, fake_opcode, alias): Likewise.
+       (fake_opcode): Adjust for pj_opc_int_t change.
+       (md_begin): Likewise.
+       (md_assemble): Likewise.
+       (ipush_code): Correct parse_exp_save_ilp call.  Test pending_reloc
+       instead of non-existent third arg of parse_exp_save_ilp.
+       (md_parse_option): Correct "little" and "big" calls.
        * config/tc-sparc.c (s_register): Only declare #ifdef OBJ_ELF.
        (md_apply_fix3 <segment>): Add ATTRIBUTE_UNUSED.
        (tc_gen_reloc <section>): Likewise.
index a16971d..e27dae0 100644 (file)
@@ -34,6 +34,21 @@ const char line_comment_chars[] = "/!#";
 static int pending_reloc;
 static struct hash_control *opcode_hash_control;
 
+static void little
+  PARAMS ((int));
+static void big
+  PARAMS ((int));
+static char *parse_exp_save_ilp
+  PARAMS ((char *, expressionS *));
+static int c_to_r
+  PARAMS ((char));
+static void ipush_code
+  PARAMS ((pj_opc_info_t *, char *));
+static void fake_opcode
+  PARAMS ((const char *, void (*) (struct pj_opc_info_t *, char *)));
+static void alias
+  PARAMS ((const char *, const char *));
+
 static void
 little (ignore)
      int ignore ATTRIBUTE_UNUSED;
@@ -155,15 +170,17 @@ ipush_code (opcode, str)
      pj_opc_info_t *opcode ATTRIBUTE_UNUSED;
      char *str;
 {
-  int mod = 0;
   char *b = frag_more (6);
   expressionS arg;
 
   b[0] = 0x11;
   b[3] = 0xed;
-  parse_exp_save_ilp (str + 1, &arg, &mod);
-  if (mod)
-    as_bad (_("can't have relocation for ipush"));
+  parse_exp_save_ilp (str + 1, &arg);
+  if (pending_reloc)
+    {
+      as_bad (_("can't have relocation for ipush"));
+      pending_reloc = 0;
+    }
 
   fix_new_exp (frag_now, b - frag_now->fr_literal + 1, 2,
               &arg, 0, BFD_RELOC_PJ_CODE_DIR16);
@@ -177,13 +194,13 @@ ipush_code (opcode, str)
 static void
 fake_opcode (name, func)
      const char *name;
-     void (*func) ();
+     void (*func) PARAMS ((struct pj_opc_info_t *, char *));
 {
   pj_opc_info_t *fake = (pj_opc_info_t *) xmalloc (sizeof (pj_opc_info_t));
 
   fake->opcode = -1;
   fake->opcode_next = -1;
-  fake->name = (const char *) func;
+  fake->u.func = func;
   hash_insert (opcode_hash_control, name, (char *) fake);
 }
 
@@ -210,8 +227,8 @@ md_begin ()
   opcode_hash_control = hash_new ();
 
   /* Insert names into hash table.  */
-  for (opcode = pj_opc_info; opcode->name; opcode++)
-    hash_insert (opcode_hash_control, opcode->name, (char *) opcode);
+  for (opcode = pj_opc_info; opcode->u.name; opcode++)
+    hash_insert (opcode_hash_control, opcode->u.name, (char *) opcode);
 
   /* Insert the only fake opcode.  */
   fake_opcode ("ipush", ipush_code);
@@ -278,7 +295,7 @@ md_assemble (str)
     {
       /* It's a fake opcode.  Dig out the args and pretend that was
          what we were passed.  */
-      ((void (*) ()) opcode->name) (opcode, op_end);
+      (*opcode->u.func) (opcode, op_end);
     }
   else
     {
@@ -404,10 +421,10 @@ md_parse_option (c, arg)
   switch (c)
     {
     case OPTION_LITTLE:
-      little ();
+      little (0);
       break;
     case OPTION_BIG:
-      big ();
+      big (0);
       break;
     default:
       return 0;
index 79771d8..2fe2f99 100644 (file)
@@ -1,3 +1,7 @@
+2002-12-13  Alan Modra  <amodra@bigpond.net.au>
+
+       * pj.h (pj_opc_info_t): Add union.
+
 2002-12-04  David Mosberger  <davidm@hpl.hp.com>
 
        * ia64.h: Fix copyright message.
index b768f11..5779507 100644 (file)
@@ -36,11 +36,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #define UNS(x)    (!!((x) & (1<<3)))
 
                   
-typedef struct 
+typedef struct pj_opc_info_t
 {
   short opcode;
   short opcode_next;
   char len;
   unsigned char arg[2];
-  const char *name;
+  union {
+    const char *name;
+    void (*func) PARAMS ((struct pj_opc_info_t *, char *));
+  } u;
 } pj_opc_info_t;
index a6ff9ab..2cca6e0 100644 (file)
@@ -1,5 +1,6 @@
 2002-12-13  Alan Modra  <amodra@bigpond.net.au>
 
+       * pj-dis.c (print_insn_pj): Adjust for pj_opc_info_t change.
        * z8kgen.c: Include "libiberty.h".
        (opt, args, toks): Fix initializer warnings.
        (chewname): Make "name" a char **.  Return mnemonic trimmed of
index b8b81a9..50d1750 100644 (file)
@@ -62,7 +62,7 @@ print_insn_pj (addr, info)
       unsigned char byte_2;
       if ((status = info->read_memory_func (addr + 1, &byte_2, 1, info)))
        goto fail;
-      fprintf_fn (stream, "%s\t", pj_opc_info[opcode + byte_2].name);
+      fprintf_fn (stream, "%s\t", pj_opc_info[opcode + byte_2].u.name);
       return 2;
     }
   else
@@ -72,12 +72,12 @@ print_insn_pj (addr, info)
       const pj_opc_info_t *op = &pj_opc_info[opcode];
       int a;
       addr++;
-      fprintf_fn (stream, "%s", op->name);
+      fprintf_fn (stream, "%s", op->u.name);
 
       /* The tableswitch instruction is followed by the default
         address, low value, high value and the destinations.  */
 
-      if (strcmp (op->name, "tableswitch") == 0)
+      if (strcmp (op->u.name, "tableswitch") == 0)
        {
          int lowval;
          int highval;
@@ -116,7 +116,7 @@ print_insn_pj (addr, info)
         address, element count and pairs of values and
         addresses.  */
 
-      if (strcmp (op->name, "lookupswitch") == 0)
+      if (strcmp (op->u.name, "lookupswitch") == 0)
        {
          int count;
          int val;