From 498cf3d0edd7db5c044dc73b8b9c37c8f6906fd6 Mon Sep 17 00:00:00 2001
From: Matthew Hiller <hiller@redhat.com>
Date: Thu, 29 Mar 2001 02:32:46 +0000
Subject: [PATCH] mn10300.md (cmpsi): Fix first alternative's output template.

2001-03-28  Matthew Hiller  <hiller@redhat.com>

	* config/mn10300/mn10300.md (cmpsi): Fix first alternative's
	output template.

	* MAINTAINERS: Added self.

From-SVN: r40956
---
 MAINTAINERS                   |  1 +
 gcc/ChangeLog                 |  7 +++++++
 gcc/config/mn10300/mn10300.md | 16 ++++++++++++----
 3 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 27cb3a61a015..49b1cfcabfcc 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -124,6 +124,7 @@ Anthony Green					green@redhat.com
 Stu Grossman					grossman@redhat.com
 Andrew Haley					aph@redhat.com
 Aldy Hernandez					aldyh@redhat.com
+Matthew Hiller					hiller@redhat.com
 Kazu Hirata					kazu@hxi.com
 Manfred Hollstein				mhollstein@redhat.com
 Jan Hubicka					hubicka@freesoft.cz
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f9edd3df4277..cc07a8b43003 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2001-03-28  Matthew Hiller  <hiller@redhat.com>
+
+	* config/mn10300/mn10300.md (cmpsi): Fix first alternative's
+	output template.
+
+	* MAINTAINERS: Added self.
+	
 2001-03-28  Richard Henderson  <rth@redhat.com>
 
 	* Makefile.in (cs-tconfig.h): Depend on CONFIG_H, not GCONFIG_H.
diff --git a/gcc/config/mn10300/mn10300.md b/gcc/config/mn10300/mn10300.md
index 564a4c95d34c..bf913b23b72e 100644
--- a/gcc/config/mn10300/mn10300.md
+++ b/gcc/config/mn10300/mn10300.md
@@ -709,15 +709,23 @@
   "* return output_tst (operands[0], insn);"
   [(set_attr "cc" "set_znv")])
 
+;; Ordinarily, the cmp instruction will set the Z bit of cc0 to 1 if
+;; its operands hold equal values, but the operands of a cmp
+;; instruction must be distinct registers.  In the case where we'd
+;; like to compare a register to itself, we can achieve this effect
+;; with a btst 0,d0 instead.  (This will not alter the contents of d0
+;; but will have the proper effect on cc0.  Using d0 is arbitrary; any
+;; data register would work.)
+
 (define_insn "cmpsi"
   [(set (cc0)
-	(compare (match_operand:SI 0 "register_operand" "!*d*a*x,dax")
-		 (match_operand:SI 1 "nonmemory_operand" "!*0,daxi")))]
+	(compare (match_operand:SI 0 "register_operand" "*d*a*x,dax")
+		 (match_operand:SI 1 "nonmemory_operand" "*0,daxi")))]
   ""
   "@
-  add 0,%0
+  btst 0,d0
   cmp %1,%0"
-  [(set_attr "cc" "invert,compare")])
+  [(set_attr "cc" "compare,compare")])
 
 ;; ----------------------------------------------------------------------
 ;; ADD INSTRUCTIONS
-- 
GitLab