--- s390.md.orig 2002-10-23 06:46:00.000000000 -0400 +++ s390.md 2003-05-08 14:50:49.000000000 -0400 @@ -2112,11 +2112,19 @@ } /* Load up the address+length pairs. */ - emit_move_insn (gen_highpart (Pmode, reg0), addr0); - convert_move (gen_lowpart (Pmode, reg0), len, 1); + if (TARGET_64BIT && ! CONSTANT_P (len) && GET_MODE(len) == SImode) + { + emit_insn (gen_zero_extendsidi2 (gen_lowpart (Pmode, reg0), len)); + emit_insn (gen_zero_extendsidi2 (gen_lowpart (Pmode, reg1), len)); + } + else + { + emit_move_insn (gen_lowpart (Pmode, reg0), len); + emit_move_insn (gen_lowpart (Pmode, reg1), len); + } + emit_move_insn (gen_highpart (Pmode, reg0), addr0); emit_move_insn (gen_highpart (Pmode, reg1), addr1); - convert_move (gen_lowpart (Pmode, reg1), len, 1); /* Compare! */ if (TARGET_64BIT)