diff options
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/m68hc11/m68hc11.c | 18 |
2 files changed, 18 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4d467a2341e..0aaa0527db1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2010-11-19 Joern Rennecke <amylaar@spamcop.net> + + PR target/46436 + * config/m68hc11/m68hc11.c (m68hc11_gen_highpart): Split shift count + to accomodate 32 bit HOST_WIDE_INT. + (m68hc11_emit_logical): Remove unused variable insn. + (m68hc11_check_z_replacement) <CLOBBER>: Set this_insn_uses_ix and + this_insn_uses_iy before use. + 2010-11-19 Joseph Myers <joseph@codesourcery.com> PR c/46547 diff --git a/gcc/config/m68hc11/m68hc11.c b/gcc/config/m68hc11/m68hc11.c index 6e11a080bb2..08cb0390b21 100644 --- a/gcc/config/m68hc11/m68hc11.c +++ b/gcc/config/m68hc11/m68hc11.c @@ -1999,7 +1999,7 @@ m68hc11_gen_highpart (enum machine_mode mode, rtx x) } else if (mode == SImode) { - return gen_int_mode (val >> 32, SImode); + return gen_int_mode ((val >> 16) >> 16, SImode); } } if (mode == QImode && D_REG_P (x)) @@ -2967,8 +2967,6 @@ m68hc11_emit_logical (enum machine_mode mode, enum rtx_code code, rtx *operands) } else if (operands[1] != 0 && operands[2] != 0) { - rtx insn; - if (!H_REG_P (operands[0]) && operands[3]) { emit_move_insn (operands[3], operands[1]); @@ -2976,15 +2974,13 @@ m68hc11_emit_logical (enum machine_mode mode, enum rtx_code code, rtx *operands) operands[3], gen_rtx_fmt_ee (code, mode, operands[3], operands[2]))); - insn = emit_move_insn (operands[0], operands[3]); + emit_move_insn (operands[0], operands[3]); } else { - insn = emit_insn (gen_rtx_SET (mode, - operands[0], - gen_rtx_fmt_ee (code, mode, - operands[0], - operands[2]))); + emit_insn (gen_rtx_SET (mode, operands[0], + gen_rtx_fmt_ee (code, mode, + operands[0], operands[2]))); } } @@ -4657,6 +4653,10 @@ m68hc11_check_z_replacement (rtx insn, struct replace_info *info) } if (GET_CODE (body) == CLOBBER) { + rtx dst = XEXP (body, 0); + + this_insn_uses_ix = reg_mentioned_p (ix_reg, dst); + this_insn_uses_iy = reg_mentioned_p (iy_reg, dst); /* IX and IY are used at the same time, we have to restore the value of the scratch register before this insn. */ |