aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-02-11 08:56:16 +0000
committerRichard Stallman <rms@gnu.org>1993-02-11 08:56:16 +0000
commit9937da1a0c1aee623a0076efba7b55a4d7aa5158 (patch)
treef8f04302894dbb9ab7da66586fb48c701de8500c
parent0f33506ca7bfc727f2fbb05084c0403c628d9c5d (diff)
downloadgcc-9937da1a0c1aee623a0076efba7b55a4d7aa5158.zip
gcc-9937da1a0c1aee623a0076efba7b55a4d7aa5158.tar.gz
gcc-9937da1a0c1aee623a0076efba7b55a4d7aa5158.tar.bz2
(expand_builtin): Move memory_address calls
out of arglist of emit_block_move. From-SVN: r3460
-rw-r--r--gcc/expr.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index dfc978a..12fbe76 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -6419,7 +6419,7 @@ expand_builtin (exp, target, subtarget, mode, ignore)
= get_pointer_alignment (src, BIGGEST_ALIGNMENT) / BITS_PER_UNIT;
int dest_align
= get_pointer_alignment (dest, BIGGEST_ALIGNMENT) / BITS_PER_UNIT;
- rtx dest_rtx;
+ rtx dest_rtx, dest_mem, src_mem;
/* If either SRC or DEST is not a pointer type, don't do
this operation in-line. */
@@ -6431,15 +6431,16 @@ expand_builtin (exp, target, subtarget, mode, ignore)
}
dest_rtx = expand_expr (dest, NULL_RTX, Pmode, EXPAND_NORMAL);
+ dest_mem = gen_rtx (MEM, BLKmode,
+ memory_address (BLKmode, dest_rtx));
+ src_mem = gen_rtx (MEM, BLKmode,
+ memory_address (BLKmode,
+ expand_expr (src, NULL_RTX,
+ Pmode,
+ EXPAND_NORMAL)));
/* Copy word part most expediently. */
- emit_block_move (gen_rtx (MEM, BLKmode,
- memory_address (BLKmode, dest_rtx)),
- gen_rtx (MEM, BLKmode,
- memory_address (BLKmode,
- expand_expr (src, NULL_RTX,
- Pmode,
- EXPAND_NORMAL))),
+ emit_block_move (dest_mem, src_mem,
expand_expr (len, NULL_RTX, VOIDmode, 0),
MIN (src_align, dest_align));
return dest_rtx;