(emit_block_move): Only use movstr if size is small enough constant or
authorRichard Kenner <kenner@gcc.gnu.org>
Wed, 30 Nov 1994 23:13:44 +0000 (18:13 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Wed, 30 Nov 1994 23:13:44 +0000 (18:13 -0500)
MODE is at least BITS_PER_WORD.

From-SVN: r8585

gcc/expr.c

index 57bf2ea4012379bcbe05e37026934651c810dc9c..4c2ac5470d72f0cf3e504039fe0e02184ab3109d 100644 (file)
@@ -1624,7 +1624,10 @@ emit_block_move (x, y, size, align)
                 here because if SIZE is less than the mode mask, as it is
                 returned by the macro, it will definitely be less than the
                 actual mode mask.  */
-             && (unsigned HOST_WIDE_INT) INTVAL (size) <= GET_MODE_MASK (mode)
+             && ((GET_CODE (size) == CONST_INT
+                  && ((unsigned HOST_WIDE_INT) INTVAL (size)
+                      <= GET_MODE_MASK (mode)))
+                 || GET_MODE_BITSIZE (mode) >= BITS_PER_WORD)
              && (insn_operand_predicate[(int) code][0] == 0
                  || (*insn_operand_predicate[(int) code][0]) (x, BLKmode))
              && (insn_operand_predicate[(int) code][1] == 0