* config/tc-hppa.c (pa_ip): Search entire mnemonic before considering
authorDave Anglin <dave.anglin@nrc.ca>
Sun, 17 Jul 2005 00:33:45 +0000 (00:33 +0000)
committerDave Anglin <dave.anglin@nrc.ca>
Sun, 17 Jul 2005 00:33:45 +0000 (00:33 +0000)
promoted match.

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

index 56ec46eec5299846157bb193e8ce6eba1027a81c..87e89ff31cc025090275efa83ed0de2ba2addffe 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-16  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * config/tc-hppa.c (pa_ip): Search entire mnemonic before considering
+       promoted match.
+
 2005-07-16  Alan Modra  <amodra@bigpond.net.au>
 
        * Makefile.am: Run "make dep-am".
index 81845ad53eaebba9be37baffe49e6f4dd77aa275..4e8c7647f8f8c11f8c48f1a7610bd4cc1f3465a8 100644 (file)
@@ -1577,10 +1577,12 @@ pa_ip (str)
   char *s, c, *argstart, *name, *save_s;
   const char *args;
   int match = FALSE;
+  int need_promotion = FALSE;
   int comma = 0;
   int cmpltr, nullif, flag, cond, num;
   unsigned long opcode;
   struct pa_opcode *insn;
+  struct pa_opcode *promoted_insn = NULL;
 
 #ifdef OBJ_SOM
   /* We must have a valid space and subspace.  */
@@ -3956,8 +3958,17 @@ pa_ip (str)
       if (match == TRUE
          && bfd_get_mach (stdoutput) < insn->arch)
        {
-         if (!bfd_set_arch_mach (stdoutput, bfd_arch_hppa, insn->arch))
-           as_warn (_("could not update architecture and machine"));
+         if (need_promotion)
+           {
+             if (!bfd_set_arch_mach (stdoutput, bfd_arch_hppa, insn->arch))
+               as_warn (_("could not update architecture and machine"));
+           }
+         else
+           {
+             match = FALSE;
+             if (!promoted_insn)
+               promoted_insn = insn;
+           }
        }
 
  failed:
@@ -3973,6 +3984,13 @@ pa_ip (str)
            }
          else
            {
+             if (promoted_insn)
+               {
+                 insn = promoted_insn;
+                 need_promotion = TRUE;
+                 s = argstart;
+                 continue;
+               }
              as_bad (_("Invalid operands %s"), error_message);
              return;
            }