re PR rtl-optimization/5854 (initialize_uninitialized_subregs() breaks HC11/HC12 port)
PR optimization/5854 * config/m68hc11/m68hc11.h (CONST_OK_FOR_LETTER_VALUE_P): Use K for 0. Shut up warnings. (CONST_DOUBLE_OK_FOR_LETTER_P): Use G for 0.0. (EXTRA_CONSTRAINT): Use S for non-push memory operand. * config/m68hc11/m68hc11.c (m68hc11_split_move): Handle setting from const0 if scratch register was not allocated. (m68hc11_reload_operands, m68hc11_gen_lowpart, m68hc11_gen_highpart, m68hc11_z_replacement): Replace gen_rtx (CONST_INT, VOIDmode, ...) with GEN_INT (...). (m68hc11_reorg): Compute BLOCK_FOR_INSN before reload_cse_regs. * config/m68hc11/m68hc11.md: Replace gen_rtx (CONST_INT, VOIDmode, ...) with GEN_INT (...) everywhere. Remove constraints in define_split patterns. (movdi_internal, movdf_internal, movsi_internal, movsf_internal): Don't require scratch register for setting 0 into regs/non-pushable memory. From-SVN: r51194
This commit is contained in:
parent
44d57e3602
commit
65e6c00573
@ -1,3 +1,22 @@
|
||||
2002-03-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR optimization/5854
|
||||
* config/m68hc11/m68hc11.h (CONST_OK_FOR_LETTER_VALUE_P): Use K for 0.
|
||||
Shut up warnings.
|
||||
(CONST_DOUBLE_OK_FOR_LETTER_P): Use G for 0.0.
|
||||
(EXTRA_CONSTRAINT): Use S for non-push memory operand.
|
||||
* config/m68hc11/m68hc11.c (m68hc11_split_move): Handle setting from
|
||||
const0 if scratch register was not allocated.
|
||||
(m68hc11_reload_operands, m68hc11_gen_lowpart, m68hc11_gen_highpart,
|
||||
m68hc11_z_replacement): Replace gen_rtx (CONST_INT, VOIDmode, ...)
|
||||
with GEN_INT (...).
|
||||
(m68hc11_reorg): Compute BLOCK_FOR_INSN before reload_cse_regs.
|
||||
* config/m68hc11/m68hc11.md: Replace gen_rtx (CONST_INT, VOIDmode, ...)
|
||||
with GEN_INT (...) everywhere. Remove constraints in define_split
|
||||
patterns.
|
||||
(movdi_internal, movdf_internal, movsi_internal, movsf_internal): Don't
|
||||
require scratch register for setting 0 into regs/non-pushable memory.
|
||||
|
||||
2002-03-22 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
* config/mips/mips.h (MASK_RETURN_ADDR): Define.
|
||||
|
@ -778,7 +778,7 @@ m68hc11_reload_operands (operands)
|
||||
|
||||
/* Create the lowest part offset that still remains to be added.
|
||||
If it's not a valid offset, do a 16-bit add. */
|
||||
offset = gen_rtx (CONST_INT, VOIDmode, vl);
|
||||
offset = GEN_INT (vl);
|
||||
if (!VALID_CONSTANT_OFFSET_P (offset, mode))
|
||||
{
|
||||
emit_insn (gen_rtx (SET, VOIDmode, reg,
|
||||
@ -789,8 +789,7 @@ m68hc11_reload_operands (operands)
|
||||
{
|
||||
emit_insn (gen_rtx (SET, VOIDmode, reg,
|
||||
gen_rtx (PLUS, HImode, reg,
|
||||
gen_rtx (CONST_INT,
|
||||
VOIDmode, vh << 8))));
|
||||
GEN_INT (vh << 8))));
|
||||
}
|
||||
emit_move_insn (operands[0],
|
||||
gen_rtx (MEM, GET_MODE (operands[1]),
|
||||
@ -1874,20 +1873,18 @@ m68hc11_gen_lowpart (mode, x)
|
||||
return second;
|
||||
}
|
||||
if (mode == SImode)
|
||||
return gen_rtx (CONST_INT, VOIDmode, l[0]);
|
||||
return GEN_INT (l[0]);
|
||||
|
||||
return gen_rtx (CONST_INT, VOIDmode,
|
||||
trunc_int_for_mode (l[0], HImode));
|
||||
return gen_int_mode (l[0], HImode);
|
||||
}
|
||||
else
|
||||
{
|
||||
l[0] = CONST_DOUBLE_LOW (x);
|
||||
}
|
||||
if (mode == SImode)
|
||||
return gen_rtx (CONST_INT, VOIDmode, l[0]);
|
||||
return GEN_INT (l[0]);
|
||||
else if (mode == HImode && GET_MODE (x) == SFmode)
|
||||
return gen_rtx (CONST_INT, VOIDmode,
|
||||
trunc_int_for_mode (l[0], HImode));
|
||||
return gen_int_mode (l[0], HImode);
|
||||
else
|
||||
abort ();
|
||||
}
|
||||
@ -1953,10 +1950,9 @@ m68hc11_gen_highpart (mode, x)
|
||||
return first;
|
||||
}
|
||||
if (mode == SImode)
|
||||
return gen_rtx (CONST_INT, VOIDmode, l[1]);
|
||||
return GEN_INT (l[1]);
|
||||
|
||||
return gen_rtx (CONST_INT, VOIDmode,
|
||||
trunc_int_for_mode ((l[1] >> 16), HImode));
|
||||
return gen_int_mode ((l[1] >> 16), HImode);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1964,10 +1960,9 @@ m68hc11_gen_highpart (mode, x)
|
||||
}
|
||||
|
||||
if (mode == SImode)
|
||||
return gen_rtx (CONST_INT, VOIDmode, l[1]);
|
||||
return GEN_INT (l[1]);
|
||||
else if (mode == HImode && GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
|
||||
return gen_rtx (CONST_INT, VOIDmode,
|
||||
trunc_int_for_mode ((l[0] >> 16), HImode));
|
||||
return gen_int_mode ((l[0] >> 16), HImode);
|
||||
else
|
||||
abort ();
|
||||
}
|
||||
@ -1977,13 +1972,11 @@ m68hc11_gen_highpart (mode, x)
|
||||
|
||||
if (mode == QImode)
|
||||
{
|
||||
return gen_rtx (CONST_INT, VOIDmode,
|
||||
trunc_int_for_mode (val >> 8, QImode));
|
||||
return gen_int_mode (val >> 8, QImode);
|
||||
}
|
||||
else if (mode == HImode)
|
||||
{
|
||||
return gen_rtx (CONST_INT, VOIDmode,
|
||||
trunc_int_for_mode (val >> 16, HImode));
|
||||
return gen_int_mode (val >> 16, HImode);
|
||||
}
|
||||
}
|
||||
if (mode == QImode && D_REG_P (x))
|
||||
@ -2752,6 +2745,10 @@ m68hc11_split_move (to, from, scratch)
|
||||
m68hc11_split_move (high_to, high_from, scratch);
|
||||
}
|
||||
else if (H_REG_P (to) || H_REG_P (from)
|
||||
|| (low_from == const0_rtx
|
||||
&& high_from == const0_rtx
|
||||
&& ! push_operand (to, GET_MODE (to))
|
||||
&& ! H_REG_P (scratch))
|
||||
|| (TARGET_M6812
|
||||
&& (!m68hc11_register_indirect_p (from, GET_MODE (from))
|
||||
|| m68hc11_small_indexed_indirect_p (from,
|
||||
@ -4758,12 +4755,7 @@ m68hc11_z_replacement (insn)
|
||||
src = SET_SRC (body);
|
||||
dst = SET_DEST (body);
|
||||
if (SP_REG_P (src) && Z_REG_P (dst))
|
||||
{
|
||||
emit_insn_after (gen_addhi3 (dst,
|
||||
dst,
|
||||
gen_rtx (CONST_INT,
|
||||
VOIDmode, 2)), insn);
|
||||
}
|
||||
emit_insn_after (gen_addhi3 (dst, dst, const2_rtx), insn);
|
||||
}
|
||||
|
||||
/* Replace any (REG:HI Z) occurrence by either X or Y. */
|
||||
@ -4944,7 +4936,10 @@ m68hc11_reorg (first)
|
||||
/* After some splitting, there are some oportunities for CSE pass.
|
||||
This happens quite often when 32-bit or above patterns are split. */
|
||||
if (optimize > 0 && split_done)
|
||||
reload_cse_regs (first);
|
||||
{
|
||||
find_basic_blocks (first, max_reg_num (), 0);
|
||||
reload_cse_regs (first);
|
||||
}
|
||||
|
||||
/* Re-create the REG_DEAD notes. These notes are used in the machine
|
||||
description to use the best assembly directives. */
|
||||
|
@ -813,32 +813,38 @@ extern enum reg_class m68hc11_tmp_regs_class;
|
||||
C is the letter, and VALUE is a constant value.
|
||||
Return 1 if VALUE is in the range specified by C.
|
||||
|
||||
`K' is for 0.
|
||||
`L' is for range -65536 to 65536
|
||||
`M' is for values whose 16-bit low part is 0
|
||||
'N' is for +1 or -1.
|
||||
'O' is for 16 (for rotate using swap).
|
||||
'P' is for range -8 to 2 (used by addhi_sp)
|
||||
|
||||
'I', 'J', 'K' are not used. */
|
||||
'I', 'J' are not used. */
|
||||
|
||||
#define CONST_OK_FOR_LETTER_P(VALUE, C) \
|
||||
((C) == 'L' ? (VALUE) >= -65536 && (VALUE) <= 65535 : \
|
||||
((C) == 'K' ? (VALUE) == 0 : \
|
||||
(C) == 'L' ? ((VALUE) >= -65536 && (VALUE) <= 65535) : \
|
||||
(C) == 'M' ? ((VALUE) & 0x0ffffL) == 0 : \
|
||||
(C) == 'N' ? ((VALUE) == 1 || (VALUE) == -1): \
|
||||
(C) == 'N' ? ((VALUE) == 1 || (VALUE) == -1) : \
|
||||
(C) == 'O' ? (VALUE) == 16 : \
|
||||
(C) == 'P' ? (VALUE) <= 2 && (VALUE) >= -8 : 0)
|
||||
(C) == 'P' ? ((VALUE) <= 2 && (VALUE) >= -8) : 0)
|
||||
|
||||
/* Similar, but for floating constants, and defining letters G and H.
|
||||
No floating-point constants are valid on 68HC11. */
|
||||
#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 0
|
||||
|
||||
`G' is for 0.0. */
|
||||
#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
|
||||
((C) == 'G' ? (GET_MODE_CLASS (GET_MODE (VALUE)) == MODE_FLOAT \
|
||||
&& VALUE == CONST0_RTX (GET_MODE (VALUE))) : 0)
|
||||
|
||||
/* 'U' represents certain kind of memory indexed operand for 68HC12.
|
||||
and any memory operand for 68HC11. */
|
||||
#define EXTRA_CONSTRAINT(OP, C) \
|
||||
((C) == 'U' ? m68hc11_small_indexed_indirect_p (OP, GET_MODE (OP)) \
|
||||
: (C) == 'Q' ? m68hc11_symbolic_p (OP, GET_MODE (OP)) \
|
||||
: (C) == 'R' ? m68hc11_indirect_p (OP, GET_MODE (OP)) : 0)
|
||||
|
||||
: (C) == 'R' ? m68hc11_indirect_p (OP, GET_MODE (OP)) \
|
||||
: (C) == 'S' ? (memory_operand (OP, GET_MODE (OP)) \
|
||||
&& non_push_operand (OP, GET_MODE (OP))) : 0)
|
||||
|
||||
|
||||
/* Stack layout; function entry, exit and calling. */
|
||||
|
@ -552,9 +552,9 @@
|
||||
|
||||
(define_split /* cmpqi_z_used */
|
||||
[(set (cc0)
|
||||
(compare (match_operand:QI 0 "tst_operand" "dxy,m")
|
||||
(match_operand:QI 1 "cmp_operand" "m,dxy")))
|
||||
(use (match_operand:HI 2 "hard_reg_operand" "dxy,dxy"))
|
||||
(compare (match_operand:QI 0 "tst_operand" "")
|
||||
(match_operand:QI 1 "cmp_operand" "")))
|
||||
(use (match_operand:HI 2 "hard_reg_operand" ""))
|
||||
(use (reg:HI 11))]
|
||||
"z_replacement_completed == 2"
|
||||
[(set (mem:HI (pre_dec:HI (reg:HI SP_REGNUM))) (match_dup 2))
|
||||
@ -579,8 +579,8 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (strict_low_part (match_operand:SI 0 "non_push_operand" "+um,D,D"))
|
||||
(match_operand:SI 1 "general_operand" "D,Dim,u"))]
|
||||
[(set (strict_low_part (match_operand:SI 0 "non_push_operand" ""))
|
||||
(match_operand:SI 1 "general_operand" ""))]
|
||||
"z_replacement_completed == 2"
|
||||
[(set (match_dup 0) (match_dup 1))]
|
||||
"")
|
||||
@ -592,8 +592,8 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (strict_low_part (match_operand:HI 0 "non_push_operand" "+um,dA,dA"))
|
||||
(match_operand:HI 1 "general_operand" "dA,dAim,u"))]
|
||||
[(set (strict_low_part (match_operand:HI 0 "non_push_operand" ""))
|
||||
(match_operand:HI 1 "general_operand" ""))]
|
||||
"z_replacement_completed == 2"
|
||||
[(set (match_dup 0) (match_dup 1))]
|
||||
"")
|
||||
@ -605,8 +605,8 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (strict_low_part (match_operand:QI 0 "non_push_operand" "+mu,dA"))
|
||||
(match_operand:QI 1 "general_operand" "d,imudA"))]
|
||||
[(set (strict_low_part (match_operand:QI 0 "non_push_operand" ""))
|
||||
(match_operand:QI 1 "general_operand" ""))]
|
||||
"z_replacement_completed == 2"
|
||||
[(set (match_dup 0) (match_dup 1))]
|
||||
"")
|
||||
@ -651,16 +651,16 @@
|
||||
")
|
||||
|
||||
(define_insn "movdi_internal"
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "=U,!u,U,m,m,!u")
|
||||
(match_operand:DI 1 "general_operand" "iU,iU,!u,mi,!u,!mu"))
|
||||
(clobber (match_scratch:HI 2 "=&d,&d,&d,&d,&d,&d"))]
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "=uS,U,!u,U,m,m,!u")
|
||||
(match_operand:DI 1 "general_operand" "K,iU,iU,!u,mi,!u,!mu"))
|
||||
(clobber (match_scratch:HI 2 "=X,&d,&d,&d,&d,&d,&d"))]
|
||||
""
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "=uUm")
|
||||
(match_operand:DI 1 "general_operand" "iuUm"))
|
||||
(clobber (match_scratch:HI 2 "=&d"))]
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "")
|
||||
(match_operand:DI 1 "general_operand" ""))
|
||||
(clobber (match_scratch:HI 2 ""))]
|
||||
"reload_completed"
|
||||
[(const_int 0)]
|
||||
"m68hc11_split_move (operands[0], operands[1], operands[2]);
|
||||
@ -687,16 +687,16 @@
|
||||
")
|
||||
|
||||
(define_insn "movdf_internal"
|
||||
[(set (match_operand:DF 0 "nonimmediate_operand" "=U,!u,U,m,m,!u")
|
||||
(match_operand:DF 1 "general_operand" "iU,iU,!u,mi,!u,!mu"))
|
||||
(clobber (match_scratch:HI 2 "=&d,&d,&d,&d,&d,&d"))]
|
||||
[(set (match_operand:DF 0 "nonimmediate_operand" "=uS,U,!u,U,m,m,!u")
|
||||
(match_operand:DF 1 "general_operand" "G,iU,iU,!u,mi,!u,!mu"))
|
||||
(clobber (match_scratch:HI 2 "=X,&d,&d,&d,&d,&d,&d"))]
|
||||
""
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DF 0 "nonimmediate_operand" "=uUm")
|
||||
(match_operand:DF 1 "general_operand" "iuUm"))
|
||||
(clobber (match_scratch:HI 2 "=&d"))]
|
||||
[(set (match_operand:DF 0 "nonimmediate_operand" "")
|
||||
(match_operand:DF 1 "general_operand" ""))
|
||||
(clobber (match_scratch:HI 2 ""))]
|
||||
"reload_completed"
|
||||
[(const_int 0)]
|
||||
"m68hc11_split_move (operands[0], operands[1], operands[2]);
|
||||
@ -732,16 +732,16 @@
|
||||
")
|
||||
|
||||
(define_insn "movsi_internal"
|
||||
[(set (match_operand:SI 0 "nonimmediate_operand" "=mu,?D,m,?D,?u,?u,!u,D")
|
||||
(match_operand:SI 1 "general_operand" "imu,im,?D,!u,?D,mi,!u,!D"))
|
||||
(clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))]
|
||||
[(set (match_operand:SI 0 "nonimmediate_operand" "=uS,mu,?D,m,?D,?u,?u,!u,D")
|
||||
(match_operand:SI 1 "general_operand" "K,imu,im,?D,!u,?D,mi,!u,!D"))
|
||||
(clobber (match_scratch:HI 2 "=X,&d,X,X,X,X,&d,&d,X"))]
|
||||
""
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:SI 0 "nonimmediate_operand" "=m,D,m,D,!u,!u,!u,D")
|
||||
(match_operand:SI 1 "general_operand" "im,im,D,!u,D,mi,!u,!D"))
|
||||
(clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))]
|
||||
[(set (match_operand:SI 0 "nonimmediate_operand" "")
|
||||
(match_operand:SI 1 "general_operand" ""))
|
||||
(clobber (match_scratch:HI 2 ""))]
|
||||
"reload_completed"
|
||||
[(const_int 0)]
|
||||
"m68hc11_split_move (operands[0], operands[1], operands[2]);
|
||||
@ -768,16 +768,16 @@
|
||||
")
|
||||
|
||||
(define_insn "movsf_internal"
|
||||
[(set (match_operand:SF 0 "nonimmediate_operand" "=m,D,m,D,!u,!u,!u,D")
|
||||
(match_operand:SF 1 "general_operand" "im,im,D,!u,D,mi,!u,!D"))
|
||||
(clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))]
|
||||
[(set (match_operand:SF 0 "nonimmediate_operand" "=S!u,m,D,m,D,!u,!u,!u,D")
|
||||
(match_operand:SF 1 "general_operand" "G,im,im,D,!u,D,mi,!u,!D"))
|
||||
(clobber (match_scratch:HI 2 "=X,&d,X,X,X,X,&d,&d,X"))]
|
||||
""
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:SF 0 "nonimmediate_operand" "=m,D,m,D,!u,!u,!u,D")
|
||||
(match_operand:SF 1 "general_operand" "im,im,D,!u,D,mi,!u,!D"))
|
||||
(clobber (match_scratch:HI 2 "=&d,X,X,X,X,&d,&d,X"))]
|
||||
[(set (match_operand:SF 0 "nonimmediate_operand" "")
|
||||
(match_operand:SF 1 "general_operand" ""))
|
||||
(clobber (match_scratch:HI 2 ""))]
|
||||
"reload_completed"
|
||||
[(const_int 0)]
|
||||
"m68hc11_split_move (operands[0], operands[1], operands[2]);
|
||||
@ -933,7 +933,7 @@
|
||||
;; appear in the source operand.
|
||||
;;
|
||||
(define_split
|
||||
[(set (match_operand:QI 0 "hard_addr_reg_operand" "=A")
|
||||
[(set (match_operand:QI 0 "hard_addr_reg_operand" "")
|
||||
(match_operand:QI 1 "general_operand" ""))]
|
||||
"z_replacement_completed == 2 && GET_MODE (operands[0]) == QImode
|
||||
&& !reg_mentioned_p (operands[0], operands[1])
|
||||
@ -950,7 +950,7 @@
|
||||
;;
|
||||
(define_split
|
||||
[(set (match_operand:QI 0 "nonimmediate_operand" "")
|
||||
(match_operand:QI 1 "hard_addr_reg_operand" "=A"))]
|
||||
(match_operand:QI 1 "hard_addr_reg_operand" ""))]
|
||||
"z_replacement_completed == 2 && GET_MODE (operands[1]) == QImode
|
||||
&& !reg_mentioned_p (operands[1], operands[0])
|
||||
&& !D_REG_P (operands[0])"
|
||||
@ -1097,8 +1097,8 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DI 0 "push_operand" "=<")
|
||||
(zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "dmu*B")))
|
||||
[(set (match_operand:DI 0 "push_operand" "")
|
||||
(zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "")))
|
||||
(clobber (match_scratch:HI 2 "=&dB"))]
|
||||
"z_replacement_completed == 2"
|
||||
[(const_int 0)]
|
||||
@ -1155,8 +1155,8 @@
|
||||
}")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "=mu")
|
||||
(zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "dmu*B")))
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "")
|
||||
(zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "")))
|
||||
(clobber (match_scratch:HI 2 "=&dB"))]
|
||||
"z_replacement_completed == 2"
|
||||
[(const_int 0)]
|
||||
@ -1194,10 +1194,10 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DI 0 "non_push_operand" "=m,m,m,!u,!u")
|
||||
[(set (match_operand:DI 0 "non_push_operand" "")
|
||||
(zero_extend:DI
|
||||
(match_operand:HI 1 "nonimmediate_operand" "m,dA,!u,dmA,!u")))
|
||||
(clobber (match_scratch:HI 2 "=&d,&dB,&dB,&dB,&dB"))]
|
||||
(match_operand:HI 1 "nonimmediate_operand" "")))
|
||||
(clobber (match_scratch:HI 2 ""))]
|
||||
"z_replacement_completed == 2"
|
||||
[(const_int 0)]
|
||||
"
|
||||
@ -1233,10 +1233,10 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "=m,m,!u,!u")
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "")
|
||||
(zero_extend:DI
|
||||
(match_operand:SI 1 "nonimmediate_operand" "m,Du,m,Du")))
|
||||
(clobber (match_scratch:HI 2 "=d,d,&dB,d"))]
|
||||
(match_operand:SI 1 "nonimmediate_operand" "")))
|
||||
(clobber (match_scratch:HI 2 ""))]
|
||||
"z_replacement_completed == 2"
|
||||
[(const_int 0)]
|
||||
"
|
||||
@ -1267,10 +1267,10 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:SI 0 "non_push_operand" "=D,mu,m,m,!u,!u")
|
||||
[(set (match_operand:SI 0 "non_push_operand" "")
|
||||
(zero_extend:SI
|
||||
(match_operand:HI 1 "nonimmediate_operand" "dAmu,dA,m,!u,m,!u")))
|
||||
(clobber (match_scratch:HI 2 "=X,X,&d,&dB,&dB,&dB"))]
|
||||
(match_operand:HI 1 "nonimmediate_operand" "")))
|
||||
(clobber (match_scratch:HI 2 ""))]
|
||||
"reload_completed"
|
||||
[(const_int 0)]
|
||||
"
|
||||
@ -1295,8 +1295,8 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:SI 0 "non_push_operand" "=mu")
|
||||
(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "dxy")))]
|
||||
[(set (match_operand:SI 0 "non_push_operand" "")
|
||||
(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]
|
||||
"reload_completed && !X_REG_P (operands[0])"
|
||||
[(set (match_dup 2) (zero_extend:HI (match_dup 1)))
|
||||
(set (match_dup 3) (const_int 0))]
|
||||
@ -1305,8 +1305,8 @@
|
||||
operands[3] = m68hc11_gen_highpart (HImode, operands[0]);")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:SI 0 "hard_reg_operand" "=D")
|
||||
(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "dxymu")))]
|
||||
[(set (match_operand:SI 0 "hard_reg_operand" "")
|
||||
(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "")))]
|
||||
"z_replacement_completed == 2 && X_REG_P (operands[0])"
|
||||
[(set (match_dup 2) (match_dup 3))
|
||||
(set (match_dup 4) (const_int 0))
|
||||
@ -1584,8 +1584,8 @@
|
||||
;; a temporary scratch memory location.
|
||||
;;
|
||||
(define_split
|
||||
[(set (match_operand:SI 0 "register_operand" "=D")
|
||||
(sign_extend:SI (match_operand:HI 1 "register_operand" "A")))]
|
||||
[(set (match_operand:SI 0 "register_operand" "")
|
||||
(sign_extend:SI (match_operand:HI 1 "register_operand" "")))]
|
||||
"reload_completed && (Y_REG_P (operands[1]) || Z_REG_P (operands[1]))"
|
||||
[(set (reg:HI D_REGNUM) (match_dup 1))
|
||||
(set (match_dup 0) (sign_extend:SI (reg:HI D_REGNUM)))]
|
||||
@ -1816,10 +1816,10 @@
|
||||
|
||||
|
||||
(define_split /* "*addsi3_zero_extendqi" */
|
||||
[(set (match_operand:SI 0 "register_operand" "=D,D")
|
||||
[(set (match_operand:SI 0 "register_operand" "")
|
||||
(plus:SI (zero_extend:SI
|
||||
(match_operand:QI 1 "general_operand" "dAmi,!dAmiu"))
|
||||
(match_operand:SI 2 "memory_operand" "m,m")))
|
||||
(match_operand:QI 1 "general_operand" ""))
|
||||
(match_operand:SI 2 "memory_operand" "")))
|
||||
(clobber (match_scratch:HI 3 "=X,X"))]
|
||||
"reload_completed"
|
||||
[(set (reg:HI D_REGNUM) (zero_extend:HI (match_dup 1)))
|
||||
@ -1854,7 +1854,7 @@
|
||||
{
|
||||
ops[0] = operands[1];
|
||||
}
|
||||
ops[1] = gen_rtx (CONST_INT, VOIDmode, 0);
|
||||
ops[1] = const0_rtx;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1955,7 +1955,7 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
ops[1] = gen_rtx (CONST_INT, VOIDmode, - val);
|
||||
ops[1] = GEN_INT (- val);
|
||||
add_insn = \"subd\\t%1\";
|
||||
inc_insn = \"dex\";
|
||||
incb_mem = \"dec\\t%b1\";
|
||||
@ -2002,10 +2002,10 @@
|
||||
}")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:SI 0 "register_operand" "=D,u")
|
||||
(plus:SI (match_operand:SI 1 "register_operand" "%0,0")
|
||||
[(set (match_operand:SI 0 "register_operand" "")
|
||||
(plus:SI (match_operand:SI 1 "register_operand" "")
|
||||
(match_operand:SI 2 "const_int_operand" "")))
|
||||
(clobber (match_scratch:HI 3 "=X,d"))]
|
||||
(clobber (match_scratch:HI 3 ""))]
|
||||
"reload_completed && z_replacement_completed == 2
|
||||
&& ((INTVAL (operands[2]) & 0x0FFFF) == 0)"
|
||||
[(set (match_dup 5) (match_dup 6))
|
||||
@ -2024,9 +2024,9 @@
|
||||
")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:SI 0 "register_operand" "=D")
|
||||
(plus:SI (match_operand:SI 1 "register_operand" "%0")
|
||||
(match_operand:SI 2 "general_operand" "mui")))
|
||||
[(set (match_operand:SI 0 "register_operand" "")
|
||||
(plus:SI (match_operand:SI 1 "register_operand" "")
|
||||
(match_operand:SI 2 "general_operand" "")))
|
||||
(clobber (match_scratch:HI 3 "=X"))]
|
||||
"reload_completed && z_replacement_completed == 2
|
||||
&& (GET_CODE (operands[2]) != CONST_INT ||
|
||||
@ -2392,7 +2392,7 @@
|
||||
;; ??? It's not clear whether this is really necessary.
|
||||
;;
|
||||
(define_split
|
||||
[(set (match_operand:QI 0 "hard_reg_operand" "=dA")
|
||||
[(set (match_operand:QI 0 "hard_reg_operand" "")
|
||||
(plus:QI (match_dup 0)
|
||||
(match_dup 0)))]
|
||||
"0 && reload_completed"
|
||||
@ -2550,9 +2550,9 @@
|
||||
;; reg:QI 7 -> ccr reg:QI 5 -> A
|
||||
;;
|
||||
(define_split /* "*subsi3" */
|
||||
[(set (match_operand:SI 0 "register_operand" "=D")
|
||||
(minus:SI (match_operand:SI 1 "register_operand" "0")
|
||||
(match_operand:SI 2 "general_operand" "mui")))
|
||||
[(set (match_operand:SI 0 "register_operand" "")
|
||||
(minus:SI (match_operand:SI 1 "register_operand" "")
|
||||
(match_operand:SI 2 "general_operand" "")))
|
||||
(clobber (match_scratch:HI 3 "=X"))]
|
||||
"reload_completed && z_replacement_completed == 2
|
||||
&& X_REG_P (operands[1])"
|
||||
@ -2569,9 +2569,9 @@
|
||||
operands[4] = m68hc11_gen_lowpart (QImode, operands[4]);")
|
||||
|
||||
(define_split /* "*subsi3" */
|
||||
[(set (match_operand:SI 0 "register_operand" "=D")
|
||||
(minus:SI (match_operand:SI 1 "general_operand" "mui")
|
||||
(match_operand:SI 2 "register_operand" "D")))
|
||||
[(set (match_operand:SI 0 "register_operand" "")
|
||||
(minus:SI (match_operand:SI 1 "general_operand" "")
|
||||
(match_operand:SI 2 "register_operand" "")))
|
||||
(clobber (match_scratch:HI 3 "=X"))]
|
||||
"reload_completed && z_replacement_completed == 2
|
||||
&& X_REG_P (operands[2])"
|
||||
@ -2589,9 +2589,9 @@
|
||||
operands[4] = m68hc11_gen_lowpart (QImode, operands[4]);")
|
||||
|
||||
(define_split /* "*subsi3" */
|
||||
[(set (match_operand:SI 0 "nonimmediate_operand" "=u")
|
||||
(minus:SI (match_operand:SI 1 "general_operand" "0")
|
||||
(match_operand:SI 2 "general_operand" "mui")))
|
||||
[(set (match_operand:SI 0 "nonimmediate_operand" "")
|
||||
(minus:SI (match_operand:SI 1 "general_operand" "")
|
||||
(match_operand:SI 2 "general_operand" "")))
|
||||
(clobber (match_scratch:HI 3 "=d"))]
|
||||
"reload_completed && z_replacement_completed == 2
|
||||
&& !X_REG_P (operands[0])"
|
||||
@ -3045,7 +3045,7 @@
|
||||
CC_STATUS_INIT;
|
||||
|
||||
/* The bclr instruction uses an inverted mask. */
|
||||
operands[1] = gen_rtx (CONST_INT, VOIDmode, (~val) & 0x0FFFF);
|
||||
operands[1] = GEN_INT ((~val) & 0x0FFFF);
|
||||
|
||||
/* When destination is a global variable, generate a .relax instruction
|
||||
and load the address in the clobber register. That load can be
|
||||
@ -3130,7 +3130,7 @@
|
||||
rtx ops[2];
|
||||
|
||||
ops[0] = operands[0];
|
||||
ops[1] = gen_rtx (CONST_INT, VOIDmode, (~val) & 0x0FF);
|
||||
ops[1] = GEN_INT ((~val) & 0x0FF);
|
||||
output_asm_insn (\"bclr\\t%b0, %1\", ops);
|
||||
}
|
||||
else if ((val & 0x0FF) != 0)
|
||||
@ -3147,7 +3147,7 @@
|
||||
rtx ops[2];
|
||||
|
||||
ops[0] = operands[0];
|
||||
ops[1] = gen_rtx (CONST_INT, VOIDmode, ((~val) & 0x0FF00) >> 8);
|
||||
ops[1] = GEN_INT (((~val) & 0x0FF00) >> 8);
|
||||
output_asm_insn (\"bclr\\t%h0, %1\", ops);
|
||||
}
|
||||
else if ((val & 0x0FF00) != 0)
|
||||
@ -3201,7 +3201,7 @@
|
||||
}
|
||||
|
||||
/* The bclr instruction uses an inverted mask. */
|
||||
operands[1] = gen_rtx (CONST_INT, VOIDmode, (~val) & 0x0FF);
|
||||
operands[1] = GEN_INT ((~val) & 0x0FF);
|
||||
|
||||
/* When destination is a global variable, generate a .relax instruction
|
||||
and load the address in the clobber register. That load can be
|
||||
@ -3245,7 +3245,7 @@
|
||||
rtx ops[2];
|
||||
|
||||
ops[0] = operands[0];
|
||||
ops[1] = gen_rtx (CONST_INT, VOIDmode, (~val) & 0x0FF);
|
||||
ops[1] = GEN_INT ((~val) & 0x0FF);
|
||||
output_asm_insn (\"bclr\\t%b0, %b1\", ops);
|
||||
return \"\";
|
||||
}
|
||||
@ -3893,10 +3893,10 @@
|
||||
;;
|
||||
;;
|
||||
(define_split
|
||||
[(set (match_operand:HI 0 "hard_addr_reg_operand" "=A")
|
||||
[(set (match_operand:HI 0 "hard_addr_reg_operand" "")
|
||||
(match_operator:HI 3 "m68hc11_arith_operator"
|
||||
[(match_operand:HI 1 "hard_addr_reg_operand" "0")
|
||||
(match_operand:HI 2 "general_operand" "dAuim")]))]
|
||||
[(match_operand:HI 1 "hard_addr_reg_operand" "")
|
||||
(match_operand:HI 2 "general_operand" "")]))]
|
||||
"z_replacement_completed == 2
|
||||
/* If we are adding a small constant to X or Y, it's
|
||||
better to use one or several inx/iny instructions. */
|
||||
@ -3943,10 +3943,10 @@
|
||||
")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:HI 0 "hard_addr_reg_operand" "=A")
|
||||
[(set (match_operand:HI 0 "hard_addr_reg_operand" "")
|
||||
(match_operator:HI 3 "m68hc11_arith_operator"
|
||||
[(match_operand:HI 1 "general_operand" "mu")
|
||||
(match_operand:HI 2 "general_operand" "dAuim")]))]
|
||||
[(match_operand:HI 1 "general_operand" "")
|
||||
(match_operand:HI 2 "general_operand" "")]))]
|
||||
"z_replacement_completed == 2
|
||||
/* If we are adding a small constant to X or Y, it's
|
||||
better to use one or several inx/iny instructions. */
|
||||
@ -3979,10 +3979,10 @@
|
||||
;; The shift operators are special and must not appear here.
|
||||
;;
|
||||
(define_split
|
||||
[(set (match_operand:HI 0 "d_register_operand" "=d")
|
||||
[(set (match_operand:HI 0 "d_register_operand" "")
|
||||
(match_operator:HI 3 "m68hc11_non_shift_operator"
|
||||
[(match_operand:HI 1 "d_register_operand" "%0")
|
||||
(match_operand:HI 2 "hard_reg_operand" "*d*A")]))]
|
||||
[(match_operand:HI 1 "d_register_operand" "")
|
||||
(match_operand:HI 2 "hard_reg_operand" "")]))]
|
||||
"TARGET_M6811
|
||||
&& z_replacement_completed == 2 && !SP_REG_P (operands[2])"
|
||||
[(set (match_dup 4) (match_dup 2))
|
||||
@ -3994,10 +3994,10 @@
|
||||
;; logical/arithmetic operation with a pop.
|
||||
;;
|
||||
(define_split
|
||||
[(set (match_operand:HI 0 "d_register_operand" "=d")
|
||||
[(set (match_operand:HI 0 "d_register_operand" "")
|
||||
(match_operator:HI 3 "m68hc11_non_shift_operator"
|
||||
[(match_operand:HI 1 "d_register_operand" "%0")
|
||||
(match_operand:HI 2 "hard_reg_operand" "*d*A")]))]
|
||||
[(match_operand:HI 1 "d_register_operand" "")
|
||||
(match_operand:HI 2 "hard_reg_operand" "")]))]
|
||||
"TARGET_M6812
|
||||
&& z_replacement_completed == 2 && !SP_REG_P (operands[2])"
|
||||
[(set (match_dup 4) (match_dup 2))
|
||||
@ -4071,10 +4071,10 @@
|
||||
;; AND OR XOR PLUS MINUS ASHIFT ASHIFTRT LSHIFTRT ROTATE ROTATERT
|
||||
;;
|
||||
(define_split
|
||||
[(set (match_operand:QI 0 "hard_addr_reg_operand" "=xy")
|
||||
[(set (match_operand:QI 0 "hard_addr_reg_operand" "")
|
||||
(match_operator:QI 3 "m68hc11_arith_operator"
|
||||
[(match_operand:QI 1 "hard_addr_reg_operand" "%0")
|
||||
(match_operand:QI 2 "general_operand" "dxyuim")]))]
|
||||
[(match_operand:QI 1 "hard_addr_reg_operand" "")
|
||||
(match_operand:QI 2 "general_operand" "")]))]
|
||||
"z_replacement_completed == 2
|
||||
/* Reject a (plus:QI (reg:QI X) (const_int 1|-1)) because the
|
||||
incqi pattern generates a better code. */
|
||||
@ -4342,10 +4342,10 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "=<,um")
|
||||
(ashift:DI (match_operand:DI 1 "general_operand" "umi,umi")
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "")
|
||||
(ashift:DI (match_operand:DI 1 "general_operand" "")
|
||||
(const_int 32)))
|
||||
(clobber (match_scratch:HI 2 "=&A,d"))]
|
||||
(clobber (match_scratch:HI 2 ""))]
|
||||
"reload_completed"
|
||||
[(const_int 0)]
|
||||
"/* Move the lowpart in the highpart first in case the shift
|
||||
@ -4374,10 +4374,10 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DI 0 "non_push_operand" "=um")
|
||||
(ashift:DI (match_operand:DI 1 "general_operand" "umi")
|
||||
[(set (match_operand:DI 0 "non_push_operand" "")
|
||||
(ashift:DI (match_operand:DI 1 "general_operand" "")
|
||||
(const_int 1)))
|
||||
(clobber (match_scratch:HI 2 "=d"))]
|
||||
(clobber (match_scratch:HI 2 ""))]
|
||||
"z_replacement_completed == 2"
|
||||
[(set (match_dup 2) (match_dup 3))
|
||||
(set (match_dup 2) (ashift:HI (match_dup 2) (const_int 1)))
|
||||
@ -4456,11 +4456,11 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:SI 0 "register_operand" "=D")
|
||||
[(set (match_operand:SI 0 "register_operand" "")
|
||||
(plus:SI
|
||||
(mult:SI (match_operand:SI 2 "general_operand" "uim")
|
||||
(mult:SI (match_operand:SI 2 "general_operand" "")
|
||||
(const_int 65536))
|
||||
(match_operand:SI 1 "general_operand" "0")))
|
||||
(match_operand:SI 1 "general_operand" "")))
|
||||
(clobber (match_scratch:HI 3 "=X"))]
|
||||
"0 && reload_completed && z_replacement_completed == 2"
|
||||
[(set (reg:HI X_REGNUM) (plus:HI (reg:HI X_REGNUM) (match_dup 4)))]
|
||||
@ -4478,10 +4478,10 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:SI 0 "register_operand" "=D")
|
||||
(plus:SI (and:SI (match_operand:SI 1 "general_operand" "%uim")
|
||||
[(set (match_operand:SI 0 "register_operand" "")
|
||||
(plus:SI (and:SI (match_operand:SI 1 "general_operand" "")
|
||||
(const_int 65535))
|
||||
(match_operand:SI 2 "general_operand" "0")))]
|
||||
(match_operand:SI 2 "general_operand" "")))]
|
||||
"z_replacement_completed == 2"
|
||||
[(set (reg:HI D_REGNUM) (plus:HI (reg:HI D_REGNUM) (match_dup 3)))
|
||||
(set (reg:HI X_REGNUM) (plus:HI (plus:HI (reg:HI X_REGNUM) (const_int 0)) (reg:HI CC_REGNUM)))]
|
||||
@ -4509,10 +4509,10 @@
|
||||
"")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:SI 0 "nonimmediate_operand" "=D,um")
|
||||
(ashift:SI (match_operand:SI 1 "general_operand" "Duim,D")
|
||||
[(set (match_operand:SI 0 "nonimmediate_operand" "")
|
||||
(ashift:SI (match_operand:SI 1 "general_operand" "")
|
||||
(const_int 16)))
|
||||
(clobber (match_scratch:HI 3 "=X,X"))]
|
||||
(clobber (match_scratch:HI 3 ""))]
|
||||
""
|
||||
[(set (match_dup 2) (match_dup 3))
|
||||
(set (match_dup 4) (const_int 0))]
|
||||
@ -4538,9 +4538,9 @@
|
||||
"#")
|
||||
|
||||
(define_split /* "*ashlsi3_const16_zexthi"*/
|
||||
[(set (match_operand:SI 0 "nonimmediate_operand" "=D")
|
||||
[(set (match_operand:SI 0 "nonimmediate_operand" "")
|
||||
(ashift:SI (zero_extend:HI
|
||||
(match_operand:HI 1 "general_operand" "duim*a"))
|
||||
(match_operand:HI 1 "general_operand" ""))
|
||||
(const_int 16)))
|
||||
(clobber (match_scratch:HI 2 "=X"))]
|
||||
"reload_completed"
|
||||
@ -5152,8 +5152,8 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "=<,um")
|
||||
(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi,umi")
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "")
|
||||
(lshiftrt:DI (match_operand:DI 1 "general_operand" "")
|
||||
(const_int 32)))
|
||||
(clobber (match_scratch:HI 2 "=&A,d"))]
|
||||
"reload_completed"
|
||||
@ -5174,8 +5174,8 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "=um")
|
||||
(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi")
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "")
|
||||
(lshiftrt:DI (match_operand:DI 1 "general_operand" "")
|
||||
(match_operand:DI 2 "const_int_operand" "")))
|
||||
(clobber (match_scratch:HI 3 "=d"))]
|
||||
"z_replacement_completed && INTVAL (operands[2]) >= 56"
|
||||
@ -5187,7 +5187,7 @@
|
||||
(set (match_dup 5) (reg:HI D_REGNUM))
|
||||
(set (match_dup 6) (reg:HI D_REGNUM))
|
||||
(set (match_dup 7) (reg:HI D_REGNUM))]
|
||||
"operands[8] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 56);
|
||||
"operands[8] = GEN_INT (INTVAL (operands[2]) - 56);
|
||||
operands[4] = m68hc11_gen_lowpart (SImode, operands[0]);
|
||||
operands[5] = m68hc11_gen_highpart (HImode, operands[4]);
|
||||
operands[4] = m68hc11_gen_lowpart (HImode, operands[4]);
|
||||
@ -5201,8 +5201,8 @@
|
||||
operands[6] = m68hc11_gen_lowpart (HImode, operands[6]);")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "=um")
|
||||
(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi")
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "")
|
||||
(lshiftrt:DI (match_operand:DI 1 "general_operand" "")
|
||||
(match_operand:DI 2 "const_int_operand" "")))
|
||||
(clobber (match_scratch:HI 3 "=d"))]
|
||||
"z_replacement_completed && INTVAL (operands[2]) >= 48
|
||||
@ -5214,7 +5214,7 @@
|
||||
(set (match_dup 5) (reg:HI D_REGNUM))
|
||||
(set (match_dup 6) (reg:HI D_REGNUM))
|
||||
(set (match_dup 7) (reg:HI D_REGNUM))]
|
||||
"operands[8] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 48);
|
||||
"operands[8] = GEN_INT (INTVAL (operands[2]) - 48);
|
||||
operands[4] = m68hc11_gen_lowpart (SImode, operands[0]);
|
||||
operands[5] = m68hc11_gen_highpart (HImode, operands[4]);
|
||||
operands[4] = m68hc11_gen_lowpart (HImode, operands[4]);
|
||||
@ -5234,10 +5234,10 @@
|
||||
"#")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DI 0 "non_push_operand" "=um")
|
||||
(lshiftrt:DI (match_operand:DI 1 "general_operand" "umi")
|
||||
[(set (match_operand:DI 0 "non_push_operand" "")
|
||||
(lshiftrt:DI (match_operand:DI 1 "general_operand" "")
|
||||
(const_int 1)))
|
||||
(clobber (match_scratch:HI 2 "=d"))]
|
||||
(clobber (match_scratch:HI 2 ""))]
|
||||
"z_replacement_completed == 2"
|
||||
[(set (match_dup 2) (match_dup 3))
|
||||
(set (match_dup 2) (lshiftrt:HI (match_dup 2) (const_int 1)))
|
||||
@ -5283,10 +5283,10 @@
|
||||
"")
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:SI 0 "non_push_operand" "=D,um")
|
||||
(lshiftrt:SI (match_operand:SI 1 "general_operand" "uim,D")
|
||||
[(set (match_operand:SI 0 "non_push_operand" "")
|
||||
(lshiftrt:SI (match_operand:SI 1 "general_operand" "")
|
||||
(const_int 16)))
|
||||
(clobber (match_scratch:HI 3 "=X,X"))]
|
||||
(clobber (match_scratch:HI 3 ""))]
|
||||
"reload_completed && !(X_REG_P (operands[0]) && X_REG_P (operands[1]))"
|
||||
[(set (match_dup 2) (match_dup 3))
|
||||
(set (match_dup 4) (const_int 0))]
|
||||
|
Loading…
Reference in New Issue
Block a user