diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e1351599773..88d9aa743cb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-05-18 Steven Bosscher + + * config/s390/s390.c (s390_expand_movstr, s390_expand_clrstr, + s390_expand_cmpmem): Do not use expand_start_loop and + expand_end_loop, instead build the loop manually. + 2004-05-18 Alan Modra * config/rs6000/rs6000.md (ctrsi_internal3): Delete. diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 9e786bfdf70..9c537ec3cf8 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -2956,6 +2956,7 @@ s390_expand_movstr (rtx dst, rtx src, rtx len) else { rtx dst_addr, src_addr, count, blocks, temp; + rtx loop_start_label = gen_label_rtx (); rtx loop_end_label = gen_label_rtx (); rtx end_label = gen_label_rtx (); enum machine_mode mode; @@ -2988,7 +2989,8 @@ s390_expand_movstr (rtx dst, rtx src, rtx len) emit_cmp_and_jump_insns (blocks, const0_rtx, EQ, NULL_RTX, mode, 1, loop_end_label); - expand_start_loop (1); + + emit_label (loop_start_label); emit_insn (gen_movstr_short (dst, src, GEN_INT (255))); s390_load_address (dst_addr, @@ -3002,7 +3004,8 @@ s390_expand_movstr (rtx dst, rtx src, rtx len) emit_cmp_and_jump_insns (blocks, const0_rtx, EQ, NULL_RTX, mode, 1, loop_end_label); - expand_end_loop (); + + emit_jump (loop_start_label); emit_label (loop_end_label); emit_insn (gen_movstr_short (dst, src, @@ -3030,6 +3033,7 @@ s390_expand_clrstr (rtx dst, rtx len) else { rtx dst_addr, src_addr, count, blocks, temp; + rtx loop_start_label = gen_label_rtx (); rtx loop_end_label = gen_label_rtx (); rtx end_label = gen_label_rtx (); enum machine_mode mode; @@ -3060,7 +3064,8 @@ s390_expand_clrstr (rtx dst, rtx len) emit_cmp_and_jump_insns (blocks, const0_rtx, EQ, NULL_RTX, mode, 1, loop_end_label); - expand_start_loop (1); + + emit_label (loop_start_label); emit_insn (gen_clrstr_short (dst, GEN_INT (255))); s390_load_address (dst_addr, @@ -3072,7 +3077,8 @@ s390_expand_clrstr (rtx dst, rtx len) emit_cmp_and_jump_insns (blocks, const0_rtx, EQ, NULL_RTX, mode, 1, loop_end_label); - expand_end_loop (); + + emit_jump (loop_start_label); emit_label (loop_end_label); emit_insn (gen_clrstr_short (dst, convert_to_mode (Pmode, count, 1))); @@ -3116,6 +3122,7 @@ s390_expand_cmpmem (rtx target, rtx op0, rtx op1, rtx len) else { rtx addr0, addr1, count, blocks, temp; + rtx loop_start_label = gen_label_rtx (); rtx loop_end_label = gen_label_rtx (); rtx end_label = gen_label_rtx (); enum machine_mode mode; @@ -3148,7 +3155,8 @@ s390_expand_cmpmem (rtx target, rtx op0, rtx op1, rtx len) emit_cmp_and_jump_insns (blocks, const0_rtx, EQ, NULL_RTX, mode, 1, loop_end_label); - expand_start_loop (1); + + emit_label (loop_start_label); emit_insn (gen_cmpmem_short (op0, op1, GEN_INT (255))); temp = gen_rtx_NE (VOIDmode, gen_rtx_REG (CCSmode, 33), const0_rtx); @@ -3168,7 +3176,8 @@ s390_expand_cmpmem (rtx target, rtx op0, rtx op1, rtx len) emit_cmp_and_jump_insns (blocks, const0_rtx, EQ, NULL_RTX, mode, 1, loop_end_label); - expand_end_loop (); + + emit_jump (loop_start_label); emit_label (loop_end_label); emit_insn (gen_cmpmem_short (op0, op1,