diff options
author | Dave Anglin <dave.anglin@nrc.ca> | 2012-10-13 22:15:19 +0000 |
---|---|---|
committer | Dave Anglin <dave.anglin@nrc.ca> | 2012-10-13 22:15:19 +0000 |
commit | aa7108806b4f98a9201fbfc304461586b3f42574 (patch) | |
tree | dfcf7a233244ebf072e5ff08faeb511777a31ec8 /gas/config | |
parent | 3af942d249fd96baf5b2bb2013eea307efc33f7e (diff) | |
download | gdb-aa7108806b4f98a9201fbfc304461586b3f42574.zip gdb-aa7108806b4f98a9201fbfc304461586b3f42574.tar.gz gdb-aa7108806b4f98a9201fbfc304461586b3f42574.tar.bz2 |
* 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 b36fc2c..6411e36 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; |