Home | History | Annotate | Line # | Download | only in rs6000
      1   1.1  mrg ;; Scheduling description for IBM POWER6 processor.
      2  1.13  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.5  mrg        (eq_attr "sign_extend" "no")
     92   1.5  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.7  mrg   "rs6000_store_data_bypass_p")
    108   1.1  mrg 
    109   1.1  mrg (define_insn_reservation "power6-load-ext" 4 ; fx
    110   1.5  mrg   (and (eq_attr "type" "load")
    111   1.5  mrg        (eq_attr "sign_extend" "yes")
    112   1.5  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.7  mrg   "rs6000_store_data_bypass_p")
    128   1.1  mrg 
    129   1.1  mrg (define_insn_reservation "power6-load-update" 2 ; fx
    130   1.5  mrg   (and (eq_attr "type" "load")
    131   1.5  mrg        (eq_attr "sign_extend" "no")
    132   1.5  mrg        (eq_attr "update" "yes")
    133   1.5  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.5  mrg   (and (eq_attr "type" "load")
    139   1.5  mrg        (eq_attr "sign_extend" "no")
    140   1.5  mrg        (eq_attr "update" "yes")
    141   1.5  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.5  mrg   (and (eq_attr "type" "load")
    147   1.5  mrg        (eq_attr "sign_extend" "yes")
    148   1.5  mrg        (eq_attr "update" "yes")
    149   1.5  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.5  mrg   (and (eq_attr "type" "load")
    155   1.5  mrg        (eq_attr "sign_extend" "yes")
    156   1.5  mrg        (eq_attr "update" "yes")
    157   1.5  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.5  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.5  mrg   (and (eq_attr "type" "fpload")
    169   1.5  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.5  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.5  mrg   (and (eq_attr "type" "store")
    181   1.5  mrg        (eq_attr "update" "yes")
    182   1.5  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.5  mrg   (and (eq_attr "type" "store")
    188   1.5  mrg        (eq_attr "update" "yes")
    189   1.5  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.5  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.5  mrg   (and (eq_attr "type" "fpstore")
    201   1.5  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.5  mrg   (and (ior (eq_attr "type" "integer")
    222   1.5  mrg 	    (and (eq_attr "type" "add,logical")
    223   1.5  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.5  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.5  mrg        (eq_attr "var_shift" "no")
    241   1.5  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.3  mrg (define_insn_reservation "power6-popcnt" 1
    246   1.3  mrg   (and (eq_attr "type" "popcnt")
    247   1.3  mrg        (eq_attr "cpu" "power6"))
    248   1.3  mrg   "FXU_power6")
    249   1.3  mrg 
    250   1.1  mrg (define_insn_reservation "power6-insert" 1
    251   1.5  mrg   (and (eq_attr "type" "insert")
    252   1.5  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.5  mrg   (and (eq_attr "type" "insert")
    258   1.5  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.7  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.7  mrg   "rs6000_store_data_bypass_p")
    289   1.1  mrg 
    290   1.1  mrg (define_insn_reservation "power6-var-rotate" 4
    291   1.5  mrg   (and (eq_attr "type" "shift")
    292   1.5  mrg        (eq_attr "var_shift" "yes")
    293   1.5  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.5  mrg   (and (eq_attr "type" "exts")
    334   1.5  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.5  mrg   (and (eq_attr "type" "add,logical")
    340   1.5  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.7  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.5  mrg   (and (eq_attr "type" "shift")
    358   1.5  mrg        (eq_attr "var_shift" "no")
    359   1.5  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.5  mrg   (and (eq_attr "type" "shift")
    365   1.5  mrg        (eq_attr "var_shift" "yes")
    366   1.5  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.5  mrg   (and (eq_attr "type" "mul")
    372   1.5  mrg        (eq_attr "dot" "yes")
    373   1.5  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.5  mrg   (and (eq_attr "type" "mul")
    380   1.5  mrg        (eq_attr "dot" "yes")
    381   1.5  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.5  mrg   (and (eq_attr "type" "mul")
    388   1.5  mrg        (eq_attr "dot" "no")
    389   1.5  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.5  mrg   (and (eq_attr "type" "mul")
    396   1.5  mrg        (eq_attr "dot" "no")
    397   1.5  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.5  mrg   (and (eq_attr "type" "mul")
    404   1.5  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.7  mrg   "rs6000_store_data_bypass_p")
    420   1.1  mrg 
    421   1.1  mrg (define_insn_reservation "power6-idiv" 44
    422   1.5  mrg   (and (eq_attr "type" "div")
    423   1.5  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.7  mrg ;  "rs6000_store_data_bypass_p")
    436   1.1  mrg 
    437   1.1  mrg (define_insn_reservation "power6-ldiv" 56
    438   1.5  mrg   (and (eq_attr "type" "div")
    439   1.5  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.7  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.6  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.7  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.6  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.6  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