From: DJ Delorie Date: Tue, 14 Nov 2006 02:29:46 +0000 (-0500) Subject: m32c.c (m32c_prepare_shift): Use a separate temporary for intermediates. X-Git-Tag: releases/gcc-4.3.0~8478 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=833bf445b05c6b15b8d3af23ba965c85e5d7f56a;p=thirdparty%2Fgcc.git m32c.c (m32c_prepare_shift): Use a separate temporary for intermediates. * config/m32c/m32c.c (m32c_prepare_shift): Use a separate temporary for intermediates. From-SVN: r118798 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ecdbbf86f6f7..a1830a7c9f85 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-11-13 DJ Delorie + + * config/m32c/m32c.c (m32c_prepare_shift): Use a separate + temporary for intermediates. + 2006-11-13 Kaz Kojima * config/sh/sh.c (expand_cbranchdi4): Initialize skip_label. diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index 684678739760..dcfbe6ebafc0 100644 --- a/gcc/config/m32c/m32c.c +++ b/gcc/config/m32c/m32c.c @@ -3423,7 +3423,7 @@ m32c_prepare_shift (rtx * operands, int scale, int shift_code) undefined to skip one of the comparisons. */ rtx count; - rtx label, lref, insn; + rtx label, lref, insn, tempvar; emit_move_insn (operands[0], operands[1]); @@ -3432,13 +3432,15 @@ m32c_prepare_shift (rtx * operands, int scale, int shift_code) lref = gen_rtx_LABEL_REF (VOIDmode, label); LABEL_NUSES (label) ++; + tempvar = gen_reg_rtx (mode); + if (shift_code == ASHIFT) { /* This is a left shift. We only need check positive counts. */ emit_jump_insn (gen_cbranchqi4 (gen_rtx_LE (VOIDmode, 0, 0), count, GEN_INT (16), label)); - emit_insn (func (operands[0], operands[0], GEN_INT (8))); - emit_insn (func (operands[0], operands[0], GEN_INT (8))); + emit_insn (func (tempvar, operands[0], GEN_INT (8))); + emit_insn (func (operands[0], tempvar, GEN_INT (8))); insn = emit_insn (gen_addqi3 (count, count, GEN_INT (-16))); emit_label_after (label, insn); } @@ -3447,8 +3449,8 @@ m32c_prepare_shift (rtx * operands, int scale, int shift_code) /* This is a right shift. We only need check negative counts. */ emit_jump_insn (gen_cbranchqi4 (gen_rtx_GE (VOIDmode, 0, 0), count, GEN_INT (-16), label)); - emit_insn (func (operands[0], operands[0], GEN_INT (-8))); - emit_insn (func (operands[0], operands[0], GEN_INT (-8))); + emit_insn (func (tempvar, operands[0], GEN_INT (-8))); + emit_insn (func (operands[0], tempvar, GEN_INT (-8))); insn = emit_insn (gen_addqi3 (count, count, GEN_INT (16))); emit_label_after (label, insn); }