diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 4 | ||||
-rw-r--r-- | gcc/expr.c | 3 | ||||
-rw-r--r-- | gcc/rtl.h | 2 |
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), @@ -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; @@ -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 |