Commit e868a840 by Michael Hayes Committed by Michael Hayes

c4x.c (valid_parallel_load_store): Flog functionality from old valid_parallel_operands_4.

	* config/c4x/c4x.c (valid_parallel_load_store): Flog functionality
	from old valid_parallel_operands_4.
	(valid_parallel_operands_4): Check that operands for 4 operand
	parallel insns are valid, excluding load/store insns.
	* config/c4x/c4x.h (valid_parallel_load_store): Add prototype.
	* config/c4x/c4x.md (*movqf_parallel, *movqi_parallel): Use
	valid_parallel_load_store instead of valid_parallel_operands_4.
	(*absqf2_movqf_clobber, *floatqiqf2_movqf_clobber,
	*negqf2_movqf_clobber, *absqi2_movqi_clobber,
	*fixqfqi2_movqi_clobber, *negqi2_movqi_clobber,
	*notqi_movqi_clobber): Use valid_parallel_operands_4.
	(*subqf3_movqf_clobber, *ashlqi3_movqi_clobber,
	*ashrqi3_movqi_clobber, *lshrqi3_movqi_clobber,
	*subqi3_movqi_clobber): Use valid_parallel_operands_5.

From-SVN: r24108
parent cd20cc86
Sun Dec 6 00:28:16 1998 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
* config/c4x/c4x.c (valid_parallel_load_store): Flog functionality
from old valid_parallel_operands_4.
(valid_parallel_operands_4): Check that operands for 4 operand
parallel insns are valid, excluding load/store insns.
* config/c4x/c4x.h (valid_parallel_load_store): Add prototype.
* config/c4x/c4x.md (*movqf_parallel, *movqi_parallel): Use
valid_parallel_load_store instead of valid_parallel_operands_4.
(*absqf2_movqf_clobber, *floatqiqf2_movqf_clobber,
*negqf2_movqf_clobber, *absqi2_movqi_clobber,
*fixqfqi2_movqi_clobber, *negqi2_movqi_clobber,
*notqi_movqi_clobber): Use valid_parallel_operands_4.
(*subqf3_movqf_clobber, *ashlqi3_movqi_clobber,
*ashrqi3_movqi_clobber, *lshrqi3_movqi_clobber,
*subqi3_movqi_clobber): Use valid_parallel_operands_5.
Sat Dec 5 23:52:01 1998 Michael Hayes <m.hayes@elec.canterbury.ac.nz> Sat Dec 5 23:52:01 1998 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
* config/c4x/c4x.c (iteration_info): Delete extern. * config/c4x/c4x.c (iteration_info): Delete extern.
......
...@@ -3209,8 +3209,7 @@ c4x_label_conflict (insn, jump, db) ...@@ -3209,8 +3209,7 @@ c4x_label_conflict (insn, jump, db)
/* Validate combination of operands for parallel load/store instructions. */ /* Validate combination of operands for parallel load/store instructions. */
int valid_parallel_load_store (operands, mode)
valid_parallel_operands_4 (operands, mode)
rtx *operands; rtx *operands;
enum machine_mode mode ATTRIBUTE_UNUSED; enum machine_mode mode ATTRIBUTE_UNUSED;
{ {
...@@ -3233,11 +3232,11 @@ valid_parallel_operands_4 (operands, mode) ...@@ -3233,11 +3232,11 @@ valid_parallel_operands_4 (operands, mode)
should be REGs and the other 2 should be MEMs. */ should be REGs and the other 2 should be MEMs. */
/* This test prevents the multipack pass from using this pattern if /* This test prevents the multipack pass from using this pattern if
op0 is used as an index or base register in op3, since this combination op0 is used as an index or base register in op2 or op3, since
will require reloading. */ this combination will require reloading. */
if (GET_CODE (op0) == REG if (GET_CODE (op0) == REG
&& GET_CODE (op3) == MEM && ((GET_CODE (op2) == MEM && reg_mentioned_p (op0, XEXP (op2, 0)))
&& reg_mentioned_p (op0, XEXP (op3, 0))) || (GET_CODE (op3) == MEM && reg_mentioned_p (op0, XEXP (op3, 0)))))
return 0; return 0;
/* LDI||LDI */ /* LDI||LDI */
...@@ -3265,8 +3264,32 @@ valid_parallel_operands_4 (operands, mode) ...@@ -3265,8 +3264,32 @@ valid_parallel_operands_4 (operands, mode)
} }
/* We only use this to check operands 1 and 2 since these may be int
commutative. It will need extending for the C32 opcodes. */ valid_parallel_operands_4 (operands, mode)
rtx *operands;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
int regs = 0;
rtx op0 = operands[0];
rtx op2 = operands[2];
if (GET_CODE (op0) == SUBREG)
op0 = SUBREG_REG (op0);
if (GET_CODE (op2) == SUBREG)
op2 = SUBREG_REG (op2);
/* This test prevents the multipack pass from using this pattern if
op0 is used as an index or base register in op2, since this combination
will require reloading. */
if (GET_CODE (op0) == REG
&& GET_CODE (op2) == MEM
&& reg_mentioned_p (op0, XEXP (op2, 0)))
return 0;
return 1;
}
int int
valid_parallel_operands_5 (operands, mode) valid_parallel_operands_5 (operands, mode)
rtx *operands; rtx *operands;
...@@ -3274,18 +3297,21 @@ valid_parallel_operands_5 (operands, mode) ...@@ -3274,18 +3297,21 @@ valid_parallel_operands_5 (operands, mode)
{ {
int regs = 0; int regs = 0;
rtx op0 = operands[0]; rtx op0 = operands[0];
rtx op1 = operands[1];
rtx op2 = operands[2]; rtx op2 = operands[2];
rtx op3 = operands[3]; rtx op3 = operands[3];
if (GET_CODE (op0) == SUBREG) if (GET_CODE (op0) == SUBREG)
op0 = SUBREG_REG (op0); op0 = SUBREG_REG (op0);
if (GET_CODE (op1) == SUBREG)
op1 = SUBREG_REG (op1);
if (GET_CODE (op2) == SUBREG) if (GET_CODE (op2) == SUBREG)
op2 = SUBREG_REG (op2); op2 = SUBREG_REG (op2);
/* The patterns should only allow ext_low_reg_operand() or /* The patterns should only allow ext_low_reg_operand() or
par_ind_operand() operands. */ par_ind_operand() operands. Operands 1 and 2 may be commutative
but only one of them can be a register. */
if (GET_CODE (op0) == REG) if (GET_CODE (op1) == REG)
regs++; regs++;
if (GET_CODE (op2) == REG) if (GET_CODE (op2) == REG)
regs++; regs++;
......
...@@ -2663,6 +2663,8 @@ extern int legitimize_operands (); ...@@ -2663,6 +2663,8 @@ extern int legitimize_operands ();
extern int valid_operands (); extern int valid_operands ();
extern int valid_parallel_load_store ();
extern int valid_parallel_operands_4 (); extern int valid_parallel_operands_4 ();
extern int valid_parallel_operands_5 (); extern int valid_parallel_operands_5 ();
......
...@@ -1262,7 +1262,7 @@ ...@@ -1262,7 +1262,7 @@
(match_operand:QI 1 "parallel_operand" "S<>,q,S<>,q")) (match_operand:QI 1 "parallel_operand" "S<>,q,S<>,q"))
(set (match_operand:QI 2 "parallel_operand" "=q,S<>,S<>,q") (set (match_operand:QI 2 "parallel_operand" "=q,S<>,S<>,q")
(match_operand:QI 3 "parallel_operand" "S<>,q,q,S<>"))] (match_operand:QI 3 "parallel_operand" "S<>,q,q,S<>"))]
"valid_parallel_operands_4 (operands, QImode)" "valid_parallel_load_store (operands, QImode)"
"@ "@
ldi1\\t%1,%0\\n||\\tldi2\\t%3,%2 ldi1\\t%1,%0\\n||\\tldi2\\t%3,%2
sti1\\t%1,%0\\n||\\tsti2\\t%3,%2 sti1\\t%1,%0\\n||\\tsti2\\t%3,%2
...@@ -2952,7 +2952,7 @@ ...@@ -2952,7 +2952,7 @@
(match_operand:QF 1 "parallel_operand" "S<>,q,S<>,q")) (match_operand:QF 1 "parallel_operand" "S<>,q,S<>,q"))
(set (match_operand:QF 2 "parallel_operand" "=q,S<>,S<>,q") (set (match_operand:QF 2 "parallel_operand" "=q,S<>,S<>,q")
(match_operand:QF 3 "parallel_operand" "S<>,q,q,S<>"))] (match_operand:QF 3 "parallel_operand" "S<>,q,q,S<>"))]
"valid_parallel_operands_4 (operands, QFmode)" "valid_parallel_load_store (operands, QFmode)"
"@ "@
ldf1\\t%1,%0\\n||\\tldf2\\t%3,%2 ldf1\\t%1,%0\\n||\\tldf2\\t%3,%2
stf1\\t%1,%0\\n||\\tstf2\\t%3,%2 stf1\\t%1,%0\\n||\\tstf2\\t%3,%2
...@@ -3800,7 +3800,7 @@ ...@@ -3800,7 +3800,7 @@
(set (match_operand:QF 2 "par_ind_operand" "=S<>") (set (match_operand:QF 2 "par_ind_operand" "=S<>")
(match_operand:QF 3 "ext_low_reg_operand" "q")) (match_operand:QF 3 "ext_low_reg_operand" "q"))
(clobber (reg:CC_NOOV 21))] (clobber (reg:CC_NOOV 21))]
"TARGET_PARALLEL" "TARGET_PARALLEL && valid_parallel_operands_4 (operands, QFmode)"
"absf\\t%1,%0\\n||\\tstf\\t%3,%2" "absf\\t%1,%0\\n||\\tstf\\t%3,%2"
[(set_attr "type" "binarycc")]) [(set_attr "type" "binarycc")])
...@@ -3823,13 +3823,13 @@ ...@@ -3823,13 +3823,13 @@
; FLOAT/STF ; FLOAT/STF
; ;
(define_insn "*floatqiqf_movqf_clobber" (define_insn "*floatqiqf2_movqf_clobber"
[(set (match_operand:QF 0 "ext_low_reg_operand" "=q") [(set (match_operand:QF 0 "ext_low_reg_operand" "=q")
(float:QF (match_operand:QI 1 "par_ind_operand" "S<>"))) (float:QF (match_operand:QI 1 "par_ind_operand" "S<>")))
(set (match_operand:QF 2 "par_ind_operand" "=S<>") (set (match_operand:QF 2 "par_ind_operand" "=S<>")
(match_operand:QF 3 "ext_low_reg_operand" "q")) (match_operand:QF 3 "ext_low_reg_operand" "q"))
(clobber (reg:CC 21))] (clobber (reg:CC 21))]
"TARGET_PARALLEL" "TARGET_PARALLEL && valid_parallel_operands_4 (operands, QFmode)"
"float\\t%1,%0\\n||\\tstf\\t%3,%2" "float\\t%1,%0\\n||\\tstf\\t%3,%2"
[(set_attr "type" "binarycc")]) [(set_attr "type" "binarycc")])
...@@ -3891,7 +3891,7 @@ ...@@ -3891,7 +3891,7 @@
(set (match_operand:QF 2 "par_ind_operand" "=S<>") (set (match_operand:QF 2 "par_ind_operand" "=S<>")
(match_operand:QF 3 "ext_low_reg_operand" "q")) (match_operand:QF 3 "ext_low_reg_operand" "q"))
(clobber (reg:CC 21))] (clobber (reg:CC 21))]
"TARGET_PARALLEL" "TARGET_PARALLEL && valid_parallel_operands_4 (operands, QFmode)"
"negf\\t%1,%0\\n||\\tstf\\t%3,%2" "negf\\t%1,%0\\n||\\tstf\\t%3,%2"
[(set_attr "type" "binarycc")]) [(set_attr "type" "binarycc")])
...@@ -3902,11 +3902,11 @@ ...@@ -3902,11 +3902,11 @@
(define_insn "*subqf3_movqf_clobber" (define_insn "*subqf3_movqf_clobber"
[(set (match_operand:QF 0 "ext_low_reg_operand" "=q") [(set (match_operand:QF 0 "ext_low_reg_operand" "=q")
(minus:QF (match_operand:QF 1 "ext_low_reg_operand" "q") (minus:QF (match_operand:QF 1 "ext_low_reg_operand" "q")
(match_operand:QF 2 "par_ind_operand" "S<>"))) (match_operand:QF 2 "par_ind_operand" "S<>")))
(set (match_operand:QF 3 "par_ind_operand" "=S<>") (set (match_operand:QF 3 "par_ind_operand" "=S<>")
(match_operand:QF 4 "ext_low_reg_operand" "q")) (match_operand:QF 4 "ext_low_reg_operand" "q"))
(clobber (reg:CC 21))] (clobber (reg:CC 21))]
"TARGET_PARALLEL" "TARGET_PARALLEL && valid_parallel_operands_5 (operands, QFmode)"
"subf3\\t%2,%1,%0\\n||\\tstf\\t%4,%3" "subf3\\t%2,%1,%0\\n||\\tstf\\t%4,%3"
[(set_attr "type" "binarycc")]) [(set_attr "type" "binarycc")])
...@@ -3925,7 +3925,7 @@ ...@@ -3925,7 +3925,7 @@
(set (match_operand:QI 2 "par_ind_operand" "=S<>") (set (match_operand:QI 2 "par_ind_operand" "=S<>")
(match_operand:QI 3 "ext_low_reg_operand" "q")) (match_operand:QI 3 "ext_low_reg_operand" "q"))
(clobber (reg:CC_NOOV 21))] (clobber (reg:CC_NOOV 21))]
"TARGET_PARALLEL" "TARGET_PARALLEL && valid_parallel_operands_4 (operands, QImode)"
"absi\\t%1,%0\\n||\\tsti\\t%3,%2" "absi\\t%1,%0\\n||\\tsti\\t%3,%2"
[(set_attr "type" "binarycc")]) [(set_attr "type" "binarycc")])
...@@ -3970,7 +3970,7 @@ ...@@ -3970,7 +3970,7 @@
(set (match_operand:QI 3 "par_ind_operand" "=S<>") (set (match_operand:QI 3 "par_ind_operand" "=S<>")
(match_operand:QI 4 "ext_low_reg_operand" "q")) (match_operand:QI 4 "ext_low_reg_operand" "q"))
(clobber (reg:CC 21))] (clobber (reg:CC 21))]
"TARGET_PARALLEL" "TARGET_PARALLEL && valid_parallel_operands_5 (operands, QImode)"
"ash3\\t%2,%1,%0\\n||\\tsti\\t%4,%3" "ash3\\t%2,%1,%0\\n||\\tsti\\t%4,%3"
[(set_attr "type" "binarycc")]) [(set_attr "type" "binarycc")])
...@@ -3978,14 +3978,14 @@ ...@@ -3978,14 +3978,14 @@
; ASH(right)/STI ; ASH(right)/STI
; ;
(define_insn "*ashlqi3_movqi_clobber" (define_insn "*ashrqi3_movqi_clobber"
[(set (match_operand:QI 0 "ext_low_reg_operand" "=q") [(set (match_operand:QI 0 "ext_low_reg_operand" "=q")
(ashiftrt:QI (match_operand:QI 1 "par_ind_operand" "S<>") (ashiftrt:QI (match_operand:QI 1 "par_ind_operand" "S<>")
(neg:QI (match_operand:QI 2 "ext_low_reg_operand" "q")))) (neg:QI (match_operand:QI 2 "ext_low_reg_operand" "q"))))
(set (match_operand:QI 3 "par_ind_operand" "=S<>") (set (match_operand:QI 3 "par_ind_operand" "=S<>")
(match_operand:QI 4 "ext_low_reg_operand" "q")) (match_operand:QI 4 "ext_low_reg_operand" "q"))
(clobber (reg:CC 21))] (clobber (reg:CC 21))]
"TARGET_PARALLEL" "TARGET_PARALLEL && valid_parallel_operands_5 (operands, QImode)"
"ash3\\t%2,%1,%0\\n||\\tsti\\t%4,%3" "ash3\\t%2,%1,%0\\n||\\tsti\\t%4,%3"
[(set_attr "type" "binarycc")]) [(set_attr "type" "binarycc")])
...@@ -3999,7 +3999,7 @@ ...@@ -3999,7 +3999,7 @@
(set (match_operand:QI 2 "par_ind_operand" "=S<>") (set (match_operand:QI 2 "par_ind_operand" "=S<>")
(match_operand:QI 3 "ext_low_reg_operand" "q")) (match_operand:QI 3 "ext_low_reg_operand" "q"))
(clobber (reg:CC 21))] (clobber (reg:CC 21))]
"TARGET_PARALLEL" "TARGET_PARALLEL && valid_parallel_operands_4 (operands, QImode)"
"fix\\t%1,%0\\n||\\tsti\\t%3,%2" "fix\\t%1,%0\\n||\\tsti\\t%3,%2"
[(set_attr "type" "binarycc")]) [(set_attr "type" "binarycc")])
...@@ -4014,7 +4014,7 @@ ...@@ -4014,7 +4014,7 @@
(set (match_operand:QI 3 "par_ind_operand" "=S<>") (set (match_operand:QI 3 "par_ind_operand" "=S<>")
(match_operand:QI 4 "ext_low_reg_operand" "q")) (match_operand:QI 4 "ext_low_reg_operand" "q"))
(clobber (reg:CC 21))] (clobber (reg:CC 21))]
"TARGET_PARALLEL" "TARGET_PARALLEL && valid_parallel_operands_5 (operands, QImode)"
"lsh3\\t%2,%1,%0\\n||\\tsti\\t%4,%3" "lsh3\\t%2,%1,%0\\n||\\tsti\\t%4,%3"
[(set_attr "type" "binarycc")]) [(set_attr "type" "binarycc")])
...@@ -4078,7 +4078,7 @@ ...@@ -4078,7 +4078,7 @@
(set (match_operand:QI 2 "par_ind_operand" "=S<>") (set (match_operand:QI 2 "par_ind_operand" "=S<>")
(match_operand:QI 3 "ext_low_reg_operand" "q")) (match_operand:QI 3 "ext_low_reg_operand" "q"))
(clobber (reg:CC 21))] (clobber (reg:CC 21))]
"TARGET_PARALLEL" "TARGET_PARALLEL && valid_parallel_operands_4 (operands, QImode)"
"negi\\t%1,%0\\n||\\tsti\\t%3,%2" "negi\\t%1,%0\\n||\\tsti\\t%3,%2"
[(set_attr "type" "binarycc")]) [(set_attr "type" "binarycc")])
...@@ -4092,7 +4092,7 @@ ...@@ -4092,7 +4092,7 @@
(set (match_operand:QI 2 "par_ind_operand" "=S<>") (set (match_operand:QI 2 "par_ind_operand" "=S<>")
(match_operand:QI 3 "ext_low_reg_operand" "q")) (match_operand:QI 3 "ext_low_reg_operand" "q"))
(clobber (reg:CC 21))] (clobber (reg:CC 21))]
"TARGET_PARALLEL" "TARGET_PARALLEL && valid_parallel_operands_4 (operands, QImode)"
"not\\t%1,%0\\n||\\tsti\\t%3,%2" "not\\t%1,%0\\n||\\tsti\\t%3,%2"
[(set_attr "type" "binarycc")]) [(set_attr "type" "binarycc")])
...@@ -4122,7 +4122,7 @@ ...@@ -4122,7 +4122,7 @@
(set (match_operand:QI 3 "par_ind_operand" "=S<>") (set (match_operand:QI 3 "par_ind_operand" "=S<>")
(match_operand:QI 4 "ext_low_reg_operand" "q")) (match_operand:QI 4 "ext_low_reg_operand" "q"))
(clobber (reg:CC 21))] (clobber (reg:CC 21))]
"TARGET_PARALLEL" "TARGET_PARALLEL && valid_parallel_operands_5 (operands, QImode)"
"subi3\\t%2,%1,%0\\n||\\tsti\\t%4,%3" "subi3\\t%2,%1,%0\\n||\\tsti\\t%4,%3"
[(set_attr "type" "binarycc")]) [(set_attr "type" "binarycc")])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment