expr.c (move_by_pieces): No longer static.
authorJeffrey A Law <law@cygnus.com>
Mon, 17 Aug 1998 16:37:49 +0000 (16:37 +0000)
committerJeff Law <law@gcc.gnu.org>
Mon, 17 Aug 1998 16:37:49 +0000 (10:37 -0600)
        * 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.

From-SVN: r21794

gcc/ChangeLog
gcc/config/mips/mips.c
gcc/expr.c
gcc/rtl.h

index 1c730e797fa4d08b3028bb724ad1a792215c321c..553bce09904a99a960eb7f853e5538468c97520d 100644 (file)
@@ -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.
 
index 8b20fc594993a8465f966f8482c65d228bb607bc..98c634dc34a0fdad04b51d5a190f6d33ccad0722 100644 (file)
@@ -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),
index 2bd4b41534b7f0447dc92af002cb5335212e00ac..cfea6304f270f55d0d058d7bcced81a7820bb322 100644 (file)
@@ -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;
index 4aa25b2ee0d84e27deaa5be434a26b9857db4bf4..cb5fdf1220c999130307034ee0475ffa72cf3e84 100644 (file)
--- 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