This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Remove CARRY_REGS class from xstormy16
- From: Nick Clifton <nickc at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 01 Dec 2008 12:07:07 +0000
- Subject: 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);