From aa7108806b4f98a9201fbfc304461586b3f42574 Mon Sep 17 00:00:00 2001 From: Dave Anglin Date: Sat, 13 Oct 2012 22:15:19 +0000 Subject: [PATCH] * config/tc-hppa.c (pa_ip): Limit unit conditions for uxor to those not involving a carry. --- gas/ChangeLog | 5 +++++ gas/config/tc-hppa.c | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 4ce82dd..0fb9286 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2012-10-13 John David Anglin + + * config/tc-hppa.c (pa_ip): Limit unit conditions for uxor to those + not involving a carry. + 2012-10-12 Peter Bergner * doc/as.texinfo (-mpwr4, -mpwr7): Fix option name typos. 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; -- 2.7.4