Home | History | Annotate | Line # | Download | only in rs6000
power6.md revision 1.5.4.2
      1      1.1       mrg ;; Scheduling description for IBM POWER6 processor.
      2  1.5.4.2    martin ;;   Copyright (C) 2006-2017 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.5.4.1  christos   "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.5.4.1  christos   "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.5.4.1  christos   "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.5.4.1  christos   "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.5.4.1  christos   "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.5.4.1  christos   "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.5.4.1  christos ;  "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.5.4.1  christos ;  "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-delayedcr" 3
    479      1.1       mrg   (and (eq_attr "type" "delayed_cr")
    480      1.1       mrg        (eq_attr "cpu" "power6"))
    481      1.1       mrg   "BRU_power6")
    482      1.1       mrg 
    483      1.1       mrg (define_insn_reservation "power6-mfcr" 6 ; N/A
    484      1.1       mrg   (and (eq_attr "type" "mfcr")
    485      1.1       mrg        (eq_attr "cpu" "power6"))
    486      1.1       mrg   "BX2_power6")
    487      1.1       mrg 
    488      1.1       mrg ; mfcrf (1 field)
    489      1.1       mrg (define_insn_reservation "power6-mfcrf" 3 ; N/A
    490      1.1       mrg   (and (eq_attr "type" "mfcrf")
    491      1.1       mrg        (eq_attr "cpu" "power6"))
    492      1.1       mrg   "BX2_power6") ;
    493      1.1       mrg 
    494      1.1       mrg ; mtcrf (1 field)
    495      1.1       mrg (define_insn_reservation "power6-mtcr" 4 ; N/A
    496      1.1       mrg   (and (eq_attr "type" "mtcr")
    497      1.1       mrg        (eq_attr "cpu" "power6"))
    498      1.1       mrg   "BX2_power6")
    499      1.1       mrg 
    500      1.1       mrg (define_bypass 9 "power6-mtcr" "power6-branch")
    501      1.1       mrg 
    502      1.1       mrg (define_insn_reservation "power6-fp" 6
    503  1.5.4.1  christos   (and (eq_attr "type" "fp,fpsimple,dmul,dfp")
    504      1.1       mrg        (eq_attr "cpu" "power6"))
    505      1.1       mrg   "FPU_power6")
    506      1.1       mrg 
    507      1.1       mrg ; Any fp instruction that updates a CR has a latency
    508      1.1       mrg ; of 6 to a dependent branch
    509      1.1       mrg (define_bypass 6 "power6-fp" "power6-branch")
    510      1.1       mrg 
    511      1.1       mrg (define_bypass 1 "power6-fp"
    512      1.1       mrg                  "power6-fpstore,power6-fpstore-update"
    513  1.5.4.1  christos   "rs6000_store_data_bypass_p")
    514      1.1       mrg 
    515      1.1       mrg (define_insn_reservation "power6-fpcompare" 8
    516      1.1       mrg   (and (eq_attr "type" "fpcompare")
    517      1.1       mrg        (eq_attr "cpu" "power6"))
    518      1.1       mrg   "FPU_power6")
    519      1.1       mrg 
    520      1.1       mrg (define_bypass 12 "power6-fpcompare"
    521      1.1       mrg                   "power6-branch,power6-crlogical")
    522      1.1       mrg 
    523      1.1       mrg (define_insn_reservation "power6-sdiv" 26
    524      1.1       mrg   (and (eq_attr "type" "sdiv")
    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-ddiv" 32
    529      1.1       mrg   (and (eq_attr "type" "ddiv")
    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-sqrt" 30
    534      1.1       mrg   (and (eq_attr "type" "ssqrt")
    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-dsqrt" 42
    539      1.1       mrg   (and (eq_attr "type" "dsqrt")
    540      1.1       mrg        (eq_attr "cpu" "power6"))
    541      1.1       mrg   "FPU_power6")
    542      1.1       mrg 
    543      1.1       mrg (define_insn_reservation "power6-isync" 2 ; N/A 
    544      1.1       mrg   (and (eq_attr "type" "isync")
    545      1.1       mrg        (eq_attr "cpu" "power6"))
    546      1.1       mrg   "FXU_power6")
    547      1.1       mrg 
    548      1.1       mrg (define_insn_reservation "power6-vecload" 1
    549      1.1       mrg   (and (eq_attr "type" "vecload")
    550      1.1       mrg        (eq_attr "cpu" "power6"))
    551      1.1       mrg   "LSU_power6")
    552      1.1       mrg 
    553      1.1       mrg (define_insn_reservation "power6-vecstore" 1
    554      1.1       mrg   (and (eq_attr "type" "vecstore")
    555      1.1       mrg        (eq_attr "cpu" "power6"))
    556      1.1       mrg   "LSF_power6")
    557      1.1       mrg 
    558      1.1       mrg (define_insn_reservation "power6-vecsimple" 3
    559  1.5.4.1  christos   (and (eq_attr "type" "vecsimple,veclogical,vecmove")
    560      1.1       mrg        (eq_attr "cpu" "power6"))
    561      1.1       mrg   "FPU_power6")
    562      1.1       mrg 
    563      1.1       mrg (define_bypass 6 "power6-vecsimple" "power6-veccomplex,\
    564      1.1       mrg                                      power6-vecperm")
    565      1.1       mrg 
    566      1.1       mrg (define_bypass 5 "power6-vecsimple" "power6-vecfloat")
    567      1.1       mrg 
    568      1.1       mrg (define_bypass 4 "power6-vecsimple" "power6-vecstore" )
    569      1.1       mrg 
    570      1.1       mrg (define_insn_reservation "power6-veccmp" 1
    571  1.5.4.1  christos   (and (eq_attr "type" "veccmp,veccmpfx")
    572      1.1       mrg        (eq_attr "cpu" "power6"))
    573      1.1       mrg   "FPU_power6")
    574      1.1       mrg 
    575      1.1       mrg (define_bypass 10 "power6-veccmp" "power6-branch")
    576      1.1       mrg 
    577      1.1       mrg (define_insn_reservation "power6-vecfloat" 7
    578      1.1       mrg   (and (eq_attr "type" "vecfloat")
    579      1.1       mrg        (eq_attr "cpu" "power6"))
    580      1.1       mrg   "FPU_power6")
    581      1.1       mrg 
    582      1.1       mrg (define_bypass 10 "power6-vecfloat" "power6-vecsimple")
    583      1.1       mrg 
    584      1.1       mrg (define_bypass 11 "power6-vecfloat" "power6-veccomplex,\
    585      1.1       mrg                                      power6-vecperm")
    586      1.1       mrg 
    587      1.1       mrg (define_bypass 9 "power6-vecfloat" "power6-vecstore" )
    588      1.1       mrg 
    589      1.1       mrg (define_insn_reservation "power6-veccomplex" 7
    590      1.1       mrg   (and (eq_attr "type" "vecsimple")
    591      1.1       mrg        (eq_attr "cpu" "power6"))
    592      1.1       mrg   "FPU_power6")
    593      1.1       mrg 
    594      1.1       mrg (define_bypass 10 "power6-veccomplex" "power6-vecsimple,\
    595      1.1       mrg                                        power6-vecfloat" )
    596      1.1       mrg 
    597      1.1       mrg (define_bypass 9 "power6-veccomplex" "power6-vecperm" )
    598      1.1       mrg 
    599      1.1       mrg (define_bypass 8 "power6-veccomplex" "power6-vecstore" )
    600      1.1       mrg 
    601      1.1       mrg (define_insn_reservation "power6-vecperm" 4
    602      1.1       mrg   (and (eq_attr "type" "vecperm")
    603      1.1       mrg        (eq_attr "cpu" "power6"))
    604      1.1       mrg   "FPU_power6")
    605      1.1       mrg 
    606      1.1       mrg (define_bypass 7 "power6-vecperm" "power6-vecsimple,\
    607      1.1       mrg                                    power6-vecfloat" )
    608      1.1       mrg 
    609      1.1       mrg (define_bypass 6 "power6-vecperm" "power6-veccomplex" )
    610      1.1       mrg 
    611      1.1       mrg (define_bypass 5 "power6-vecperm" "power6-vecstore" )
    612      1.1       mrg 
    613      1.1       mrg (define_insn_reservation "power6-mftgpr" 8
    614      1.1       mrg   (and (eq_attr "type" "mftgpr")
    615      1.1       mrg        (eq_attr "cpu" "power6"))
    616      1.1       mrg   "X2F_power6")
    617      1.1       mrg 
    618      1.1       mrg (define_insn_reservation "power6-mffgpr" 14
    619      1.1       mrg   (and (eq_attr "type" "mffgpr")
    620      1.1       mrg        (eq_attr "cpu" "power6"))
    621      1.1       mrg   "LX2_power6")
    622      1.1       mrg 
    623      1.1       mrg (define_bypass 4 "power6-mftgpr" "power6-imul,\
    624      1.1       mrg                                   power6-lmul,\
    625      1.1       mrg                                   power6-imul-cmp,\
    626      1.1       mrg                                   power6-lmul-cmp,\
    627      1.1       mrg                                   power6-imul3,\
    628      1.1       mrg                                   power6-idiv,\
    629      1.1       mrg                                   power6-ldiv" )
    630