This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[committed] Fix unit conditions for uxor instruction on hppa


The uxor instruction on hppa only uses unit conditions not involving a
carry.  Fixed as shown below.

Tested on hppa2.0w-hp-hpux11.11.  Committed to trunk.

Dave
-- 
J. David Anglin                                  dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)

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.

Index: config/tc-hppa.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-hppa.c,v
retrieving revision 1.152
diff -u -3 -p -r1.152 tc-hppa.c
--- config/tc-hppa.c	5 May 2012 03:05:27 -0000	1.152
+++ config/tc-hppa.c	13 Oct 2012 21:40:56 -0000
@@ -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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]