* config/tc-ppc.c (md_parse_option): Add PPC_OPCODE_ANY to existing
authorAlan Modra <amodra@gmail.com>
Thu, 4 Sep 2003 01:52:18 +0000 (01:52 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 4 Sep 2003 01:52:18 +0000 (01:52 +0000)
ppc_cpu selection rather than replacing.
(ppc_set_cpu): Ignore and preserve PPC_OPCODE_ANY in ppc_cpu.
(md_begin): When PPC_OPCODE_ANY, insert all opcodes in ppc_hash.

gas/ChangeLog
gas/config/tc-ppc.c

index 73ec8b3fe60aee598019d92222cc249819f2c6d9..aee80e542ce01f6f432fdd2bdf3ee79f9bd5d06e 100644 (file)
@@ -1,3 +1,10 @@
+2003-09-04  Alan Modra  <amodra@bigpond.net.au>
+
+       * config/tc-ppc.c (md_parse_option): Add PPC_OPCODE_ANY to existing
+       ppc_cpu selection rather than replacing.
+       (ppc_set_cpu): Ignore and preserve PPC_OPCODE_ANY in ppc_cpu.
+       (md_begin): When PPC_OPCODE_ANY, insert all opcodes in ppc_hash.
+
 2003-09-03  Robert Millan  <robertmh@gnu.org>
 
        * configure.in: Match GNU/KFreeBSD with new kfreebsd*-gnu
index 30aa2fd62091528eb3dc19196e1e951023b7f4f5..5849654837a318f3b8a8b89323d4404219f9acc4 100644 (file)
@@ -974,7 +974,7 @@ md_parse_option (c, arg)
        ppc_cpu = PPC_OPCODE_COMMON | PPC_OPCODE_32;
       /* -many means to assemble for any architecture (PWR/PWRX/PPC).  */
       else if (strcmp (arg, "any") == 0)
-       ppc_cpu = PPC_OPCODE_ANY | PPC_OPCODE_32;
+       ppc_cpu |= PPC_OPCODE_ANY;
 
       else if (strcmp (arg, "regnames") == 0)
        reg_names_p = TRUE;
@@ -1118,23 +1118,23 @@ ppc_set_cpu ()
   const char *default_os  = TARGET_OS;
   const char *default_cpu = TARGET_CPU;
 
-  if (ppc_cpu == 0)
+  if ((ppc_cpu & ~PPC_OPCODE_ANY) == 0)
     {
       if (ppc_obj64)
-       ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_64;
+       ppc_cpu |= PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_64;
       else if (strncmp (default_os, "aix", 3) == 0
               && default_os[3] >= '4' && default_os[3] <= '9')
-       ppc_cpu = PPC_OPCODE_COMMON | PPC_OPCODE_32;
+       ppc_cpu |= PPC_OPCODE_COMMON | PPC_OPCODE_32;
       else if (strncmp (default_os, "aix3", 4) == 0)
-       ppc_cpu = PPC_OPCODE_POWER | PPC_OPCODE_32;
+       ppc_cpu |= PPC_OPCODE_POWER | PPC_OPCODE_32;
       else if (strcmp (default_cpu, "rs6000") == 0)
-       ppc_cpu = PPC_OPCODE_POWER | PPC_OPCODE_32;
+       ppc_cpu |= PPC_OPCODE_POWER | PPC_OPCODE_32;
       else if (strncmp (default_cpu, "powerpc", 7) == 0)
        {
          if (default_cpu[7] == '6' && default_cpu[8] == '4')
-           ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_64;
+           ppc_cpu |= PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_64;
          else
-           ppc_cpu = PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_32;
+           ppc_cpu |= PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_32;
        }
       else
        as_fatal (_("Unknown default cpu = %s, os = %s"),
@@ -1265,6 +1265,10 @@ md_begin ()
        }
     }
 
+  if ((ppc_cpu & PPC_OPCODE_ANY) != 0)
+    for (op = powerpc_opcodes; op < op_end; op++)
+      hash_insert (ppc_hash, op->name, (PTR) op);
+
   /* Insert the macros into a hash table.  */
   ppc_macro_hash = hash_new ();