--- 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) 
