> Actually, it broke fsck_ffs. > > Workaround to avoid the known broken case:
The brokenness in ix86_expand_clrstr is quite visible when you compare the function with ix86_expand_movstr. - Tor Egge
Index: contrib/gcc/config/i386/i386.c =================================================================== RCS file: /home/ncvs/src/contrib/gcc/config/i386/i386.c,v retrieving revision 1.9 diff -u -r1.9 i386.c --- contrib/gcc/config/i386/i386.c 9 May 2002 22:42:39 -0000 1.9 +++ contrib/gcc/config/i386/i386.c 4 Jun 2002 00:18:49 -0000 @@ -9432,7 +9432,7 @@ gen_rtx_SUBREG (SImode, zeroreg, 0))); if (TARGET_64BIT && (align <= 4 || count == 0)) { - rtx label = ix86_expand_aligntest (destreg, 2); + rtx label = ix86_expand_aligntest (countreg, 4); emit_insn (gen_strsetsi (destreg, gen_rtx_SUBREG (SImode, zeroreg, 0))); emit_label (label); @@ -9443,7 +9443,7 @@ gen_rtx_SUBREG (HImode, zeroreg, 0))); if (align <= 2 || count == 0) { - rtx label = ix86_expand_aligntest (destreg, 2); + rtx label = ix86_expand_aligntest (countreg, 2); emit_insn (gen_strsethi (destreg, gen_rtx_SUBREG (HImode, zeroreg, 0))); emit_label (label); @@ -9454,7 +9454,7 @@ gen_rtx_SUBREG (QImode, zeroreg, 0))); if (align <= 1 || count == 0) { - rtx label = ix86_expand_aligntest (destreg, 1); + rtx label = ix86_expand_aligntest (countreg, 1); emit_insn (gen_strsetqi (destreg, gen_rtx_SUBREG (QImode, zeroreg, 0))); emit_label (label);