diff options
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index e16240b..e57449dd 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -3560,6 +3560,7 @@ expand_movstr (tree dest, tree src, rtx target, int endp) dest_mem = get_memory_rtx (dest, NULL); src_mem = get_memory_rtx (src, NULL); + data = insn_data + CODE_FOR_movstr; if (!endp) { target = force_reg (Pmode, XEXP (dest_mem, 0)); @@ -3568,18 +3569,18 @@ expand_movstr (tree dest, tree src, rtx target, int endp) } else { - if (target == 0 || target == const0_rtx) + if (target == 0 + || target == const0_rtx + || ! (*data->operand[0].predicate) (target, Pmode)) { end = gen_reg_rtx (Pmode); - if (target == 0) + if (target != const0_rtx) target = end; } else end = target; } - data = insn_data + CODE_FOR_movstr; - if (data->operand[0].mode != VOIDmode) end = gen_lowpart (data->operand[0].mode, end); |