From: Kazuhiro Inaoka Date: Tue, 24 May 2005 09:43:42 +0000 (+0000) Subject: m32r.c (m32r_expand_block_move): Return 0 if nothing was done. X-Git-Tag: releases/gcc-3.4.5~410 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56bb86a52b52dcd4464564206c8cef763c37204e;p=thirdparty%2Fgcc.git m32r.c (m32r_expand_block_move): Return 0 if nothing was done. * config/m32r/m32r.c (m32r_expand_block_move): Return 0 if nothing was done. * config/m32r/m32r.md (movmemsi): If m32r_expand_block_move did nothing then FAIL. * config/m32r/m32r/m32r-protos.h (m32r_expand_block_move): Update prototype. From-SVN: r100098 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8d7ebacf37d9..d705a11fbb91 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2005-05-24 Kazuhiro Inaoka + + * config/m32r/m32r.c (m32r_expand_block_move): Return 0 if + nothing was done. + * config/m32r/m32r.md (movmemsi): If m32r_expand_block_move did + nothing then FAIL. + * config/m32r/m32r/m32r-protos.h (m32r_expand_block_move): Update + prototype. + 2005-05-23 Ulrich Weigand * unroll.c (loop_iterations): Remove common term from initial diff --git a/gcc/config/m32r/m32r-protos.h b/gcc/config/m32r/m32r-protos.h index 9fc7bd446639..b0d977e07e45 100644 --- a/gcc/config/m32r/m32r-protos.h +++ b/gcc/config/m32r/m32r-protos.h @@ -51,7 +51,7 @@ extern void m32r_initialize_trampoline (rtx, rtx, rtx); extern int zero_and_one (rtx, rtx); extern char * emit_cond_move (rtx *, rtx); extern void m32r_output_block_move (rtx, rtx *); -extern void m32r_expand_block_move (rtx *); +extern int m32r_expand_block_move (rtx *); extern void m32r_print_operand (FILE *, rtx, int); extern void m32r_print_operand_address (FILE *, rtx); extern int m32r_not_same_reg (rtx, rtx); diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c index f932145f6c44..76eb15a5c8e0 100644 --- a/gcc/config/m32r/m32r.c +++ b/gcc/config/m32r/m32r.c @@ -2813,7 +2813,7 @@ block_move_call (rtx dest_reg, rtx src_reg, rtx bytes_rtx) operands[2] is the number of bytes to move. operands[3] is the alignment. */ -void +int m32r_expand_block_move (rtx operands[]) { rtx orig_dst = operands[0]; @@ -2828,7 +2828,7 @@ m32r_expand_block_move (rtx operands[]) rtx dst_reg; if (constp && bytes <= 0) - return; + return 1; /* Move the address into scratch registers. */ dst_reg = copy_addr_to_reg (XEXP (orig_dst, 0)); @@ -2843,7 +2843,7 @@ m32r_expand_block_move (rtx operands[]) if (optimize_size || ! constp || align != UNITS_PER_WORD) { block_move_call (dst_reg, src_reg, bytes_rtx); - return; + return 0; } leftover = bytes % MAX_MOVE_BYTES; @@ -2900,6 +2900,7 @@ m32r_expand_block_move (rtx operands[]) emit_insn (gen_movstrsi_internal (dst_reg, src_reg, GEN_INT (leftover), gen_reg_rtx (SImode), gen_reg_rtx (SImode))); + return 1; } diff --git a/gcc/config/m32r/m32r.md b/gcc/config/m32r/m32r.md index 00f7e05a81fb..9e8d1eb0f31e 100644 --- a/gcc/config/m32r/m32r.md +++ b/gcc/config/m32r/m32r.md @@ -2673,8 +2673,10 @@ { if (operands[0]) /* avoid unused code messages */ { - m32r_expand_block_move (operands); - DONE; + if (m32r_expand_block_move (operands)) + DONE; + else + FAIL; } }")