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