Remove dead cc0 code from H8 port

gcc/
	* config/h8300/bitfield.md: Remove "cc" attribute on any
	insns where it remained.
	* config/h8300/combiner.md: Likewise.
	* config/h8300/jumpcall.md: Likewise.
	* config/h8300/logical.md: Likewise.
	* config/h8300/testcompare.md: Likewise.
	* config/h8300/h8300.md (old_cc attr): Renamed from cc attr.
	* config/h8300/h8300.c (notice_update_cc): Remove.
	(compute_plussi_cc): Change references to CC_* to OLD_CC_.
	(compute_logical_op_cc): Likewise.
	(shift_one, shift_two): Likewise.
	(compute_a_shift_cc): Likewise.
	(get_shift_alg): Likewise.
	(struct shift_insn): Change type of cc_valid field.
	(struct shift_info): Likewise.
	* config/h8300/save.md: Remove accidentially created file.
This commit is contained in:
Jeff Law 2020-11-30 12:11:34 -07:00
parent b46314c780
commit 5ddb6eca28
8 changed files with 100 additions and 607 deletions

View file

@ -69,8 +69,7 @@
{
return output_simode_bld (0, operands);
}
[(set_attr "cc" "set_znv,set_znv")
(set_attr "length" "8,6")])
[(set_attr "length" "8,6")])
;;
;; Inverted loads with a 32bit destination.
@ -104,8 +103,7 @@
{
return output_simode_bld (1, operands);
}
[(set_attr "cc" "set_znv,set_znv")
(set_attr "length" "8,6")])
[(set_attr "length" "8,6")])
(define_expand "insv"
[(set (zero_extract:HI (match_operand:HI 0 "general_operand" "")
@ -312,8 +310,7 @@
- (1 << INTVAL (operands[3])));
return "bfld %2,%1,%R0";
}
[(set_attr "cc" "none_0hit")
(set_attr "length_table" "bitfield")])
[(set_attr "length_table" "bitfield")])
(define_insn_and_split "bfst"
[(set (zero_extract:QI (match_operand:QI 0 "bit_memory_operand" "+WU")
@ -339,8 +336,7 @@
- (1 << INTVAL (operands[3])));
return "bfst %R1,%2,%0";
}
[(set_attr "cc" "none_0hit")
(set_attr "length_table" "bitfield")])
[(set_attr "length_table" "bitfield")])
;;(define_expand "cstore<mode>4"
;; [(use (match_operator 1 "eqne_operator"
@ -357,8 +353,7 @@
;; [(set (match_operand:HI 0 "register_operand" "=r")
;; (match_operator:HI 1 "eqne_operator" [(cc0) (const_int 0)]))]
;; "TARGET_H8300SX"
;; "mulu.w #0,%T0\;b%k1 .Lh8BR%=\;inc.w #1,%T0\\n.Lh8BR%=:"
;; [(set_attr "cc" "clobber")])
;; "mulu.w #0,%T0\;b%k1 .Lh8BR%=\;inc.w #1,%T0\\n.Lh8BR%=:")
;;(define_insn_and_split "*cmpstz"
;; [(set (zero_extract:QI (match_operand:QI 0 "bit_memory_operand" "+WU,WU")
@ -379,8 +374,7 @@
;; (match_op_dup:QI 2 [(cc0) (const_int 0)]))]
;; {
;; operands[5] = gen_rtx_COMPARE (VOIDmode, operands[3], operands[4]);
;; }
;; [(set_attr "cc" "set_znv,compare")])
;; })
;;(define_insn "*bstz"
;; [(set (zero_extract:QI (match_operand:QI 0 "bit_memory_operand" "+WU")
@ -389,8 +383,7 @@
;; (eq:QI (cc0) (const_int 0)))]
;; "TARGET_H8300SX && reload_completed"
;; "bstz %1,%0"
;; [(set_attr "cc" "none_0hit")
;; (set_attr "length_table" "unary")])
;; [(set_attr "length_table" "unary")])
;;(define_insn "*bistz"
;; [(set (zero_extract:QI (match_operand:QI 0 "bit_memory_operand" "+WU")
@ -399,8 +392,7 @@
;; (ne:QI (cc0) (const_int 0)))]
;; "TARGET_H8300SX && reload_completed"
;; "bistz %1,%0"
;; [(set_attr "cc" "none_0hit")
;; (set_attr "length_table" "unary")])
;; [(set_attr "length_table" "unary")])
;;(define_insn_and_split "*cmpcondbset"
;; [(set (match_operand:QI 0 "nonimmediate_operand" "=WU,WU")
@ -420,8 +412,7 @@
;; (match_dup 4)))]
;; {
;; operands[6] = gen_rtx_COMPARE (VOIDmode, operands[2], operands[3]);
;; }
;; [(set_attr "cc" "set_znv,compare")])
;; })
;;(define_insn "*condbset"
;; [(set (match_operand:QI 0 "bit_memory_operand" "=WU")
@ -432,8 +423,7 @@
;; (match_dup 3)))]
;; "TARGET_H8300SX && reload_completed"
;; "bset/%j2\t%V1,%0"
;; [(set_attr "cc" "none_0hit")
;; (set_attr "length_table" "logicb")])
;; [(set_attr "length_table" "logicb")])
;;(define_insn_and_split "*cmpcondbclr"
;; [(set (match_operand:QI 0 "nonimmediate_operand" "=WU,WU")
@ -453,8 +443,7 @@
;; (match_dup 4)))]
;; {
;; operands[6] = gen_rtx_COMPARE (VOIDmode, operands[2], operands[3]);
;; }
;; [(set_attr "cc" "set_znv,compare")])
;; })
;;(define_insn "*condbclr"
;; [(set (match_operand:QI 0 "bit_memory_operand" "=WU")
@ -465,8 +454,7 @@
;; (match_dup 3)))]
;; "TARGET_H8300SX && reload_completed"
;; "bclr/%j2\t%W1,%0"
;; [(set_attr "cc" "none_0hit")
;; (set_attr "length_table" "logicb")])
;; [(set_attr "length_table" "logicb")])
;;(define_insn_and_split "*cmpcondbsetreg"
;; [(set (match_operand:QI 0 "nonimmediate_operand" "=WU,WU")
@ -489,8 +477,7 @@
;; (match_dup 4)))]
;; {
;; operands[6] = gen_rtx_COMPARE (VOIDmode, operands[2], operands[3]);
;; }
;; [(set_attr "cc" "set_znv,compare")])
;; })
;;(define_insn "*condbsetreg"
;; [(set (match_operand:QI 0 "bit_memory_operand" "=WU")
@ -502,8 +489,7 @@
;; (match_dup 3)))]
;; "TARGET_H8300SX && reload_completed"
;; "bset/%j2\t%R1,%0"
;; [(set_attr "cc" "none_0hit")
;; (set_attr "length_table" "logicb")])
;; [(set_attr "length_table" "logicb")])
;;(define_insn_and_split "*cmpcondbclrreg"
;; [(set (match_operand:QI 0 "nonimmediate_operand" "=WU,WU")
@ -526,8 +512,7 @@
;; (match_dup 4)))]
;; {
;; operands[6] = gen_rtx_COMPARE (VOIDmode, operands[2], operands[3]);
;; }
;; [(set_attr "cc" "set_znv,compare")])
;; })
;;(define_insn "*condbclrreg"
;; [(set (match_operand:QI 0 "bit_memory_operand" "=WU")
@ -539,6 +524,5 @@
;; (match_dup 3)))]
;; "TARGET_H8300SX && reload_completed"
;; "bclr/%j2\t%R1,%0"
;; [(set_attr "cc" "none_0hit")
;; (set_attr "length_table" "logicb")])
;; [(set_attr "length_table" "logicb")])

View file

@ -144,8 +144,7 @@
"@
mov.b\\t%x1,%w0\;extu.w\\t%f0\;extu.l\\t%S0
sub.l\\t%S0,%S0\;mov.b\\t%x1,%w0"
[(set_attr "cc" "set_znv,clobber")
(set_attr "length" "6,4")])
[(set_attr "length" "6,4")])
(define_insn_and_split "*extzv_8_16"
[(set (match_operand:SI 0 "register_operand" "=r")
@ -167,8 +166,7 @@
(clobber (reg:CC CC_REG))]
""
"mov.w\\t%e1,%f0\;extu.w\\t%f0\;extu.l\\t%S0"
[(set_attr "cc" "set_znv")
(set_attr "length" "6")])
[(set_attr "length" "6")])
(define_insn_and_split "*extzv_16_8"
[(set (match_operand:SI 0 "register_operand" "=r")
@ -192,8 +190,7 @@
(clobber (reg:CC CC_REG))]
"TARGET_H8300H"
"mov.w\\t%e1,%f2\;mov.b\\t%x1,%w0\;mov.b\\t%w2,%x0\;extu.l\\t%S0"
[(set_attr "length" "8")
(set_attr "cc" "set_znv")])
[(set_attr "length" "8")])
;; Extract the exponent of a float.
@ -775,8 +772,7 @@
(clobber (reg:CC CC_REG))]
""
"rotxl.l\\t%S0\;bor\\t#0,%w1\;rotxr.l\\t%S0"
[(set_attr "length" "6")
(set_attr "cc" "set_znv")])
[(set_attr "length" "6")])
(define_insn_and_split "*iorsi3_and_ashift"
[(set (match_operand:SI 0 "register_operand" "=r")
@ -1163,8 +1159,7 @@
(clobber (reg:CC CC_REG))]
""
"mov.b\\t%t1,%R0"
[(set_attr "cc" "set_znv")
(set_attr "length" "8")])
[(set_attr "length" "8")])
;; Storing a part of SImode to QImode.
@ -1186,8 +1181,7 @@
(clobber (reg:CC CC_REG))]
""
"mov.b\\t%x1,%R0"
[(set_attr "cc" "set_znv")
(set_attr "length" "8")])
[(set_attr "length" "8")])
(define_insn_and_split ""
[(set (match_operand:QI 0 "general_operand_dst" "=rm<")
@ -1210,8 +1204,7 @@
(clobber (reg:CC CC_REG))]
""
"mov.w\\t%e1,%f2\;mov.b\\t%w2,%R0"
[(set_attr "cc" "set_znv")
(set_attr "length" "10")])
[(set_attr "length" "10")])
(define_insn_and_split ""
[(set (match_operand:QI 0 "general_operand_dst" "=rm<")
@ -1234,8 +1227,7 @@
(clobber (reg:CC CC_REG))]
""
"mov.w\\t%e1,%f2\;mov.b\\t%x2,%R0"
[(set_attr "cc" "set_znv")
(set_attr "length" "10")])
[(set_attr "length" "10")])
;;(define_insn_and_split ""
;; [(set (pc)

View file

@ -1956,74 +1956,6 @@ h8300_select_cc_mode (enum rtx_code cond, rtx op0, rtx op1)
return CCmode;
}
#if 0
/* Update the condition code from the insn. */
void
notice_update_cc (rtx body, rtx_insn *insn)
{
rtx set;
switch (get_attr_cc (insn))
{
case CC_NONE:
/* Insn does not affect CC at all. */
break;
case CC_NONE_0HIT:
/* Insn does not change CC, but the 0'th operand has been changed. */
if (cc_status.value1 != 0
&& reg_overlap_mentioned_p (recog_data.operand[0], cc_status.value1))
cc_status.value1 = 0;
if (cc_status.value2 != 0
&& reg_overlap_mentioned_p (recog_data.operand[0], cc_status.value2))
cc_status.value2 = 0;
break;
case CC_SET_ZN:
/* Insn sets the Z,N flags of CC to recog_data.operand[0].
The V flag is unusable. The C flag may or may not be known but
that's ok because alter_cond will change tests to use EQ/NE. */
CC_STATUS_INIT;
cc_status.flags |= CC_OVERFLOW_UNUSABLE | CC_NO_CARRY;
set = single_set (insn);
cc_status.value1 = SET_SRC (set);
if (SET_DEST (set) != cc0_rtx)
cc_status.value2 = SET_DEST (set);
break;
case CC_SET_ZNV:
/* Insn sets the Z,N,V flags of CC to recog_data.operand[0].
The C flag may or may not be known but that's ok because
alter_cond will change tests to use EQ/NE. */
CC_STATUS_INIT;
cc_status.flags |= CC_NO_CARRY;
set = single_set (insn);
cc_status.value1 = SET_SRC (set);
if (SET_DEST (set) != cc0_rtx)
{
/* If the destination is STRICT_LOW_PART, strip off
STRICT_LOW_PART. */
if (GET_CODE (SET_DEST (set)) == STRICT_LOW_PART)
cc_status.value2 = XEXP (SET_DEST (set), 0);
else
cc_status.value2 = SET_DEST (set);
}
break;
case CC_COMPARE:
/* The insn is a compare instruction. */
CC_STATUS_INIT;
cc_status.value1 = SET_SRC (body);
break;
case CC_CLOBBER:
/* Insn doesn't leave CC in a usable state. */
CC_STATUS_INIT;
break;
}
}
#endif
/* Given that X occurs in an address of the form (plus X constant),
return the part of X that is expected to be a register. There are
@ -2882,7 +2814,7 @@ compute_plussi_length (rtx *operands, bool need_flags)
/* Compute which flag bits are valid after an addition insn. */
enum attr_cc
enum attr_old_cc
compute_plussi_cc (rtx *operands)
{
machine_mode mode = GET_MODE (operands[0]);
@ -2895,9 +2827,9 @@ compute_plussi_cc (rtx *operands)
HOST_WIDE_INT intval = INTVAL (operands[2]);
if (TARGET_H8300SX && (intval >= 1 && intval <= 7))
return CC_SET_ZN;
return OLD_CC_SET_ZN;
if (TARGET_H8300SX && (intval >= -7 && intval <= -1))
return CC_SET_ZN;
return OLD_CC_SET_ZN;
/* See if we can finish with 2 bytes. */
@ -2906,28 +2838,28 @@ compute_plussi_cc (rtx *operands)
case 0x00000001:
case 0x00000002:
case 0x00000004:
return CC_NONE_0HIT;
return OLD_CC_NONE_0HIT;
case 0xffffffff:
case 0xfffffffe:
case 0xfffffffc:
return CC_NONE_0HIT;
return OLD_CC_NONE_0HIT;
case 0x00010000:
case 0x00020000:
return CC_CLOBBER;
return OLD_CC_CLOBBER;
case 0xffff0000:
case 0xfffe0000:
return CC_CLOBBER;
return OLD_CC_CLOBBER;
}
/* See if we can finish with 4 bytes. */
if ((intval & 0xffff) == 0)
return CC_CLOBBER;
return OLD_CC_CLOBBER;
}
return CC_SET_ZN;
return OLD_CC_SET_ZN;
}
/* Output a logical insn. */
@ -3234,7 +3166,7 @@ compute_logical_op_cc (machine_mode mode, rtx *operands)
int lower_half_easy_p = 0;
int upper_half_easy_p = 0;
/* Condition code. */
enum attr_cc cc = CC_CLOBBER;
enum attr_old_cc cc = OLD_CC_CLOBBER;
switch (mode)
{
@ -3242,7 +3174,7 @@ compute_logical_op_cc (machine_mode mode, rtx *operands)
/* First, see if we can finish with one insn. */
if (b0 != 0 && b1 != 0)
{
cc = CC_SET_ZNV;
cc = OLD_CC_SET_ZNV;
}
break;
case E_SImode:
@ -3264,7 +3196,7 @@ compute_logical_op_cc (machine_mode mode, rtx *operands)
&& !(code == IOR && w1 == 0xffff
&& (w0 & 0x8000) != 0 && lower_half_easy_p))
{
cc = CC_SET_ZNV;
cc = OLD_CC_SET_ZNV;
}
else
{
@ -3272,7 +3204,7 @@ compute_logical_op_cc (machine_mode mode, rtx *operands)
&& w1 == 0xffff
&& (w0 & 0x8000) != 0)
{
cc = CC_SET_ZNV;
cc = OLD_CC_SET_ZNV;
}
}
break;
@ -3500,13 +3432,13 @@ enum shift_mode
};
/* For single bit shift insns, record assembler and what bits of the
condition code are valid afterwards (represented as various CC_FOO
condition code are valid afterwards (represented as various OLD_CC_FOO
bits, 0 means CC isn't left in a usable state). */
struct shift_insn
{
const char *const assembler;
const enum attr_cc cc_valid;
const enum attr_old_cc cc_valid;
};
/* Assembler instruction shift table.
@ -3520,42 +3452,42 @@ static const struct shift_insn shift_one[2][3][3] =
{
/* SHIFT_ASHIFT */
{
{ "shll\t%X0", CC_SET_ZNV },
{ "add.w\t%T0,%T0", CC_SET_ZN },
{ "add.w\t%f0,%f0\n\taddx\t%y0,%y0\n\taddx\t%z0,%z0", CC_CLOBBER }
{ "shll\t%X0", OLD_CC_SET_ZNV },
{ "add.w\t%T0,%T0", OLD_CC_SET_ZN },
{ "add.w\t%f0,%f0\n\taddx\t%y0,%y0\n\taddx\t%z0,%z0", OLD_CC_CLOBBER }
},
/* SHIFT_LSHIFTRT */
{
{ "shlr\t%X0", CC_SET_ZNV },
{ "shlr\t%t0\n\trotxr\t%s0", CC_CLOBBER },
{ "shlr\t%z0\n\trotxr\t%y0\n\trotxr\t%x0\n\trotxr\t%w0", CC_CLOBBER }
{ "shlr\t%X0", OLD_CC_SET_ZNV },
{ "shlr\t%t0\n\trotxr\t%s0", OLD_CC_CLOBBER },
{ "shlr\t%z0\n\trotxr\t%y0\n\trotxr\t%x0\n\trotxr\t%w0", OLD_CC_CLOBBER }
},
/* SHIFT_ASHIFTRT */
{
{ "shar\t%X0", CC_SET_ZNV },
{ "shar\t%t0\n\trotxr\t%s0", CC_CLOBBER },
{ "shar\t%z0\n\trotxr\t%y0\n\trotxr\t%x0\n\trotxr\t%w0", CC_CLOBBER }
{ "shar\t%X0", OLD_CC_SET_ZNV },
{ "shar\t%t0\n\trotxr\t%s0", OLD_CC_CLOBBER },
{ "shar\t%z0\n\trotxr\t%y0\n\trotxr\t%x0\n\trotxr\t%w0", OLD_CC_CLOBBER }
}
},
/* H8/300H */
{
/* SHIFT_ASHIFT */
{
{ "shll.b\t%X0", CC_SET_ZNV },
{ "shll.w\t%T0", CC_SET_ZNV },
{ "shll.l\t%S0", CC_SET_ZNV }
{ "shll.b\t%X0", OLD_CC_SET_ZNV },
{ "shll.w\t%T0", OLD_CC_SET_ZNV },
{ "shll.l\t%S0", OLD_CC_SET_ZNV }
},
/* SHIFT_LSHIFTRT */
{
{ "shlr.b\t%X0", CC_SET_ZNV },
{ "shlr.w\t%T0", CC_SET_ZNV },
{ "shlr.l\t%S0", CC_SET_ZNV }
{ "shlr.b\t%X0", OLD_CC_SET_ZNV },
{ "shlr.w\t%T0", OLD_CC_SET_ZNV },
{ "shlr.l\t%S0", OLD_CC_SET_ZNV }
},
/* SHIFT_ASHIFTRT */
{
{ "shar.b\t%X0", CC_SET_ZNV },
{ "shar.w\t%T0", CC_SET_ZNV },
{ "shar.l\t%S0", CC_SET_ZNV }
{ "shar.b\t%X0", OLD_CC_SET_ZNV },
{ "shar.w\t%T0", OLD_CC_SET_ZNV },
{ "shar.l\t%S0", OLD_CC_SET_ZNV }
}
}
};
@ -3564,21 +3496,21 @@ static const struct shift_insn shift_two[3][3] =
{
/* SHIFT_ASHIFT */
{
{ "shll.b\t#2,%X0", CC_SET_ZNV },
{ "shll.w\t#2,%T0", CC_SET_ZNV },
{ "shll.l\t#2,%S0", CC_SET_ZNV }
{ "shll.b\t#2,%X0", OLD_CC_SET_ZNV },
{ "shll.w\t#2,%T0", OLD_CC_SET_ZNV },
{ "shll.l\t#2,%S0", OLD_CC_SET_ZNV }
},
/* SHIFT_LSHIFTRT */
{
{ "shlr.b\t#2,%X0", CC_SET_ZNV },
{ "shlr.w\t#2,%T0", CC_SET_ZNV },
{ "shlr.l\t#2,%S0", CC_SET_ZNV }
{ "shlr.b\t#2,%X0", OLD_CC_SET_ZNV },
{ "shlr.w\t#2,%T0", OLD_CC_SET_ZNV },
{ "shlr.l\t#2,%S0", OLD_CC_SET_ZNV }
},
/* SHIFT_ASHIFTRT */
{
{ "shar.b\t#2,%X0", CC_SET_ZNV },
{ "shar.w\t#2,%T0", CC_SET_ZNV },
{ "shar.l\t#2,%S0", CC_SET_ZNV }
{ "shar.b\t#2,%X0", OLD_CC_SET_ZNV },
{ "shar.w\t#2,%T0", OLD_CC_SET_ZNV },
{ "shar.l\t#2,%S0", OLD_CC_SET_ZNV }
}
};
@ -3674,10 +3606,10 @@ struct shift_info {
const char *shift2;
/* CC status for SHIFT_INLINE. */
enum attr_cc cc_inline;
enum attr_old_cc cc_inline;
/* CC status for SHIFT_SPECIAL. */
enum attr_cc cc_special;
enum attr_old_cc cc_special;
};
static void get_shift_alg (enum shift_type,
@ -3746,7 +3678,7 @@ get_shift_alg (enum shift_type shift_type, enum shift_mode shift_mode,
case SHIFT_ROT_AND:
info->shift1 = rotate_one[cpu_type][shift_type][shift_mode];
info->shift2 = rotate_two[shift_type][shift_mode];
info->cc_inline = CC_CLOBBER;
info->cc_inline = OLD_CC_CLOBBER;
goto end;
case SHIFT_SPECIAL:
@ -3755,7 +3687,7 @@ get_shift_alg (enum shift_type shift_type, enum shift_mode shift_mode,
info->shift1 = shift_one[cpu_type][shift_type][shift_mode].assembler;
info->shift2 = shift_two[shift_type][shift_mode].assembler;
info->cc_inline = shift_one[cpu_type][shift_type][shift_mode].cc_valid;
info->cc_special = CC_CLOBBER;
info->cc_special = OLD_CC_CLOBBER;
break;
}
@ -3797,11 +3729,11 @@ get_shift_alg (enum shift_type shift_type, enum shift_mode shift_mode,
goto end;
case SHIFT_LSHIFTRT:
info->special = "mov.b\t%t0,%s0\n\textu.w\t%T0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
goto end;
case SHIFT_ASHIFTRT:
info->special = "mov.b\t%t0,%s0\n\texts.w\t%T0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
goto end;
}
}
@ -3817,7 +3749,7 @@ get_shift_alg (enum shift_type shift_type, enum shift_mode shift_mode,
if (TARGET_H8300H)
{
info->special = "shll.b\t%t0\n\tsubx.b\t%s0,%s0\n\tshll.b\t%t0\n\trotxl.b\t%s0\n\texts.w\t%T0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
}
else /* TARGET_H8300S */
gcc_unreachable ();
@ -3863,11 +3795,11 @@ get_shift_alg (enum shift_type shift_type, enum shift_mode shift_mode,
{
case SHIFT_ASHIFT:
info->special = "shlr.w\t%e0\n\tmov.w\t%f0,%e0\n\txor.w\t%f0,%f0\n\trotxr.l\t%S0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
goto end;
case SHIFT_LSHIFTRT:
info->special = "shll.w\t%f0\n\tmov.w\t%e0,%f0\n\txor.w\t%e0,%e0\n\trotxl.l\t%S0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
goto end;
case SHIFT_ASHIFTRT:
gcc_unreachable ();
@ -3885,11 +3817,11 @@ get_shift_alg (enum shift_type shift_type, enum shift_mode shift_mode,
goto end;
case SHIFT_LSHIFTRT:
info->special = "mov.w\t%e0,%f0\n\textu.l\t%S0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
goto end;
case SHIFT_ASHIFTRT:
info->special = "mov.w\t%e0,%f0\n\texts.l\t%S0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
goto end;
}
}
@ -3905,11 +3837,11 @@ get_shift_alg (enum shift_type shift_type, enum shift_mode shift_mode,
goto end;
case SHIFT_LSHIFTRT:
info->special = "mov.w\t%e0,%f0\n\tmov.b\t%t0,%s0\n\textu.w\t%f0\n\textu.l\t%S0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
goto end;
case SHIFT_ASHIFTRT:
info->special = "mov.w\t%e0,%f0\n\tmov.b\t%t0,%s0\n\texts.w\t%f0\n\texts.l\t%S0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
goto end;
}
}
@ -3927,7 +3859,7 @@ get_shift_alg (enum shift_type shift_type, enum shift_mode shift_mode,
if (TARGET_H8300H)
{
info->special = "sub.w\t%f0,%f0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\textu.l\t%S0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
}
else
info->special = "sub.w\t%f0,%f0\n\trotl.l\t#2,%S0\n\trotl.l\t#2,%S0\n\textu.l\t%S0";
@ -3950,12 +3882,12 @@ get_shift_alg (enum shift_type shift_type, enum shift_mode shift_mode,
if (TARGET_H8300H)
{
info->special = "sub.w\t%f0,%f0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\textu.l\t%S0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
}
else
{
info->special = "sub.w\t%f0,%f0\n\trotl.l\t#2,%S0\n\trotl.l\t%S0\n\textu.l\t%S0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
}
goto end;
case SHIFT_ASHIFTRT:
@ -3988,15 +3920,15 @@ get_shift_alg (enum shift_type shift_type, enum shift_mode shift_mode,
{
case SHIFT_ASHIFT:
info->special = "shlr.l\t%S0\n\txor.l\t%S0,%S0\n\trotxr.l\t%S0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
goto end;
case SHIFT_LSHIFTRT:
info->special = "shll.l\t%S0\n\txor.l\t%S0,%S0\n\trotxl.l\t%S0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
goto end;
case SHIFT_ASHIFTRT:
info->special = "shll\t%e0\n\tsubx\t%w0,%w0\n\texts.w\t%T0\n\texts.l\t%S0";
info->cc_special = CC_SET_ZNV;
info->cc_special = OLD_CC_SET_ZNV;
goto end;
}
}
@ -4459,7 +4391,7 @@ compute_a_shift_cc (rtx insn ATTRIBUTE_UNUSED, rtx *operands)
case SHIFT_ROT_AND:
/* This case always ends with an and instruction. */
return CC_SET_ZNV;
return OLD_CC_SET_ZNV;
case SHIFT_LOOP:
/* A loop to shift by a "large" constant value.
@ -4469,7 +4401,7 @@ compute_a_shift_cc (rtx insn ATTRIBUTE_UNUSED, rtx *operands)
if (n % 2)
return info.cc_inline;
}
return CC_CLOBBER;
return OLD_CC_CLOBBER;
default:
gcc_unreachable ();

View file

@ -131,7 +131,7 @@
;; compare - compare instruction
;; clobber - value of cc is unknown
(define_attr "cc" "none,none_0hit,set_znv,set_zn,compare,clobber"
(define_attr "old_cc" "none,none_0hit,set_znv,set_zn,compare,clobber"
(const_string "clobber"))
;; Type of delay slot. NONE means the instruction has no delay slot.

View file

@ -46,8 +46,7 @@
else
return "b%k1 .Lh8BR%=\;jmp @%l0\\n.Lh8BR%=:";
}
[(set_attr "type" "branch")
(set_attr "cc" "none")])
[(set_attr "type" "branch")])
(define_insn "*branch_1_false"
@ -65,8 +64,7 @@
else
return "b%j1 .Lh8BR%=\;jmp @%l0\\n.Lh8BR%=:";
}
[(set_attr "type" "branch")
(set_attr "cc" "none")])
[(set_attr "type" "branch")])
;; The brabc/brabs patterns have been disabled because their length computation
;; is horribly broken. When we call out to a function via a SYMBOL_REF we get
@ -168,8 +166,7 @@
(set (attr "delay_slot")
(if_then_else (match_test "TARGET_H8300SX")
(const_string "jump")
(const_string "none")))
(set_attr "cc" "none")])
(const_string "none")))])
;; This is a define expand, because pointers may be either 16 or 32 bits.
@ -190,8 +187,7 @@
return "jmp @%S0";
abort ();
}
[(set_attr "cc" "none")
(set_attr "length" "2")])
[(set_attr "length" "2")])
;; This is a define expand, because pointers may be either 16 or 32 bits.
@ -210,8 +206,7 @@
return "jmp @%S0";
abort ();
}
[(set_attr "cc" "none")
(set_attr "length" "2")])
[(set_attr "length" "2")])
;; Call subroutine with no return value.

View file

@ -278,8 +278,7 @@
return "not.l %S0";
gcc_unreachable ();
}
[(set_attr "length_table" "unary")
(set_attr "cc" "set_znv")])
[(set_attr "length_table" "unary")])
;; The next four peephole2's will try to transform
;;

View file

@ -1,403 +0,0 @@
;; ----------------------------------------------------------------------
;; MULTIPLY INSTRUCTIONS
;; ----------------------------------------------------------------------
;; Note that the H8/300 can only handle umulqihi3.
(define_expand "mulqihi3"
[(set (match_operand:HI 0 "register_operand" "")
(mult:HI (sign_extend:HI (match_operand:QI 1 "register_operand" ""))
;; intentionally-mismatched modes
(match_operand:QI 2 "reg_or_nibble_operand" "")))]
""
{
if (GET_MODE (operands[2]) != VOIDmode)
operands[2] = gen_rtx_SIGN_EXTEND (HImode, operands[2]);
})
(define_insn_and_split "*mulqihi3_const"
[(set (match_operand:HI 0 "register_operand" "=r")
(mult:HI (sign_extend:HI (match_operand:QI 1 "register_operand" "%0"))
(match_operand:QI 2 "nibble_operand" "IP4>X")))]
"TARGET_H8300SX"
"#"
"reload_completed"
[(parallel [(set (match_dup 0)
(mult:HI (sign_extend:HI (match_dup 1)) (match_dup 2)))
(clobber (reg:CC CC_REG))])])
(define_insn "*mulqihi3_const_clobber_flags"
[(set (match_operand:HI 0 "register_operand" "=r")
(mult:HI (sign_extend:HI (match_operand:QI 1 "register_operand" "%0"))
(match_operand:QI 2 "nibble_operand" "IP4>X")))
(clobber (reg:CC CC_REG))]
"TARGET_H8300SX"
"mulxs.b %X2,%T0"
[(set_attr "length" "4")])
(define_insn "*mulqihi3_const_set_flags"
[(set (reg:CCZN CC_REG)
(compare:CCZN
(mult:HI (sign_extend:HI (match_operand:QI 1 "register_operand" "%0"))
(match_operand:QI 2 "nibble_operand" "IP4>X"))
(const_int 0)))
(set (match_operand:HI 0 "register_operand" "=r")
(mult:HI (sign_extend:HI (match_dup 1)) (match_dup 2)))]
"TARGET_H8300SX"
"mulxs.b %X2,%T0"
[(set_attr "length" "4")])
(define_insn_and_split "*mulqihi3"
[(set (match_operand:HI 0 "register_operand" "=r")
(mult:HI (sign_extend:HI (match_operand:QI 1 "register_operand" "%0"))
(sign_extend:HI (match_operand:QI 2 "register_operand" "r"))))]
""
"#"
"reload_completed"
[(parallel [(set (match_dup 0)
(mult:HI (sign_extend:HI (match_dup 1))
(sign_extend:HI (match_dup 2))))
(clobber (reg:CC CC_REG))])])
(define_insn "*mulqihi3_clobber_flags"
[(set (match_operand:HI 0 "register_operand" "=r")
(mult:HI (sign_extend:HI (match_operand:QI 1 "register_operand" "%0"))
(sign_extend:HI (match_operand:QI 2 "register_operand" "r"))))
(clobber (reg:CC CC_REG))]
""
"mulxs.b %X2,%T0"
[(set_attr "length" "4")])
(define_insn "*mulqihi3_set_flags"
[(set (reg:CCZN CC_REG)
(compare:CCZN
(mult:HI
(sign_extend:HI (match_operand:QI 1 "register_operand" "%0"))
(sign_extend:HI (match_operand:QI 2 "register_operand" "r")))
(const_int 0)))
(set (match_operand:HI 0 "register_operand" "=r")
(mult:HI (sign_extend:HI (match_dup 1)) (sign_extend (match_dup 2))))]
""
"mulxs.b %X2,%T0"
[(set_attr "length" "4")])
(define_expand "mulhisi3"
[(set (match_operand:SI 0 "register_operand" "")
(mult:SI (sign_extend:SI (match_operand:HI 1 "register_operand" ""))
;; intentionally-mismatched modes
(match_operand:HI 2 "reg_or_nibble_operand" "")))]
""
{
if (GET_MODE (operands[2]) != VOIDmode)
operands[2] = gen_rtx_SIGN_EXTEND (SImode, operands[2]);
})
(define_insn_and_split "*mulhisi3_const"
[(set (match_operand:SI 0 "register_operand" "=r")
(mult:SI (sign_extend:SI (match_operand:HI 1 "register_operand" "%0"))
(match_operand:SI 2 "nibble_operand" "IP4>X")))]
"TARGET_H8300SX"
"#"
"reload_completed"
[(parallel [(set (match_dup 0)
(mult:SI (sign_extend:SI (match_dup 1)) (match_dup 2)))
(clobber (reg:CC CC_REG))])])
(define_insn "*mulhisi3_const_clobber_flags"
[(set (match_operand:SI 0 "register_operand" "=r")
(mult:SI (sign_extend:SI (match_operand:HI 1 "register_operand" "%0"))
(match_operand:SI 2 "nibble_operand" "IP4>X")))
(clobber (reg:CC CC_REG))]
"TARGET_H8300SX"
"mulxs.w %T2,%S0"
[(set_attr "length" "4")
(set_attr "cc" "set_zn")])
(define_insn_and_split "*mulhisi3"
[(set (match_operand:SI 0 "register_operand" "=r")
(mult:SI (sign_extend:SI (match_operand:HI 1 "register_operand" "%0"))
(sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))]
""
"#"
"reload_completed"
[(parallel [(set (match_dup 0)
(mult:SI (sign_extend:SI (match_dup 1))
(sign_extend:SI (match_dup 2))))
(clobber (reg:CC CC_REG))])])
(define_insn "*mulhisi3_clobber_flags"
[(set (match_operand:SI 0 "register_operand" "=r")
(mult:SI (sign_extend:SI (match_operand:HI 1 "register_operand" "%0"))
(sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))
(clobber (reg:CC CC_REG))]
""
"mulxs.w %T2,%S0"
[(set_attr "length" "4")
(set_attr "cc" "set_zn")])
(define_expand "umulqihi3"
[(set (match_operand:HI 0 "register_operand" "")
(mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" ""))
;; intentionally-mismatched modes
(match_operand:QI 2 "reg_or_nibble_operand" "")))]
""
{
if (GET_MODE (operands[2]) != VOIDmode)
operands[2] = gen_rtx_ZERO_EXTEND (HImode, operands[2]);
})
(define_insn_and_split "*umulqihi3_const"
[(set (match_operand:HI 0 "register_operand" "=r")
(mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "%0"))
(match_operand:QI 2 "nibble_operand" "IP4>X")))]
"TARGET_H8300SX"
"#"
"reload_completed"
[(parallel [(set (match_dup 0)
(mult:HI (zero_extend:HI (match_dup 1)) (match_dup 2)))
(clobber (reg:CC CC_REG))])])
(define_insn "*umulqihi3_const_clobber_flags"
[(set (match_operand:HI 0 "register_operand" "=r")
(mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "%0"))
(match_operand:QI 2 "nibble_operand" "IP4>X")))
(clobber (reg:CC CC_REG))]
"TARGET_H8300SX"
"mulxu.b %X2,%T0"
[(set_attr "length" "4")
(set_attr "cc" "set_zn")])
(define_insn_and_split "*umulqihi3"
[(set (match_operand:HI 0 "register_operand" "=r")
(mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "%0"))
(zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))]
""
"#"
"reload_completed"
[(parallel [(set (match_dup 0)
(mult:HI (zero_extend:HI (match_dup 1))
(zero_extend:HI (match_dup 2))))
(clobber (reg:CC CC_REG))])])
(define_insn "*umulqihi3_clobber_flags"
[(set (match_operand:HI 0 "register_operand" "=r")
(mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "%0"))
(zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))
(clobber (reg:CC CC_REG))]
""
"mulxu.b %X2,%T0"
[(set_attr "length" "2")
(set_attr "cc" "none_0hit")])
(define_expand "umulhisi3"
[(set (match_operand:SI 0 "register_operand" "")
(mult:SI (zero_extend:SI (match_operand:HI 1 "register_operand" ""))
;; intentionally-mismatched modes
(match_operand:HI 2 "reg_or_nibble_operand" "")))]
""
{
if (GET_MODE (operands[2]) != VOIDmode)
operands[2] = gen_rtx_ZERO_EXTEND (SImode, operands[2]);
})
(define_insn_and_split "*umulhisi3_const"
[(set (match_operand:SI 0 "register_operand" "=r")
(mult:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "%0"))
(match_operand:SI 2 "nibble_operand" "IP4>X")))]
"TARGET_H8300SX"
"#"
"reload_completed"
[(parallel [(set (match_dup 0)
(mult:SI (zero_extend:SI (match_dup 1)) (match_dup 2)))
(clobber (reg:CC CC_REG))])])
(define_insn "*umulhisi3_const_clobber_flags"
[(set (match_operand:SI 0 "register_operand" "=r")
(mult:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "%0"))
(match_operand:SI 2 "nibble_operand" "IP4>X")))
(clobber (reg:CC CC_REG))]
"TARGET_H8300SX"
"mulxu.w %T2,%S0"
[(set_attr "length" "4")
(set_attr "cc" "set_zn")])
(define_insn_and_split "*umulhisi3"
[(set (match_operand:SI 0 "register_operand" "=r")
(mult:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "%0"))
(zero_extend:SI (match_operand:HI 2 "register_operand" "r"))))]
""
"#"
"reload_completed"
[(parallel [(set (match_dup 0)
(mult:SI (zero_extend:SI (match_dup 1))
(zero_extend:SI (match_dup 2))))
(clobber (reg:CC CC_REG))])])
(define_insn "*umulhisi3_clobber_flags"
[(set (match_operand:SI 0 "register_operand" "=r")
(mult:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "%0"))
(zero_extend:SI (match_operand:HI 2 "register_operand" "r"))))
(clobber (reg:CC CC_REG))]
""
"mulxu.w %T2,%S0"
[(set_attr "length" "2")
(set_attr "cc" "none_0hit")])
;; We could have used mulu.[wl] here, but mulu.[lw] is only available
;; on a H8SX with a multiplier, whereas muls.w seems to be available
;; on all H8SX variants.
(define_insn_and_split "mul<mode>3"
[(set (match_operand:HSI 0 "register_operand" "=r")
(mult:HSI (match_operand:HSI 1 "register_operand" "%0")
(match_operand:HSI 2 "reg_or_nibble_operand" "r IP4>X")))]
"TARGET_H8300SX"
"#"
"reload_completed"
[(parallel [(set (match_dup 0) (mult:HSI (match_dup 1) (match_dup 2)))
(clobber (reg:CC CC_REG))])])
(define_insn "mul<mode>3_clobber_flags"
[(set (match_operand:HSI 0 "register_operand" "=r")
(mult:HSI (match_operand:HSI 1 "register_operand" "%0")
(match_operand:HSI 2 "reg_or_nibble_operand" "r IP4>X")))
(clobber (reg:CC CC_REG))]
"TARGET_H8300SX"
{ return <MODE>mode == HImode ? "muls.w\\t%T2,%T0" : "muls.l\\t%S2,%S0"; }
[(set_attr "length" "4")
(set_attr "cc" "set_zn")])
(define_insn_and_split "smulsi3_highpart"
[(set (match_operand:SI 0 "register_operand" "=r")
(truncate:SI
(lshiftrt:DI
(mult:DI
(sign_extend:DI (match_operand:SI 1 "register_operand" "%0"))
(sign_extend:DI (match_operand:SI 2 "reg_or_nibble_operand" "r IP4>X")))
(const_int 32))))]
"TARGET_H8300SXMUL"
"#"
"reload_completed"
[(parallel [(set (match_dup 0)
(truncate:SI (lshiftrt:DI (mult:DI
(sign_extend:DI (match_dup 1))
(sign_extend:DI (match_dup 2)))
(const_int 32))))
(clobber (reg:CC CC_REG))])])
(define_insn "smulsi3_highpart_clobber_flags"
[(set (match_operand:SI 0 "register_operand" "=r")
(truncate:SI
(lshiftrt:DI
(mult:DI
(sign_extend:DI (match_operand:SI 1 "register_operand" "%0"))
(sign_extend:DI (match_operand:SI 2 "reg_or_nibble_operand" "r IP4>X")))
(const_int 32))))
(clobber (reg:CC CC_REG))]
"TARGET_H8300SXMUL"
"muls/u.l\\t%S2,%S0"
[(set_attr "length" "4")
(set_attr "cc" "set_zn")])
(define_insn_and_split "umulsi3_highpart"
[(set (match_operand:SI 0 "register_operand" "=r")
(truncate:SI
(ashiftrt:DI
(mult:DI
(zero_extend:DI (match_operand:SI 1 "register_operand" "%0"))
(zero_extend:DI (match_operand:SI 2 "reg_or_nibble_operand" "r IP4>X")))
(const_int 32))))]
"TARGET_H8300SX"
"#"
"reload_completed"
[(parallel [(set (match_dup 0)
(truncate:SI (ashiftrt:DI (mult:DI
(zero_extend:DI (match_dup 1))
(zero_extend:DI (match_dup 2)))
(const_int 32))))
(clobber (reg:CC CC_REG))])])
(define_insn "umulsi3_highpart_clobber_flags"
[(set (match_operand:SI 0 "register_operand" "=r")
(truncate:SI
(ashiftrt:DI
(mult:DI
(zero_extend:DI (match_operand:SI 1 "register_operand" "%0"))
(zero_extend:DI (match_operand:SI 2 "reg_or_nibble_operand" "r IP4>X")))
(const_int 32))))
(clobber (reg:CC CC_REG))]
"TARGET_H8300SX"
"mulu/u.l\\t%S2,%S0"
[(set_attr "length" "4")
(set_attr "cc" "none_0hit")])
;; This is a "bridge" instruction. Combine can't cram enough insns
;; together to crate a MAC instruction directly, but it can create
;; this instruction, which then allows combine to create the real
;; MAC insn.
;;
;; Unfortunately, if combine doesn't create a MAC instruction, this
;; insn must generate reasonably correct code. Egad.
(define_insn_and_split ""
[(set (match_operand:SI 0 "register_operand" "=a")
(mult:SI
(sign_extend:SI
(mem:HI (post_inc:SI (match_operand:SI 1 "register_operand" "r"))))
(sign_extend:SI
(mem:HI (post_inc:SI (match_operand:SI 2 "register_operand" "r"))))))]
"TARGET_MAC"
"#"
"reload_completed"
[(parallel [(set (match_dup 0)
(mult:SI (sign_extend:SI
(mem:HI (post_inc:SI (match_dup 1))))
(sign_extend:SI
(mem:HI (post_inc:SI (match_dup 2))))))
(clobber (reg:CC CC_REG))])])
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=a")
(mult:SI
(sign_extend:SI
(mem:HI (post_inc:SI (match_operand:SI 1 "register_operand" "r"))))
(sign_extend:SI
(mem:HI (post_inc:SI (match_operand:SI 2 "register_operand" "r"))))))
(clobber (reg:CC CC_REG))]
"TARGET_MAC"
"clrmac\;mac @%2+,@%1+"
[(set_attr "length" "6")
(set_attr "cc" "none_0hit")])
(define_insn_and_split ""
[(set (match_operand:SI 0 "register_operand" "=a")
(plus:SI (mult:SI
(sign_extend:SI (mem:HI
(post_inc:SI (match_operand:SI 1 "register_operand" "r"))))
(sign_extend:SI (mem:HI
(post_inc:SI (match_operand:SI 2 "register_operand" "r")))))
(match_operand:SI 3 "register_operand" "0")))]
"TARGET_MAC"
"#"
"reload_completed"
[(parallel [(set (match_dup 0)
(plus:SI
(mult:SI
(sign_extend:SI (mem:HI (post_inc:SI (match_dup 1))))
(sign_extend:SI (mem:HI (post_inc:SI (match_dup 2)))))))
(clobber (reg:CC CC_REG))])])
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=a")
(plus:SI (mult:SI
(sign_extend:SI (mem:HI
(post_inc:SI (match_operand:SI 1 "register_operand" "r"))))
(sign_extend:SI (mem:HI
(post_inc:SI (match_operand:SI 2 "register_operand" "r")))))
(match_operand:SI 3 "register_operand" "0")))
(clobber (reg:CC CC_REG))]
"TARGET_MAC"
"mac @%2+,@%1+"
[(set_attr "length" "4")
(set_attr "cc" "none_0hit")])

View file

@ -24,8 +24,7 @@
;; (const_int 0)))
;; (clobber (scratch:QI))])]
;; ""
;; [(set_attr "length" "2,8,10")
;; (set_attr "cc" "set_zn,set_zn,set_zn")])
;; [(set_attr "length" "2,8,10")])
;;
;;(define_insn ""
;; [(set (cc0)
@ -35,8 +34,7 @@
;; (const_int 0)))]
;; "INTVAL (operands[1]) <= 15"
;; "btst %Z1,%Y0"
;; [(set_attr "length" "2")
;; (set_attr "cc" "set_zn")])
;; [(set_attr "length" "2")])
;;
;;(define_insn_and_split "*tstsi_upper_bit"
;; [(set (cc0)
@ -71,8 +69,7 @@
;; (const_int 0)))]
;; ""
;; "btst %w1,%w0"
;; [(set_attr "length" "2")
;; (set_attr "cc" "set_zn")])
;; [(set_attr "length" "2")])
;;
;;(define_insn_and_split "*tstsi_variable_bit_qi"
;; [(set (cc0)
@ -99,8 +96,7 @@
;; (const_int 0)))
;; (clobber (scratch:QI))])]
;; ""
;; [(set_attr "length" "2,8,10")
;; (set_attr "cc" "set_zn,set_zn,set_zn")])
;; [(set_attr "length" "2,8,10")])
(define_insn "*tst<mode>"
[(set (reg:CCZN CC_REG)
@ -116,8 +112,7 @@
return "mov.l %S0,%S0";
gcc_unreachable ();
}
[(set_attr "length" "2")
(set_attr "cc" "set_znv")])
[(set_attr "length" "2")])
(define_insn "*tsthi_upper"
[(set (reg:CCZN CC_REG)
@ -135,8 +130,7 @@
(const_int 0)))]
"reload_completed"
"mov.w %e0,%e0"
[(set_attr "length" "2")
(set_attr "cc" "set_znv")])
[(set_attr "length" "2")])
(define_insn "*cmpqi"
[(set (reg:CC CC_REG)