diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7a871c4a26b..425bc1ae521 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-11-11 Jie Zhang + + * config/bfin/bfin.c (bfin_expand_strmov): Correctly move the trailing + bytes when align is 2. + * config/bfin/bfin.md (rep_movsi, rep_movhi): Make LSETUP be followed + by the first instruction of the loop. + 2005-11-11 Jason Merrill PR c++/24686 diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c index be028f74528..f1a82683aa1 100644 --- a/gcc/config/bfin/bfin.c +++ b/gcc/config/bfin/bfin.c @@ -2475,6 +2475,11 @@ bfin_expand_strmov (rtx dst, rtx src, rtx count_exp, rtx align_exp) emit_insn (gen_rep_movsi (destreg, srcreg, countreg, destreg, srcreg)); } + if (count & 2) + { + single_move_for_strmov (dst, src, HImode, offset); + offset += 2; + } } else { @@ -2491,11 +2496,6 @@ bfin_expand_strmov (rtx dst, rtx src, rtx count_exp, rtx align_exp) emit_insn (gen_rep_movhi (destreg, srcreg, countreg, destreg, srcreg)); } } - if (count & 2) - { - single_move_for_strmov (dst, src, HImode, offset); - offset += 2; - } if (count & 1) { single_move_for_strmov (dst, src, QImode, offset); diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md index 1bbbacde764..363a1e9fb7f 100644 --- a/gcc/config/bfin/bfin.md +++ b/gcc/config/bfin/bfin.md @@ -1458,7 +1458,7 @@ (use (match_dup 2)) (clobber (match_scratch:HI 5 "=&d"))] "" - "lsetup (1f, 1f) LC1 = %2; %5 = [%4++]; 1: MNOP || [%3++] = %5 || %5 = [%4++]; [%3++] = %5;" + "%5 = [%4++]; lsetup (1f, 1f) LC1 = %2; 1: MNOP || [%3++] = %5 || %5 = [%4++]; [%3++] = %5;" [(set_attr "type" "misc") (set_attr "length" "16")]) @@ -1477,7 +1477,7 @@ (use (match_dup 2)) (clobber (match_scratch:HI 5 "=&d"))] "" - "lsetup (1f, 1f) LC1 = %2; %h5 = W[%4++]; 1: MNOP || W [%3++] = %5 || %h5 = W [%4++]; W [%3++] = %5;" + "%h5 = W[%4++]; lsetup (1f, 1f) LC1 = %2; 1: MNOP || W [%3++] = %5 || %h5 = W [%4++]; W [%3++] = %5;" [(set_attr "type" "misc") (set_attr "length" "16")])