aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Anglin <dave.anglin@nrc.ca>2012-10-13 22:15:18 +0000
committerDave Anglin <dave.anglin@nrc.ca>2012-10-13 22:15:18 +0000
commit81fba0af7752f038b9c1c8fa8479f4a0f79cac6c (patch)
tree3f55d465a77805a9198d119a32d4a325aae0ebb6
parent8a6a621cf954522c68f36db9e03e8b32da122d33 (diff)
downloadbinutils-81fba0af7752f038b9c1c8fa8479f4a0f79cac6c.tar.gz
* config/tc-hppa.c (pa_ip): Limit unit conditions for uxor to those
not involving a carry.
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-hppa.c20
2 files changed, 17 insertions, 8 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 4ce82dd37..0fb92862a 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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.
diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c
index b36fc2c71..6411e36cc 100644
--- a/gas/config/tc-hppa.c
+++ b/gas/config/tc-hppa.c
@@ -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;