aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-11-30 18:13:44 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-11-30 18:13:44 -0500
commit8ca00751f76d44f01ece03998635d38d6613ed47 (patch)
treead0fb6ead21f20e5ce348ce8dfdb56abde3903f5 /gcc
parent8922eb5b249f40a3f6835570eebba2126aa32aa2 (diff)
downloadgcc-8ca00751f76d44f01ece03998635d38d6613ed47.zip
gcc-8ca00751f76d44f01ece03998635d38d6613ed47.tar.gz
gcc-8ca00751f76d44f01ece03998635d38d6613ed47.tar.bz2
(emit_block_move): Only use movstr if size is small enough constant or
MODE is at least BITS_PER_WORD. From-SVN: r8585
Diffstat (limited to 'gcc')
-rw-r--r--gcc/expr.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 57bf2ea..4c2ac54 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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