s390.md: Changed attributes for scheduling.
authorHartmut Penner <hpenner@de.ibm.com>
Fri, 21 Sep 2001 11:41:43 +0000 (11:41 +0000)
committerHartmut Penner <hpenner@gcc.gnu.org>
Fri, 21 Sep 2001 11:41:43 +0000 (11:41 +0000)
2001-09-21  Hartmut Penner  <hpenner@de.ibm.com>

        * s390.md: Changed attributes for scheduling.
        * s390.c: (s390_adjust_cost, s390_adjust_priority)
        Changed scheduling

From-SVN: r45725

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

index 00a521788492ec1b0783417013de2c0ce266be67..4fed3f7f8d4b05297f500f09ee553db0d3802b9e 100644 (file)
@@ -1,3 +1,9 @@
+2001-09-21  Hartmut Penner  <hpenner@de.ibm.com>
+
+       * s390.md: Changed attributes for scheduling.
+       * s390.c: (s390_adjust_cost, s390_adjust_priority)
+       Changed scheduling
+
 2001-09-21  Joseph S. Myers  <jsm28@cam.ac.uk>
 
        Table-driven attributes.
index 425c98e1781bb2bea7f6b3724dcac5bbf17ee08d..e4bc735209e4f210fca10a85df4dcf3d3e09e4d8 100644 (file)
@@ -46,6 +46,7 @@ Boston, MA 02111-1307, USA.  */
 
 
 static int s390_adjust_cost PARAMS ((rtx, rtx, rtx, int));
+static int s390_adjust_priority PARAMS ((rtx, int));
 
 #undef  TARGET_ASM_FUNCTION_PROLOGUE 
 #define TARGET_ASM_FUNCTION_PROLOGUE s390_function_prologue
@@ -62,6 +63,9 @@ static int s390_adjust_cost PARAMS ((rtx, rtx, rtx, int));
 #undef  TARGET_SCHED_ADJUST_COST
 #define TARGET_SCHED_ADJUST_COST s390_adjust_cost
 
+#undef  TARGET_SCHED_ADJUST_PRIORITY
+#define TARGET_SCHED_ADJUST_PRIORITY s390_adjust_priority
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 
 extern int reload_completed;
@@ -1587,7 +1591,9 @@ addr_generation_dependency_p (dep_rtx, insn)
    Data dependencies are all handled without delay.  However, if a
    register is modified and subsequently used as base or index 
    register of a memory reference, at least 4 cycles need to pass
-   between setting and using the register to avoid pipeline stalls.  */
+   between setting and using the register to avoid pipeline stalls.  
+   A exception is the LA instruction. A address generated by LA can
+   be used by introducing only a one cycle stall on the pipeline.  */
 
 static int
 s390_adjust_cost (insn, link, dep_insn, cost)
@@ -1610,19 +1616,13 @@ s390_adjust_cost (insn, link, dep_insn, cost)
   if (recog_memoized (insn) < 0 || recog_memoized (dep_insn) < 0)
     return cost;
 
-  /* If cost equal 1 nothing needs to be checked. */
-
-  if (cost == 1)
-    {
-      return cost;
-    }
-
   dep_rtx = PATTERN (dep_insn);
 
   if (GET_CODE (dep_rtx) == SET)
     {
       if (addr_generation_dependency_p (dep_rtx, insn))
        {
+         cost += (get_attr_type (dep_insn) == TYPE_LA) ? 1 : 4;  
          if (DEBUG_SCHED)
            {
              fprintf (stderr, "\n\nAddress dependency detected: cost %d\n",
@@ -1630,10 +1630,8 @@ s390_adjust_cost (insn, link, dep_insn, cost)
              debug_rtx (dep_insn);
              debug_rtx (insn);
            }
-         return cost;
        }
     }
-
   else if (GET_CODE (dep_rtx) == PARALLEL)
     {
       for (i = 0; i < XVECLEN (dep_rtx, 0); i++)
@@ -1641,6 +1639,7 @@ s390_adjust_cost (insn, link, dep_insn, cost)
          if (addr_generation_dependency_p (XVECEXP (dep_rtx, 0, i),
                                            insn))
            {
+             cost += (get_attr_type (dep_insn) == TYPE_LA) ? 1 : 4;  
              if (DEBUG_SCHED)
                {
                  fprintf (stderr, "\n\nAddress dependency detected: cost %d\n"
@@ -1648,15 +1647,49 @@ s390_adjust_cost (insn, link, dep_insn, cost)
                  debug_rtx (dep_insn);
                  debug_rtx (insn);
                }
-             return cost;
            }
        }
     }
 
-  /* default cost.  */
-  return 1;
+  return cost;
+}
+
+
+/* A C statement (sans semicolon) to update the integer scheduling priority
+   INSN_PRIORITY (INSN).  Reduce the priority to execute the INSN earlier,
+   increase the priority to execute INSN later.  Do not define this macro if
+   you do not need to adjust the scheduling priorities of insns. 
+
+   A LA instruction maybe scheduled later, since the pipeline bypasses the
+   calculated value.  */
+
+static int
+s390_adjust_priority (insn, priority)
+     rtx insn ATTRIBUTE_UNUSED;
+     int priority;
+{
+  if (! INSN_P (insn))
+    return priority;
+
+  if (GET_CODE (PATTERN (insn)) == USE 
+      || GET_CODE (PATTERN (insn)) == CLOBBER)
+    return priority;
+  
+  switch (get_attr_type (insn))
+    {
+    default:
+      break;
+      
+    case TYPE_LA:
+      if (priority >= 0 && priority < 0x01000000)
+       priority <<= 3;
+      break;
+    }
+  
+  return priority;
 }
 
+
 /* Pool concept for Linux 390:
    - Function prologue saves used register 
    - literal pool is dumped in prologue and  jump across with bras
index f17bf5c41784372296231122610159ec6a6dea08..853ac9bcfc67eebb76a4c0ad5b370d1caf4c7daa 100644 (file)
 
 ;; Insn type.  Used to default other attribute values.
 
-;
-; Insn are devide in two classes:
-; mem: Use of base and/or index register for address generation
-; reg: Use of second and third register not for address generation
-;
 
-(define_attr "atype" "mem,reg" (const_string "reg"))
+;; Define an insn type attribute.  This is used in function unit delay
+;; computations.
 
-;
-; Insn may take 1,2,3 or many cycles
-; For the scheduling it does not matter, if a instruction has
-; a issue_delay from 4 or more cycles, since the address dependency 
-; between two insns needs at least 4 cycles.
-;
+(define_attr "type" "integer,load,lr,la,store,imul,lmul,fmul,idiv,ldiv,fdiv,branch,jsr,other,o2,o3"
+  (const_string "integer"))
 
-(define_attr "cycle" "1,2,3,n" (const_string "1"))
+;; Insn are devide in two classes:
+;;   mem: Insn accesssing memory
+;;   reg: Insn operands all in registers
 
-;
-; There are three classes of insns:
-; set:  instruction setting a (potential) address relevant register
-; xset: instruction setting no address relevant register
-; la:   instruction setting a (potential) address relevant register,
-;       but behave 'better' on the pipeline
-;
+(define_attr "atype" "reg,mem"
+  (const_string "reg"))
 
-(define_attr "type" "set,xset,la" (const_string "xset"))
+;; Generic pipeline function unit.  
 
-;
-; Set operations changing a target register, which could be used for
-; address generation. Adjust cost will check, if realy applicable. 
-;
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "integer") 1 1)
 
-(define_function_unit "memory" 1 0
-  (and (eq_attr "type" "set")
-       (eq_attr "cycle" "1"))
-  5 1 [(eq_attr "atype" "mem")] )
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "load") 1 1)
 
-(define_function_unit "memory" 1 0
-  (and (eq_attr "type" "set")
-       (eq_attr "cycle" "2")) 5 2)
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "la") 1 1)
 
-(define_function_unit "memory" 1 0
-  (and (eq_attr "type" "set")
-       (eq_attr "cycle" "3")) 5 3)
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "lr") 1 1)
 
-(define_function_unit "memory" 1 0
-  (and (eq_attr "type" "set")
-       (eq_attr "cycle" "n")) 5 4)
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "store") 1 1)
 
-(define_function_unit "memory" 1 0
-  (eq_attr "type" "la") 2 1)
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "jsr") 5 5)
 
-;
-; xset insns, which don't set any valid address register.
-; Only the issue delay matters.
-; 
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "imul") 7 7)
+
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "fmul") 6 6)
 
-(define_function_unit "memory" 1 0
-  (and (eq_attr "type" "xset")
-       (eq_attr "cycle" "1")) 1 1)
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "idiv") 33 33)
 
-(define_function_unit "memory" 1 0
-  (and (eq_attr "type" "xset")
-       (eq_attr "cycle" "2")) 1 2)
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "fdiv") 33 33)
 
-(define_function_unit "memory" 1 0
-  (and (eq_attr "type" "xset")
-       (eq_attr "cycle" "3")) 1 3)
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "o2") 2 2)
 
-(define_function_unit "memory" 1 0
-  (and (eq_attr "type" "xset")
-       (eq_attr "cycle" "n")) 1 4)
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "o3") 3 3)
 
-; Operand type. Used to default length attribute values
+(define_function_unit "integer" 1 0
+  (eq_attr "type" "other") 5 5)
+
+;; Operand type. Used to default length attribute values
 
 (define_attr "op_type"
   "NN,E,RR,RRE,RX,RS,RSI,RI,SI,S,SS,SSE,RXE,RSE,RIL,RIE"
 
 ;; Define attributes for `asm' insns.
 
-(define_asm_attributes [(set_attr "type" "xset")
+(define_asm_attributes [(set_attr "type" "other")
                         (set_attr "op_type" "NN")])
 
 ;;
   return \"tmhh\\t%0,%x1\";
 }"
   [(set_attr "op_type" "RX")
-   (set_attr "type"    "xset")])
+   (set_attr "type"    "integer")])
 
 
 (define_insn "*cmpdi_tm"
     return \"tmll\\t%0,%x1\";
 }"
   [(set_attr "op_type" "RX")
-   (set_attr "type"    "xset")])
+   (set_attr "type"    "integer")])
 
 
 (define_insn "*ltgr"
   "s390_match_ccmode(insn, CCSmode) && TARGET_64BIT"
   "ltgr\\t%2,%0"
   [(set_attr "op_type" "RRE")
-   (set_attr "type"    "set")])
+   (set_attr "type"    "integer")])
 
 (define_insn "*cmpdi_ccs_0_64"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCSmode) && TARGET_64BIT"
   "ltgr\\t%0,%0"
   [(set_attr "op_type" "RRE")
-   (set_attr "type"    "set")])
+   (set_attr "type"    "integer")])
 
 (define_insn "*cmpdi_ccs_0_31"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCSmode)"
   "srda\\t%0,0"
   [(set_attr "op_type" "RS")
-   (set_attr "type"    "set")])
+   (set_attr "type"    "integer")])
 
 (define_insn "*cmpdi_ccs"
   [(set (reg 33)
   operands[1] = GEN_INT (1 << (15 - INTVAL(operands[2])));
   return \"tmh\\t%0,%x1\";
 }"
-  [(set_attr "op_type" "RI")
-   (set_attr "type"    "xset")])
+  [(set_attr "op_type" "RI")])
 
 (define_insn "*cmpsi_tm"
   [(set (reg 33)
     }
   return \"tml\\t%0,%x1\";
 }"
-  [(set_attr "op_type" "RX")
-   (set_attr "type"    "xset")])
-
+  [(set_attr "op_type" "RX")])
 
 (define_insn "*ltr"
   [(set (reg 33)
         (match_dup 0))]
   "s390_match_ccmode(insn, CCSmode)"
   "ltr\\t%2,%0"
-  [(set_attr "op_type" "RR")
-   (set_attr "type"    "set")])
+  [(set_attr "op_type" "RR")])
 
 (define_insn "*icm15"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCSmode)"
   "icm\\t%2,15,%0"
   [(set_attr "op_type" "RS")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "set")])
+   (set_attr "atype"   "mem")])
 
 (define_insn "*icm15_cconly"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCSmode)"
   "icm\\t%2,15,%0"
   [(set_attr "op_type" "RS")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "set")])
+   (set_attr "atype"   "mem")])
 
 (define_insn "*cmpsi_ccs_0"
   [(set (reg 33)
                  (match_operand:SI 1 "const0_operand" "")))]
   "s390_match_ccmode(insn, CCSmode)"
   "ltr\\t%0,%0"
-  [(set_attr "op_type" "RR")
-   (set_attr "type"    "set")])
+  [(set_attr "op_type" "RR")])
 
 (define_insn "*cmpsidi_ccs"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCSmode)"
   "ch\\t%0,%1"
   [(set_attr "op_type" "RR")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "xset")])
+   (set_attr "atype"   "mem")])
 
 (define_insn "*cmpsi_ccs"
   [(set (reg 33)
    chi\\t%0,%c1
    c\\t%0,%1"
   [(set_attr "op_type" "RR,RI,RX")
-   (set_attr "atype"   "reg,reg,mem")
-   (set_attr "type"    "xset,xset,xset")])
+   (set_attr "atype"   "reg,reg,mem")])
    
 (define_insn "*cmpsi_ccu"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCUmode)"
   "clc\\t%O0(4,%R0),%1"
    [(set_attr "op_type" "SS")
-    (set_attr "atype"   "mem")
-    (set_attr "type"    "xset")])
-
+    (set_attr "atype"   "mem")])
 
 ; HI instructions
 
   "s390_match_ccmode(insn, CCSmode)"
   "icm\\t%2,3,%0"
   [(set_attr "op_type" "RS")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "set")])
+   (set_attr "atype"   "mem")])
 
 (define_insn "*cmphi_cct_0"
   [(set (reg 33)
                  (match_operand:HI 1 "const0_operand"   "")))]
   "s390_match_ccmode(insn, CCTmode)"
   "tml\\t%0,65535"
-  [(set_attr "op_type" "RX")
-   (set_attr "type"    "xset")])
+  [(set_attr "op_type" "RX")])
 
 (define_insn "*cmphi_ccs_0"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCSmode)"
   "icm\\t%2,3,%0"
   [(set_attr "op_type" "RS")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "set")])
+   (set_attr "atype"   "mem")])
 
 (define_insn "*cmphi_ccu"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCUmode)"
   "clm\\t%0,3,%1"
   [(set_attr "op_type" "RS")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "xset")])
+   (set_attr "atype"   "mem")])
 
 (define_insn "*cmphi_ccu_mem"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCUmode)"
   "clc\\t%O0(2,%R0),%1"
   [(set_attr "op_type" "SS")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "xset")])
+   (set_attr "atype"   "mem")])
 
 
 ; QI instructions
   "s390_match_ccmode(insn, CCSmode)"
   "icm\\t%2,1,%0"
   [(set_attr "op_type" "RS")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "set")])
+   (set_attr "atype"   "mem")])
 
 (define_insn "*tm_0"
   [(set (reg 33)
    INTVAL(operands[1]) >= 0 && INTVAL(operands[1]) < 256"
   "tm\\t%0,%1"
   [(set_attr "op_type" "RI")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "xset")])
+   (set_attr "atype"   "mem")])
 
 (define_insn "*cmpqi_cct_0"
   [(set (reg 33)
                  (match_operand:QI 1 "const0_operand"   "")))]
   "s390_match_ccmode(insn, CCTmode)"
   "tml\\t%0,255"
-  [(set_attr "op_type" "RI")
-   (set_attr "type"    "xset")])
+  [(set_attr "op_type" "RI")])
 
 (define_insn "*cmpqi_ccs_0"
   [(set (reg 33)
    (clobber (match_scratch:QI 2 "=d"))]
   "s390_match_ccmode(insn, CCSmode)"
   "icm\\t%2,1,%0"
-  [(set_attr "op_type" "RS")
-   (set_attr "type"    "xset")])
+  [(set_attr "op_type" "RS")])
 
 (define_insn "*cmpqi_ccu_0"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCUmode)"
   "cli\\t%0,0"
   [(set_attr "op_type" "SI")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "xset")])
+   (set_attr "atype"   "mem")])
 
 (define_insn "*cmpqi_ccu"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCUmode)"
   "clm\\t%0,1,%1"
   [(set_attr "op_type" "RS")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "xset")])
+   (set_attr "atype"   "mem")])
 
 (define_insn "*cmpqi_ccu_immed"
   [(set (reg 33)
    INTVAL(operands[1]) >= 0 && INTVAL(operands[1]) < 256"
   "cli\\t%0,%1"
   [(set_attr "op_type" "SI")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "xset")])
+   (set_attr "atype"   "mem")])
 
 (define_insn "*cmpqi_ccu_mem"
   [(set (reg 33)
   "s390_match_ccmode(insn, CCUmode)"
   "clc\\t%O0(1,%R0),%1"
   [(set_attr "op_type" "SS")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "xset")])
+   (set_attr "atype"   "mem")])
 
 
 ; DF instructions
                  (match_operand:DF 1 "const0_operand" "")))]
   "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
   "ltdbr\\t%0,%0"
-   [(set_attr "op_type" "RR")
-    (set_attr "type"    "set")])
+   [(set_attr "op_type" "RR")])
 
 (define_insn "*cmpdf_ccs_0_ibm"
   [(set (reg 33)
                  (match_operand:DF 1 "const0_operand" "")))]
   "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IBM_FLOAT"
   "ltdr\\t%0,%0"
-   [(set_attr "op_type" "RR")
-    (set_attr "type"    "set")])
+   [(set_attr "op_type" "RR")])
 
 (define_insn "*cmpdf_ccs"
   [(set (reg 33)
    cdbr\\t%0,%1
    cdb\\t%0,%1"
    [(set_attr "op_type" "RR,RX")
-    (set_attr "atype"   "reg,mem")  
-    (set_attr "type"    "xset,xset")])
+    (set_attr "atype"   "reg,mem")])  
 
 (define_insn "*cmpdf_ccs_ibm"
   [(set (reg 33)
    cdr\\t%0,%1
    cd\\t%0,%1"
    [(set_attr "op_type" "RR,RX")
-    (set_attr "atype"   "reg,mem")  
-    (set_attr "type"    "xset,xset")])
+    (set_attr "atype"   "reg,mem")])  
 
 
 ; SF instructions
                  (match_operand:SF 1 "const0_operand" "")))]
   "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
   "ltebr\\t%0,%0"
-   [(set_attr "op_type" "RR")
-    (set_attr "type"    "set")])
+   [(set_attr "op_type" "RR")])
 
 (define_insn "*cmpsf_ccs_0_ibm"
   [(set (reg 33)
                  (match_operand:SF 1 "const0_operand" "")))]
   "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IBM_FLOAT"
   "lter\\t%0,%0"
-   [(set_attr "op_type" "RR")
-    (set_attr "type"    "set")])
+   [(set_attr "op_type" "RR")])
 
 (define_insn "*cmpsf_ccs"
   [(set (reg 33)
    cebr\\t%0,%1
    ceb\\t%0,%1"
   [(set_attr "op_type" "RR,RX")
-   (set_attr "atype"   "reg,mem")
-   (set_attr "type"    "xset,xset")])
+   (set_attr "atype"   "reg,mem")])
 
 (define_insn "*cmpsf_ccs"
   [(set (reg 33)
    cer\\t%0,%1
    ce\\t%0,%1"
   [(set_attr "op_type" "RR,RX")
-   (set_attr "atype"   "reg,mem")
-   (set_attr "type"    "xset,xset")])
+   (set_attr "atype"   "reg,mem")])
 
 
 ;;
 }"
   [(set_attr "op_type" "NN,NN,RS,RS,SS")
    (set_attr "atype"   "reg,reg,mem,mem,mem")
-   (set_attr "type"    "set")
+   (set_attr "type"    "o2")
    (set_attr "length"  "12,8,10,10,*")])
 
 ;
    stg\\t%1,%0
    mvc\\t%O0(8,%R0),%1"        
    [(set_attr "op_type" "RRE,RI,RIL,RXE,RXE,SS")
-    (set_attr "atype"   "reg,reg,reg,mem,mem,mem")
-    (set_attr "type"    "set,set,la,set,set,set")])
+    (set_attr "type"    "integer,integer,la,integer,integer,integer")
+    (set_attr "atype"   "reg,reg,reg,mem,mem,mem")])
 
 (define_insn "*movdi_31"
   [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,m,Q")
 }"
   [(set_attr "op_type" "NN,NN,RS,RS,SS")
    (set_attr "atype"   "reg,reg,mem,mem,mem")
-   (set_attr "type"    "set")
+   (set_attr "type"    "o2")
    (set_attr "length"  "4,8,8,8,*")])
 
 
    st\\t%1,%0
    mvc\\t%O0(4,%R0),%1"        
   [(set_attr "op_type" "RR,RI,RX,RX,SS")
-   (set_attr "atype"   "reg,reg,mem,mem,mem")
-   (set_attr "type"    "set")])
+   (set_attr "type"    "lr,*,load,store,store")        
+   (set_attr "atype"   "reg,reg,mem,mem,mem")])
 
 
 ;
    lh\\t%0,%1
    sth\\t%1,%0"
   [(set_attr "op_type" "RR,RI,RX,RX")
-   (set_attr "atype"   "reg,reg,mem,mem")
-   (set_attr "type"    "xset")])
-
+   (set_attr "atype"   "reg,reg,mem,mem")])
 
 ;
 ; movqi instruction pattern(s).
    stc\\t%1,%0
    mvi\\t%0,%b1"
   [(set_attr "op_type" "RR,RI,RXE,RX,SI")
-   (set_attr "atype"   "reg,reg,mem,mem,mem")
-   (set_attr "type"    "xset")])
-
+   (set_attr "atype"   "reg,reg,mem,mem,mem")])
 
 (define_insn "movqi"
   [(set (match_operand:QI 0 "nonimmediate_operand" "=d,d,d,m,Q")
    stc\\t%1,%0
    mvi\\t%0,%b1"
   [(set_attr "op_type" "RR,RX,RX,RX,SI")
-   (set_attr "atype"   "reg,reg,mem,mem,mem")
-   (set_attr "type"    "xset")])
-
+   (set_attr "atype"   "reg,reg,mem,mem,mem")])
 
 ;
 ; moveqstrictqi instruction pattern(s).
    icm\\t%0,3,%1
    stcm\\t%1,3,%0"
   [(set_attr "op_type" "RS,RS")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "xset")])
+   (set_attr "atype"   "mem")])
 
 
 ;
    l\\t%0,%1
    st\\t%1,%0"
   [(set_attr "op_type" "RR,RS,RS")
-   (set_attr "atype"   "reg,mem,mem")
-   (set_attr "type"    "xset")])
+   (set_attr "atype"   "reg,mem,mem")])
 
 
 ;
    lgr\\t%0,%1
    mvc\\t%O0(8,%R0),%1"        
   [(set_attr "op_type" "RR,RX,RX,RXE,RXE,RR,SS")
-   (set_attr "atype"   "reg,mem,mem,mem,mem,mem,mem")
-   (set_attr "type"    "xset")])
+   (set_attr "atype"   "reg,mem,mem,mem,mem,mem,mem")])
 
 (define_insn "*movdf_31"
   [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,m,d,m,d,Q")
    lgr\\t%0,%1
    mvc\\t%O0(8,%R0),%1"        
   [(set_attr "op_type" "RXE,RXE,RR,SS")
-   (set_attr "atype"   "mem,mem,mem,mem")
-   (set_attr "type"    "xset")])
+   (set_attr "atype"   "mem,mem,mem,mem")])
 
 (define_insn "*movdf_soft_31"
   [(set (match_operand:DF 0 "nonimmediate_operand" "=!d,d,m,Q")
     return \"lmg\\t%1,%0,%2\";
 }"
    [(set_attr "op_type" "RXE")
-    (set_attr "atype"   "mem")
-    (set_attr "type"    "set")])
+    (set_attr "atype"   "mem")])
 
 (define_insn "*load_multiple_si"
   [(match_parallel 0 "load_multiple_operation"
     return \"lm\\t%1,%0,%2\";
 }"
    [(set_attr "op_type" "RXE")
-    (set_attr "atype"   "mem")
-    (set_attr "type"    "set")])
+    (set_attr "atype"   "mem")])
 
 ;
 ; store multiple pattern(s). 
 }"
    [(set_attr "op_type" "RXE")
     (set_attr "atype"   "mem")
-    (set_attr "type"    "xset")])
+    (set_attr "type"    "other")])
 
 
 (define_insn "*store_multiple_si"
 }"
    [(set_attr "op_type" "RXE")
     (set_attr "atype"   "mem")
-    (set_attr "type"    "xset")])
+    (set_attr "type"    "other")])
 
 ;;
 ;; String instructions.
   "mvcle\\t%0,%1,0\;jo\\t.-4"
   [(set_attr "op_type" "NN")
    (set_attr "atype"   "mem")
-   (set_attr "cycle"   "n")
+   (set_attr "type"   "other")
    (set_attr "length"  "8")])
 
 (define_insn "clrstrsi_31"
   "mvcle\\t%0,%1,0\;jo\\t.-4"
   [(set_attr "op_type" "NN")
    (set_attr "atype"   "mem")
-   (set_attr "cycle"   "n")
+   (set_attr "type"    "other")
    (set_attr "length"  "8")])
 
 ;
   "clc\\t%O0(%c2,%R0),%1"
   [(set_attr "op_type" "SS")
    (set_attr "atype"   "mem")
-   (set_attr "type"    "xset")])
+   (set_attr "type"    "other")])
 
 ; Compare a block that is larger than 255 bytes in length.
 
   "clcl\\t%0,%1"
   [(set_attr "op_type" "RR")
    (set_attr "atype"   "mem")
-   (set_attr "type"    "xset")])
+   (set_attr "type"    "other")])
 
 (define_insn "cmpstr_31"
   [(set (reg:CCU 33)
   "clcl\\t%0,%1"
   [(set_attr "op_type" "RR")
    (set_attr "atype"   "mem")
-   (set_attr "type"    "xset")])
+   (set_attr "type"    "other")])
 
 ; Convert condition code to integer in range (-1, 0, 1)
 
   [(set_attr "op_type" "NN")
    (set_attr "length"  "16")
    (set_attr "atype"   "reg")
-   (set_attr "type"    "xset")])
+   (set_attr "type"    "other")])
 
 (define_insn "cmpint_di"
   [(set (match_operand:DI 0 "register_operand" "=d")
   [(set_attr "op_type" "NN")
    (set_attr "length"  "22")
    (set_attr "atype"   "reg")
-   (set_attr "type"    "xset")])
+   (set_attr "type"    "other")])
 
 ;;
 ;;- Conversion instructions.
    lgfr\\t%0,%1
    lgf\\t%0,%1"
   [(set_attr "op_type" "RRE,RXE")
-   (set_attr "atype"   "reg,mem")
-   (set_attr "type"    "set")])
+   (set_attr "atype"   "reg,mem")])
 
 
 ;
   "sllg\\t%0,%1,48\;srag\\t%0,%0,48"
   [(set_attr "op_type" "NN")
    (set_attr "length"  "12")
-   (set_attr "cycle"   "2")  
-   (set_attr "type"    "set")])
-
+   (set_attr "type"   "o2")])  
 
 ;
 ; extendqidi2 instruction pattern(s).
   "sllg\\t%0,%1,56\;srag\\t%0,%0,56"
   [(set_attr "op_type" "NN")
    (set_attr "length"  "12")
-   (set_attr "cycle"   "2")
-   (set_attr "type"    "set")])
-
+   (set_attr "type"    "o2")])
 
 ;
 ; extendhisi2 instruction pattern(s).
    lr\\t%0,%1\;sll\\t%0,16\;sra\\t%0,16
    lh\\t%0,%1"
   [(set_attr "op_type" "NN,NN,RX")
-   (set_attr "cycle"   "2,3,1")
+   (set_attr "type"   "o2,o3,integer")
    (set_attr "atype"   "reg,reg,mem")
-   (set_attr "type"    "set")
    (set_attr "length"  "8,10,*")])
 
 
    sll\\t%0,24\;sra\\t%0,24
    icm\\t%0,8,%1\;sra\\t%0,24"
   [(set_attr "op_type" "NN,NN")
-   (set_attr "cycle"   "2")
+   (set_attr "type"    "o2")
    (set_attr "atype"   "reg,mem")
-   (set_attr "type"    "set")
    (set_attr "length"  "8,8")])
 
 
    sll\\t%0,24\;sra\\t%0,24
    icm\\t%0,8,%1\;sra\\t%0,24"
   [(set_attr "op_type" "NN,NN")
-   (set_attr "cycle"   "2")
+   (set_attr "type"    "o2")
    (set_attr "atype"   "reg,mem")
-   (set_attr "type"    "set")
    (set_attr "length"  "8,8")])
 
 
    llgfr\\t%0,%1
    llgf\\t%0,%1"
   [(set_attr "op_type" "RRE,RXE")
-   (set_attr "atype"   "reg,mem")
-   (set_attr "type"    "set")])
+   (set_attr "atype"   "reg,mem")])
 
 
 ;
    llgfr\\t%0,%1\;iilh\\t%0,0
    llgh\\t%0,%1"
   [(set_attr "op_type" "NN,RXE")
-   (set_attr "cycle"   "2,1")
+   (set_attr "type"   "o2,integer")
    (set_attr "atype"   "reg,mem")
-   (set_attr "length"  "12,*") 
-   (set_attr "type"    "set")])
-
+   (set_attr "length"  "12,*")])       
 
 ;
 ; zero_extendqidi2 instruction pattern(s)
    sllg\\t%0,%1,56\;srlg\\t%0,%0,56
    llgc\\t%0,%1"
   [(set_attr "op_type" "NN,RXE")
-   (set_attr "cycle"   "2,1")
+   (set_attr "type"   "o2,integer")
    (set_attr "atype"   "reg,mem")
-   (set_attr "type"    "set")
    (set_attr "length"  "12,*")])
 
 
    icm\\t%0,12,%2
    icm\\t%0,12,%1\;srl\\t%0,16"
   [(set_attr "op_type" "RX,NN")
-   (set_attr "cycle"   "1,2")
+   (set_attr "type"   "integer,o2")
    (set_attr "atype"   "reg,mem")
-   (set_attr "type"    "set")
    (set_attr "length"  "*,8")])
 
 
   ""
   "sr\\t%0,%0\;ic\\t%0,%1"
   [(set_attr "op_type" "NN")
-   (set_attr "cycle"   "2")
+   (set_attr "type"    "o2")
    (set_attr "atype"   "mem")
-   (set_attr "type"    "set")
    (set_attr "length"  "6")])
 
 (define_insn "zero_extendqisi2_reg_31"
   ""
   "icm\\t%0,14,%2"
   [(set_attr "op_type" "RX")
-   (set_attr "atype"   "mem")
-   (set_attr "type"    "set")])
+   (set_attr "atype"   "mem")])
 
 (define_insn "*zero_extendqisi2_64"
   [(set                 (match_operand:SI 0 "register_operand" "=!d,d")
    sllg\\t%0,%1,56\;srlg\\t%0,%0,56
    llgc\\t%0,%1"
   [(set_attr "op_type" "NN,RXE")
-   (set_attr "cycle"   "2,1")
+   (set_attr "type"   "o2,integer")
    (set_attr "atype"   "reg,mem")
    (set_attr "length"  "12,*")])
 
   "TARGET_64BIT"
   "sllg\\t%0,%1,56\;srlg\\t%0,%0,56"
   [(set_attr "op_type" "NN")
-   (set_attr "cycle"   "2")    
+   (set_attr "type"    "o2")   
    (set_attr "length"  "12")])
 
 
   "TARGET_64BIT"
   "iilh\\t%0,0\;nill\\t%0,0x00FF"
   [(set_attr "op_type" "NN")
-   (set_attr "cycle"   "2")
+   (set_attr "type"    "o2")
    (set_attr "length"  "8")])
 
 
   "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
   "cgdbr\\t%0,%h2,%1"
   [(set_attr "op_type" "RRE")
-   (set_attr "cycle"   "n")])
+   (set_attr "type"   "other")])
 
 ;
 ; fixuns_truncdfsi2 and fix_truncdfsi2 instruction pattern(s).
   "TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
   "cfdbr\\t%0,%h2,%1"
    [(set_attr "op_type" "RRE")
-    (set_attr "cycle"   "n" )])
+    (set_attr "type"   "other" )])
 
 (define_insn "fix_truncdfsi2_ibm"
   [(set (match_operand:SI 0 "register_operand" "=d")
    return \"l\\t%0,%N4\";
 }"
   [(set_attr "op_type" "NN")
-   (set_attr "cycle"   "n")
+   (set_attr "type"   "other")
    (set_attr "length"  "20")])
 
 ;
   "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
   "cgebr\\t%0,%h2,%1"
   [(set_attr "op_type" "RRE")
-   (set_attr "cycle"   "n")])
+   (set_attr "type"   "other")])
 
 ;
 ; fixuns_truncsfsi2 and fix_truncsfsi2 instruction pattern(s).
   "TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
   "cfebr\\t%0,%h2,%1"
   [(set_attr "op_type" "RRE")
-   (set_attr "cycle"   "n")])
+   (set_attr "type"   "other")])
 
 ;
 ; floatdidf2 instruction pattern(s).
   "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
   "cdgbr\\t%0,%1"
   [(set_attr "op_type" "RRE")
-   (set_attr "cycle"   "n" )])
+   (set_attr "type"   "other" )])
 
 ;
 ; floatdisf2 instruction pattern(s).
   "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
   "cegbr\\t%0,%1"
   [(set_attr "op_type" "RRE")
-   (set_attr "cycle"   "n" )])
+   (set_attr "type"   "other" )])
 
 ;
 ; floatsidf2 instruction pattern(s).
   "TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
   "cdfbr\\t%0,%1"
   [(set_attr "op_type" "RRE")
-   (set_attr "cycle"   "n" )])
+   (set_attr "type"   "other" )])
 
 (define_insn "floatsidf2_ibm"
   [(set (match_operand:DF 0 "register_operand" "=f")
    return \"sd\\t%0,%2\";
 }"
   [(set_attr "op_type" "NN")
-   (set_attr "cycle"   "n" )
+   (set_attr "type"   "other" )
    (set_attr "length"  "20")])
 
 ;
   "TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
   "cefbr\\t%0,%1"
   [(set_attr "op_type" "RRE")
-   (set_attr "cycle"   "n" )])
+   (set_attr "type"   "other" )])
 
 ;
 ; truncdfsf2 instruction pattern(s).
    aghi\\t%0,%h2
    ag\\t%0,%2"
   [(set_attr "op_type"  "RRE,RI,RXE")
-   (set_attr "atype"    "reg,reg,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,reg,mem")])
 
 ;
 ; For weakness of reload, need (set (reg x) (plus (reg y) (reg x)))
    aghi\\t%0,%h1
    ag\\t%0,%1"
   [(set_attr "op_type" "RRE,RI,RXE")
-   (set_attr "atype"   "reg,reg,mem")
-   (set_attr "type"    "set")])
+   (set_attr "atype"   "reg,reg,mem")])
 
 (define_insn "adddi3_31"
   [(set (match_operand:DI 0 "register_operand" "=d,d")
   "TARGET_64BIT"
   "brxlg\\t%0,%2,.+6"
   [(set_attr "op_type" "RIE")
-   (set_attr "atype"   "reg")
-   (set_attr "type"    "set")])
+   (set_attr "atype"   "reg")])
 
 (define_insn "*reload_la_64"
   [(set (match_operand:DI 0 "register_operand" "=d")
    ahi\\t%0,%h2
    a\\t%0,%2"
   [(set_attr "op_type"  "RR,RI,RX")
-   (set_attr "atype"    "reg,reg,mem")  
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,reg,mem")])  
 
 (define_insn "*addsi3_cconly"
   [(set (reg 33) 
    ahi\\t%0,%h2
    a\\t%0,%2"
   [(set_attr "op_type"  "RR,RI,RX")
-   (set_attr "atype"    "reg,reg,mem")  
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,reg,mem")])  
 
 (define_insn "*addsi3_cconly2"
   [(set (reg 33) 
    ahi\\t%0,%h2
    a\\t%0,%2"
   [(set_attr "op_type"  "RR,RI,RX")
-   (set_attr "atype"    "reg,reg,mem")  
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,reg,mem")])  
 
 (define_insn "addsi3"
   [(set (match_operand:SI 0 "register_operand" "=d,d,d")
    ahi\\t%0,%h2
    a\\t%0,%2"
   [(set_attr "op_type"  "RR,RI,RX")
-   (set_attr "atype"    "reg,reg,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,reg,mem")])
 
 (define_insn "do_la"
   [(set (match_operand:SI 0 "register_operand" "=a")
   ""
   "brxle\\t%0,%2,.+4"
   [(set_attr "op_type" "RSI")
-   (set_attr "atype"   "reg")
-   (set_attr "type"    "set")])
+   (set_attr "atype"   "reg")])
 
 (define_insn "*reload_la_31"
   [(set (match_operand:SI 0 "register_operand" "=d")
    sgr\\t%0,%2
    sg\\t%0,%2"
   [(set_attr "op_type"  "RRE,RRE")
-   (set_attr "atype"    "reg,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem")])
 
 (define_insn "subdi3"
   [(set (match_operand:DI 0 "register_operand" "=d,d")
    sr\\t%0,%2
    s\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "atype"    "reg,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem")])
 
 (define_insn "*subsi3_cconly"
   [(set (reg 33)
    sr\\t%0,%2
    s\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "atype"    "reg,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem")])
 
 (define_insn "subsi3"
   [(set (match_operand:SI 0 "register_operand" "=d,d")
    sr\\t%0,%2
    s\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "atype"    "reg,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem")])
 
 ;
 ; subhi3 instruction pattern(s).
       rtx temp1_1 = gen_reg_rtx (SImode);
       rtx temp2_0 = gen_reg_rtx (SImode);
       rtx temp2_1 = gen_reg_rtx (SImode);
-
       emit_move_insn (temp1_0, operand_subword (operands[1], 0 ,1, DImode)); 
       emit_move_insn (temp1_1, operand_subword (operands[1], 1 ,1, DImode));
       emit_move_insn (temp2_0, operand_subword (operands[2], 0 ,1, DImode));
    mghi\\t%0,%h2
    msg\\t%0,%2"
   [(set_attr "op_type"  "RRE,RI,RX")
-   (set_attr "cycle"    "n")
    (set_attr "atype"    "reg,reg,mem")
-   (set_attr "type"     "set")])
+   (set_attr "type"     "imul")])
+
+;
+; mulsidi3 instruction pattern(s).
+;
+
+;(define_expand "mulsidi3"
+;  [(set (match_operand:DI 0 "register_operand" "")
+;      (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" ""))
+;               (sign_extend:DI (match_operand:SI 2 "general_operand" ""))))]
+;  ""
+;  "
+;{
+;  emit_insn (gen_extendsidi2 (operands[0], operands[1]));
+;  emit_insn (gen_muldisidi3  (operands[0], operands[0], operands[2]));
+;  DONE;
+;}")
+
+;(define_insn "muldisidi3"
+;  [(set (match_operand:DI 0 "register_operand" "=d,d")
+;      (mult:DI (match_operand:DI 1 "register_operand" "0,0")
+;               (sign_extend:DI (match_operand:SI 2 "general_operand" "d,m"))))
+;    (clobber (reg:CC 33))]
+;   "!TARGET_64BIT"
+;   "@
+;    mr\\t%0,%2
+;    m\\t%0,%2"
+;  [(set_attr "op_type"  "RR,RX")
+;   (set_attr "atype"    "reg,mem")
+;   (set_attr "type"     "imul")])
 
 ;
 ; mulsi3 instruction pattern(s).
    mhi\\t%0,%h2
    ms\\t%0,%2"
   [(set_attr "op_type"  "RRE,RI,RX")
-   (set_attr "cycle"    "n")
    (set_attr "atype"    "reg,reg,mem")
-   (set_attr "type"     "set")])
+   (set_attr "type"     "imul")])
 
 (define_insn "mulsi_6432"
    [(set (match_operand:DI 0 "register_operand" "=d,d")
     mr\\t%0,%2
     m\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "cycle"    "n")
    (set_attr "atype"    "reg,mem")
-   (set_attr "type"     "set")])
+   (set_attr "type"     "imul")])
  
 
 ;
    mdbr\\t%0,%2
    mdb\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "cycle"    "n")
+   (set_attr "type"    "fmul")
    (set_attr "atype"    "reg,mem")])
 
 (define_insn "*muldf3_ibm"
    mdr\\t%0,%2
    md\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "cycle"    "n")
+   (set_attr "type"    "fmul")
    (set_attr "atype"    "reg,mem")])
 
 ;
    meebr\\t%0,%2
    meeb\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "cycle"    "n")
+   (set_attr "type"     "fmul")
    (set_attr "atype"    "reg,mem")])
 
 (define_insn "*mulsf3_ibm"
    mer\\t%0,%2
    me\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "cycle"    "n")
+   (set_attr "type"     "fmul")
    (set_attr "atype"    "reg,mem")])
 
 
    dsgr\\t%0,%2
    dsg\\t%0,%2"
   [(set_attr "op_type"  "RRE,RXE")
-   (set_attr "cycle"    "n")
+   (set_attr "type"     "idiv")
    (set_attr "atype"    "reg,mem")])
 
 ;
    dlgr\\t%0,%2
    dlg\\t%0,%2"
   [(set_attr "op_type"  "RRE,RXE")
-   (set_attr "cycle"    "n")
+   (set_attr "type"     "idiv")
    (set_attr "atype"    "reg,mem")])
 
 ;
    dr\\t%0,%2
    d\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "cycle"    "n")
+   (set_attr "type"     "idiv")
    (set_attr "atype"    "reg,mem")])
 
 ;
    ddbr\\t%0,%2
    ddb\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "cycle"    "n")
+   (set_attr "type"    "fdiv")
    (set_attr "atype"    "reg,mem")])
 
 (define_insn "*divdf3_ibm"
    ddr\\t%0,%2
    dd\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "cycle"    "n")
+   (set_attr "type"    "fdiv")
    (set_attr "atype"    "reg,mem")])
 
 ;
    debr\\t%0,%2
    deb\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "cycle"    "n")
+   (set_attr "type"     "fdiv")
    (set_attr "atype"    "reg,mem")])
 
 (define_insn "*divsf3"
    der\\t%0,%2
    de\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "cycle"    "n")
+   (set_attr "type"     "fdiv")
    (set_attr "atype"    "reg,mem")])
 
 
    ng\\t%0,%2
    nc\\t%O0(8,%R0),%2"
   [(set_attr "op_type"  "RR,RX,SS")
-   (set_attr "atype"    "reg,mem,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem,mem")])
 
 (define_insn "*anddi3_cconly"
   [(set (reg 33)
    ngr\\t%0,%2
    ng\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "atype"    "reg,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem")])
 
 (define_insn "anddi3"
   [(set (match_operand:DI 0 "r_or_s_operand" "=d,d,Q")
    ng\\t%0,%2
    nc\\t%O0(8,%R0),%2"
   [(set_attr "op_type"  "RR,RX,SS")
-   (set_attr "atype"    "reg,mem,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem,mem")])
 
 ;
 ; andsi3 instruction pattern(s).
    n\\t%0,%2
    nc\\t%O0(4,%R0),%2"
   [(set_attr "op_type"  "RR,RX,SS")
-   (set_attr "atype"    "reg,mem,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem,mem")])
 
 (define_insn "*andsi3_cconly"
   [(set (reg 33)
    nr\\t%0,%2
    n\\t%0,%2"
   [(set_attr "op_type"  "RR,RX")
-   (set_attr "atype"    "reg,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem")])
 
 (define_insn "andsi3"
   [(set (match_operand:SI 0 "r_or_s_operand" "=d,d,Q")
    n\\t%0,%2
    nc\\t%O0(4,%R0),%2"
   [(set_attr "op_type"  "RR,RX,SS")
-   (set_attr "atype"    "reg,mem,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem,mem")])
 
 ;
 ; andhi3 instruction pattern(s).
    oc\\t%O0(8,%R0),%2
    oill\\t%0,%2"
   [(set_attr "op_type"  "RRE,RXE,SS,RI")
-   (set_attr "atype"    "reg,mem,mem,reg")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem,mem,reg")])
 
 ;
 ; iorsi3 instruction pattern(s).
    o\\t%0,%2
    oc\\t%O0(4,%R0),%2"
   [(set_attr "op_type"  "RR,RX,SS")
-   (set_attr "atype"    "reg,mem,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem,mem")])
 
 ;
 ; iorhi3 instruction pattern(s).
    xg\\t%0,%2
    xc\\t%O0(8,%R0),%2"
   [(set_attr "op_type"  "RRE,RXE,SS")
-   (set_attr "atype"    "reg,mem,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem,mem")])
 
 ;
 ; xorsi3 instruction pattern(s).
    x\\t%0,%2
    xc\\t%O0(4,%R0),%2"
   [(set_attr "op_type"  "RR,RX,SS")
-   (set_attr "atype"    "reg,mem,mem")
-   (set_attr "type"     "set")])
+   (set_attr "atype"    "reg,mem,mem")])
 
 ;
 ; xorhi3 instruction pattern(s).
    (clobber (reg:CC 33))]
   "TARGET_64BIT"
   "lcgr\\t%0,%1"
-  [(set_attr "op_type"  "RR")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RR")])
 
 (define_insn "*negdi2_31"
   [(set (match_operand:DI 0 "register_operand" "=d")
    (clobber (reg:CC 33))]
   ""
   "lcr\\t%0,%1"
-  [(set_attr "op_type"  "RR")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RR")])
 
 ;
 ; negdf2 instruction pattern(s).
    (clobber (reg:CC 33))]
   "TARGET_64BIT"
   "lpgr\\t%0,%1"
-  [(set_attr "op_type"  "RRE")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RRE")])
 
 ;
 ; abssi2 instruction pattern(s).
    (clobber (reg:CC 33))]
   ""
   "lpr\\t%0,%1"
-  [(set_attr "op_type"  "RR")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RR")])
 
 ;
 ; abshi2 instruction pattern(s).
   ""
   "sll\\t%1,16\;sra\\t%1,16\;lpr\\t%0,%1"
   [(set_attr "op_type"  "NN")
-   (set_attr "cycle"    "3")
+   (set_attr "type"    "o3")
    (set_attr "length"   "10")])
 
 ;
   "@
    rllg\\t%0,%1,%c2
    rllg\\t%0,%1,0(%2)"
-  [(set_attr "op_type"  "RSE")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RSE")])
 
 ;
 ; rotlsi3 instruction pattern(s).
   "@
    rll\\t%0,%1,%c2
    rll\\t%0,%1,0(%2)"
-  [(set_attr "op_type"  "RSE")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RSE")])
 
 
 ;;
   "@
    sldl\\t%0,%c2
    sldl\\t%0,0(%2)"     
-  [(set_attr "op_type"  "RS")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RS")])
 
 (define_insn "*ashldi3_64"
   [(set            (match_operand:DI 0 "register_operand" "=d,d")
   "@
    sllg\\t%0,%1,%2
    sllg\\t%0,%1,0(%2)"
-  [(set_attr "op_type"  "RSE")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RSE")])
 
 ;
 ; ashrdi3 instruction pattern(s).
   "@
    srag\\t%0,%1,%c2
    srag\\t%0,%1,0(%2)"
-  [(set_attr "op_type"  "RSE")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RSE")])
 
 ;
 ; ashlsi3 instruction pattern(s).
   "@
    sll\\t%0,%c2
    sll\\t%0,0(%2)"
-  [(set_attr "op_type"  "RS")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RS")])
 
 ;
 ; ashrsi3 instruction pattern(s).
   "@
    sra\\t%0,%c2
    sra\\t%0,0(%2)"
-  [(set_attr "op_type"  "RS")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RS")])
 
 ;
 ; ashlhi3 instruction pattern(s).
   "@
    srlg\\t%0,%1,%c2
    srlg\\t%0,%1,0(%2)"
-  [(set_attr "op_type"  "RS,RS")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RS,RS")])
 
 ;
 ; lshrsi3 instruction pattern(s).
   "@
    srl\\t%0,%c2
    srl\\t%0,0(%2)"
-  [(set_attr "op_type"  "RS")
-   (set_attr "type"     "set")])
+  [(set_attr "op_type"  "RS")])
 
 ;
 ; lshrhi3 instruction pattern(s).
   "TARGET_64BIT"
   "brasl\\t%2,%0"
   [(set_attr "op_type" "RIL")
-   (set_attr "cycle"   "n")])
+   (set_attr "type"   "jsr")])
 
 (define_insn "bras"
   [(call (mem:QI (match_operand:SI 0 "bras_sym_operand" "X"))
   "TARGET_SMALL_EXEC"
   "bras\\t%2,%0"
   [(set_attr "op_type" "RI")
-   (set_attr "cycle"   "n")])
+   (set_attr "type"   "jsr")])
 
 (define_insn "basr_64"
   [(call (mem:QI (match_operand:DI 0 "register_operand" "a"))
   "TARGET_64BIT"
   "basr\\t%2,%0"
   [(set_attr "op_type" "RR")
-   (set_attr "cycle"   "n")
+   (set_attr "type"    "jsr")
    (set_attr "atype"   "mem")])
 
 (define_insn "basr_31"
   "!TARGET_64BIT"
   "basr\\t%2,%0"
   [(set_attr "op_type" "RR")
-   (set_attr "cycle"   "n")
+   (set_attr "type"    "jsr")
    (set_attr "atype"    "mem")])
 
 (define_insn "bas_64"
   "TARGET_64BIT"
   "bas\\t%2,%a0"
   [(set_attr "op_type" "RX")
-   (set_attr "cycle"   "n")
+   (set_attr "type"    "jsr")
    (set_attr "atype"   "mem")])
 
 (define_insn "bas_31"
   "!TARGET_64BIT"
   "bas\\t%2,%a0"
   [(set_attr "op_type" "RX")
-   (set_attr "cycle"   "n")
+   (set_attr "type"    "jsr")
    (set_attr "atype"   "mem")])
 
 
   "TARGET_64BIT"
   "brasl\\t%3,%1"
   [(set_attr "op_type" "RIL")
-   (set_attr "cycle"   "n")])
+   (set_attr "type"    "jsr")])
 
 (define_insn "bras_r"
   [(set (match_operand 0 "register_operand" "=df")
   "TARGET_SMALL_EXEC"
   "bras\\t%3,%1"
   [(set_attr "op_type" "RI")
-   (set_attr "cycle"   "n")])
+   (set_attr "type"    "jsr")])
 
 (define_insn "basr_r_64"
   [(set (match_operand 0 "register_operand" "=df")
   "TARGET_64BIT"
   "basr\\t%3,%1"
   [(set_attr "op_type" "RR")
-   (set_attr "cycle"   "n")])
+   (set_attr "type"    "jsr")])
 
 (define_insn "basr_r_31"
   [(set (match_operand 0 "register_operand" "=df")
   "!TARGET_64BIT"
   "basr\\t%3,%1"
   [(set_attr "op_type" "RR")
-   (set_attr "cycle"   "n")
+   (set_attr "type"    "jsr")
    (set_attr "atype"   "mem")])
 
 (define_insn "bas_r_64"
   "TARGET_64BIT"
   "bas\\t%3,%a1"
   [(set_attr "op_type" "RX")
-   (set_attr "cycle"   "n")
+   (set_attr "type"    "jsr")
    (set_attr "atype"   "mem")])
 
 (define_insn "bas_r_31"
   "!TARGET_64BIT"
   "bas\\t%3,%a1"
    [(set_attr "op_type" "RX")
-    (set_attr "cycle"   "n")
+    (set_attr "type"    "jsr")
     (set_attr "atype"   "mem")])
 
 
     return \"basr\\t13,0\;ahi\\t13,%Y0\";
 }"
   [(set_attr "op_type" "NN")
-   (set_attr "cycle"   "2")
+   (set_attr "type"    "o2")
    (set_attr "length"  "8")])
 
 (define_insn "ltorg"
    return \"0:\";
 }"
   [(set_attr "op_type" "NN")
-   (set_attr "cycle"   "n")
+   (set_attr "type"    "branch")
    (set_attr "length"  "4096")])