mips.md (type): Add logical, signext and move.
authorDavid Ung <davidu@mips.com>
Wed, 4 Jul 2007 16:50:38 +0000 (16:50 +0000)
committerJoseph Myers <jsm28@gcc.gnu.org>
Wed, 4 Jul 2007 16:50:38 +0000 (17:50 +0100)
2007-07-04  David Ung  <davidu@mips.com>
            Joseph Myers  <joseph@codesourcery.com>

* config/mips/mips.md (type): Add logical, signext and move.
(one_cmpl<mode>2, *and<mode>3, *and<mode>3_mips16, *ior<mode>3,
*ior<mode>3_mips16, two unnamed insns after *ior<mode>3_mips16,
*nor<mode>3, "Combiner patterns to optimize truncate/zero_extend
combinations", *zero_extend<SHORT:mode><GPR:mode>2,
*zero_extendqihi2, *extend<SHORT:mode><GPR:mode>2_mips16e,
*extend<SHORT:mode><GPR:mode>2_se<SHORT:size>, *movdi_64bit,
*movdi_64bit_mips16, *movsi_internal, *movsi_mips16, movcc,
*movhi_internal, *movhi_mips16, *movqi_internal, *movqi_mips16,
*movsf_hardfloat, *movsf_softfloat, *movsf_mips16,
*movdf_hardfloat_64bit, *movdf_hardfloat_32bit,
movv2sf_hardfloat_64bit): Use the new types.
(*movdi_32bit, *movdi_gp32_fp64, *movdi_32bit_mips16,
*movdf_softfloat, *movdf_mips16): Use "multi".
(extendqihi2): Replace with a define_expand.
(*extendqihi2_mips16e, *extendqihi2, *extendqihi2_seb): New.
Based on extend<SHORT:mode><GPR:mode>2 patterns.
* config/mips/74k.md (r74k_int_logical): New reservation and
bypasses.
(r74k_int_arith): Remove "slt".
* config/mips/24k.md, config/mips/4130.md, config/mips/4k.md,
config/mips/5400.md, config/mips/5500.md, config/mips/5k.md,
config/mips/7000.md, config/mips/9000.md, config/mips/generic.md,
config/mips/sb1.md, config/mips/sr71k.md: Add new types to
reservations for "arith".

Co-Authored-By: Joseph Myers <joseph@codesourcery.com>
From-SVN: r126327

14 files changed:
gcc/ChangeLog
gcc/config/mips/24k.md
gcc/config/mips/4130.md
gcc/config/mips/4k.md
gcc/config/mips/5400.md
gcc/config/mips/5500.md
gcc/config/mips/5k.md
gcc/config/mips/7000.md
gcc/config/mips/74k.md
gcc/config/mips/9000.md
gcc/config/mips/generic.md
gcc/config/mips/mips.md
gcc/config/mips/sb1.md
gcc/config/mips/sr71k.md

index b4ef5bed58ee61310c400b40312862c92e1c4254..278b3a31b0e217c37958929198b10572cc590696 100644 (file)
@@ -1,3 +1,32 @@
+2007-07-04  David Ung  <davidu@mips.com>
+            Joseph Myers  <joseph@codesourcery.com>
+
+       * config/mips/mips.md (type): Add logical, signext and move.
+       (one_cmpl<mode>2, *and<mode>3, *and<mode>3_mips16, *ior<mode>3,
+       *ior<mode>3_mips16, two unnamed insns after *ior<mode>3_mips16,
+       *nor<mode>3, "Combiner patterns to optimize truncate/zero_extend
+       combinations", *zero_extend<SHORT:mode><GPR:mode>2,
+       *zero_extendqihi2, *extend<SHORT:mode><GPR:mode>2_mips16e,
+       *extend<SHORT:mode><GPR:mode>2_se<SHORT:size>, *movdi_64bit,
+       *movdi_64bit_mips16, *movsi_internal, *movsi_mips16, movcc,
+       *movhi_internal, *movhi_mips16, *movqi_internal, *movqi_mips16,
+       *movsf_hardfloat, *movsf_softfloat, *movsf_mips16,
+       *movdf_hardfloat_64bit, *movdf_hardfloat_32bit,
+       movv2sf_hardfloat_64bit): Use the new types.
+       (*movdi_32bit, *movdi_gp32_fp64, *movdi_32bit_mips16,
+       *movdf_softfloat, *movdf_mips16): Use "multi".
+       (extendqihi2): Replace with a define_expand.
+       (*extendqihi2_mips16e, *extendqihi2, *extendqihi2_seb): New.
+       Based on extend<SHORT:mode><GPR:mode>2 patterns.
+       * config/mips/74k.md (r74k_int_logical): New reservation and
+       bypasses.
+       (r74k_int_arith): Remove "slt".
+       * config/mips/24k.md, config/mips/4130.md, config/mips/4k.md,
+       config/mips/5400.md, config/mips/5500.md, config/mips/5k.md,
+       config/mips/7000.md, config/mips/9000.md, config/mips/generic.md,
+       config/mips/sb1.md, config/mips/sr71k.md: Add new types to
+       reservations for "arith".
+
 2007-07-04  Richard Guenther  <rguenther@suse.de>
 
        * tree-ssa.c (useless_type_conversion_p): Add handling for
index 21e527d6cdc82ffe80cd076e3fe71abc69c49ac1..7de816f42994a9e96ec24b6e4db046e1eddc016d 100644 (file)
@@ -55,7 +55,7 @@
 ;;  differentiate between integer/float moves)
 (define_insn_reservation "r24k_int_arith" 1
   (and (eq_attr "cpu" "24kc,24kf2_1,24kf1_1")
-       (eq_attr "type" "arith,const,nop,shift,slt"))
+       (eq_attr "type" "arith,const,logical,move,nop,shift,signext,slt"))
   "r24k_iss+r24k_ixu_arith")
 
 
index 6feeab38bbfe75eb71c698f76bed07b9a164ce71..c1d9d1bddba24aac369e0b9b579a2dd57c0f66a0 100644 (file)
@@ -66,7 +66,7 @@
 
 (define_insn_reservation "vr4130_int" 1
   (and (eq_attr "cpu" "r4130")
-       (eq_attr "type" "const,arith,shift,slt,nop"))
+       (eq_attr "type" "arith,const,logical,move,nop,shift,signext,slt"))
   "vr4130_alu1 | vr4130_alu2")
 
 (define_insn_reservation "vr4130_load" 3
index 8e660934ef8ab34f9e1335128472aaaf3f642054..b24444196812d5b6dc08187f2878206a1c57afbb 100644 (file)
 ;; All other integer insns.
 (define_insn_reservation "r4k_int_alu" 1
   (and (eq_attr "cpu" "4kc,4kp")
-       (eq_attr "type" "arith,condmove,shift,const,nop,slt"))
+       (eq_attr "type" "arith,condmove,const,logical,move,nop,shift,signext,slt"))
   "r4k_ixu_arith")
 
 (define_insn_reservation "r4k_int_branch" 1
index 91c14af90814cdeb1bcd07aa9eeab9a165ac66ee..072894dba76eb37323851b86af8cd0768da32f70 100644 (file)
@@ -60,7 +60,7 @@
 
 (define_insn_reservation "ir_vr54_arith" 1
   (and (eq_attr "cpu" "r5400")
-       (eq_attr "type" "arith,shift,slt,clz,const,nop,trap"))
+       (eq_attr "type" "arith,shift,signext,slt,clz,const,logical,move,nop,trap"))
   "vr54_dp0|vr54_dp1")
 
 (define_insn_reservation "ir_vr54_imul_si" 3
index 16bb222b783fc7b523bb793f8c9e6bf43b287e2a..5f2480506681ed641341cd0a7ec628beefe5a213 100644 (file)
@@ -56,7 +56,7 @@
 
 (define_insn_reservation "ir_vr55_arith" 1
   (and (eq_attr "cpu" "r5500")
-       (eq_attr "type" "arith,shift,slt,clz,const,nop,trap"))
+       (eq_attr "type" "arith,shift,signext,slt,clz,const,logical,move,nop,trap"))
   "vr55_dp0|vr55_dp1")
 
 (define_bypass 2
index e56f4e0422316b2a8a44116041487c7523067e8a..b8a5a0197399c58d47a82cc2253eb3e405dd4d35 100644 (file)
 ;; All other integer insns.
 (define_insn_reservation "r5k_int_alu" 1
   (and (eq_attr "cpu" "5kc,5kf")
-       (eq_attr "type" "arith,condmove,shift,const,nop,slt"))
+       (eq_attr "type" "arith,condmove,const,logical,move,nop,shift,signext,slt"))
   "r5k_ixu_arith")
 
 (define_insn_reservation "r5k_int_branch" 1
index 71d0d8aed44934ca4fa498a03480a509ed7ac969..91209bfa43fdd032ff2c1d6fb606cd225c12048d 100644 (file)
@@ -88,7 +88,7 @@
 
 (define_insn_reservation "rm7_int_other" 1
   (and (eq_attr "cpu" "r7000")
-       (eq_attr "type" "arith,shift,slt,clz,const,condmove,nop,trap"))
+       (eq_attr "type" "arith,shift,signext,slt,clz,const,condmove,logical,move,nop,trap"))
   "rm7_iaddsub")
 
 (define_insn_reservation "rm7_ld" 2
index 1d3aaa4f51ddf07cd86abe60446e817f89dda974..e4d1e413821bc738dacfadb34079627686d6fd6b 100644 (file)
 ;; Producers
 ;; --------------------------------------------------------------
 
-;; Arithmetic: add, addi, addiu, addiupc, addu, and, andi, clo, clz,
-;;    ext, ins, lui, movn, movz, nor, or, ori, rotr, rotrv, seb, seh, sll,
-;;    sllv, slt, slti, sltiu, sltu, sra, srav, srl, srlv, sub, subu, wsbh,
-;;    xor, xori
+;; ALU: Logicals/Arithmetics
+;; - Logicals, move (addu/addiu with rt = 0), Set less than, 
+;;   sign extend - 1 cycle
+(define_insn_reservation "r74k_int_logical" 1
+  (and (eq_attr "cpu" "74kc,74kf2_1,74kf1_1,74kf3_2")
+       (eq_attr "type" "logical,move,signext,slt"))
+  "r74k_alu")
+
+;; - Arithmetics - 2 cycles
 (define_insn_reservation "r74k_int_arith" 2
   (and (eq_attr "cpu" "74kc,74kf2_1,74kf1_1,74kf3_2")
-       (eq_attr "type" "arith,const,shift,slt,clz"))
+       (eq_attr "type" "arith,const,shift,clz"))
   "r74k_alu")
 
 (define_insn_reservation "r74k_int_nop" 0
 (define_bypass 4 "r74k_int_load" "r74k_int_load")
 (define_bypass 4 "r74k_int_load" "r74k_int_store" "!store_data_bypass_p")
 
+;; logical/move/slt/signext->next use :  1 cycles (Default)
+;; logical/move/slt/signext->load base:  2 cycles
+;; logical/move/slt/signext->store base: 2 cycles
+(define_bypass 2 "r74k_int_logical" "r74k_int_load")
+(define_bypass 2 "r74k_int_logical" "r74k_int_store" "!store_data_bypass_p")
+
 ;; arith->next use :  2 cycles (Default)
 ;; arith->load base:  3 cycles
 ;; arith->store base: 3 cycles
index 5b45fae729e82c501ad46a09f1da307428ac47eb..de95a572e4dd2f72cb82b1d7dd1a7d303dc43e0e 100644 (file)
@@ -52,7 +52,7 @@
 
 (define_insn_reservation "rm9k_int" 1
   (and (eq_attr "cpu" "r9000")
-       (eq_attr "type" "arith,shift,slt,clz,const,nop,trap"))
+       (eq_attr "type" "arith,shift,signext,slt,clz,const,logical,move,nop,trap"))
   "rm9k_any1 | rm9k_any2")
 
 (define_insn_reservation "rm9k_int_cmove" 2
index 0b48230de19c29942e0c101c4e7d1c9de18563ed..fdfbffa46f6d60a93ace6244f829786d07be01fe 100644 (file)
@@ -24,7 +24,7 @@
 
 (define_insn_reservation "generic_alu" 1
   (eq_attr "type" "unknown,prefetch,prefetchx,condmove,const,arith,
-                  shift,slt,clz,trap,multi,nop")
+                  shift,slt,clz,trap,multi,nop,logical,signext,move")
   "alu")
 
 (define_insn_reservation "generic_load" 3
index 1d72ff6f6b1da9a76e97caf6be447e7613eaf3f2..905b365dfa7bf1a7a86afafb4cb58dce0eeb48d6 100644 (file)
 ;; mthilo      transfer to hi/lo registers
 ;; mfhilo      transfer from hi/lo registers
 ;; const       load constant
-;; arith       integer arithmetic and logical instructions
+;; arith       integer arithmetic instructions
+;; logical      integer logical instructions
 ;; shift       integer shift instructions
 ;; slt         set less than instructions
+;; signext      sign extend instuctions
 ;; clz         the clz and clo instructions
 ;; trap                trap if instructions
 ;; imul                integer multiply 2 operands
 ;; imul3       integer multiply 3 operands
 ;; imadd       integer multiply-add
 ;; idiv                integer divide
+;; move                integer register move ({,D}ADD{,U} with rt = 0)
 ;; fmove       floating point register move
 ;; fadd                floating point add/subtract
 ;; fmul                floating point multiply
 ;; multi       multiword sequence (or user asm statements)
 ;; nop         no operation
 (define_attr "type"
-  "unknown,branch,jump,call,load,fpload,fpidxload,store,fpstore,fpidxstore,prefetch,prefetchx,condmove,mfc,mtc,mthilo,mfhilo,const,arith,shift,slt,clz,trap,imul,imul3,imadd,idiv,fmove,fadd,fmul,fmadd,fdiv,frdiv,frdiv1,frdiv2,fabs,fneg,fcmp,fcvt,fsqrt,frsqrt,frsqrt1,frsqrt2,multi,nop"
+  "unknown,branch,jump,call,load,fpload,fpidxload,store,fpstore,fpidxstore,prefetch,prefetchx,condmove,mfc,mtc,mthilo,mfhilo,const,arith,logical,shift,slt,signext,clz,trap,imul,imul3,imadd,idiv,move,fmove,fadd,fmul,fmadd,fdiv,frdiv,frdiv1,frdiv2,fabs,fneg,fcmp,fcvt,fsqrt,frsqrt,frsqrt1,frsqrt2,multi,nop"
   (cond [(eq_attr "jal" "!unset") (const_string "call")
         (eq_attr "got" "load") (const_string "load")]
        (const_string "unknown")))
   else
     return "nor\t%0,%.,%1";
 }
-  [(set_attr "type" "arith")
+  [(set_attr "type" "logical")
    (set_attr "mode" "<MODE>")])
 \f
 ;;
   "@
    and\t%0,%1,%2
    andi\t%0,%1,%x2"
-  [(set_attr "type" "arith")
+  [(set_attr "type" "logical")
    (set_attr "mode" "<MODE>")])
 
 (define_insn "*and<mode>3_mips16"
                 (match_operand:GPR 2 "register_operand" "d")))]
   "TARGET_MIPS16"
   "and\t%0,%2"
-  [(set_attr "type" "arith")
+  [(set_attr "type" "logical")
    (set_attr "mode" "<MODE>")])
 
 (define_expand "ior<mode>3"
   "@
    or\t%0,%1,%2
    ori\t%0,%1,%x2"
-  [(set_attr "type" "arith")
+  [(set_attr "type" "logical")
    (set_attr "mode" "<MODE>")])
 
 (define_insn "*ior<mode>3_mips16"
                 (match_operand:GPR 2 "register_operand" "d")))]
   "TARGET_MIPS16"
   "or\t%0,%2"
-  [(set_attr "type" "arith")
+  [(set_attr "type" "logical")
    (set_attr "mode" "<MODE>")])
 
 (define_expand "xor<mode>3"
   "@
    xor\t%0,%1,%2
    xori\t%0,%1,%x2"
-  [(set_attr "type" "arith")
+  [(set_attr "type" "logical")
    (set_attr "mode" "<MODE>")])
 
 (define_insn ""
    xor\t%0,%2
    cmpi\t%1,%2
    cmp\t%1,%2"
-  [(set_attr "type" "arith")
+  [(set_attr "type" "logical,arith,arith")
    (set_attr "mode" "<MODE>")
    (set_attr_alternative "length"
                [(const_int 4)
                 (not:GPR (match_operand:GPR 2 "register_operand" "d"))))]
   "!TARGET_MIPS16"
   "nor\t%0,%1,%2"
-  [(set_attr "type" "arith")
+  [(set_attr "type" "logical")
    (set_attr "mode" "<MODE>")])
 \f
 ;;
                          (match_operand:DI 1 "register_operand" "d"))))]
   "TARGET_64BIT && !TARGET_MIPS16"
   "andi\t%0,%1,0xffff"
-  [(set_attr "type"     "arith")
+  [(set_attr "type"     "logical")
    (set_attr "mode"     "SI")])
 
 (define_insn ""
                          (match_operand:DI 1 "register_operand" "d"))))]
   "TARGET_64BIT && !TARGET_MIPS16"
   "andi\t%0,%1,0xff"
-  [(set_attr "type"     "arith")
+  [(set_attr "type"     "logical")
    (set_attr "mode"     "SI")])
 
 (define_insn ""
                          (match_operand:DI 1 "register_operand" "d"))))]
   "TARGET_64BIT && !TARGET_MIPS16"
   "andi\t%0,%1,0xff"
-  [(set_attr "type"     "arith")
+  [(set_attr "type"     "logical")
    (set_attr "mode"     "HI")])
 \f
 ;;
   "@
    andi\t%0,%1,<SHORT:mask>
    l<SHORT:size>u\t%0,%1"
-  [(set_attr "type" "arith,load")
+  [(set_attr "type" "logical,load")
    (set_attr "mode" "<GPR:MODE>")])
 
 (define_insn "*zero_extend<SHORT:mode><GPR:mode>2_mips16e"
   "@
    andi\t%0,%1,0x00ff
    lbu\t%0,%1"
-  [(set_attr "type" "arith,load")
+  [(set_attr "type" "logical,load")
    (set_attr "mode" "HI")])
 
 (define_insn "*zero_extendqihi2_mips16"
   "@
    se<SHORT:size>\t%0
    l<SHORT:size>\t%0,%1"
-  [(set_attr "type" "arith,load")
+  [(set_attr "type" "signext,load")
    (set_attr "mode" "<GPR:MODE>")])
 
 (define_insn_and_split "*extend<SHORT:mode><GPR:mode>2"
   "@
    se<SHORT:size>\t%0,%1
    l<SHORT:size>\t%0,%1"
-  [(set_attr "type" "arith,load")
+  [(set_attr "type" "signext,load")
    (set_attr "mode" "<GPR:MODE>")])
 
-;; This pattern generates the same code as extendqisi2; split it into
-;; that form after reload.
-(define_insn_and_split "extendqihi2"
+(define_expand "extendqihi2"
+  [(set (match_operand:HI 0 "register_operand")
+        (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand")))]
+  "")
+
+(define_insn "*extendqihi2_mips16e"
   [(set (match_operand:HI 0 "register_operand" "=d,d")
-        (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "d,m")))]
-  ""
-  "#"
-  "reload_completed"
-  [(set (match_dup 0) (sign_extend:SI (match_dup 1)))]
-  { operands[0] = gen_lowpart (SImode, operands[0]); }
-  [(set_attr "type" "arith,load")
+        (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "0,m")))]
+  "GENERATE_MIPS16E"
+  "@
+   seb\t%0
+   lb\t%0,%1"
+  [(set_attr "type" "signext,load")
+   (set_attr "mode" "SI")])
+
+(define_insn_and_split "*extendqihi2"
+  [(set (match_operand:HI 0 "register_operand" "=d,d")
+        (sign_extend:HI
+            (match_operand:QI 1 "nonimmediate_operand" "d,m")))]
+  "!ISA_HAS_SEB_SEH && !GENERATE_MIPS16E"
+  "@
+   #
+   lb\t%0,%1"
+  "&& reload_completed && REG_P (operands[1])"
+  [(set (match_dup 0) (ashift:SI (match_dup 1) (match_dup 2)))
+   (set (match_dup 0) (ashiftrt:SI (match_dup 0) (match_dup 2)))]
+{
+  operands[1] = gen_lowpart (SImode, operands[1]);
+  operands[2] = GEN_INT (GET_MODE_BITSIZE (SImode)
+                        - GET_MODE_BITSIZE (QImode));
+}
+  [(set_attr "type" "multi,load")
    (set_attr "mode" "SI")
    (set_attr "length" "8,*")])
 
+(define_insn "*extendqihi2_seb"
+  [(set (match_operand:HI 0 "register_operand" "=d,d")
+        (sign_extend:HI
+            (match_operand:QI 1 "nonimmediate_operand" "d,m")))]
+  "ISA_HAS_SEB_SEH"
+  "@
+   seb\t%0,%1
+   lb\t%0,%1"
+  [(set_attr "type" "signext,load")
+   (set_attr "mode" "SI")])
+
 (define_insn "extendsfdf2"
   [(set (match_operand:DF 0 "register_operand" "=f")
        (float_extend:DF (match_operand:SF 1 "register_operand" "f")))]
    && (register_operand (operands[0], DImode)
        || reg_or_0_operand (operands[1], DImode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "arith,arith,load,store,mthilo,mfhilo,mtc,load,mfc,store")
+  [(set_attr "type"    "multi,multi,load,store,mthilo,mfhilo,mtc,load,mfc,store")
    (set_attr "mode"    "DI")
    (set_attr "length"   "8,16,*,*,8,8,8,*,8,*")])
 
    && (register_operand (operands[0], DImode)
        || reg_or_0_operand (operands[1], DImode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "arith,arith,load,store,mthilo,mfhilo,fmove,mtc,fpload,mfc,fpstore")
+  [(set_attr "type"    "multi,multi,load,store,mthilo,mfhilo,fmove,mtc,fpload,mfc,fpstore")
    (set_attr "mode"    "DI")
    (set_attr "length"   "8,16,*,*,8,8,4,8,*,8,*")])
 
    && (register_operand (operands[0], DImode)
        || register_operand (operands[1], DImode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "arith,arith,arith,arith,arith,load,store,mfhilo")
+  [(set_attr "type"    "multi,multi,multi,multi,multi,load,store,mfhilo")
    (set_attr "mode"    "DI")
    (set_attr "length"  "8,8,8,8,12,*,*,8")])
 
    && (register_operand (operands[0], DImode)
        || reg_or_0_operand (operands[1], DImode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "arith,const,const,load,store,fmove,mtc,fpload,mfc,fpstore,mthilo,mtc,load,mfc,store")
+  [(set_attr "type"    "move,const,const,load,store,fmove,mtc,fpload,mfc,fpstore,mthilo,mtc,load,mfc,store")
    (set_attr "mode"    "DI")
    (set_attr "length"  "4,*,*,*,*,4,4,*,4,*,4,8,*,8,*")])
 
    && (register_operand (operands[0], DImode)
        || register_operand (operands[1], DImode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "arith,arith,arith,arith,arith,const,load,store")
+  [(set_attr "type"    "move,move,move,arith,arith,const,load,store")
    (set_attr "mode"    "DI")
    (set_attr_alternative "length"
                [(const_int 4)
    && (register_operand (operands[0], SImode)
        || reg_or_0_operand (operands[1], SImode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "arith,const,const,load,store,fmove,mtc,fpload,mfc,fpstore,mfc,mtc,mthilo,mfhilo,mtc,load,mfc,store")
+  [(set_attr "type"    "move,const,const,load,store,fmove,mtc,fpload,mfc,fpstore,mfc,mtc,mthilo,mfhilo,mtc,load,mfc,store")
    (set_attr "mode"    "SI")
    (set_attr "length"  "4,*,*,*,*,4,4,*,4,*,4,4,4,4,4,*,4,*")])
 
    && (register_operand (operands[0], SImode)
        || register_operand (operands[1], SImode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "arith,arith,arith,arith,arith,const,load,store")
+  [(set_attr "type"    "move,move,move,arith,arith,const,load,store")
    (set_attr "mode"    "SI")
    (set_attr_alternative "length"
                [(const_int 4)
        (match_operand:CC 1 "general_operand" "z,*d,*m,*d,*f,*d,*f,*m,*f"))]
   "ISA_HAS_8CC && TARGET_HARD_FLOAT"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "multi,arith,load,store,mfc,mtc,fmove,fpload,fpstore")
+  [(set_attr "type"    "multi,move,load,store,mfc,mtc,fmove,fpload,fpstore")
    (set_attr "mode"    "SI")
    (set_attr "length"  "8,4,*,*,4,4,4,*,*")])
 
     mtc1\t%1,%0
     mov.s\t%0,%1
     mt%0\t%1"
-  [(set_attr "type"    "arith,arith,load,store,mfc,mtc,fmove,mthilo")
+  [(set_attr "type"    "move,arith,load,store,mfc,mtc,fmove,mthilo")
    (set_attr "mode"    "HI")
    (set_attr "length"  "4,4,*,*,4,4,4,4")])
 
     #
     lhu\t%0,%1
     sh\t%1,%0"
-  [(set_attr "type"    "arith,arith,arith,arith,arith,load,store")
+  [(set_attr "type"    "move,move,move,arith,arith,load,store")
    (set_attr "mode"    "HI")
    (set_attr_alternative "length"
                [(const_int 4)
     mtc1\t%1,%0
     mov.s\t%0,%1
     mt%0\t%1"
-  [(set_attr "type"    "arith,arith,load,store,mfc,mtc,fmove,mthilo")
+  [(set_attr "type"    "move,arith,load,store,mfc,mtc,fmove,mthilo")
    (set_attr "mode"    "QI")
    (set_attr "length"  "4,4,*,*,4,4,4,4")])
 
     #
     lbu\t%0,%1
     sb\t%1,%0"
-  [(set_attr "type"    "arith,arith,arith,arith,arith,load,store")
+  [(set_attr "type"    "move,move,move,arith,arith,load,store")
    (set_attr "mode"    "QI")
    (set_attr "length"  "4,4,4,4,8,*,*")])
 
    && (register_operand (operands[0], SFmode)
        || reg_or_0_operand (operands[1], SFmode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "fmove,mtc,fpload,fpstore,store,mtc,mfc,arith,load,store")
+  [(set_attr "type"    "fmove,mtc,fpload,fpstore,store,mtc,mfc,move,load,store")
    (set_attr "mode"    "SF")
    (set_attr "length"  "4,4,*,*,*,4,4,4,*,*")])
 
    && (register_operand (operands[0], SFmode)
        || reg_or_0_operand (operands[1], SFmode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "arith,load,store")
+  [(set_attr "type"    "move,load,store")
    (set_attr "mode"    "SF")
    (set_attr "length"  "4,*,*")])
 
    && (register_operand (operands[0], SFmode)
        || register_operand (operands[1], SFmode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "arith,arith,arith,load,store")
+  [(set_attr "type"    "move,move,move,load,store")
    (set_attr "mode"    "SF")
    (set_attr "length"  "4,4,4,*,*")])
 
    && (register_operand (operands[0], DFmode)
        || reg_or_0_operand (operands[1], DFmode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "fmove,mtc,fpload,fpstore,store,mtc,mfc,arith,load,store")
+  [(set_attr "type"    "fmove,mtc,fpload,fpstore,store,mtc,mfc,move,load,store")
    (set_attr "mode"    "DF")
    (set_attr "length"  "4,4,*,*,*,4,4,4,*,*")])
 
    && (register_operand (operands[0], DFmode)
        || reg_or_0_operand (operands[1], DFmode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "fmove,mtc,fpload,fpstore,store,mtc,mfc,arith,load,store")
+  [(set_attr "type"    "fmove,mtc,fpload,fpstore,store,mtc,mfc,move,load,store")
    (set_attr "mode"    "DF")
    (set_attr "length"  "4,8,*,*,*,8,8,8,*,*")])
 
    && (register_operand (operands[0], DFmode)
        || reg_or_0_operand (operands[1], DFmode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "arith,load,store,mfc,mtc,fmove")
+  [(set_attr "type"    "multi,load,store,mfc,mtc,fmove")
    (set_attr "mode"    "DF")
    (set_attr "length"  "8,*,*,4,4,4")])
 
    && (register_operand (operands[0], DFmode)
        || register_operand (operands[1], DFmode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type"    "arith,arith,arith,load,store")
+  [(set_attr "type"    "multi,multi,multi,load,store")
    (set_attr "mode"    "DF")
    (set_attr "length"  "8,8,8,*,*")])
 
    && (register_operand (operands[0], V2SFmode)
        || reg_or_0_operand (operands[1], V2SFmode))"
   { return mips_output_move (operands[0], operands[1]); }
-  [(set_attr "type" "fmove,mtc,fpload,fpstore,store,mtc,mfc,arith,load,store")
+  [(set_attr "type" "fmove,mtc,fpload,fpstore,store,mtc,mfc,move,load,store")
    (set_attr "mode" "SF")
    (set_attr "length" "4,4,*,*,*,4,4,4,*,*")])
 
index 5d06a86456a0c8a32a733f17bca9ce4e935a3de3..2d8e2fe3bf725fd91349b53580da3f6e7c6d77ab 100644 (file)
 
 (define_insn_reservation "ir_sb1_simple_alu" 2
   (and (eq_attr "cpu" "sb1")
-       (eq_attr "type" "const,arith"))
+       (eq_attr "type" "const,arith,logical,move,signext"))
   "sb1_ls1 | sb1_ex1 | sb1_ex0")
 
 ;; On SB-1A, simple alu instructions can not execute on the LS1 unit, and we
 
 (define_insn_reservation "ir_sb1a_simple_alu" 1
   (and (eq_attr "cpu" "sb1a")
-       (eq_attr "type" "const,arith"))
+       (eq_attr "type" "const,arith,logical,move,signext"))
   "sb1_ex1 | sb1_ex0")
 
 ;; ??? condmove also includes some FP instructions that execute on the FP
index 6bf43966a309fd71de5e7b13423abaa47346929f..c69a946301b933f97b924b2d9adeb54cd4839235 100644 (file)
 
 (define_insn_reservation "ir_sr70_arith" 1
   (and (eq_attr "cpu" "sr71000")
-       (eq_attr "type" "arith,shift,slt,clz,const,trap"))
+       (eq_attr "type" "arith,shift,signext,slt,clz,const,logical,move,trap"))
   "ri_insns")
 
 ;; emulate repeat (dispatch stall) by spending extra cycle(s) in