* config/tc-hppa.c (pa_ip): Limit unit conditions for uxor to those
authorDave Anglin <dave.anglin@nrc.ca>
Sat, 13 Oct 2012 22:15:19 +0000 (22:15 +0000)
committerDave Anglin <dave.anglin@nrc.ca>
Sat, 13 Oct 2012 22:15:19 +0000 (22:15 +0000)
not involving a carry.

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

index 4ce82dd37040c335c8c2a9c15c064e7bdc2b3e37..0fb92862a85dea223f05e86afc6b07bbd24a0726 100644 (file)
@@ -1,3 +1,8 @@
+2012-10-13  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * config/tc-hppa.c (pa_ip): Limit unit conditions for uxor to those
+       not involving a carry.
+
 2012-10-12  Peter Bergner  <bergner@vnet.ibm.com>
 
        * doc/as.texinfo (-mpwr4, -mpwr7): Fix option name typos.
index b36fc2c71a9fc0927e27ffd4ca8ea86e0d7b7853..6411e36cc398c4ac8d8603ee7e270dce7161f45d 100644 (file)
@@ -4431,6 +4431,7 @@ pa_ip (char *str)
                    flag = 0;
                    if (*s == ',')
                      {
+                       int uxor;
                        s++;
 
                        /* 64 bit conditions.  */
@@ -4444,6 +4445,9 @@ pa_ip (char *str)
                        else if (*s == '*')
                          break;
 
+                       /* The uxor instruction only supports unit conditions
+                          not involving carries.  */
+                       uxor = (opcode & 0xfc000fc0) == 0x08000380;
                        if (strncasecmp (s, "sbz", 3) == 0)
                          {
                            cmpltr = 2;
@@ -4454,17 +4458,17 @@ pa_ip (char *str)
                            cmpltr = 3;
                            s += 3;
                          }
-                       else if (strncasecmp (s, "sdc", 3) == 0)
+                       else if (!uxor && strncasecmp (s, "sdc", 3) == 0)
                          {
                            cmpltr = 4;
                            s += 3;
                          }
-                       else if (strncasecmp (s, "sbc", 3) == 0)
+                       else if (!uxor && strncasecmp (s, "sbc", 3) == 0)
                          {
                            cmpltr = 6;
                            s += 3;
                          }
-                       else if (strncasecmp (s, "shc", 3) == 0)
+                       else if (!uxor && strncasecmp (s, "shc", 3) == 0)
                          {
                            cmpltr = 7;
                            s += 3;
@@ -4487,19 +4491,19 @@ pa_ip (char *str)
                            flag = 1;
                            s += 3;
                          }
-                       else if (strncasecmp (s, "ndc", 3) == 0)
+                       else if (!uxor && strncasecmp (s, "ndc", 3) == 0)
                          {
                            cmpltr = 4;
                            flag = 1;
                            s += 3;
                          }
-                       else if (strncasecmp (s, "nbc", 3) == 0)
+                       else if (!uxor && strncasecmp (s, "nbc", 3) == 0)
                          {
                            cmpltr = 6;
                            flag = 1;
                            s += 3;
                          }
-                       else if (strncasecmp (s, "nhc", 3) == 0)
+                       else if (!uxor && strncasecmp (s, "nhc", 3) == 0)
                          {
                            cmpltr = 7;
                            flag = 1;
@@ -4511,7 +4515,7 @@ pa_ip (char *str)
                            flag = 0;
                            s += 3;
                          }
-                       else if (strncasecmp (s, "swc", 3) == 0)
+                       else if (!uxor && strncasecmp (s, "swc", 3) == 0)
                          {
                            cmpltr = 5;
                            flag = 0;
@@ -4523,7 +4527,7 @@ pa_ip (char *str)
                            flag = 1;
                            s += 3;
                          }
-                       else if (strncasecmp (s, "nwc", 3) == 0)
+                       else if (!uxor && strncasecmp (s, "nwc", 3) == 0)
                          {
                            cmpltr = 5;
                            flag = 1;