Adding this code:

C:\devel\gcc\gcc\config\i370>cvs diff i370.md
Index: i370.md
===================================================================
RCS file: c:\cvsroot/gcc/gcc/config/i370/i370.md,v
retrieving revision 1.21
diff -r1.21 i370.md
845a846,851
  if (operands[1] == const0_rtx)
  {
    CC_STATUS_INIT;
    mvs_check_page (0, 6, 8);
    return \"MVC      %O0(8,%R0),=XL8'00'\";
  }

to the i370.md definition:

;
; movdi instruction pattern(s).
;

(define_insn ""
 [(set (match_operand:DI 0 "nonimmediate_operand" "=d,m,S")
       (match_operand:DI 1 "general_operand" "g,d,SF"))]
;;  [(set (match_operand:DI 0 "r_or_s_operand" "=dS,m")
;;        (match_operand:DI 1 "r_or_s_operand" "diS*fF,d*fF"))]
 "TARGET_CHAR_INSTRUCTIONS"
 "*
{
 check_label_emit ();
 if (REG_P (operands[0]))
   {
     if (FP_REG_P (operands[1]))
   {
     mvs_check_page (0, 8, 0);
     return \"STD    %1,\" CONVLO \"(,13)\;LM    %0,%N0,\" CONVLO \"(13)\";
   }
     if (REG_P (operands[1]))
   {
     mvs_check_page (0, 4, 0);
     return \"LR    %0,%1\;LR    %N0,%N1\";
   }
     if (operands[1] == const0_rtx)
   {
     CC_STATUS_INIT;
     mvs_check_page (0, 4, 0);
     return \"SLR    %0,%0\;SLR    %N0,%N0\";
   }
     if (GET_CODE (operands[1]) == CONST_INT
       && (unsigned) INTVAL (operands[1]) < 4096)
   {
     CC_STATUS_INIT;
     mvs_check_page (0, 6, 0);
     return \"SLR    %0,%0\;LA    %N0,%c1(0,0)\";
   }
     if (GET_CODE (operands[1]) == CONST_INT)
   {
     CC_STATUS_SET (operands[0], operands[1]);
     mvs_check_page (0, 8, 0);
     return \"L    %0,%1\;SRDA    %0,32\";
   }
     if (GET_CODE (operands[1]) == CONST_DOUBLE)
   {
     mvs_check_page (0, 6, 8);
     return \"LM    %0,%N0,%1\";
   }
     mvs_check_page (0, 4, 0);
     /*return \"LM    %0,%N0,%1\";*/
     return \"L    %0,%1\;L    %N0,4+%1\";
   }
 else if (FP_REG_P (operands[1]))
   {
     mvs_check_page (0, 4, 0);
     return \"STD    %1,%0\";
   }
 else if (REG_P (operands[1]))
   {
     mvs_check_page (0, 4, 0);
     /*return \"STM    %1,%N1,%0\"; */
     return \"ST    %1,%0\;ST    %N1,4+%0\";
   }
 if (operands[1] == const0_rtx)
 {
   CC_STATUS_INIT;
   mvs_check_page (0, 6, 8);
   return \"MVC    %O0(8,%R0),=XL8'00'\";
 }
 mvs_check_page (0, 6, 8);
 return \"MVC    %O0(8,%R0),%1\";
}"
  [(set_attr "length" "8")]
)


forces it to use XL8'00' instead of the default F'0' and that
seems to work.  Does that seem like a proper solution to
you?

Unfortunately there's still another problem I've noticed.
I'll put that in another message after I've investigated it.

BFN.  Paul.

Reply via email to