Home | History | Annotate | Line # | Download | only in rs6000
power6.md revision 1.1.1.10
      1       1.1  mrg ;; Scheduling description for IBM POWER6 processor.
      2  1.1.1.10  mrg ;;   Copyright (C) 2006-2022 Free Software Foundation, Inc.
      3       1.1  mrg ;;   Contributed by Peter Steinmetz (steinmtz (a] us.ibm.com)
      4       1.1  mrg ;;
      5       1.1  mrg ;; This file is part of GCC.
      6       1.1  mrg ;;
      7       1.1  mrg ;; GCC is free software; you can redistribute it and/or modify it
      8       1.1  mrg ;; under the terms of the GNU General Public License as published
      9       1.1  mrg ;; by the Free Software Foundation; either version 3, or (at your
     10       1.1  mrg ;; option) any later version.
     11       1.1  mrg ;;
     12       1.1  mrg ;; GCC is distributed in the hope that it will be useful, but WITHOUT
     13       1.1  mrg ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     14       1.1  mrg ;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     15       1.1  mrg ;; License for more details.
     16       1.1  mrg ;;
     17       1.1  mrg ;; You should have received a copy of the GNU General Public License
     18       1.1  mrg ;; along with GCC; see the file COPYING3.  If not see
     19       1.1  mrg ;; <http://www.gnu.org/licenses/>.
     20       1.1  mrg 
     21       1.1  mrg ;; Sources:
     22       1.1  mrg 
     23       1.1  mrg ;; The POWER6 has 2 iu, 2 fpu, 2 lsu, and 1 bu/cru unit per engine 
     24       1.1  mrg ;; (2 engines per chip).  The chip can issue up to 5 internal ops 
     25       1.1  mrg ;; per cycle.
     26       1.1  mrg 
     27       1.1  mrg (define_automaton "power6iu,power6lsu,power6fpu,power6bu")
     28       1.1  mrg 
     29       1.1  mrg (define_cpu_unit "iu1_power6,iu2_power6" "power6iu")
     30       1.1  mrg (define_cpu_unit "lsu1_power6,lsu2_power6" "power6lsu")
     31       1.1  mrg (define_cpu_unit "bpu_power6" "power6bu")
     32       1.1  mrg (define_cpu_unit "fpu1_power6,fpu2_power6" "power6fpu")
     33       1.1  mrg 
     34       1.1  mrg (define_reservation "LS2_power6"
     35       1.1  mrg                     "lsu1_power6+lsu2_power6")
     36       1.1  mrg 
     37       1.1  mrg (define_reservation "FPU_power6"
     38       1.1  mrg                     "fpu1_power6|fpu2_power6")
     39       1.1  mrg 
     40       1.1  mrg (define_reservation "BRU_power6"
     41       1.1  mrg                     "bpu_power6")
     42       1.1  mrg 
     43       1.1  mrg (define_reservation "LSU_power6"
     44       1.1  mrg                     "lsu1_power6|lsu2_power6")
     45       1.1  mrg 
     46       1.1  mrg (define_reservation "LSF_power6"
     47       1.1  mrg                     "(lsu1_power6+fpu1_power6)\
     48       1.1  mrg                     |(lsu1_power6+fpu2_power6)\
     49       1.1  mrg                     |(lsu2_power6+fpu1_power6)\
     50       1.1  mrg                     |(lsu2_power6+fpu2_power6)")
     51       1.1  mrg 
     52       1.1  mrg (define_reservation "LX2_power6"
     53       1.1  mrg                     "(iu1_power6+iu2_power6+lsu1_power6)\
     54       1.1  mrg                     |(iu1_power6+iu2_power6+lsu2_power6)")
     55       1.1  mrg 
     56       1.1  mrg (define_reservation "FX2_power6"
     57       1.1  mrg                     "iu1_power6+iu2_power6")
     58       1.1  mrg 
     59       1.1  mrg (define_reservation "BX2_power6"
     60       1.1  mrg                     "iu1_power6+iu2_power6+bpu_power6")
     61       1.1  mrg 
     62       1.1  mrg (define_reservation "LSX_power6"
     63       1.1  mrg                     "(iu1_power6+lsu1_power6)\
     64       1.1  mrg                     |(iu1_power6+lsu2_power6)\
     65       1.1  mrg                     |(iu2_power6+lsu1_power6)\
     66       1.1  mrg                     |(iu2_power6+lsu2_power6)")
     67       1.1  mrg 
     68       1.1  mrg (define_reservation "FXU_power6"
     69       1.1  mrg                     "iu1_power6|iu2_power6")
     70       1.1  mrg 
     71       1.1  mrg (define_reservation "XLF_power6"
     72       1.1  mrg                     "(iu1_power6+lsu1_power6+fpu1_power6)\
     73       1.1  mrg                     |(iu1_power6+lsu1_power6+fpu2_power6)\
     74       1.1  mrg                     |(iu1_power6+lsu2_power6+fpu1_power6)\
     75       1.1  mrg                     |(iu1_power6+lsu2_power6+fpu2_power6)\
     76       1.1  mrg                     |(iu2_power6+lsu1_power6+fpu1_power6)\
     77       1.1  mrg                     |(iu2_power6+lsu1_power6+fpu2_power6)\
     78       1.1  mrg                     |(iu2_power6+lsu2_power6+fpu1_power6)\
     79       1.1  mrg                     |(iu2_power6+lsu2_power6+fpu2_power6)")
     80       1.1  mrg 
     81       1.1  mrg (define_reservation "BRX_power6"
     82       1.1  mrg                     "(bpu_power6+iu1_power6)\
     83       1.1  mrg                     |(bpu_power6+iu2_power6)")
     84       1.1  mrg 
     85       1.1  mrg ; Load/store
     86       1.1  mrg 
     87       1.1  mrg ; The default for a value written by a fixed point load
     88       1.1  mrg ; that is read/written by a subsequent fixed point op.
     89       1.1  mrg (define_insn_reservation "power6-load" 2 ; fx
     90       1.1  mrg   (and (eq_attr "type" "load")
     91   1.1.1.3  mrg        (eq_attr "sign_extend" "no")
     92   1.1.1.3  mrg        (eq_attr "update" "no")
     93       1.1  mrg        (eq_attr "cpu" "power6"))
     94       1.1  mrg   "LSU_power6")
     95       1.1  mrg 
     96       1.1  mrg ; define the bypass for the case where the value written
     97       1.1  mrg ; by a fixed point load is used as the source value on
     98       1.1  mrg ; a store.
     99       1.1  mrg (define_bypass 1 "power6-load,\
    100       1.1  mrg                   power6-load-update,\
    101       1.1  mrg                   power6-load-update-indexed"
    102       1.1  mrg                  "power6-store,\
    103       1.1  mrg                   power6-store-update,\
    104       1.1  mrg                   power6-store-update-indexed,\
    105       1.1  mrg                   power6-fpstore,\
    106       1.1  mrg                   power6-fpstore-update"
    107   1.1.1.5  mrg   "rs6000_store_data_bypass_p")
    108       1.1  mrg 
    109       1.1  mrg (define_insn_reservation "power6-load-ext" 4 ; fx
    110   1.1.1.3  mrg   (and (eq_attr "type" "load")
    111   1.1.1.3  mrg        (eq_attr "sign_extend" "yes")
    112   1.1.1.3  mrg        (eq_attr "update" "no")
    113       1.1  mrg        (eq_attr "cpu" "power6"))
    114       1.1  mrg   "LSU_power6")
    115       1.1  mrg 
    116       1.1  mrg ; define the bypass for the case where the value written
    117       1.1  mrg ; by a fixed point load ext is used as the source value on
    118       1.1  mrg ; a store.
    119       1.1  mrg (define_bypass 1 "power6-load-ext,\
    120       1.1  mrg                   power6-load-ext-update,\
    121       1.1  mrg 	          power6-load-ext-update-indexed"
    122       1.1  mrg                  "power6-store,\
    123       1.1  mrg                   power6-store-update,\
    124       1.1  mrg                   power6-store-update-indexed,\
    125       1.1  mrg                   power6-fpstore,\
    126       1.1  mrg                   power6-fpstore-update"
    127   1.1.1.5  mrg   "rs6000_store_data_bypass_p")
    128       1.1  mrg 
    129       1.1  mrg (define_insn_reservation "power6-load-update" 2 ; fx
    130   1.1.1.3  mrg   (and (eq_attr "type" "load")
    131   1.1.1.3  mrg        (eq_attr "sign_extend" "no")
    132   1.1.1.3  mrg        (eq_attr "update" "yes")
    133   1.1.1.3  mrg        (eq_attr "indexed" "no")
    134       1.1  mrg        (eq_attr "cpu" "power6"))
    135       1.1  mrg   "LSX_power6")
    136       1.1  mrg 
    137       1.1  mrg (define_insn_reservation "power6-load-update-indexed" 2 ; fx
    138   1.1.1.3  mrg   (and (eq_attr "type" "load")
    139   1.1.1.3  mrg        (eq_attr "sign_extend" "no")
    140   1.1.1.3  mrg        (eq_attr "update" "yes")
    141   1.1.1.3  mrg        (eq_attr "indexed" "yes")
    142       1.1  mrg        (eq_attr "cpu" "power6"))
    143       1.1  mrg   "LSX_power6")
    144       1.1  mrg 
    145       1.1  mrg (define_insn_reservation "power6-load-ext-update" 4 ; fx
    146   1.1.1.3  mrg   (and (eq_attr "type" "load")
    147   1.1.1.3  mrg        (eq_attr "sign_extend" "yes")
    148   1.1.1.3  mrg        (eq_attr "update" "yes")
    149   1.1.1.3  mrg        (eq_attr "indexed" "no")
    150       1.1  mrg        (eq_attr "cpu" "power6"))
    151       1.1  mrg   "LSX_power6")
    152       1.1  mrg 
    153       1.1  mrg (define_insn_reservation "power6-load-ext-update-indexed" 4 ; fx
    154   1.1.1.3  mrg   (and (eq_attr "type" "load")
    155   1.1.1.3  mrg        (eq_attr "sign_extend" "yes")
    156   1.1.1.3  mrg        (eq_attr "update" "yes")
    157   1.1.1.3  mrg        (eq_attr "indexed" "yes")
    158       1.1  mrg        (eq_attr "cpu" "power6"))
    159       1.1  mrg   "LSX_power6")
    160       1.1  mrg 
    161       1.1  mrg (define_insn_reservation "power6-fpload" 1
    162       1.1  mrg   (and (eq_attr "type" "fpload")
    163   1.1.1.3  mrg        (eq_attr "update" "no")
    164       1.1  mrg        (eq_attr "cpu" "power6"))
    165       1.1  mrg   "LSU_power6")
    166       1.1  mrg 
    167       1.1  mrg (define_insn_reservation "power6-fpload-update" 1
    168   1.1.1.3  mrg   (and (eq_attr "type" "fpload")
    169   1.1.1.3  mrg        (eq_attr "update" "yes")
    170       1.1  mrg        (eq_attr "cpu" "power6"))
    171       1.1  mrg   "LSX_power6")
    172       1.1  mrg 
    173       1.1  mrg (define_insn_reservation "power6-store" 14
    174       1.1  mrg   (and (eq_attr "type" "store")
    175   1.1.1.3  mrg        (eq_attr "update" "no")
    176       1.1  mrg        (eq_attr "cpu" "power6"))
    177       1.1  mrg   "LSU_power6")
    178       1.1  mrg 
    179       1.1  mrg (define_insn_reservation "power6-store-update" 14
    180   1.1.1.3  mrg   (and (eq_attr "type" "store")
    181   1.1.1.3  mrg        (eq_attr "update" "yes")
    182   1.1.1.3  mrg        (eq_attr "indexed" "no")
    183       1.1  mrg        (eq_attr "cpu" "power6"))
    184       1.1  mrg   "LSX_power6")
    185       1.1  mrg 
    186       1.1  mrg (define_insn_reservation "power6-store-update-indexed" 14
    187   1.1.1.3  mrg   (and (eq_attr "type" "store")
    188   1.1.1.3  mrg        (eq_attr "update" "yes")
    189   1.1.1.3  mrg        (eq_attr "indexed" "yes")
    190       1.1  mrg        (eq_attr "cpu" "power6"))
    191       1.1  mrg   "LX2_power6")
    192       1.1  mrg 
    193       1.1  mrg (define_insn_reservation "power6-fpstore" 14
    194       1.1  mrg   (and (eq_attr "type" "fpstore")
    195   1.1.1.3  mrg        (eq_attr "update" "no")
    196       1.1  mrg        (eq_attr "cpu" "power6"))
    197       1.1  mrg   "LSF_power6")
    198       1.1  mrg 
    199       1.1  mrg (define_insn_reservation "power6-fpstore-update" 14
    200   1.1.1.3  mrg   (and (eq_attr "type" "fpstore")
    201   1.1.1.3  mrg        (eq_attr "update" "yes")
    202       1.1  mrg        (eq_attr "cpu" "power6"))
    203       1.1  mrg   "XLF_power6")
    204       1.1  mrg 
    205       1.1  mrg (define_insn_reservation "power6-larx" 3
    206       1.1  mrg   (and (eq_attr "type" "load_l")
    207       1.1  mrg        (eq_attr "cpu" "power6"))
    208       1.1  mrg   "LS2_power6")
    209       1.1  mrg 
    210       1.1  mrg (define_insn_reservation "power6-stcx" 10 ; best case
    211       1.1  mrg   (and (eq_attr "type" "store_c")
    212       1.1  mrg        (eq_attr "cpu" "power6"))
    213       1.1  mrg   "LSX_power6")
    214       1.1  mrg 
    215       1.1  mrg (define_insn_reservation "power6-sync" 11 ; N/A
    216       1.1  mrg   (and (eq_attr "type" "sync")
    217       1.1  mrg        (eq_attr "cpu" "power6"))
    218       1.1  mrg   "LSU_power6")
    219       1.1  mrg 
    220       1.1  mrg (define_insn_reservation "power6-integer" 1
    221   1.1.1.3  mrg   (and (ior (eq_attr "type" "integer")
    222   1.1.1.3  mrg 	    (and (eq_attr "type" "add,logical")
    223   1.1.1.3  mrg 		 (eq_attr "dot" "no")))
    224       1.1  mrg        (eq_attr "cpu" "power6"))
    225       1.1  mrg   "FXU_power6")
    226       1.1  mrg 
    227       1.1  mrg (define_insn_reservation "power6-isel" 1
    228       1.1  mrg   (and (eq_attr "type" "isel")
    229       1.1  mrg        (eq_attr "cpu" "power6"))
    230       1.1  mrg   "FXU_power6")
    231       1.1  mrg 
    232       1.1  mrg (define_insn_reservation "power6-exts" 1
    233       1.1  mrg   (and (eq_attr "type" "exts")
    234   1.1.1.3  mrg        (eq_attr "dot" "no")
    235       1.1  mrg        (eq_attr "cpu" "power6"))
    236       1.1  mrg   "FXU_power6")
    237       1.1  mrg 
    238       1.1  mrg (define_insn_reservation "power6-shift" 1
    239       1.1  mrg   (and (eq_attr "type" "shift")
    240   1.1.1.3  mrg        (eq_attr "var_shift" "no")
    241   1.1.1.3  mrg        (eq_attr "dot" "no")
    242       1.1  mrg        (eq_attr "cpu" "power6"))
    243       1.1  mrg   "FXU_power6")
    244       1.1  mrg 
    245   1.1.1.2  mrg (define_insn_reservation "power6-popcnt" 1
    246   1.1.1.2  mrg   (and (eq_attr "type" "popcnt")
    247   1.1.1.2  mrg        (eq_attr "cpu" "power6"))
    248   1.1.1.2  mrg   "FXU_power6")
    249   1.1.1.2  mrg 
    250       1.1  mrg (define_insn_reservation "power6-insert" 1
    251   1.1.1.3  mrg   (and (eq_attr "type" "insert")
    252   1.1.1.3  mrg        (eq_attr "size" "32")
    253       1.1  mrg        (eq_attr "cpu" "power6"))
    254       1.1  mrg   "FX2_power6")
    255       1.1  mrg 
    256       1.1  mrg (define_insn_reservation "power6-insert-dword" 1
    257   1.1.1.3  mrg   (and (eq_attr "type" "insert")
    258   1.1.1.3  mrg        (eq_attr "size" "64")
    259       1.1  mrg        (eq_attr "cpu" "power6"))
    260       1.1  mrg   "FX2_power6")
    261       1.1  mrg 
    262       1.1  mrg ; define the bypass for the case where the value written
    263       1.1  mrg ; by a fixed point op is used as the source value on a
    264       1.1  mrg ; store.
    265       1.1  mrg (define_bypass 1 "power6-integer,\
    266       1.1  mrg                   power6-exts,\
    267       1.1  mrg                   power6-shift,\
    268       1.1  mrg                   power6-insert,\
    269       1.1  mrg                   power6-insert-dword"
    270       1.1  mrg                  "power6-store,\
    271       1.1  mrg                   power6-store-update,\
    272       1.1  mrg                   power6-store-update-indexed,\
    273       1.1  mrg                   power6-fpstore,\
    274       1.1  mrg                   power6-fpstore-update"
    275   1.1.1.5  mrg   "rs6000_store_data_bypass_p")
    276       1.1  mrg 
    277       1.1  mrg (define_insn_reservation "power6-cntlz" 2
    278       1.1  mrg   (and (eq_attr "type" "cntlz")
    279       1.1  mrg        (eq_attr "cpu" "power6"))
    280       1.1  mrg   "FXU_power6")
    281       1.1  mrg 
    282       1.1  mrg (define_bypass 1 "power6-cntlz"
    283       1.1  mrg                  "power6-store,\
    284       1.1  mrg                   power6-store-update,\
    285       1.1  mrg                   power6-store-update-indexed,\
    286       1.1  mrg                   power6-fpstore,\
    287       1.1  mrg                   power6-fpstore-update"
    288   1.1.1.5  mrg   "rs6000_store_data_bypass_p")
    289       1.1  mrg 
    290       1.1  mrg (define_insn_reservation "power6-var-rotate" 4
    291   1.1.1.3  mrg   (and (eq_attr "type" "shift")
    292   1.1.1.3  mrg        (eq_attr "var_shift" "yes")
    293   1.1.1.3  mrg        (eq_attr "dot" "no")
    294       1.1  mrg        (eq_attr "cpu" "power6"))
    295       1.1  mrg   "FXU_power6")
    296       1.1  mrg 
    297       1.1  mrg (define_insn_reservation "power6-trap" 1 ; N/A
    298       1.1  mrg   (and (eq_attr "type" "trap")
    299       1.1  mrg        (eq_attr "cpu" "power6"))
    300       1.1  mrg   "BRX_power6")
    301       1.1  mrg 
    302       1.1  mrg (define_insn_reservation "power6-two" 1
    303       1.1  mrg   (and (eq_attr "type" "two")
    304       1.1  mrg        (eq_attr "cpu" "power6"))
    305       1.1  mrg   "(iu1_power6,iu1_power6)\
    306       1.1  mrg   |(iu1_power6+iu2_power6,nothing)\
    307       1.1  mrg   |(iu1_power6,iu2_power6)\
    308       1.1  mrg   |(iu2_power6,iu1_power6)\
    309       1.1  mrg   |(iu2_power6,iu2_power6)")
    310       1.1  mrg 
    311       1.1  mrg (define_insn_reservation "power6-three" 1
    312       1.1  mrg   (and (eq_attr "type" "three")
    313       1.1  mrg        (eq_attr "cpu" "power6"))
    314       1.1  mrg   "(iu1_power6,iu1_power6,iu1_power6)\
    315       1.1  mrg   |(iu1_power6,iu1_power6,iu2_power6)\
    316       1.1  mrg   |(iu1_power6,iu2_power6,iu1_power6)\
    317       1.1  mrg   |(iu1_power6,iu2_power6,iu2_power6)\
    318       1.1  mrg   |(iu2_power6,iu1_power6,iu1_power6)\
    319       1.1  mrg   |(iu2_power6,iu1_power6,iu2_power6)\
    320       1.1  mrg   |(iu2_power6,iu2_power6,iu1_power6)\
    321       1.1  mrg   |(iu2_power6,iu2_power6,iu2_power6)\
    322       1.1  mrg   |(iu1_power6+iu2_power6,iu1_power6)\
    323       1.1  mrg   |(iu1_power6+iu2_power6,iu2_power6)\
    324       1.1  mrg   |(iu1_power6,iu1_power6+iu2_power6)\
    325       1.1  mrg   |(iu2_power6,iu1_power6+iu2_power6)")
    326       1.1  mrg 
    327       1.1  mrg (define_insn_reservation "power6-cmp" 1
    328       1.1  mrg   (and (eq_attr "type" "cmp")
    329       1.1  mrg        (eq_attr "cpu" "power6"))
    330       1.1  mrg   "FXU_power6")
    331       1.1  mrg 
    332       1.1  mrg (define_insn_reservation "power6-compare" 1
    333   1.1.1.3  mrg   (and (eq_attr "type" "exts")
    334   1.1.1.3  mrg        (eq_attr "dot" "yes")
    335       1.1  mrg        (eq_attr "cpu" "power6"))
    336       1.1  mrg   "FXU_power6")
    337       1.1  mrg 
    338       1.1  mrg (define_insn_reservation "power6-fast-compare" 1
    339   1.1.1.3  mrg   (and (eq_attr "type" "add,logical")
    340   1.1.1.3  mrg        (eq_attr "dot" "yes")
    341       1.1  mrg        (eq_attr "cpu" "power6"))
    342       1.1  mrg   "FXU_power6")
    343       1.1  mrg 
    344       1.1  mrg ; define the bypass for the case where the value written
    345       1.1  mrg ; by a fixed point rec form op is used as the source value
    346       1.1  mrg ; on a store.
    347       1.1  mrg (define_bypass 1 "power6-compare,\
    348       1.1  mrg                   power6-fast-compare"
    349       1.1  mrg                  "power6-store,\
    350       1.1  mrg                   power6-store-update,\
    351       1.1  mrg                   power6-store-update-indexed,\
    352       1.1  mrg                   power6-fpstore,\
    353       1.1  mrg                   power6-fpstore-update"
    354   1.1.1.5  mrg   "rs6000_store_data_bypass_p")
    355       1.1  mrg 
    356       1.1  mrg (define_insn_reservation "power6-delayed-compare" 2 ; N/A
    357   1.1.1.3  mrg   (and (eq_attr "type" "shift")
    358   1.1.1.3  mrg        (eq_attr "var_shift" "no")
    359   1.1.1.3  mrg        (eq_attr "dot" "yes")
    360       1.1  mrg        (eq_attr "cpu" "power6"))
    361       1.1  mrg   "FXU_power6")
    362       1.1  mrg 
    363       1.1  mrg (define_insn_reservation "power6-var-delayed-compare" 4
    364   1.1.1.3  mrg   (and (eq_attr "type" "shift")
    365   1.1.1.3  mrg        (eq_attr "var_shift" "yes")
    366   1.1.1.3  mrg        (eq_attr "dot" "yes")
    367       1.1  mrg        (eq_attr "cpu" "power6"))
    368       1.1  mrg   "FXU_power6")
    369       1.1  mrg 
    370       1.1  mrg (define_insn_reservation "power6-lmul-cmp" 16
    371   1.1.1.3  mrg   (and (eq_attr "type" "mul")
    372   1.1.1.3  mrg        (eq_attr "dot" "yes")
    373   1.1.1.3  mrg        (eq_attr "size" "64")
    374       1.1  mrg        (eq_attr "cpu" "power6"))
    375       1.1  mrg   "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\
    376       1.1  mrg   |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)");
    377       1.1  mrg 
    378       1.1  mrg (define_insn_reservation "power6-imul-cmp" 16
    379   1.1.1.3  mrg   (and (eq_attr "type" "mul")
    380   1.1.1.3  mrg        (eq_attr "dot" "yes")
    381   1.1.1.3  mrg        (eq_attr "size" "32")
    382       1.1  mrg        (eq_attr "cpu" "power6"))
    383       1.1  mrg   "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\
    384       1.1  mrg   |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)");
    385       1.1  mrg 
    386       1.1  mrg (define_insn_reservation "power6-lmul" 16
    387   1.1.1.3  mrg   (and (eq_attr "type" "mul")
    388   1.1.1.3  mrg        (eq_attr "dot" "no")
    389   1.1.1.3  mrg        (eq_attr "size" "64")
    390       1.1  mrg        (eq_attr "cpu" "power6"))
    391       1.1  mrg   "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\
    392       1.1  mrg   |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)");
    393       1.1  mrg 
    394       1.1  mrg (define_insn_reservation "power6-imul" 16
    395   1.1.1.3  mrg   (and (eq_attr "type" "mul")
    396   1.1.1.3  mrg        (eq_attr "dot" "no")
    397   1.1.1.3  mrg        (eq_attr "size" "32")
    398       1.1  mrg        (eq_attr "cpu" "power6"))
    399       1.1  mrg   "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\
    400       1.1  mrg   |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)");
    401       1.1  mrg 
    402       1.1  mrg (define_insn_reservation "power6-imul3" 16
    403   1.1.1.3  mrg   (and (eq_attr "type" "mul")
    404   1.1.1.3  mrg        (eq_attr "size" "8,16")
    405       1.1  mrg        (eq_attr "cpu" "power6"))
    406       1.1  mrg   "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\
    407       1.1  mrg   |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)");
    408       1.1  mrg 
    409       1.1  mrg (define_bypass 9 "power6-imul,\
    410       1.1  mrg                   power6-lmul,\
    411       1.1  mrg                   power6-imul-cmp,\
    412       1.1  mrg                   power6-lmul-cmp,\
    413       1.1  mrg                   power6-imul3"
    414       1.1  mrg                  "power6-store,\
    415       1.1  mrg                   power6-store-update,\
    416       1.1  mrg                   power6-store-update-indexed,\
    417       1.1  mrg                   power6-fpstore,\
    418       1.1  mrg                   power6-fpstore-update"
    419   1.1.1.5  mrg   "rs6000_store_data_bypass_p")
    420       1.1  mrg 
    421       1.1  mrg (define_insn_reservation "power6-idiv" 44
    422   1.1.1.3  mrg   (and (eq_attr "type" "div")
    423   1.1.1.3  mrg        (eq_attr "size" "32")
    424       1.1  mrg        (eq_attr "cpu" "power6"))
    425       1.1  mrg   "(iu1_power6*44+iu2_power6*44+fpu1_power6*44)\
    426       1.1  mrg   |(iu1_power6*44+iu2_power6*44+fpu2_power6*44)");
    427       1.1  mrg 
    428       1.1  mrg ; The latency for this bypass is yet to be defined
    429       1.1  mrg ;(define_bypass ? "power6-idiv"
    430       1.1  mrg ;                 "power6-store,\
    431       1.1  mrg ;                  power6-store-update,\
    432       1.1  mrg ;                  power6-store-update-indexed,\
    433       1.1  mrg ;                  power6-fpstore,\
    434       1.1  mrg ;                  power6-fpstore-update"
    435   1.1.1.5  mrg ;  "rs6000_store_data_bypass_p")
    436       1.1  mrg 
    437       1.1  mrg (define_insn_reservation "power6-ldiv" 56
    438   1.1.1.3  mrg   (and (eq_attr "type" "div")
    439   1.1.1.3  mrg        (eq_attr "size" "64")
    440       1.1  mrg        (eq_attr "cpu" "power6"))
    441       1.1  mrg   "(iu1_power6*56+iu2_power6*56+fpu1_power6*56)\
    442       1.1  mrg   |(iu1_power6*56+iu2_power6*56+fpu2_power6*56)");
    443       1.1  mrg 
    444       1.1  mrg ; The latency for this bypass is yet to be defined
    445       1.1  mrg ;(define_bypass ? "power6-ldiv"
    446       1.1  mrg ;                 "power6-store,\
    447       1.1  mrg ;                  power6-store-update,\
    448       1.1  mrg ;                  power6-store-update-indexed,\
    449       1.1  mrg ;                  power6-fpstore,\
    450       1.1  mrg ;                  power6-fpstore-update"
    451   1.1.1.5  mrg ;  "rs6000_store_data_bypass_p")
    452       1.1  mrg 
    453       1.1  mrg (define_insn_reservation "power6-mtjmpr" 2
    454       1.1  mrg   (and (eq_attr "type" "mtjmpr,mfjmpr")
    455       1.1  mrg        (eq_attr "cpu" "power6"))
    456       1.1  mrg   "BX2_power6")
    457       1.1  mrg 
    458       1.1  mrg (define_bypass 5 "power6-mtjmpr" "power6-branch")
    459       1.1  mrg 
    460       1.1  mrg (define_insn_reservation "power6-branch" 2
    461       1.1  mrg   (and (eq_attr "type" "jmpreg,branch")
    462       1.1  mrg        (eq_attr "cpu" "power6"))
    463       1.1  mrg   "BRU_power6")
    464       1.1  mrg 
    465       1.1  mrg (define_bypass 5 "power6-branch" "power6-mtjmpr")
    466       1.1  mrg 
    467       1.1  mrg (define_insn_reservation "power6-crlogical" 3
    468       1.1  mrg   (and (eq_attr "type" "cr_logical")
    469       1.1  mrg        (eq_attr "cpu" "power6"))
    470       1.1  mrg   "BRU_power6")
    471       1.1  mrg 
    472       1.1  mrg (define_bypass 3 "power6-crlogical" "power6-branch")
    473       1.1  mrg 
    474       1.1  mrg (define_insn_reservation "power6-mfcr" 6 ; N/A
    475       1.1  mrg   (and (eq_attr "type" "mfcr")
    476       1.1  mrg        (eq_attr "cpu" "power6"))
    477       1.1  mrg   "BX2_power6")
    478       1.1  mrg 
    479       1.1  mrg ; mfcrf (1 field)
    480       1.1  mrg (define_insn_reservation "power6-mfcrf" 3 ; N/A
    481       1.1  mrg   (and (eq_attr "type" "mfcrf")
    482       1.1  mrg        (eq_attr "cpu" "power6"))
    483       1.1  mrg   "BX2_power6") ;
    484       1.1  mrg 
    485       1.1  mrg ; mtcrf (1 field)
    486       1.1  mrg (define_insn_reservation "power6-mtcr" 4 ; N/A
    487       1.1  mrg   (and (eq_attr "type" "mtcr")
    488       1.1  mrg        (eq_attr "cpu" "power6"))
    489       1.1  mrg   "BX2_power6")
    490       1.1  mrg 
    491       1.1  mrg (define_bypass 9 "power6-mtcr" "power6-branch")
    492       1.1  mrg 
    493       1.1  mrg (define_insn_reservation "power6-fp" 6
    494   1.1.1.4  mrg   (and (eq_attr "type" "fp,fpsimple,dmul,dfp")
    495       1.1  mrg        (eq_attr "cpu" "power6"))
    496       1.1  mrg   "FPU_power6")
    497       1.1  mrg 
    498       1.1  mrg ; Any fp instruction that updates a CR has a latency
    499       1.1  mrg ; of 6 to a dependent branch
    500       1.1  mrg (define_bypass 6 "power6-fp" "power6-branch")
    501       1.1  mrg 
    502       1.1  mrg (define_bypass 1 "power6-fp"
    503       1.1  mrg                  "power6-fpstore,power6-fpstore-update"
    504   1.1.1.5  mrg   "rs6000_store_data_bypass_p")
    505       1.1  mrg 
    506       1.1  mrg (define_insn_reservation "power6-fpcompare" 8
    507       1.1  mrg   (and (eq_attr "type" "fpcompare")
    508       1.1  mrg        (eq_attr "cpu" "power6"))
    509       1.1  mrg   "FPU_power6")
    510       1.1  mrg 
    511       1.1  mrg (define_bypass 12 "power6-fpcompare"
    512       1.1  mrg                   "power6-branch,power6-crlogical")
    513       1.1  mrg 
    514       1.1  mrg (define_insn_reservation "power6-sdiv" 26
    515       1.1  mrg   (and (eq_attr "type" "sdiv")
    516       1.1  mrg        (eq_attr "cpu" "power6"))
    517       1.1  mrg   "FPU_power6")
    518       1.1  mrg 
    519       1.1  mrg (define_insn_reservation "power6-ddiv" 32
    520       1.1  mrg   (and (eq_attr "type" "ddiv")
    521       1.1  mrg        (eq_attr "cpu" "power6"))
    522       1.1  mrg   "FPU_power6")
    523       1.1  mrg 
    524       1.1  mrg (define_insn_reservation "power6-sqrt" 30
    525       1.1  mrg   (and (eq_attr "type" "ssqrt")
    526       1.1  mrg        (eq_attr "cpu" "power6"))
    527       1.1  mrg   "FPU_power6")
    528       1.1  mrg 
    529       1.1  mrg (define_insn_reservation "power6-dsqrt" 42
    530       1.1  mrg   (and (eq_attr "type" "dsqrt")
    531       1.1  mrg        (eq_attr "cpu" "power6"))
    532       1.1  mrg   "FPU_power6")
    533       1.1  mrg 
    534       1.1  mrg (define_insn_reservation "power6-isync" 2 ; N/A 
    535       1.1  mrg   (and (eq_attr "type" "isync")
    536       1.1  mrg        (eq_attr "cpu" "power6"))
    537       1.1  mrg   "FXU_power6")
    538       1.1  mrg 
    539       1.1  mrg (define_insn_reservation "power6-vecload" 1
    540       1.1  mrg   (and (eq_attr "type" "vecload")
    541       1.1  mrg        (eq_attr "cpu" "power6"))
    542       1.1  mrg   "LSU_power6")
    543       1.1  mrg 
    544       1.1  mrg (define_insn_reservation "power6-vecstore" 1
    545       1.1  mrg   (and (eq_attr "type" "vecstore")
    546       1.1  mrg        (eq_attr "cpu" "power6"))
    547       1.1  mrg   "LSF_power6")
    548       1.1  mrg 
    549       1.1  mrg (define_insn_reservation "power6-vecsimple" 3
    550   1.1.1.4  mrg   (and (eq_attr "type" "vecsimple,veclogical,vecmove")
    551       1.1  mrg        (eq_attr "cpu" "power6"))
    552       1.1  mrg   "FPU_power6")
    553       1.1  mrg 
    554       1.1  mrg (define_bypass 6 "power6-vecsimple" "power6-veccomplex,\
    555       1.1  mrg                                      power6-vecperm")
    556       1.1  mrg 
    557       1.1  mrg (define_bypass 5 "power6-vecsimple" "power6-vecfloat")
    558       1.1  mrg 
    559       1.1  mrg (define_bypass 4 "power6-vecsimple" "power6-vecstore" )
    560       1.1  mrg 
    561       1.1  mrg (define_insn_reservation "power6-veccmp" 1
    562   1.1.1.4  mrg   (and (eq_attr "type" "veccmp,veccmpfx")
    563       1.1  mrg        (eq_attr "cpu" "power6"))
    564       1.1  mrg   "FPU_power6")
    565       1.1  mrg 
    566       1.1  mrg (define_bypass 10 "power6-veccmp" "power6-branch")
    567       1.1  mrg 
    568       1.1  mrg (define_insn_reservation "power6-vecfloat" 7
    569       1.1  mrg   (and (eq_attr "type" "vecfloat")
    570       1.1  mrg        (eq_attr "cpu" "power6"))
    571       1.1  mrg   "FPU_power6")
    572       1.1  mrg 
    573       1.1  mrg (define_bypass 10 "power6-vecfloat" "power6-vecsimple")
    574       1.1  mrg 
    575       1.1  mrg (define_bypass 11 "power6-vecfloat" "power6-veccomplex,\
    576       1.1  mrg                                      power6-vecperm")
    577       1.1  mrg 
    578       1.1  mrg (define_bypass 9 "power6-vecfloat" "power6-vecstore" )
    579       1.1  mrg 
    580       1.1  mrg (define_insn_reservation "power6-veccomplex" 7
    581       1.1  mrg   (and (eq_attr "type" "vecsimple")
    582       1.1  mrg        (eq_attr "cpu" "power6"))
    583       1.1  mrg   "FPU_power6")
    584       1.1  mrg 
    585       1.1  mrg (define_bypass 10 "power6-veccomplex" "power6-vecsimple,\
    586       1.1  mrg                                        power6-vecfloat" )
    587       1.1  mrg 
    588       1.1  mrg (define_bypass 9 "power6-veccomplex" "power6-vecperm" )
    589       1.1  mrg 
    590       1.1  mrg (define_bypass 8 "power6-veccomplex" "power6-vecstore" )
    591       1.1  mrg 
    592       1.1  mrg (define_insn_reservation "power6-vecperm" 4
    593       1.1  mrg   (and (eq_attr "type" "vecperm")
    594       1.1  mrg        (eq_attr "cpu" "power6"))
    595       1.1  mrg   "FPU_power6")
    596       1.1  mrg 
    597       1.1  mrg (define_bypass 7 "power6-vecperm" "power6-vecsimple,\
    598       1.1  mrg                                    power6-vecfloat" )
    599       1.1  mrg 
    600       1.1  mrg (define_bypass 6 "power6-vecperm" "power6-veccomplex" )
    601       1.1  mrg 
    602       1.1  mrg (define_bypass 5 "power6-vecperm" "power6-vecstore" )
    603       1.1  mrg 
    604