]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
m32c.c (m32c_prepare_shift): Use a separate temporary for intermediates.
authorDJ Delorie <dj@redhat.com>
Tue, 14 Nov 2006 02:29:46 +0000 (21:29 -0500)
committerDJ Delorie <dj@gcc.gnu.org>
Tue, 14 Nov 2006 02:29:46 +0000 (21:29 -0500)
* config/m32c/m32c.c (m32c_prepare_shift): Use a separate
temporary for intermediates.

From-SVN: r118798

gcc/ChangeLog
gcc/config/m32c/m32c.c

index ecdbbf86f6f71a8c929a235f14a5dacea1ad77fe..a1830a7c9f854fb3129f87e3ad404d3f8d6174d0 100644 (file)
@@ -1,3 +1,8 @@
+2006-11-13  DJ Delorie  <dj@redhat.com>
+
+       * config/m32c/m32c.c (m32c_prepare_shift): Use a separate
+       temporary for intermediates.
+
 2006-11-13  Kaz Kojima  <kkojima@gcc.gnu.org>
 
        * config/sh/sh.c (expand_cbranchdi4): Initialize skip_label.
index 684678739760e95ba34e8ca4280e733efef23ae7..dcfbe6ebafc0d08ad2bd91f1516dc041d88b2019 100644 (file)
@@ -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);
        }