OSDN Git Service

* config/s390/s390.c (print_operand): Support 'S' format flag.
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 11 Oct 2004 20:54:07 +0000 (20:54 +0000)
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 11 Oct 2004 20:54:07 +0000 (20:54 +0000)
* config/s390/s390.md ("*tmqi_mem"): Use 'S' format flag.
("*tstsi", "*tstsi_cconly", "*tstsi_cconly2"): Likewise.
("*tsthiCCT", "*tsthiCCT_cconly", "*tsthi", "*tsthi_cconly"): Likewise.
("*tstqiCCT", "*tstqiCCT_cconly", "*tstqi", "*tstqi_cconly"): Likewise.
("*cmphi_ccu", "*cmpqi_ccu", "*clc"): Likewise
("movti", "*movdi_31", "*movqi", "*movdf_31", "*mvc"): Likewise.
("*movstricthi"): Likewise.
("*load_multiple_di", "*load_multiple_si"): Likewise.
("*store_multiple_di", "*store_multiple_si"): Likewise.
("*sethiqisi", "*sethihisi"): Likewise.
("*sethiqidi_64", "*sethiqidi_31"): Likewise.
("*andqi3_zarch", "*andqi3_esa", "*nc"): Likewise.
("*iorqi3_zarch", "*iorqi3_esa", "*oc"): Likewise.
("*xorqi3", "*xc", "*xc_zero"): Likewise.
("get_tp_64", "get_tp_31", "set_tp_64", "set_tp_31"): Likewise.

("*tmhi_full"): Fix incorrect op_type attribute.

("*adddi3_alc_cc", "*adddi3_alc"): Remove double backslash.
("*subdi3_slb_cc", "*subdi3_slb"): Likewise.
("*addsi3_alc_cc", "*addsi3_alc"): Likewise.
("*subsi3_slb_cc", "*subsi3_slb"): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@88903 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/s390/s390.c
gcc/config/s390/s390.md

index 5801fd5..5d8d74d 100644 (file)
@@ -1,3 +1,29 @@
+2004-10-11  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * config/s390/s390.c (print_operand): Support 'S' format flag.
+       * config/s390/s390.md ("*tmqi_mem"): Use 'S' format flag.
+       ("*tstsi", "*tstsi_cconly", "*tstsi_cconly2"): Likewise.
+       ("*tsthiCCT", "*tsthiCCT_cconly", "*tsthi", "*tsthi_cconly"): Likewise.
+       ("*tstqiCCT", "*tstqiCCT_cconly", "*tstqi", "*tstqi_cconly"): Likewise.
+       ("*cmphi_ccu", "*cmpqi_ccu", "*clc"): Likewise
+       ("movti", "*movdi_31", "*movqi", "*movdf_31", "*mvc"): Likewise.
+       ("*movstricthi"): Likewise.
+       ("*load_multiple_di", "*load_multiple_si"): Likewise.
+       ("*store_multiple_di", "*store_multiple_si"): Likewise.
+       ("*sethiqisi", "*sethihisi"): Likewise.
+       ("*sethiqidi_64", "*sethiqidi_31"): Likewise.
+       ("*andqi3_zarch", "*andqi3_esa", "*nc"): Likewise.
+       ("*iorqi3_zarch", "*iorqi3_esa", "*oc"): Likewise.
+       ("*xorqi3", "*xc", "*xc_zero"): Likewise.
+       ("get_tp_64", "get_tp_31", "set_tp_64", "set_tp_31"): Likewise.
+
+       ("*tmhi_full"): Fix incorrect op_type attribute.
+
+       ("*adddi3_alc_cc", "*adddi3_alc"): Remove double backslash.
+       ("*subdi3_slb_cc", "*subdi3_slb"): Likewise.
+       ("*addsi3_alc_cc", "*addsi3_alc"): Likewise.
+       ("*subsi3_slb_cc", "*subsi3_slb"): Likewise.
+
 2004-10-11  Andrew Pinski  <pinskia@physics.uc.edu
 
        PR middle-end/16266
index 79407a4..72cdbf7 100644 (file)
@@ -4066,6 +4066,7 @@ print_operand_address (FILE *file, rtx addr)
     'J': print tls_load/tls_gdcall/tls_ldcall suffix
     'O': print only the displacement of a memory reference.
     'R': print only the base register of a memory reference.
+    'S': print S-type memory reference (base+displacement).
     'N': print the second word of a DImode operand.
     'M': print the second word of a TImode operand.
     'Y': print shift count operand.
@@ -4143,6 +4144,26 @@ print_operand (FILE *file, rtx x, int code)
       }
       return;
 
+    case 'S':
+      {
+       struct s390_address ad;
+
+       if (GET_CODE (x) != MEM
+           || !s390_decompose_address (XEXP (x, 0), &ad)
+           || (ad.base && !REG_OK_FOR_BASE_STRICT_P (ad.base))
+           || ad.indx)
+         abort ();
+
+       if (ad.disp)
+         output_addr_const (file, ad.disp);
+       else
+         fprintf (file, "0");
+
+       if (ad.base)
+         fprintf (file, "(%s)", reg_names[REGNO (ad.base)]);
+      }
+      return;
+
     case 'N':
       if (GET_CODE (x) == REG)
        x = gen_rtx_REG (GET_MODE (x), REGNO (x) + 1);
index 8d43779..e1e3693 100644 (file)
@@ -60,6 +60,7 @@
 ;;     %J: print tls_load/tls_gdcall/tls_ldcall suffix
 ;;     %O: print only the displacement of a memory reference.
 ;;     %R: print only the base register of a memory reference.
+;;     %S: print S-type memory reference (base+displacement).
 ;;     %N: print the second word of a DImode operand.
 ;;     %M: print the second word of a TImode operand.
 
                  (match_operand:QI 2 "immediate_operand" "n,n")))]
   "s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 0))"
   "@
-   tm\t%0,%b1
-   tmy\t%0,%b1"
+   tm\t%S0,%b1
+   tmy\t%S0,%b1"
   [(set_attr "op_type" "SI,SIY")])
 
 (define_insn "*tmdi_reg"
                  (match_operand:HI 1 "immediate_operand" "n")))]
   "s390_match_ccmode (insn, s390_tm_ccmode (constm1_rtx, operands[1], 1))"
   "tml\t%0,65535"
-  [(set_attr "op_type" "RX")])
+  [(set_attr "op_type" "RI")])
 
 (define_insn "*tmqi_full"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCSmode)"
   "@
    ltr\t%2,%0
-   icm\t%2,15,%0
-   icmy\t%2,15,%0"
+   icm\t%2,15,%S0
+   icmy\t%2,15,%S0"
   [(set_attr "op_type" "RR,RS,RSY")])
 
 (define_insn "*tstsi_cconly"
   "s390_match_ccmode(insn, CCSmode)"
   "@
    ltr\t%0,%0
-   icm\t%2,15,%0
-   icmy\t%2,15,%0"
+   icm\t%2,15,%S0
+   icmy\t%2,15,%S0"
   [(set_attr "op_type" "RR,RS,RSY")])
 
 (define_insn "*tstsi_cconly2"
         (match_dup 0))]
   "s390_match_ccmode(insn, CCTmode)"
   "@
-   icm\t%2,3,%0
-   icmy\t%2,3,%0
+   icm\t%2,3,%S0
+   icmy\t%2,3,%S0
    tml\t%0,65535"
   [(set_attr "op_type" "RS,RSY,RI")])
 
    (clobber (match_scratch:HI 2 "=d,d,X"))]
   "s390_match_ccmode(insn, CCTmode)"
   "@
-   icm\t%2,3,%0
-   icmy\t%2,3,%0
+   icm\t%2,3,%S0
+   icmy\t%2,3,%S0
    tml\t%0,65535"
   [(set_attr "op_type" "RS,RSY,RI")])
 
         (match_dup 0))]
   "s390_match_ccmode(insn, CCSmode)"
   "@
-   icm\t%2,3,%0
-   icmy\t%2,3,%0"
+   icm\t%2,3,%S0
+   icmy\t%2,3,%S0"
   [(set_attr "op_type" "RS,RSY")])
 
 (define_insn "*tsthi_cconly"
    (clobber (match_scratch:HI 2 "=d,d"))]
   "s390_match_ccmode(insn, CCSmode)"
   "@
-   icm\t%2,3,%0
-   icmy\t%2,3,%0"
+   icm\t%2,3,%S0
+   icmy\t%2,3,%S0"
   [(set_attr "op_type" "RS,RSY")])
 
 (define_insn "*tstqiCCT"
         (match_dup 0))]
   "s390_match_ccmode(insn, CCTmode)"
   "@
-   icm\t%2,1,%0
-   icmy\t%2,1,%0
+   icm\t%2,1,%S0
+   icmy\t%2,1,%S0
    tml\t%0,255"
   [(set_attr "op_type" "RS,RSY,RI")])
 
                  (match_operand:QI 1 "const0_operand" "")))]
   "s390_match_ccmode(insn, CCTmode)"
   "@
-   cli\t%0,0
-   cliy\t%0,0
+   cli\t%S0,0
+   cliy\t%S0,0
    tml\t%0,255"
   [(set_attr "op_type" "SI,SIY,RI")])
 
         (match_dup 0))]
   "s390_match_ccmode(insn, CCSmode)"
   "@
-   icm\t%2,1,%0
-   icmy\t%2,1,%0"
+   icm\t%2,1,%S0
+   icmy\t%2,1,%S0"
   [(set_attr "op_type" "RS,RSY")])
 
 (define_insn "*tstqi_cconly"
    (clobber (match_scratch:QI 2 "=d,d"))]
   "s390_match_ccmode(insn, CCSmode)"
   "@
-   icm\t%2,1,%0
-   icmy\t%2,1,%0"
+   icm\t%2,1,%S0
+   icmy\t%2,1,%S0"
   [(set_attr "op_type" "RS,RSY")])
 
 
    && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))
    && !register_operand (operands[1], HImode)"
   "@
-   clm\t%0,3,%1
-   clmy\t%0,3,%1
+   clm\t%0,3,%S1
+   clmy\t%0,3,%S1
    #"
   [(set_attr "op_type" "RS,RSY,SS")])
 
    && (!s390_pool_operand (operands[0]) || !s390_pool_operand (operands[1]))
    && !register_operand (operands[1], QImode)"
   "@
-   clm\t%0,1,%1
-   clmy\t%0,1,%1
-   cli\t%0,%b1
-   cliy\t%0,%b1
+   clm\t%0,1,%S1
+   clmy\t%0,1,%S1
+   cli\t%S0,%b1
+   cliy\t%S0,%b1
    #"
   [(set_attr "op_type" "RS,RSY,SI,SIY,SS")])
 
    (use (match_operand 2 "const_int_operand" "n"))]
   "s390_match_ccmode (insn, CCUmode)
    && INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 256"
-  "clc\t%O0(%2,%R0),%1"
+  "clc\t%O0(%2,%R0),%S1"
   [(set_attr "op_type" "SS")
    (set_attr "type"    "cs")])
 
         (match_operand:TI 1 "general_operand" "QS,d,dKm,d,Q"))]
   "TARGET_64BIT"
   "@
-   lmg\t%0,%N0,%1
-   stmg\t%1,%N1,%0
+   lmg\t%0,%N0,%S1
+   stmg\t%1,%N1,%S0
    #
    #
    #"
         (match_operand:DI 1 "general_operand" "Q,d,dKm,d,*f,R,T,*f,*f,Q"))]
   "!TARGET_64BIT"
   "@
-   lm\t%0,%N0,%1
-   stm\t%1,%N1,%0
+   lm\t%0,%N0,%S1
+   stm\t%1,%N1,%S0
    #
    #
    ldr\t%0,%1
    icy\t%0,%1
    stc\t%1,%0
    stcy\t%1,%0
-   mvi\t%0,%b1
-   mviy\t%0,%b1
+   mvi\t%S0,%b1
+   mviy\t%S0,%b1
    #"
   [(set_attr "op_type" "RR,RI,RX,RXY,RX,RXY,SI,SIY,SS")
    (set_attr "type" "lr,*,*,*,store,store,store,store,cs")])
    (clobber (reg:CC 33))]
   ""
   "@
-   icm\t%0,3,%1
-   icmy\t%0,3,%1"
+   icm\t%0,3,%S1
+   icmy\t%0,3,%S1"
   [(set_attr "op_type" "RS,RSY")])
 
 ;
    ldy\t%0,%1
    std\t%1,%0
    stdy\t%1,%0
-   lm\t%0,%N0,%1
-   stm\t%1,%N1,%0
+   lm\t%0,%N0,%S1
+   stm\t%1,%N1,%S0
    #
    #
    #"
         (match_operand:BLK 1 "memory_operand" "Q"))
    (use (match_operand 2 "const_int_operand" "n"))]
   "INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 256"
-  "mvc\t%O0(%2,%R0),%1"
+  "mvc\t%O0(%2,%R0),%S1"
   [(set_attr "op_type" "SS")
    (set_attr "type"    "cs")])
 
 {
   int words = XVECLEN (operands[0], 0);
   operands[0] = gen_rtx_REG (DImode, REGNO (operands[1]) + words - 1);
-  return "lmg\t%1,%0,%2";
+  return "lmg\t%1,%0,%S2";
 }
    [(set_attr "op_type" "RSY")
     (set_attr "type"    "lm")])
 {
   int words = XVECLEN (operands[0], 0);
   operands[0] = gen_rtx_REG (SImode, REGNO (operands[1]) + words - 1);
-  return which_alternative == 0 ? "lm\t%1,%0,%2" : "lmy\t%1,%0,%2";
+  return which_alternative == 0 ? "lm\t%1,%0,%S2" : "lmy\t%1,%0,%S2";
 }
    [(set_attr "op_type" "RS,RSY")
     (set_attr "type"    "lm")])
 {
   int words = XVECLEN (operands[0], 0);
   operands[0] = gen_rtx_REG (DImode, REGNO (operands[2]) + words - 1);
-  return "stmg\t%2,%0,%1";
+  return "stmg\t%2,%0,%S1";
 }
    [(set_attr "op_type" "RSY")
     (set_attr "type"    "stm")])
 {
   int words = XVECLEN (operands[0], 0);
   operands[0] = gen_rtx_REG (SImode, REGNO (operands[2]) + words - 1);
-  return which_alternative == 0 ? "stm\t%2,%0,%1" : "stmy\t%2,%0,%1";
+  return which_alternative == 0 ? "stm\t%2,%0,%S1" : "stmy\t%2,%0,%S1";
 }
    [(set_attr "op_type" "RS,RSY")
     (set_attr "type"    "stm")])
    (clobber (reg:CC 33))]
   ""
   "@
-   icm\t%0,8,%1
-   icmy\t%0,8,%1"
+   icm\t%0,8,%S1
+   icmy\t%0,8,%S1"
   [(set_attr "op_type" "RS,RSY")])
 
 (define_insn "*sethighhisi"
    (clobber (reg:CC 33))]
   ""
   "@
-   icm\t%0,12,%1
-   icmy\t%0,12,%1"
+   icm\t%0,12,%S1
+   icmy\t%0,12,%S1"
   [(set_attr "op_type" "RS,RSY")])
 
 (define_insn "*sethighqidi_64"
         (unspec:DI [(match_operand:QI 1 "s_operand" "QS")] UNSPEC_SETHIGH))
    (clobber (reg:CC 33))]
   "TARGET_64BIT"
-  "icmh\t%0,8,%1"
+  "icmh\t%0,8,%S1"
   [(set_attr "op_type" "RSY")])
 
 (define_insn "*sethighqidi_31"
    (clobber (reg:CC 33))]
   "!TARGET_64BIT"
   "@
-   icm\t%0,8,%1
-   icmy\t%0,8,%1"
+   icm\t%0,8,%S1
+   icmy\t%0,8,%S1"
   [(set_attr "op_type" "RS,RSY")])
 
 (define_insn_and_split "*extractqi"
         (plus:DI (plus:DI (match_dup 1) (match_dup 2)) (match_dup 3)))]
   "s390_match_ccmode (insn, CCLmode) && TARGET_64BIT"
   "@
-   alcgr\\t%0,%2
-   alcg\\t%0,%2"
+   alcgr\t%0,%2
+   alcg\t%0,%2"
   [(set_attr "op_type"  "RRE,RXY")])
 
 (define_insn "*adddi3_alc"
    (clobber (reg:CC 33))]
   "TARGET_64BIT"
   "@
-   alcgr\\t%0,%2
-   alcg\\t%0,%2"
+   alcgr\t%0,%2
+   alcg\t%0,%2"
   [(set_attr "op_type"  "RRE,RXY")])
 
 (define_insn "*subdi3_slb_cc"
         (minus:DI (minus:DI (match_dup 1) (match_dup 2)) (match_dup 3)))]
   "s390_match_ccmode (insn, CCLmode) && TARGET_64BIT"
   "@
-   slbgr\\t%0,%2
-   slbg\\t%0,%2"
+   slbgr\t%0,%2
+   slbg\t%0,%2"
   [(set_attr "op_type"  "RRE,RXY")])
 
 (define_insn "*subdi3_slb"
    (clobber (reg:CC 33))]
   "TARGET_64BIT"
   "@
-   slbgr\\t%0,%2
-   slbg\\t%0,%2"
+   slbgr\t%0,%2
+   slbg\t%0,%2"
   [(set_attr "op_type"  "RRE,RXY")])
 
 (define_expand "adddicc"
         (plus:SI (plus:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
   "s390_match_ccmode (insn, CCLmode) && TARGET_CPU_ZARCH"
   "@
-   alcr\\t%0,%2
-   alc\\t%0,%2"
+   alcr\t%0,%2
+   alc\t%0,%2"
   [(set_attr "op_type"  "RRE,RXY")])
 
 (define_insn "*addsi3_alc"
    (clobber (reg:CC 33))]
   "TARGET_CPU_ZARCH"
   "@
-   alcr\\t%0,%2
-   alc\\t%0,%2"
+   alcr\t%0,%2
+   alc\t%0,%2"
   [(set_attr "op_type"  "RRE,RXY")])
 
 (define_insn "*subsi3_slb_cc"
         (minus:SI (minus:SI (match_dup 1) (match_dup 2)) (match_dup 3)))]
   "s390_match_ccmode (insn, CCLmode) && TARGET_CPU_ZARCH"
   "@
-   slbr\\t%0,%2
-   slb\\t%0,%2"
+   slbr\t%0,%2
+   slb\t%0,%2"
   [(set_attr "op_type"  "RRE,RXY")])
 
 (define_insn "*subsi3_slb"
    (clobber (reg:CC 33))]
   "TARGET_CPU_ZARCH"
   "@
-   slbr\\t%0,%2
-   slb\\t%0,%2"
+   slbr\t%0,%2
+   slb\t%0,%2"
   [(set_attr "op_type"  "RRE,RXY")])
 
 (define_expand "addsicc"
   "@
    nr\t%0,%2
    nill\t%0,%b2
-   ni\t%0,%b2
-   niy\t%0,%b2
+   ni\t%S0,%b2
+   niy\t%S0,%b2
    #"
   [(set_attr "op_type"  "RR,RI,SI,SIY,SS")])
 
   "!TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
   "@
    nr\t%0,%2
-   ni\t%0,%b2
+   ni\t%S0,%b2
    #"
   [(set_attr "op_type"  "RR,SI,SS")])
 
    (use (match_operand 2 "const_int_operand" "n"))
    (clobber (reg:CC 33))]
   "INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 256"
-  "nc\t%O0(%2,%R0),%1"
+  "nc\t%O0(%2,%R0),%S1"
   [(set_attr "op_type" "SS")
    (set_attr "type"    "cs")])
 
   "@
    or\t%0,%2
    oill\t%0,%b2
-   oi\t%0,%b2
-   oiy\t%0,%b2
+   oi\t%S0,%b2
+   oiy\t%S0,%b2
    #"
   [(set_attr "op_type"  "RR,RI,SI,SIY,SS")])
 
   "!TARGET_ZARCH && s390_logical_operator_ok_p (operands)"
   "@
    or\t%0,%2
-   oi\t%0,%b2
+   oi\t%S0,%b2
    #"
   [(set_attr "op_type"  "RR,SI,SS")])
 
    (use (match_operand 2 "const_int_operand" "n"))
    (clobber (reg:CC 33))]
   "INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 256"
-  "oc\t%O0(%2,%R0),%1"
+  "oc\t%O0(%2,%R0),%S1"
   [(set_attr "op_type" "SS")
    (set_attr "type"    "cs")])
 
   "s390_logical_operator_ok_p (operands)"
   "@
    xr\t%0,%2
-   xi\t%0,%b2
-   xiy\t%0,%b2
+   xi\t%S0,%b2
+   xiy\t%S0,%b2
    #"
   [(set_attr "op_type"  "RR,SI,SIY,SS")])
 
    (use (match_operand 2 "const_int_operand" "n"))
    (clobber (reg:CC 33))]
   "INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 256"
-  "xc\t%O0(%2,%R0),%1"
+  "xc\t%O0(%2,%R0),%S1"
   [(set_attr "op_type" "SS")
    (set_attr "type"    "cs")])
 
    (use (match_operand 1 "const_int_operand" "n"))
    (clobber (reg:CC 33))]
   "INTVAL (operands[1]) >= 1 && INTVAL (operands[1]) <= 256"
-  "xc\t%O0(%1,%R0),%0"
+  "xc\t%O0(%1,%R0),%S0"
   [(set_attr "op_type" "SS")
    (set_attr "type"    "cs")])
 
   "TARGET_64BIT"
   "@
    ear\t%0,%%a0\;sllg\t%0,%0,32\;ear\t%0,%%a1
-   stam\t%%a0,%%a1,%0"
+   stam\t%%a0,%%a1,%S0"
   [(set_attr "op_type" "NN,RS")
    (set_attr "atype"   "reg,*")
    (set_attr "type"    "o3,*")
   "!TARGET_64BIT"
   "@
    ear\t%0,%%a0
-   stam\t%%a0,%%a0,%0"
+   stam\t%%a0,%%a0,%S0"
   [(set_attr "op_type" "RRE,RS")])
 
 (define_insn "set_tp_64"
   "TARGET_64BIT"
   "@
    sar\t%%a1,%0\;srlg\t%1,%0,32\;sar\t%%a0,%1
-   lam\t%%a0,%%a1,%0"
+   lam\t%%a0,%%a1,%S0"
   [(set_attr "op_type" "NN,RS")
    (set_attr "atype"   "reg,*")
    (set_attr "type"    "o3,*")
   "!TARGET_64BIT"
   "@
    sar\t%%a0,%0
-   lam\t%%a0,%%a0,%0"
+   lam\t%%a0,%%a0,%S0"
   [(set_attr "op_type" "RRE,RS")])
 
 (define_insn "*tls_load_64"