This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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]

Remove CARRY_REGS class from xstormy16


Hi Guys,

  I am applying the attached patch to remove the CARRY_REGS class from
  the xstormy16 port.  There is only one register in the class and it
  was causing all kinds of problems for reload, so it seemed much
  simpler to just remove the class and refer to the carry register
  directly in the machine descriptions.  As a result of applying the
  patch the number of gcc testsuite failures for the xstormy16 has
  dropped by over 100.

Cheers
  Nick

gcc/ChangeLog
2008-12-01  Nick Clifton  <nickc@redhat.com>

	* config/stormy16/stormy16.md (CARRY_REG): New constant.
	Replace uses of the "y" register class with direct references to
	the CARRY_REG register.
	* config/stormy16/stormy16.c: Replace clobbers of a BImode scratch
	register with clobbers of the carry register.
	(xstormy16_secondary_reload_class): Do not return CARRY_REGS.
	(xstormy16_split_cbranch): Remove redundant carry parameter.
	(xstormy16_expand_arith): Likewise.
	* config/stormy16/stormy16.h (enum reg_class): Remove CARRY_REGS.
	(IRA_COVER_CLASSES, REG_CLASS_NAMES, REG_CLASS_CONTENTS,
	REGNO_REG_CLASS, REG_CLASS_FROM_LETTER): Likewise.
	(CARRY_REGNUM): Define.
	* config/stormy16/stormy16-protos.h (xstormy16_split_cbranch):
	Update prototype.
	(xstormy16_expand_arith): Likewise.

Index: gcc/config/stormy16/stormy16.md
===================================================================
--- gcc/config/stormy16/stormy16.md	(revision 142308)
+++ gcc/config/stormy16/stormy16.md	(working copy)
@@ -28,7 +28,6 @@
 ;; d  $8
 ;; e  $0..$7
 ;; t  $0..$1
-;; y  Carry
 ;; z  $8..$9
 ;; I  0..3
 ;; J  2**N mask
@@ -45,6 +44,13 @@
 ;; U  -inf..1 or 16..inf
 ;; Z  0
 
+(define_constants
+  [
+    (CARRY_REG 16)
+  ]
+)
+
+
 
 ;; ::::::::::::::::::::
 ;; ::
@@ -313,7 +319,7 @@
   [(set (match_operand:HI 0 "register_operand" "=r,r,r,T,T,r,r,r")
 	(plus:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0,0,0,0")
 		 (match_operand:HI 2 "xs_hi_nonmemory_operand" "O,P,Z,L,M,Ir,N,i")))
-   (clobber (match_scratch:BI 3 "=X,X,X,y,y,y,y,y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "@
    inc %0,%o2
@@ -326,27 +332,27 @@
    add %0,%2"
   [(set_attr "length" "2,2,0,2,2,2,2,4")])
 
-; Reload can generate addition operations.  The SECONDARY_RELOAD_CLASS
-; macro causes it to allocate the carry register; this pattern
-; shows it how to place the register in RTL to make the addition work.
-(define_expand "reload_inhi"
-  [(parallel [(set (match_operand:HI 0 "register_operand" "=r")
-		   (match_operand:HI 1 "xstormy16_carry_plus_operand" ""))
-	      (clobber (match_operand:BI 2 "" "=&y"))])]
-  ""
-  "if (! rtx_equal_p (operands[0], XEXP (operands[1], 0)))
-    {
-      emit_insn (gen_rtx_SET (VOIDmode, operands[0], XEXP (operands[1], 0)));
-      operands[1] = gen_rtx_PLUS (GET_MODE (operands[1]), operands[0],
-				  XEXP (operands[1], 1));
-    }
- ")
+;; ; Reload can generate addition operations.  The SECONDARY_RELOAD_CLASS
+;; ; macro causes it to allocate the carry register; this pattern
+;; ; shows it how to place the register in RTL to make the addition work.
+;; (define_expand "reload_inhi"
+;;   [(parallel [(set (match_operand:HI 0 "register_operand" "=r")
+;; 		   (match_operand:HI 1 "xstormy16_carry_plus_operand" ""))
+;; 	      (clobber (reg:BI CARRY_REG))])]
+;;   ""
+;;   "if (! rtx_equal_p (operands[0], XEXP (operands[1], 0)))
+;;     {
+;;       emit_insn (gen_rtx_SET (VOIDmode, operands[0], XEXP (operands[1], 0)));
+;;       operands[1] = gen_rtx_PLUS (GET_MODE (operands[1]), operands[0],
+;; 				  XEXP (operands[1], 1));
+;;     }
+;;  ")
 
 (define_insn "addchi4"
   [(set (match_operand:HI 0 "register_operand" "=T,r,r")
 	(plus:HI (match_operand:HI 1 "register_operand" "%0,0,0")
 		 (match_operand:HI 2 "xs_hi_nonmemory_operand" "L,Ir,i")))
-   (set (match_operand:BI 3 "register_operand" "=y,y,y")
+   (set (reg:BI CARRY_REG)
         (truncate:BI (lshiftrt:SI (plus:SI (zero_extend:SI (match_dup 1))
 					   (zero_extend:SI (match_dup 2)))
 				  (const_int 16))))]
@@ -360,14 +366,12 @@
 (define_insn "addchi5"
   [(set (match_operand:HI 0 "register_operand" "=T,r,r")
 	(plus:HI (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0")
-			  (zero_extend:HI (match_operand:BI 3 
-							    "register_operand"
-							    "y,y,y")))
+			  (zero_extend:HI (reg:BI CARRY_REG)))
 		 (match_operand:HI 2 "xs_hi_nonmemory_operand" "L,Ir,i")))
-   (set (match_operand:BI 4 "register_operand" "=y,y,y") 
+   (set (reg:BI CARRY_REG) 
         (truncate:BI (lshiftrt:SI (plus:SI (plus:SI 
 					    (zero_extend:SI (match_dup 1))
-					    (zero_extend:SI (match_dup 3)))
+					    (zero_extend:SI (reg:BI CARRY_REG)))
 					   (zero_extend:SI (match_dup 2)))
 				  (const_int 16))))]
   ""
@@ -387,7 +391,7 @@
   [(set (match_operand:HI 0 "register_operand" "=r,r,T,T,r,r,r")
 	(minus:HI (match_operand:HI 1 "register_operand" "0,0,0,0,0,0,0")
 		  (match_operand:HI 2 "xs_hi_nonmemory_operand" "O,P,L,M,rI,M,i")))
-   (clobber (match_scratch:BI 3 "=X,X,&y,&y,&y,&y,&y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "@
    dec %0,%o2
@@ -403,7 +407,7 @@
   [(set (match_operand:HI 0 "register_operand" "=T,r,r")
 	(minus:HI (match_operand:HI 1 "register_operand" "0,0,0")
 		  (match_operand:HI 2 "xs_hi_nonmemory_operand" "L,Ir,i")))
-   (set (match_operand:BI 3 "register_operand" "=y,y,y") 
+   (set (reg:BI CARRY_REG) 
         (truncate:BI (lshiftrt:SI (minus:SI (zero_extend:SI (match_dup 1))
 					    (zero_extend:SI (match_dup 2)))
 				  (const_int 16))))]
@@ -417,14 +421,12 @@
 (define_insn "subchi5"
   [(set (match_operand:HI 0 "register_operand" "=T,r,r")
 	(minus:HI (minus:HI (match_operand:HI 1 "register_operand" "0,0,0")
-			  (zero_extend:HI (match_operand:BI 3 
-							    "register_operand"
-							    "y,y,y")))
+			  (zero_extend:HI (reg:BI CARRY_REG))) 
 		 (match_operand:HI 2 "xs_hi_nonmemory_operand" "L,Ir,i")))
-   (set (match_operand:BI 4 "register_operand" "=y,y,y") 
+   (set (reg:BI CARRY_REG) 
         (truncate:BI (lshiftrt:SI (minus:SI (minus:SI 
 					     (zero_extend:SI (match_dup 1))
-					     (zero_extend:SI (match_dup 3)))
+					     (zero_extend:SI (reg:BI CARRY_REG)))
 					    (zero_extend:SI (match_dup 2)))
 				  (const_int 16))))]
   ""
@@ -511,7 +513,7 @@
   [(set (match_operand:HI 0 "register_operand" "")
 	(not:HI (match_operand:HI 1 "register_operand" "")))
    (parallel [(set (match_dup 0) (plus:HI (match_dup 0) (const_int 1)))
-	      (clobber (match_scratch:BI 3 ""))])]
+	      (clobber (reg:BI CARRY_REG))])]
   ""
   "")
 
@@ -527,7 +529,7 @@
   [(set (match_operand:HI 0 "register_operand" "=r")
 	(ashift:HI (match_operand:HI 1 "register_operand" "0")
 		   (match_operand:HI 2 "nonmemory_operand" "ri")))
-   (clobber (match_scratch:BI 3 "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "shl %0,%2")
 
@@ -536,7 +538,7 @@
   [(set (match_operand:HI 0 "register_operand" "=r")
 	(ashiftrt:HI (match_operand:HI 1 "register_operand" "0")
 		     (match_operand:HI 2 "nonmemory_operand" "ri")))
-   (clobber (match_scratch:BI 3 "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "asr %0,%2")
 
@@ -545,7 +547,7 @@
   [(set (match_operand:HI 0 "register_operand" "=r")
 	(lshiftrt:HI (match_operand:HI 1 "register_operand" "0")
 		     (match_operand:HI 2 "nonmemory_operand" "ri")))
-   (clobber (match_scratch:BI 3 "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "shr %0,%2")
 
@@ -647,13 +649,13 @@
   [(set (match_operand:SI 0 "register_operand" "=r")
 	(plus:SI (match_operand:SI 1 "register_operand" "%0")
 		 (match_operand:SI 2 "nonmemory_operand" "ri")))
-   (clobber (match_scratch:BI 3 "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "#"
   "reload_completed"
   [(pc)]
   "{ xstormy16_expand_arith (SImode, PLUS, operands[0], operands[1],
-			    operands[2], operands[3]); DONE; } "
+			    operands[2]); DONE; } "
   [(set_attr "length" "4")])
 
 ;; Subtraction
@@ -661,33 +663,32 @@
   [(set (match_operand:SI 0 "register_operand" "=r")
 	(minus:SI (match_operand:SI 1 "register_operand" "0")
 		 (match_operand:SI 2 "nonmemory_operand" "ri")))
-   (clobber (match_scratch:BI 3 "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "#"
   "reload_completed"
   [(pc)]
   "{ xstormy16_expand_arith (SImode, MINUS, operands[0], operands[1],
-			    operands[2], operands[3]); DONE; } "
+			    operands[2]); DONE; } "
   [(set_attr "length" "4")])
 
 (define_expand "negsi2"
   [(parallel [(set (match_operand:SI 0 "register_operand" "")
 		   (neg:SI (match_operand:SI 1 "register_operand" "")))
-	      (clobber (match_scratch:BI 2 ""))])]
+	      (clobber (reg:BI CARRY_REG))])]
   ""
-  "{ operands[2] = gen_reg_rtx (HImode);
-     operands[3] = gen_reg_rtx (BImode); }")
+  "{ operands[2] = gen_reg_rtx (HImode); }")
 
 (define_insn_and_split "*negsi2_internal"
   [(set (match_operand:SI 0 "register_operand" "=&r")
 	(neg:SI (match_operand:SI 1 "register_operand" "r")))
-   (clobber (match_scratch:BI 2 "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "#"
   "reload_completed"
   [(pc)]
   "{ xstormy16_expand_arith (SImode, NEG, operands[0], operands[0],
-			    operands[1], operands[2]); DONE; }")
+			    operands[1]); DONE; }")
 
 ;; ::::::::::::::::::::
 ;; ::
@@ -700,44 +701,47 @@
   [(parallel [(set (match_operand:SI 0 "register_operand" "")
 		   (ashift:SI (match_operand:SI 1 "register_operand" "")
 			      (match_operand:SI 2 "const_int_operand" "")))
-	      (clobber (match_dup 3))
-	      (clobber (match_dup 4))])]
+	      (clobber (reg:BI CARRY_REG))
+	      (clobber (match_dup 3))])]
   ""
-  " if (! const_int_operand (operands[2], SImode)) FAIL;
-  operands[3] = gen_reg_rtx (BImode); operands[4] = gen_reg_rtx (HImode); ")
+  " if (! const_int_operand (operands[2], SImode))
+      FAIL;
+   operands[3] = gen_reg_rtx (HImode); ")
 
 ;; Arithmetic Shift Right
 (define_expand "ashrsi3"
   [(parallel [(set (match_operand:SI 0 "register_operand" "")
 		   (ashiftrt:SI (match_operand:SI 1 "register_operand" "")
 			        (match_operand:SI 2 "const_int_operand" "")))
-	      (clobber (match_dup 3))
-	      (clobber (match_dup 4))])]
+	      (clobber (reg:BI CARRY_REG))
+	      (clobber (match_dup 3))])]
   ""
-  " if (! const_int_operand (operands[2], SImode)) FAIL;
-  operands[3] = gen_reg_rtx (BImode); operands[4] = gen_reg_rtx (HImode); ")
+  " if (! const_int_operand (operands[2], SImode))
+      FAIL;
+  operands[3] = gen_reg_rtx (HImode); ")
 
 ;; Logical Shift Right
 (define_expand "lshrsi3"
   [(parallel [(set (match_operand:SI 0 "register_operand" "")
 		   (lshiftrt:SI (match_operand:SI 1 "register_operand" "")
 			        (match_operand:SI 2 "const_int_operand" "")))
-	      (clobber (match_dup 3))
-	      (clobber (match_dup 4))])]
+	      (clobber (reg:BI CARRY_REG))
+	      (clobber (match_dup 3))])]
   ""
-  " if (! const_int_operand (operands[2], SImode)) FAIL;
-  operands[3] = gen_reg_rtx (BImode); operands[4] = gen_reg_rtx (HImode); ")
+  " if (! const_int_operand (operands[2], SImode))
+      FAIL;
+   operands[3] = gen_reg_rtx (HImode); ")
 
 (define_insn "*shiftsi"
   [(set (match_operand:SI 0 "register_operand" "=r,r")
-	(match_operator:SI 5 "shift_operator"
+	(match_operator:SI 4 "shift_operator"
 	 [(match_operand:SI 1 "register_operand" "0,0")
 	  (match_operand:SI 2 "const_int_operand" "U,n")]))
-   (clobber (match_operand:BI 3 "register_operand" "=y,y"))
-   (clobber (match_operand:HI 4 "" "=X,r"))]
+   (clobber (reg:BI CARRY_REG))
+   (clobber (match_operand:HI 3 "" "=X,r"))]
   ""
-  "* return xstormy16_output_shift (SImode, GET_CODE (operands[5]), 
-				   operands[0], operands[2], operands[4]);"
+  "* return xstormy16_output_shift (SImode, GET_CODE (operands[4]), 
+				    operands[0], operands[2], operands[3]);"
   [(set_attr "length" "6,10")
    (set_attr "psw_operand" "clobber,clobber")])
 
@@ -845,7 +849,7 @@
 						      "r,L,e")])
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (clobber (match_operand:BI 4 "" "=&y,&y,&y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "*
 {
@@ -863,7 +867,7 @@
 							 "r,L,e")])
 		      (pc)
 		      (label_ref (match_operand 0 "" ""))))
-   (clobber (match_operand:BI 4 "" "=&y,&y,&y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "*
 {
@@ -898,35 +902,31 @@
 							 "ri")])
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (clobber (match_operand:SI 5 "register_operand" "=2"))
-   (clobber (match_operand:BI 4 "" "=&y"))]
+   (clobber (match_operand:SI 4 "register_operand" "=2"))
+   (clobber (reg:BI CARRY_REG))]
   ""
   "#"
   "reload_completed"
   [(pc)]
-  "{ xstormy16_split_cbranch (SImode, operands[0], operands[1], operands[2],
-			     operands[4]); DONE; }"
+  "{ xstormy16_split_cbranch (SImode, operands[0], operands[1], operands[2]); DONE; }"
   [(set_attr "length" "8")])
 
 (define_insn "*ineqbranch_1"
   [(set (pc)
-	(if_then_else (match_operator:HI 5 "xstormy16_ineqsi_operator"
-		       [(minus:HI (match_operand:HI 1 "register_operand" 
-						    "T,r,r")
-			   (zero_extend:HI (match_operand:BI 4
-							     "register_operand"
-							     "y,y,y")))
+	(if_then_else (match_operator:HI 4 "xstormy16_ineqsi_operator"
+		       [(minus:HI (match_operand:HI 1 "register_operand" "T,r,r")
+			   (zero_extend:HI (reg:BI CARRY_REG)))
 			(match_operand:HI 3 "nonmemory_operand" "L,Ir,i")])
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
    (set (match_operand:HI 2 "register_operand" "=1,1,1")
-	(minus:HI (minus:HI (match_dup 1) (zero_extend:HI (match_dup 4)))
+	(minus:HI (minus:HI (match_dup 1) (zero_extend:HI (reg:BI CARRY_REG)))
 		  (match_dup 3)))
-   (clobber (match_operand:BI 6 "" "=y,y,y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "*
 {
-  return xstormy16_output_cbranch_si (operands[5], \"%l0\", 0, insn);
+  return xstormy16_output_cbranch_si (operands[4], \"%l0\", 0, insn);
 }"
   [(set_attr "branch_class" "bcc8p2,bcc8p2,bcc8p4")
    (set_attr "psw_operand" "2,2,2")])
@@ -1026,7 +1026,7 @@
 ;; Indirect jump through a register
 (define_expand "indirect_jump"
   [(set (match_dup 1) (const_int 0))
-   (parallel [(set (pc) (match_operand:HI 0 "register_operand" "r"))
+   (parallel [(set (pc) (match_operand:HI 0 "register_operand" ""))
 	      (use (match_dup 1))])]
   ""
   "operands[1] = gen_reg_rtx (HImode);")
@@ -1231,7 +1231,7 @@
 			     (const_int 0))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (clobber (match_operand:BI 3 "" "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "bn %1,%B2,%l0"
   [(set_attr "length" "4")
@@ -1247,7 +1247,7 @@
 		       (match_operand:HI 3 "immediate_operand" "i"))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (clobber (match_operand:BI 4 "" "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "bn %1,%B2,%l0"
   [(set_attr "length" "4")
@@ -1260,7 +1260,7 @@
 			     (const_int 0))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (clobber (match_operand:BI 3 "" "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "bn %1,%B2,%l0"
   [(set_attr "length" "4")
@@ -1274,7 +1274,7 @@
 			      (const_int 1))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (clobber (match_operand:BI 2 "" "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "bn %1,#7,%l0"
   [(set_attr "length" "4")
@@ -1286,7 +1286,7 @@
 			     (const_int 0))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (clobber (match_operand:BI 2 "" "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "bn %1,#7,%l0"
   [(set_attr "length" "4")
@@ -1299,7 +1299,7 @@
 			     (const_int 0))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (clobber (match_operand:BI 3 "" "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "bp %1,%B2,%l0"
   [(set_attr "length" "4")
@@ -1312,7 +1312,7 @@
 				       (match_operand:HI 2 "immediate_operand" "i"))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (clobber (match_operand:BI 3 "" "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "bp %1,%b2,%l0"
   [(set_attr "length" "4")
@@ -1325,7 +1325,7 @@
 			     (const_int 0))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (clobber (match_operand:BI 3 "" "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "bp %1,%B2,%l0"
   [(set_attr "length" "4")
@@ -1337,7 +1337,7 @@
 				   (const_int 7))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (clobber (match_operand:BI 2 "" "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "bp %1,#7,%l0"
   [(set_attr "length" "4")
@@ -1349,7 +1349,7 @@
 			     (const_int 0))
 		      (label_ref (match_operand 0 "" ""))
 		      (pc)))
-   (clobber (match_operand:BI 2 "" "=y"))]
+   (clobber (reg:BI CARRY_REG))]
   ""
   "bp %1,#7,%l0"
   [(set_attr "length" "4")
Index: gcc/config/stormy16/stormy16.c
===================================================================
--- gcc/config/stormy16/stormy16.c	(revision 142308)
+++ gcc/config/stormy16/stormy16.c	(working copy)
@@ -214,7 +214,7 @@
 			gen_rtx_IF_THEN_ELSE (VOIDmode, condition_rtx,
 					      loc_ref, pc_rtx));
 
-  cy_clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (BImode));
+  cy_clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, 16));
 
   if (mode == HImode)
     vec = gen_rtvec (2, branch, cy_clobber);
@@ -240,7 +240,7 @@
 
 void
 xstormy16_split_cbranch (enum machine_mode mode, rtx label, rtx comparison,
-			 rtx dest, rtx carry)
+			 rtx dest)
 {
   rtx op0 = XEXP (comparison, 0);
   rtx op1 = XEXP (comparison, 1);
@@ -248,7 +248,7 @@
   rtx compare;
   
   start_sequence ();
-  xstormy16_expand_arith (mode, COMPARE, dest, op0, op1, carry);
+  xstormy16_expand_arith (mode, COMPARE, dest, op0, op1);
   seq = get_insns ();
   end_sequence ();
 
@@ -474,11 +474,6 @@
       && ! reg_class_subset_p (rclass, EIGHT_REGS))
     return EIGHT_REGS;
 
-  /* When reloading a PLUS, the carry register will be required
-     unless the inc or dec instructions can be used.  */
-  if (xstormy16_carry_plus_operand (x, mode))
-    return CARRY_REGS;
-
   return NO_REGS;
 }
 
@@ -978,7 +973,7 @@
 #define REG_NEEDS_SAVE(REGNUM, IFUN)					\
   ((df_regs_ever_live_p (REGNUM) && ! call_used_regs[REGNUM])		\
    || (IFUN && ! fixed_regs[REGNUM] && call_used_regs[REGNUM]		\
-       && (REGNO_REG_CLASS (REGNUM) != CARRY_REGS)			\
+       && (REGNUM != CARRY_REGNUM)					\
        && (df_regs_ever_live_p (REGNUM) || ! current_function_is_leaf)))
 
 /* Compute the stack layout.  */
@@ -1967,13 +1962,12 @@
 
    (set DEST (CODE:MODE SRC0 SRC1))
    
-   using CARRY as a temporary.  When CODE is COMPARE, a branch
-   template is generated (this saves duplicating code in
-   xstormy16_split_cbranch).  */
+   When CODE is COMPARE, a branch template is generated
+   (this saves duplicating code in xstormy16_split_cbranch).  */
 
 void 
 xstormy16_expand_arith (enum machine_mode mode, enum rtx_code code,
-			rtx dest, rtx src0, rtx src1, rtx carry)
+			rtx dest, rtx src0, rtx src1)
 {
   int num_words = GET_MODE_BITSIZE (mode) / BITS_PER_WORD;
   int i;
@@ -2000,9 +1994,9 @@
 	    continue;
 	  
 	  if (firstloop)
-	    insn = gen_addchi4 (w_dest, w_src0, w_src1, carry);
+	    insn = gen_addchi4 (w_dest, w_src0, w_src1);
 	  else
-	    insn = gen_addchi5 (w_dest, w_src0, w_src1, carry, carry);
+	    insn = gen_addchi5 (w_dest, w_src0, w_src1);
 	  break;
 
 	case NEG:
@@ -2013,10 +2007,10 @@
 	      rtx branch, sub, clobber, sub_1;
 	      
 	      sub_1 = gen_rtx_MINUS (HImode, w_src0, 
-				     gen_rtx_ZERO_EXTEND (HImode, carry));
+				     gen_rtx_ZERO_EXTEND (HImode, gen_rtx_REG (BImode, 16)));
 	      sub = gen_rtx_SET (VOIDmode, w_dest,
 				 gen_rtx_MINUS (HImode, sub_1, w_src1));
-	      clobber = gen_rtx_CLOBBER (VOIDmode, carry);
+	      clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, 16));
 	      branch = gen_rtx_SET (VOIDmode, pc_rtx,
 				    gen_rtx_IF_THEN_ELSE (VOIDmode,
 							  gen_rtx_EQ (HImode,
@@ -2032,9 +2026,9 @@
 		   && GET_CODE (w_src1) == CONST_INT && INTVAL (w_src1) == 0)
 	    continue;
 	  else if (firstloop)
-	    insn = gen_subchi4 (w_dest, w_src0, w_src1, carry);
+	    insn = gen_subchi4 (w_dest, w_src0, w_src1);
 	  else
-	    insn = gen_subchi5 (w_dest, w_src0, w_src1, carry, carry);
+	    insn = gen_subchi5 (w_dest, w_src0, w_src1);
 	  break;
 
 	case IOR:
Index: gcc/config/stormy16/stormy16.h
===================================================================
--- gcc/config/stormy16/stormy16.h	(revision 142308)
+++ gcc/config/stormy16/stormy16.h	(working copy)
@@ -191,7 +191,6 @@
   R8_REGS,
   ICALL_REGS,
   GENERAL_REGS,
-  CARRY_REGS,
   ALL_REGS,
   LIM_REG_CLASSES
 };
@@ -200,7 +199,7 @@
 
 #define IRA_COVER_CLASSES			\
 {						\
-  GENERAL_REGS, CARRY_REGS, LIM_REG_CLASSES	\
+  GENERAL_REGS, LIM_REG_CLASSES	\
 }
 
 #define REG_CLASS_NAMES				\
@@ -214,7 +213,6 @@
   "R8_REGS",					\
   "ICALL_REGS",					\
   "GENERAL_REGS",				\
-  "CARRY_REGS",					\
   "ALL_REGS"					\
 }
 
@@ -229,17 +227,15 @@
   { 0x00100 },					\
   { 0x00300 },					\
   { 0x6FFFF },					\
-  { 0x10000 },					\
   { (1 << FIRST_PSEUDO_REGISTER) - 1 }		\
 }
 
 #define REGNO_REG_CLASS(REGNO) 			\
-  ((REGNO) == 0   ? R0_REGS			\
-   : (REGNO) == 1 ? R1_REGS			\
-   : (REGNO) == 2 ? R2_REGS			\
-   : (REGNO) < 8  ? EIGHT_REGS			\
-   : (REGNO) == 8 ? R8_REGS			\
-   : (REGNO) == 16 ? CARRY_REGS			\
+  (  (REGNO) ==  0 ? R0_REGS			\
+   : (REGNO) ==  1 ? R1_REGS			\
+   : (REGNO) ==  2 ? R2_REGS			\
+   : (REGNO) <   8 ? EIGHT_REGS			\
+   : (REGNO) ==  8 ? R8_REGS			\
    : (REGNO) <= 18 ? GENERAL_REGS		\
    : ALL_REGS)
 
@@ -264,7 +260,6 @@
   : (CHAR) == 'd' ? R8_REGS			\
   : (CHAR) == 'e' ? EIGHT_REGS			\
   : (CHAR) == 't' ? TWO_REGS			\
-  : (CHAR) == 'y' ? CARRY_REGS			\
   : (CHAR) == 'z' ? ICALL_REGS			\
   : NO_REGS)
 
@@ -362,16 +357,13 @@
 
 /* Register That Address the Stack Frame.  */
 
-#define STACK_POINTER_REGNUM 15
-
-#define FRAME_POINTER_REGNUM 17
-
+#define STATIC_CHAIN_REGNUM	 1
 #define HARD_FRAME_POINTER_REGNUM 13
+#define STACK_POINTER_REGNUM	15
+#define CARRY_REGNUM		16
+#define FRAME_POINTER_REGNUM	17
+#define ARG_POINTER_REGNUM	18
 
-#define ARG_POINTER_REGNUM 18
-
-#define STATIC_CHAIN_REGNUM 1
-
 
 /* Eliminating the Frame Pointer and the Arg Pointer */
 
Index: gcc/config/stormy16/stormy16-protos.h
===================================================================
--- gcc/config/stormy16/stormy16-protos.h	(revision 142308)
+++ gcc/config/stormy16/stormy16-protos.h	(working copy)
@@ -64,7 +64,7 @@
 #endif
 
 #if defined (HAVE_MACHINE_MODES) && defined (RTX_CODE)
-extern void xstormy16_split_cbranch (enum machine_mode, rtx, rtx, rtx, rtx);
+extern void xstormy16_split_cbranch (enum machine_mode, rtx, rtx, rtx);
 extern int  short_memory_operand (rtx, enum machine_mode);
 extern int  nonimmediate_nonstack_operand (rtx, enum machine_mode);
 extern enum reg_class xstormy16_secondary_reload_class 
@@ -74,7 +74,7 @@
 extern void xstormy16_split_move (enum machine_mode, rtx, rtx);
 extern void xstormy16_expand_move (enum machine_mode, rtx, rtx);
 extern void xstormy16_expand_arith (enum machine_mode, enum rtx_code, 
-				    rtx, rtx, rtx, rtx);
+				    rtx, rtx, rtx);
 extern const char * xstormy16_output_shift (enum machine_mode, enum rtx_code, 
 					    rtx, rtx, rtx);
 extern int  xstormy16_below100_symbol (rtx, enum machine_mode);

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