diff options
author | Jakub Jelinek <jakub@redhat.com> | 2002-03-22 23:24:05 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2002-03-22 23:24:05 +0100 |
commit | 65e6c00573077208af5011dd1bebe287ae1f2ade (patch) | |
tree | 1c8fe28d5fd37c221e1c600c933b9a83f8058156 | |
parent | 44d57e3602969629e38cb1efedf94c874841ce5d (diff) | |
download | gcc-65e6c00573077208af5011dd1bebe287ae1f2ade.zip gcc-65e6c00573077208af5011dd1bebe287ae1f2ade.tar.gz gcc-65e6c00573077208af5011dd1bebe287ae1f2ade.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 19 | ||||
-rw-r--r-- | gcc/config/m68hc11/m68hc11.c | 47 | ||||
-rw-r--r-- | gcc/config/m68hc11/m68hc11.h | 22 | ||||
-rw-r--r-- | gcc/config/m68hc11/m68hc11.md | 252 |
4 files changed, 180 insertions, 160 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6b1f0b5..c94dbdd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/config/m68hc11/m68hc11.c b/gcc/config/m68hc11/m68hc11.c index 4927825..615c12b 100644 --- a/gcc/config/m68hc11/m68hc11.c +++ b/gcc/config/m68hc11/m68hc11.c @@ -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. */ diff --git a/gcc/config/m68hc11/m68hc11.h b/gcc/config/m68hc11/m68hc11.h index 865e2eb..b81b941 100644 --- a/gcc/config/m68hc11/m68hc11.h +++ b/gcc/config/m68hc11/m68hc11.h @@ -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. */ diff --git a/gcc/config/m68hc11/m68hc11.md b/gcc/config/m68hc11/m68hc11.md index 092b903..ea68c8a 100644 --- a/gcc/config/m68hc11/m68hc11.md +++ b/gcc/config/m68hc11/m68hc11.md @@ -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))] |