From db049e787a997042bf7f14ec88021db34a146c94 Mon Sep 17 00:00:00 2001 From: dj Date: Tue, 14 Nov 2006 02:29:46 +0000 Subject: [PATCH] * config/m32c/m32c.c (m32c_prepare_shift): Use a separate temporary for intermediates. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@118798 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/config/m32c/m32c.c | 12 +++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ecdbbf86f6f..a1830a7c9f8 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 68467873976..dcfbe6ebafc 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); } -- 2.11.4.GIT