diff options
author | Dave Anglin <dave.anglin@nrc.ca> | 2012-10-13 22:15:18 +0000 |
---|---|---|
committer | Dave Anglin <dave.anglin@nrc.ca> | 2012-10-13 22:15:18 +0000 |
commit | 81fba0af7752f038b9c1c8fa8479f4a0f79cac6c (patch) | |
tree | 3f55d465a77805a9198d119a32d4a325aae0ebb6 /gas/config | |
parent | 8a6a621cf954522c68f36db9e03e8b32da122d33 (diff) | |
download | binutils-redhat-81fba0af7752f038b9c1c8fa8479f4a0f79cac6c.tar.gz |
* config/tc-hppa.c (pa_ip): Limit unit conditions for uxor to those
not involving a carry.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-hppa.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c index b36fc2c71a..6411e36cc3 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; |