aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/mips/mips.c4
-rw-r--r--gcc/expr.c3
-rw-r--r--gcc/rtl.h2
4 files changed, 12 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1c730e7..553bce0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
Mon Aug 17 11:46:19 1998 Jeffrey A Law (law@cygnus.com)
+ * expr.c (move_by_pieces): No longer static. Remove prototype.
+ * rtl.h (move_by_pieces): Add extern prototype.
+ * mips.c (expand_block_move): Handle aligned straight line copy by
+ calling move_by_pieces.
+
* expr.c (expand_expr): Allow assignments from TImode PARM_DECLs
and VAR_DECLs.
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 8b20fc5..98c634d 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -3113,6 +3113,10 @@ expand_block_move (operands)
if (TARGET_MEMCPY)
block_move_call (dest_reg, src_reg, bytes_rtx);
+ else if (constp && bytes <= 2 * MAX_MOVE_BYTES
+ && align == UNITS_PER_WORD)
+ move_by_pieces (orig_dest, orig_src, bytes, align);
+
else if (constp && bytes <= 2 * MAX_MOVE_BYTES)
emit_insn (gen_movstrsi_internal (change_address (orig_dest, BLKmode,
dest_reg),
diff --git a/gcc/expr.c b/gcc/expr.c
index 2bd4b41..cfea630 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -156,7 +156,6 @@ static rtx get_push_address PROTO ((int));
static rtx enqueue_insn PROTO((rtx, rtx));
static int queued_subexp_p PROTO((rtx));
static void init_queue PROTO((void));
-static void move_by_pieces PROTO((rtx, rtx, int, int));
static int move_by_pieces_ninsns PROTO((unsigned int, int));
static void move_by_pieces_1 PROTO((rtx (*) (rtx, ...), enum machine_mode,
struct move_by_pieces *));
@@ -1394,7 +1393,7 @@ convert_modes (mode, oldmode, x, unsignedp)
through protect_from_queue before calling.
ALIGN (in bytes) is maximum alignment we can assume. */
-static void
+void
move_by_pieces (to, from, len, align)
rtx to, from;
int len, align;
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 4aa25b2..cb5fdf1 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1403,6 +1403,8 @@ extern int preserve_subexpressions_p PROTO ((void));
/* In expr.c */
extern void init_expr_once PROTO ((void));
+extern void move_by_pieces PROTO ((rtx, rtx, int, int));
+
/* In stupid.c */
#ifdef BUFSIZ