OSDN Git Service

Add scheduling rules for EV5.
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 13 Jun 1996 01:47:01 +0000 (01:47 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 13 Jun 1996 01:47:01 +0000 (01:47 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@12280 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/config/alpha/alpha.md

index ac4e71f..b3028ea 100644 (file)
 
 ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
 \f
+;; Processor type -- this attribute must exactly match the processor_type
+;; enumeration in alpha.h.
+
+(define_attr "cpu" "ev4,ev5"
+  (const (symbol_ref "alpha_cpu")))
+
 ;; Define an insn type attribute.  This is used in function unit delay
 ;; computations, among other purposes.  For the most part, we use the names
 ;; defined in the EV4 documentation, but add a few that we have to know about
 ;; separately.
 
 (define_attr "type"
-  "ld,st,ibr,fbr,jsr,iaddlog,shiftcm,icmp,imull,imulq,fpop,fdivs,fdivt,ldsym,isubr"
-  (const_string "shiftcm"))
+  "ld,st,ibr,fbr,jsr,iadd,ilog,shift,cmov,icmp,imull,imulq,fadd,fmul,fcpys,fdivs,fdivt,ldsym,isubr"
+  (const_string "iadd"))
 
 ;; The TRAP_TYPE attribute marks instructions that may generate traps
 ;; (which are imprecise and may need a trapb if software complention
 ;; is desired).
 (define_attr "trap" "yes,no" (const_string "no"))
 
-;; We include four function units: ABOX, which computes the address,
+;; For the EV4 we include four function units: ABOX, which computes the address,
 ;; BBOX, used for branches, EBOX, used for integer operations, and FBOX,
 ;; used for FP operations.
 ;;
 ;; issues.
 
 ;; Memory delivers its result in three cycles.
-(define_function_unit "abox" 1 0 (eq_attr "type" "ld,ldsym,st") 6 2)
+(define_function_unit "ev4_abox" 1 0
+  (and (eq_attr "cpu" "ev4")
+       (eq_attr "type" "ld,st"))
+  6 2)
 
 ;; Branches have no delay cost, but do tie up the unit for two cycles.
-(define_function_unit "bbox" 1 1 (eq_attr "type" "ibr,fbr,jsr") 4 4)
+(define_function_unit "ev4_bbox" 1 1
+  (and (eq_attr "cpu" "ev4")
+       (eq_attr "type" "ibr,fbr,jsr"))
+  4 4)
 
 ;; Arithmetic insns are normally have their results available after two
 ;; cycles.  There are a number of exceptions.  They are encoded in
 ;; ADJUST_COST.  Some of the other insns have similar exceptions.
 
-(define_function_unit "ebox" 1 0 (eq_attr "type" "iaddlog,shiftcm,icmp") 4 2)
+(define_function_unit "ev4_ebox" 1 0
+  (and (eq_attr "cpu" "ev4")
+       (eq_attr "type" "iadd,ilog,ldsym,shift,cmov,icmp"))
+  4 2)
 
 ;; These really don't take up the integer pipeline, but they do occupy
 ;; IBOX1; we approximate here.
 
-(define_function_unit "ebox" 1 0 (eq_attr "type" "imull") 42 2)
-(define_function_unit "ebox" 1 0 (eq_attr "type" "imulq") 46 2)
-
-(define_function_unit "imult" 1 0 (eq_attr "type" "imull") 42 38)
-(define_function_unit "imult" 1 0 (eq_attr "type" "imulq") 46 42)
-
-(define_function_unit "fbox" 1 0 (eq_attr "type" "fpop") 12 2)
-
-(define_function_unit "fbox" 1 0 (eq_attr "type" "fdivs") 68 0)
-(define_function_unit "fbox" 1 0 (eq_attr "type" "fdivt") 126 0)
-
-(define_function_unit "divider" 1 0 (eq_attr "type" "fdivs") 68 60)
-(define_function_unit "divider" 1 0 (eq_attr "type" "fdivt") 126 118)
+(define_function_unit "ev4_ebox" 1 0
+  (and (eq_attr "cpu" "ev4")
+       (eq_attr "type" "imull"))
+  42 2)
+
+(define_function_unit "ev4_ebox" 1 0
+  (and (eq_attr "cpu" "ev4")
+       (eq_attr "type" "imulq"))
+  46 2)
+
+(define_function_unit "ev4_imult" 1 0
+  (and (eq_attr "cpu" "ev4")
+       (eq_attr "type" "imull"))
+  42 38)
+
+(define_function_unit "ev4_imult" 1 0
+  (and (eq_attr "cpu" "ev4")
+       (eq_attr "type" "imulq"))
+  46 42)
+
+(define_function_unit "ev4_fbox" 1 0
+  (and (eq_attr "cpu" "ev4")
+       (eq_attr "type" "fadd,fmul,fcpys"))
+  12 2)
+
+(define_function_unit "ev4_fbox" 1 0
+  (and (eq_attr "cpu" "ev4")
+       (eq_attr "type" "fdivs"))
+  68 0)
+
+(define_function_unit "ev4_fbox" 1 0
+  (and (eq_attr "cpu" "ev4")
+       (eq_attr "type" "fdivt"))
+  126 0)
+
+(define_function_unit "ev4_divider" 1 0
+  (and (eq_attr "cpu" "ev4")
+       (eq_attr "type" "fdivs"))
+  68 60)
+
+(define_function_unit "ev4_divider" 1 0
+  (and (eq_attr "cpu" "ev4")
+       (eq_attr "type" "fdivt"))
+  126 118)
+\f
+;; EV5 scheduling.  EV5 can issue 4 insns per clock.
+;; Multiply all costs by 4.
+
+;; EV5 has two integer units.
+(define_function_unit "ev5_ebox" 2 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "iadd,ilog,icmp,ldsym"))
+  4 4)
+
+;; Memory takes at least 2 clocks.
+;; Conditional moves always take 2 ticks.
+(define_function_unit "ev5_ebox" 2 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "ld,cmov"))
+  8 4)
+
+;; Loads can dual issue.  Store cannot; nor can loads + stores.
+;; Model this with a mythical load/store unit.
+(define_function_unit "ev5_ldst" 1 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "ld"))
+  8 4 [(eq_attr "type" "st")])
+
+(define_function_unit "ev5_ldst" 1 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "st"))
+  4 4)
+
+(define_function_unit "ev5_ebox" 2 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "imull"))
+  32 4)
+
+(define_function_unit "ev5_ebox" 2 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "imulq"))
+  48 4)
+
+;; Multiplies also use the integer multiplier.
+(define_function_unit "ev5_imult" 1 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "imull"))
+  16 8)
+
+(define_function_unit "ev5_imult" 1 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "imulq"))
+  48 32)
+
+;; There is only 1 shifter/zapper.
+(define_function_unit "ev5_shift" 1 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "shift"))
+  4 4)
+
+;; We pretend EV5 has symmetrical 2 fpus,
+;; even though cpys is the only insn that can issue on either unit.
+(define_function_unit "ev5_fpu" 2 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "fadd,fmul,fcpys"))
+  16 4)
+  
+;; Multiplies (resp. adds) also use the fmul (resp. fadd) units.
+(define_function_unit "ev5_fpmul" 1 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "fmul"))
+  16 4)
+
+(define_function_unit "ev5_fpadd" 1 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "fadd"))
+  16 4)
+
+(define_function_unit "ev5_fpadd" 1 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "fbr"))
+  4 4)
+
+(define_function_unit "ev5_fpadd" 1 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "fdivs"))
+  60 4)
+
+(define_function_unit "ev5_fpadd" 1 0
+  (and (eq_attr "cpu" "ev5")
+       (eq_attr "type" "fdivt"))
+  88 4)
 \f
 ;; First define the arithmetic insns.  Note that the 32-bit forms also
 ;; sign-extend.
    addl %1,$31,%0
    ldl %0,%1
    cvtql %1,%0\;cvtlq %0,%0"
-  [(set_attr "type" "iaddlog,ld,fpop")])
+  [(set_attr "type" "iadd,ld,fadd")])
 
 ;; Do addsi3 the way expand_binop would do if we didn't have one.  This
 ;; generates better code.  We have the anonymous addsi3 pattern below in
    addl %r1,%2,%0
    subl %r1,%n2,%0
    lda %0,%2(%r1)
-   ldah %0,%h2(%r1)"
-  [(set_attr "type" "iaddlog")])
+   ldah %0,%h2(%r1)")
 
 (define_split
   [(set (match_operand:SI 0 "register_operand" "")
   ""
   "@
    addl %r1,%2,%0
-   subl %r1,%n2,%0"
-  [(set_attr "type" "iaddlog")])
+   subl %r1,%n2,%0")
 
 (define_split
   [(set (match_operand:DI 0 "register_operand" "")
    addq %r1,%2,%0
    subq %r1,%n2,%0
    lda %0,%2(%r1)
-   ldah %0,%h2(%r1)"
-  [(set_attr "type" "iaddlog")])
+   ldah %0,%h2(%r1)")
 
 ;; Don't do this if we are adjusting SP since we don't want to do
 ;; it in two steps. 
   ""
   "@
    s%2addl %r1,%3,%0
-   s%2subl %r1,%n3,%0"
-  [(set_attr "type" "iaddlog")])
+   s%2subl %r1,%n3,%0")
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r,r")
   ""
   "@
    s%2addl %r1,%3,%0
-   s%2subl %r1,%n3,%0"
-  [(set_attr "type" "iaddlog")])
+   s%2subl %r1,%n3,%0")
 
 (define_split
   [(set (match_operand:DI 0 "register_operand" "")
   ""
   "@
    s%2addq %r1,%3,%0
-   s%2subq %1,%n3,%0"
-  [(set_attr "type" "iaddlog")])
+   s%2subq %1,%n3,%0")
 
 ;; These variants of the above insns can occur if the third operand
 ;; is the frame pointer.  This is a kludge, but there doesn't
                          (match_operand:DI 2 "some_operand" "r"))
                 (match_operand:DI 3 "some_operand" "rIOKL")))]
   "reload_in_progress"
-  "#"
-  [(set_attr "type" "iaddlog")])
+  "#")
 
 (define_split
   [(set (match_operand:DI 0 "register_operand" "")
                          (match_operand:SI 3 "some_operand" "r"))
                 (match_operand:SI 4 "some_operand" "rIOKL")))]
   "reload_in_progress"
-  "#"
-  [(set_attr "type" "iaddlog")])
+  "#")
 
 (define_split
   [(set (match_operand:SI 0 "register_operand" "r")
                   (match_operand:SI 3 "some_operand" "r"))
                  (match_operand:SI 4 "some_operand" "rIOKL"))))]
   "reload_in_progress"
-  "#"
-  [(set_attr "type" "iaddlog")])
+  "#")
 
 (define_split
   [(set (match_operand:DI 0 "register_operand" "")
                          (match_operand:DI 3 "some_operand" "r"))
                 (match_operand:DI 4 "some_operand" "rIOKL")))]
   "reload_in_progress"
-  "#"
-  [(set_attr "type" "iaddlog")])
+  "#")
 
 (define_split
   [(set (match_operand:DI 0 "register_operand" "=")
   [(set (match_operand:SI 0 "register_operand" "=r")
        (neg:SI (match_operand:SI 1 "reg_or_8bit_operand" "rI")))]
   ""
-  "subl $31,%1,%0"
-  [(set_attr "type" "iaddlog")])
+  "subl $31,%1,%0")
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
        (sign_extend:DI (neg:SI
                         (match_operand:SI 1 "reg_or_8bit_operand" "rI"))))]
   ""
-  "subl $31,%1,%0"
-  [(set_attr "type" "iaddlog")])
+  "subl $31,%1,%0")
 
 (define_insn "negdi2"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (neg:DI (match_operand:DI 1 "reg_or_8bit_operand" "rI")))]
   ""
-  "subq $31,%1,%0"
-  [(set_attr "type" "iaddlog")])
+  "subq $31,%1,%0")
 
 (define_expand "subsi3"
   [(set (match_operand:SI 0 "register_operand" "")
        (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
                  (match_operand:SI 2 "reg_or_8bit_operand" "rI")))]
   ""
-  "subl %r1,%2,%0"
-  [(set_attr "type" "iaddlog")])
+  "subl %r1,%2,%0")
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
        (sign_extend:DI (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rJ")
                                  (match_operand:SI 2 "reg_or_8bit_operand" "rI"))))]
   ""
-  "subl %r1,%2,%0"
-  [(set_attr "type" "iaddlog")])
+  "subl %r1,%2,%0")
 
 (define_insn "subdi3"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (minus:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
                  (match_operand:DI 2 "reg_or_8bit_operand" "rI")))]
   ""
-  "subq %r1,%2,%0"
-  [(set_attr "type" "iaddlog")])
+  "subq %r1,%2,%0")
 
 (define_insn ""
   [(set (match_operand:SI 0 "register_operand" "=r")
                           (match_operand:SI 2 "const48_operand" "I"))
                  (match_operand:SI 3 "reg_or_8bit_operand" "rI")))]
   ""
-  "s%2subl %r1,%3,%0"
-  [(set_attr "type" "iaddlog")])
+  "s%2subl %r1,%3,%0")
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
                            (match_operand:SI 2 "const48_operand" "I"))
                   (match_operand:SI 3 "reg_or_8bit_operand" "rI"))))]
   ""
-  "s%2subl %r1,%3,%0"
-  [(set_attr "type" "iaddlog")])
+  "s%2subl %r1,%3,%0")
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
                           (match_operand:DI 2 "const48_operand" "I"))
                  (match_operand:DI 3 "reg_or_8bit_operand" "rI")))]
   ""
-  "s%2subq %r1,%3,%0"
-  [(set_attr "type" "iaddlog")])
+  "s%2subq %r1,%3,%0")
 
 (define_insn "mulsi3"
   [(set (match_operand:SI 0 "register_operand" "=r")
    and %r1,%2,%0
    bic %r1,%N2,%0
    zapnot %r1,%m2,%0"
-  [(set_attr "type" "iaddlog,iaddlog,shiftcm")])
+  [(set_attr "type" "ilog,ilog,shift")])
 
 ;; There are times when we can split an AND into two AND insns.  This occurs
 ;; when we can first clear any bytes and then clear anything else.  For
        (zero_extend:HI (match_operand:QI 1 "register_operand" "r")))]
   ""
   "zapnot %1,1,%0"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "shift")])
 
 (define_insn "zero_extendqisi2"
   [(set (match_operand:SI 0 "register_operand" "=r")
        (zero_extend:SI (match_operand:QI 1 "register_operand" "r")))]
   ""
   "zapnot %1,1,%0"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "shift")])
 
 (define_insn "zero_extendqidi2"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (zero_extend:DI (match_operand:QI 1 "register_operand" "r")))]
   ""
   "zapnot %1,1,%0"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "shift")])
 
 (define_insn "zero_extendhisi2"
   [(set (match_operand:SI 0 "register_operand" "=r")
        (zero_extend:SI (match_operand:HI 1 "register_operand" "r")))]
   ""
   "zapnot %1,3,%0"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "shift")])
 
 (define_insn "zero_extendhidi2"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (zero_extend:DI (match_operand:HI 1 "register_operand" "r")))]
   ""
   "zapnot %1,3,%0"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "shift")])
 
 (define_insn "zero_extendsidi2"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (zero_extend:DI (match_operand:SI 1 "register_operand" "r")))]
   ""
   "zapnot %1,15,%0"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "shift")])
 
 (define_insn  ""
   [(set (match_operand:DI 0 "register_operand" "=r")
                (match_operand:DI 2 "reg_or_0_operand" "rJ")))]
   ""
   "bic %r2,%1,%0"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "ilog")])
 
 (define_insn "iordi3"
   [(set (match_operand:DI 0 "register_operand" "=r,r")
   "@
    bis %r1,%2,%0
    ornot %r1,%N2,%0"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "ilog")])
 
 (define_insn "one_cmpldi2"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (not:DI (match_operand:DI 1 "reg_or_8bit_operand" "rI")))]
   ""
   "ornot $31,%1,%0"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "ilog")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
                (match_operand:DI 2 "reg_or_0_operand" "rJ")))]
   ""
   "ornot %r2,%1,%0"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "ilog")])
 
 (define_insn "xordi3"
   [(set (match_operand:DI 0 "register_operand" "=r,r")
   "@
    xor %r1,%2,%0
    eqv %r1,%N2,%0"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "ilog")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
                        (match_operand:DI 2 "register_operand" "rI"))))]
   ""
   "eqv %r1,%2,%0"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "ilog")])
 \f
 ;; Next come the shifts and the various extract and insert operations.
 
       return \"sll %r1,%2,%0\";
     }
 }"
-  [(set_attr "type" "iaddlog,shiftcm")])
+  [(set_attr "type" "iadd,shift")])
 
 ;; ??? The following pattern is made by combine, but earlier phases
 ;; (specifically flow) can't handle it.  This occurs in jump.c.  Deal
 ;;  else
 ;;    return \"s%P2addl %r1,0,%0\";
 ;; }"
-;;  [(set_attr "type" "iaddlog")])
+;;  [(set_attr "type" "iadd")])
                          
 (define_insn "lshrdi3"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
                     (match_operand:DI 2 "reg_or_6bit_operand" "rI")))]
   ""
-  "srl %r1,%2,%0")
+  "srl %r1,%2,%0"
+  [(set_attr "type" "shift")])
 
 (define_insn "ashrdi3"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (ashiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
                     (match_operand:DI 2 "reg_or_6bit_operand" "rI")))]
   ""
-  "sra %r1,%2,%0")
+  "sra %r1,%2,%0"
+  [(set_attr "type" "shift")])
 
 (define_expand "extendqihi2"
   [(set (match_dup 2)
                         (match_operand:DI 2 "mode_width_operand" "n")
                         (match_operand:DI 3 "mul8_operand" "I")))]
   ""
-  "ext%M2l %r1,%s3,%0")
+  "ext%M2l %r1,%s3,%0"
+  [(set_attr "type" "shift")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
                         (ashift:DI (match_operand:DI 3 "reg_or_8bit_operand" "rI")
                                    (const_int 3))))]
   ""
-  "ext%M2l %r1,%3,%0")
+  "ext%M2l %r1,%3,%0"
+  [(set_attr "type" "shift")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
                      (const_int 7))
                     (const_int 3)))))]
   ""
-  "extqh %r1,%2,%0")
+  "extqh %r1,%2,%0"
+  [(set_attr "type" "shift")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
                      (const_int 7))
                     (const_int 3)))))]
   ""
-  "extlh %r1,%2,%0")
+  "extlh %r1,%2,%0"
+  [(set_attr "type" "shift")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
                      (const_int 7))
                     (const_int 3)))))]
   ""
-  "extwh %r1,%2,%0")
+  "extwh %r1,%2,%0"
+  [(set_attr "type" "shift")])
 
 ;; This converts an extXl into an extXh with an appropriate adjustment
 ;; to the address calculation.
        (ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r"))
                   (match_operand:DI 2 "mul8_operand" "I")))]
   ""
-  "insbl %1,%s2,%0")
+  "insbl %1,%s2,%0"
+  [(set_attr "type" "shift")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
        (ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r"))
                   (match_operand:DI 2 "mul8_operand" "I")))]
   ""
-  "inswl %1,%s2,%0")
+  "inswl %1,%s2,%0"
+  [(set_attr "type" "shift")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
        (ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
                   (match_operand:DI 2 "mul8_operand" "I")))]
   ""
-  "insll %1,%s2,%0")
+  "insll %1,%s2,%0"
+  [(set_attr "type" "shift")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
                   (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
                              (const_int 3))))]
   ""
-  "insbl %1,%2,%0")
+  "insbl %1,%2,%0"
+  [(set_attr "type" "shift")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
                   (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
                              (const_int 3))))]
   ""
-  "inswl %1,%2,%0")
+  "inswl %1,%2,%0"
+  [(set_attr "type" "shift")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")
                   (ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
                              (const_int 3))))]
   ""
-  "insll %1,%2,%0")
+  "insll %1,%2,%0"
+  [(set_attr "type" "shift")])
 
 ;; We do not include the insXh insns because they are complex to express
 ;; and it does not appear that we would ever want to generate them.
                          (const_int 3))))
                (match_operand:DI 1 "reg_or_0_operand" "rJ")))]
   ""
-  "msk%U2l %r1,%3,%0")
+  "msk%U2l %r1,%3,%0"
+  [(set_attr "type" "shift")])
 
 ;; We do not include the mskXh insns because it does not appear we would ever
 ;; generate one.
        (abs:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "cpys $f31,%R1,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fcpys")])
 
 (define_insn "absdf2"
   [(set (match_operand:DF 0 "register_operand" "=f")
        (abs:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "cpys $f31,%R1,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fcpys")])
 
 (define_insn "negsf2"
   [(set (match_operand:SF 0 "register_operand" "=f")
        (neg:SF (match_operand:SF 1 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "cpysn %R1,%R1,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn "negdf2"
   [(set (match_operand:DF 0 "register_operand" "=f")
        (neg:DF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "cpysn %R1,%R1,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:SF 0 "register_operand" "=&f")
                 (match_operand:SF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "adds%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn "addsf3"
                 (match_operand:SF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "adds%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                 (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "addt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn "adddf3"
                 (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "addt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                 (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "addt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                 (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "addt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                  (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "addt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                  (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
   "TARGET_FP"
   "addt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn "fix_truncdfdi2"
        (fix:DI (match_operand:DF 1 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "cvttqc %R1,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn "fix_truncsfdi2"
   [(set (match_operand:DI 0 "register_operand" "=f")
                 (match_operand:SF 1 "reg_or_fp0_operand" "fG"))))]
   "TARGET_FP"
   "cvttqc %R1,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:SF 0 "register_operand" "=&f")
        (float:SF (match_operand:DI 1 "register_operand" "f")))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "cvtqs%+%& %1,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn "floatdisf2"
        (float:SF (match_operand:DI 1 "register_operand" "f")))]
   "TARGET_FP"
   "cvtqs%+%& %1,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
        (float:DF (match_operand:DI 1 "register_operand" "f")))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "cvtqt%+%& %1,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn "floatdidf2"
        (float:DF (match_operand:DI 1 "register_operand" "f")))]
   "TARGET_FP"
   "cvtqt%+%& %1,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
   "@
    addt%)%& $f31,%1,%0
    lds %0,%1"
-  [(set_attr "type" "fpop,ld")
+  [(set_attr "type" "fadd,ld")
    (set_attr "trap" "yes")])
 
 (define_insn "extendsfdf2"
   "@
    addt%)%& $f31,%1,%0
    lds %0,%1"
-  [(set_attr "type" "fpop,ld")
+  [(set_attr "type" "fadd,ld")
    (set_attr "trap" "yes")])
 
 (define_insn ""
        (float_truncate:SF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "cvtts%)%& %R1,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn "truncdfsf2"
        (float_truncate:SF (match_operand:DF 1 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "cvtts%)%& %R1,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                 (match_operand:SF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "muls%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fmul")
    (set_attr "trap" "yes")])
 
 (define_insn "mulsf3"
                 (match_operand:SF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "muls%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fmul")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                 (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "mult%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fmul")
    (set_attr "trap" "yes")])
 
 (define_insn "muldf3"
                 (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "mult%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fmul")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                 (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "mult%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fmul")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                 (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "mult%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fmul")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                  (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "mult%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fmul")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                  (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
   "TARGET_FP"
   "mult%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fmul")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                  (match_operand:SF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "subs%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn "subsf3"
                  (match_operand:SF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "subs%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                  (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "subt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn "subdf3"
                  (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "subt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                  (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "subt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                  (match_operand:DF 2 "reg_or_fp0_operand" "fG")))]
   "TARGET_FP"
   "subt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                   (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "subt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                   (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
   "TARGET_FP"
   "subt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                   (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "subt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                   (match_operand:SF 2 "reg_or_fp0_operand" "fG"))))]
   "TARGET_FP"
   "subt%)%& %R1,%R2,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 \f
 ;; Next are all the integer comparisons, and conditional moves and branches
    cmov%C2 %r3,%1,%0
    cmov%D2 %r3,%5,%0
    cmov%c2 %r4,%1,%0
-   cmov%d2 %r4,%5,%0")
+   cmov%d2 %r4,%5,%0"
+  [(set_attr "type" "cmov")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r,r,r,r")
    cmov%C2 %r3,%1,%0
    cmov%D2 %r3,%5,%0
    cmov%c2 %r4,%1,%0
-   cmov%d2 %r4,%5,%0")
+   cmov%d2 %r4,%5,%0"
+  [(set_attr "type" "cmov")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r,r")
   ""
   "@
    cmovlbc %r2,%1,%0
-   cmovlbs %r2,%3,%0")
+   cmovlbs %r2,%3,%0"
+  [(set_attr "type" "cmov")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r,r")
   ""
   "@
    cmovlbs %r2,%1,%0
-   cmovlbc %r2,%3,%0")
+   cmovlbc %r2,%3,%0"
+  [(set_attr "type" "cmov")])
 
 ;; This form is added since combine thinks that an IF_THEN_ELSE with both
 ;; arms constant is a single insn, so it won't try to form it if combine
         (match_dup 0)))
    (clobber (match_scratch:DI 4 "=&r"))]
   ""
-  "addq %0,%1,%4\;cmov%C2 %r3,%4,%0")
+  "addq %0,%1,%4\;cmov%C2 %r3,%4,%0"
+  [(set_attr "type" "cmov")])
 
 (define_split
   [(set (match_operand:DI 0 "register_operand" "")
        (smax:DI (match_operand:DI 1 "register_operand" "0")
                 (const_int 0)))]
   ""
-  "cmovlt %0,0,%0")
+  "cmovlt %0,0,%0"
+  [(set_attr "type" "cmov")])
 
 (define_expand "smindi3"
   [(set (match_dup 3)
        (smin:DI (match_operand:DI 1 "register_operand" "0")
                 (const_int 0)))]
   ""
-  "cmovgt %0,0,%0")
+  "cmovgt %0,0,%0"
+  [(set_attr "type" "cmov")])
 
 (define_expand "umaxdi3"
   [(set (match_dup 3) 
                            (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "cmpt%C1%' %R2,%R3,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                            (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))]
   "TARGET_FP"
   "cmpt%C1%' %R2,%R3,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                            (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "cmpt%C1%' %R2,%R3,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                            (match_operand:DF 3 "reg_or_fp0_operand" "fG")]))]
   "TARGET_FP"
   "cmpt%C1%' %R2,%R3,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                             (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "cmpt%C1%' %R2,%R3,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                             (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))]
   "TARGET_FP"
   "cmpt%C1%' %R2,%R3,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                             (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))]
   "TARGET_FP && (alpha_tp == ALPHA_TP_INSN)"
   "cmpt%C1%' %R2,%R3,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
                             (match_operand:SF 3 "reg_or_fp0_operand" "fG"))]))]
   "TARGET_FP"
   "cmpt%C1%' %R2,%R3,%0"
-  [(set_attr "type" "fpop")
+  [(set_attr "type" "fadd")
    (set_attr "trap" "yes")])
 
 (define_insn ""
   "@
    fcmov%C3 %R4,%R1,%0
    fcmov%D3 %R4,%R5,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:DF 0 "register_operand" "=f,f")
   "@
    fcmov%C3 %R4,%R1,%0
    fcmov%D3 %R4,%R5,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:SF 0 "register_operand" "=&f,f")
   "@
    fcmov%C3 %R4,%R1,%0
    fcmov%D3 %R4,%R5,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:SF 0 "register_operand" "=f,f")
   "@
    fcmov%C3 %R4,%R1,%0
    fcmov%D3 %R4,%R5,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:DF 0 "register_operand" "=&f,f")
   "@
    fcmov%C3 %R4,%R1,%0
    fcmov%D3 %R4,%R5,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:DF 0 "register_operand" "=&f,f")
   "@
    fcmov%C3 %R4,%R1,%0
    fcmov%D3 %R4,%R5,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:DF 0 "register_operand" "=f,f")
   "@
    fcmov%C3 %R4,%R1,%0
    fcmov%D3 %R4,%R5,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:DF 0 "register_operand" "=f,f")
   "@
    fcmov%C3 %R4,%R1,%0
    fcmov%D3 %R4,%R5,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:SF 0 "register_operand" "=&f,f")
   "@
    fcmov%C3 %R4,%R1,%0
    fcmov%D3 %R4,%R5,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:SF 0 "register_operand" "=f,f")
   "@
    fcmov%C3 %R4,%R1,%0
    fcmov%D3 %R4,%R5,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:DF 0 "register_operand" "=&f,f")
   "@
    fcmov%C3 %R4,%R1,%0
    fcmov%D3 %R4,%R5,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_insn ""
   [(set (match_operand:DF 0 "register_operand" "=f,f")
   "@
    fcmov%C3 %R4,%R1,%0
    fcmov%D3 %R4,%R5,%0"
-  [(set_attr "type" "fpop")])
+  [(set_attr "type" "fadd")])
 
 (define_expand "maxdf3"
   [(set (match_dup 3)
   [(const_int 0)]
   ""
   "bis $31,$31,$31"
-  [(set_attr "type" "iaddlog")])
+  [(set_attr "type" "ilog")])
 
 (define_expand "tablejump"
   [(use (match_operand:SI 0 "register_operand" ""))
 (define_insn ""
   [(unspec_volatile [(const_int 0)] 0)]
   ""
-  "call_pal 0x86")
+  "call_pal 0x86"
+  [(set_attr "type" "isubr")])
 \f
 ;; Finally, we have the basic data motion insns.  The byte and word insns
 ;; are done via define_expand.  Start with the floating-point insns, since
    cpys $f31,$f31,%0
    lds %0,%1
    sts %R1,%0"
-  [(set_attr "type" "iaddlog,ld,st,fpop,fpop,ld,st")])
+  [(set_attr "type" "ilog,ld,st,fcpys,fcpys,ld,st")])
 
 (define_insn ""
   [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m,f,f,f,m")
    cpys $f31,$f31,%0
    ldt %0,%1
    stt %R1,%0"
-  [(set_attr "type" "iaddlog,ld,st,fpop,fpop,ld,st")])
+  [(set_attr "type" "ilog,ld,st,fcpys,fcpys,ld,st")])
 
 (define_expand "movsf"
   [(set (match_operand:SF 0 "nonimmediate_operand" "")
    cpys $f31,$f31,%0
    lds %0,%1
    sts %R1,%0"
-  [(set_attr "type" "iaddlog,iaddlog,iaddlog,iaddlog,iaddlog,ld,st,fpop,fpop,ld,st")])
+  [(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ld,st,fcpys,fcpys,ld,st")])
 
 (define_insn ""
   [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,r,m,f,f,f,m")
    cpys $f31,$f31,%0
    lds %0,%1
    sts %R1,%0"
-  [(set_attr "type" "iaddlog,iaddlog,iaddlog,iaddlog,iaddlog,ldsym,ld,st,fpop,fpop,ld,st")])
+  [(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ldsym,ld,st,fcpys,fcpys,ld,st")])
 
 (define_insn ""
   [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,r,f,f")
    lda %0,%L1
    cpys %1,%1,%0
    cpys $f31,$f31,%0"
-  [(set_attr "type" "iaddlog,iaddlog,iaddlog,iaddlog,fpop,fpop")])
+  [(set_attr "type" "ilog,ilog,ilog,iadd,fcpys,fcpys")])
 
 (define_insn ""
   [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r,r,f,f")
    lda %0,%L1
    cpys %1,%1,%0
    cpys $f31,$f31,%0"
-  [(set_attr "type" "iaddlog,iaddlog,iaddlog,iaddlog,fpop,fpop")])
+  [(set_attr "type" "ilog,ilog,ilog,iadd,fcpys,fcpys")])
 
 ;; We do two major things here: handle mem->mem and construct long
 ;; constants.
    cpys $f31,$f31,%0
    ldt %0,%1
    stt %R1,%0"
-  [(set_attr "type" "iaddlog,iaddlog,iaddlog,iaddlog,iaddlog,ldsym,ld,st,fpop,fpop,ld,st")])
+  [(set_attr "type" "ilog,ilog,ilog,iadd,iadd,ldsym,ld,st,fcpys,fcpys,ld,st")])
 
 ;; We do three major things here: handle mem->mem, put 64-bit constants in
 ;; memory, and construct long 32-bit constants.