Home | History | Annotate | Line # | Download | only in rs6000
      1  1.1.1.2  mrg ;; Scheduling description for the IBM POWER10 processor.
      2  1.1.1.2  mrg ;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
      3      1.1  mrg ;;
      4  1.1.1.2  mrg ;; Contributed by Pat Haugen (pthaugen (a] us.ibm.com).
      5      1.1  mrg 
      6      1.1  mrg ;; This file is part of GCC.
      7      1.1  mrg ;;
      8      1.1  mrg ;; GCC is free software; you can redistribute it and/or modify it
      9      1.1  mrg ;; under the terms of the GNU General Public License as published
     10      1.1  mrg ;; by the Free Software Foundation; either version 3, or (at your
     11      1.1  mrg ;; option) any later version.
     12      1.1  mrg ;;
     13      1.1  mrg ;; GCC is distributed in the hope that it will be useful, but WITHOUT
     14      1.1  mrg ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     15      1.1  mrg ;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     16      1.1  mrg ;; License for more details.
     17      1.1  mrg ;;
     18      1.1  mrg ;; You should have received a copy of the GNU General Public License
     19      1.1  mrg ;; along with GCC; see the file COPYING3.  If not see
     20      1.1  mrg ;; <http://www.gnu.org/licenses/>.
     21      1.1  mrg 
     22  1.1.1.2  mrg ; For Power10 we model (and try to pack) the in-order decode/dispatch groups
     23  1.1.1.2  mrg ; which consist of 8 instructions max.  We do not try to model the details of
     24  1.1.1.2  mrg ; the out-of-order issue queues and how insns flow to the various execution
     25  1.1.1.2  mrg ; units except for the simple representation of the issue limitation of at
     26  1.1.1.2  mrg ; most 4 insns to the execution units/2 insns to the load units/2 insns to
     27  1.1.1.2  mrg ; the store units.
     28  1.1.1.2  mrg (define_automaton "power10dispatch,power10issue")
     29  1.1.1.2  mrg 
     30  1.1.1.2  mrg ; Decode/dispatch slots
     31  1.1.1.2  mrg (define_cpu_unit "du0_power10,du1_power10,du2_power10,du3_power10,
     32  1.1.1.2  mrg 		  du4_power10,du5_power10,du6_power10,du7_power10" "power10dispatch")
     33  1.1.1.2  mrg 
     34  1.1.1.2  mrg ; Four execution units
     35  1.1.1.2  mrg (define_cpu_unit "exu0_power10,exu1_power10,exu2_power10,exu3_power10"
     36  1.1.1.2  mrg 		 "power10issue")
     37  1.1.1.2  mrg ; Two load units and two store units
     38  1.1.1.2  mrg (define_cpu_unit "lu0_power10,lu1_power10" "power10issue")
     39  1.1.1.2  mrg (define_cpu_unit "stu0_power10,stu1_power10" "power10issue")
     40  1.1.1.2  mrg 
     41  1.1.1.2  mrg 
     42  1.1.1.2  mrg ; Dispatch slots are allocated in order conforming to program order.
     43  1.1.1.2  mrg (absence_set "du0_power10" "du1_power10,du2_power10,du3_power10,du4_power10,\
     44  1.1.1.2  mrg               du5_power10,du6_power10,du7_power10")
     45  1.1.1.2  mrg (absence_set "du1_power10" "du2_power10,du3_power10,du4_power10,du5_power10,\
     46  1.1.1.2  mrg               du6_power10,du7_power10")
     47  1.1.1.2  mrg (absence_set "du2_power10" "du3_power10,du4_power10,du5_power10,du6_power10,\
     48  1.1.1.2  mrg 	      du7_power10")
     49  1.1.1.2  mrg (absence_set "du3_power10" "du4_power10,du5_power10,du6_power10,du7_power10")
     50  1.1.1.2  mrg (absence_set "du4_power10" "du5_power10,du6_power10,du7_power10")
     51  1.1.1.2  mrg (absence_set "du5_power10" "du6_power10,du7_power10")
     52  1.1.1.2  mrg (absence_set "du6_power10" "du7_power10")
     53      1.1  mrg 
     54      1.1  mrg 
     55      1.1  mrg ; Dispatch port reservations
     56      1.1  mrg ;
     57  1.1.1.2  mrg ; Power10 can dispatch a maximum of 8 iops per cycle. With a maximum of
     58  1.1.1.2  mrg ; 4 VSU/2 Load/2 Store per cycle.
     59      1.1  mrg 
     60  1.1.1.2  mrg ; Any dispatch slot
     61      1.1  mrg (define_reservation "DU_any_power10"
     62  1.1.1.2  mrg 		    "du0_power10|du1_power10|du2_power10|du3_power10|
     63  1.1.1.2  mrg 		     du4_power10|du5_power10|du6_power10|du7_power10")
     64  1.1.1.2  mrg 
     65  1.1.1.2  mrg ; Even slot, actually takes even/odd slots
     66  1.1.1.2  mrg (define_reservation "DU_even_power10"
     67  1.1.1.2  mrg 		    "du0_power10+du1_power10|du2_power10+du3_power10|
     68  1.1.1.2  mrg 		     du4_power10+du5_power10|du6_power10+du7_power10")
     69  1.1.1.2  mrg 
     70  1.1.1.2  mrg ; 4-way cracked (consumes whole decode/dispatch cycle)
     71  1.1.1.2  mrg (define_reservation "DU_all_power10"
     72  1.1.1.2  mrg 		    "du0_power10+du1_power10+du2_power10+du3_power10+
     73  1.1.1.2  mrg 		     du4_power10+du5_power10+du6_power10+du7_power10")
     74      1.1  mrg 
     75      1.1  mrg 
     76  1.1.1.2  mrg ; Execution unit reservations
     77  1.1.1.2  mrg (define_reservation "LU_power10"
     78  1.1.1.2  mrg 		    "lu0_power10|lu1_power10")
     79      1.1  mrg 
     80  1.1.1.2  mrg (define_reservation "STU_power10"
     81  1.1.1.2  mrg 		    "stu0_power10|stu1_power10")
     82      1.1  mrg 
     83  1.1.1.2  mrg ; Certain simple fixed-point insns can execute in the Store-agen pipe
     84  1.1.1.2  mrg (define_reservation "SXU_power10"
     85  1.1.1.2  mrg 		    "stu0_power10|stu1_power10")
     86      1.1  mrg 
     87  1.1.1.2  mrg (define_reservation "EXU_power10"
     88  1.1.1.2  mrg 		    "exu0_power10|exu1_power10|exu2_power10|exu3_power10")
     89      1.1  mrg 
     90  1.1.1.2  mrg (define_reservation "EXU_super_power10"
     91  1.1.1.2  mrg 		    "exu0_power10+exu1_power10|exu2_power10+exu3_power10")
     92      1.1  mrg 
     93      1.1  mrg 
     94  1.1.1.2  mrg ; Load Unit
     95      1.1  mrg (define_insn_reservation "power10-load" 4
     96      1.1  mrg   (and (eq_attr "type" "load")
     97      1.1  mrg        (eq_attr "update" "no")
     98  1.1.1.2  mrg        (eq_attr "size" "!128")
     99  1.1.1.2  mrg        (eq_attr "prefixed" "no")
    100      1.1  mrg        (eq_attr "cpu" "power10"))
    101  1.1.1.2  mrg   "DU_any_power10,LU_power10")
    102      1.1  mrg 
    103  1.1.1.2  mrg (define_insn_reservation "power10-fused-load" 4
    104  1.1.1.2  mrg   (and (eq_attr "type" "fused_load_cmpi,fused_addis_load,fused_load_load")
    105      1.1  mrg        (eq_attr "cpu" "power10"))
    106  1.1.1.2  mrg   "DU_even_power10,LU_power10")
    107      1.1  mrg 
    108  1.1.1.2  mrg (define_insn_reservation "power10-prefixed-load" 4
    109      1.1  mrg   (and (eq_attr "type" "load")
    110      1.1  mrg        (eq_attr "update" "no")
    111  1.1.1.2  mrg        (eq_attr "size" "!128")
    112  1.1.1.2  mrg        (eq_attr "prefixed" "yes")
    113      1.1  mrg        (eq_attr "cpu" "power10"))
    114  1.1.1.2  mrg   "DU_even_power10,LU_power10")
    115      1.1  mrg 
    116  1.1.1.2  mrg (define_insn_reservation "power10-load-update" 4
    117      1.1  mrg   (and (eq_attr "type" "load")
    118      1.1  mrg        (eq_attr "update" "yes")
    119      1.1  mrg        (eq_attr "cpu" "power10"))
    120  1.1.1.2  mrg   "DU_even_power10,LU_power10+SXU_power10")
    121      1.1  mrg 
    122      1.1  mrg (define_insn_reservation "power10-fpload-double" 4
    123      1.1  mrg   (and (eq_attr "type" "fpload")
    124      1.1  mrg        (eq_attr "update" "no")
    125      1.1  mrg        (eq_attr "size" "64")
    126  1.1.1.2  mrg        (eq_attr "prefixed" "no")
    127      1.1  mrg        (eq_attr "cpu" "power10"))
    128  1.1.1.2  mrg   "DU_any_power10,LU_power10")
    129  1.1.1.2  mrg 
    130  1.1.1.2  mrg (define_insn_reservation "power10-prefixed-fpload-double" 4
    131  1.1.1.2  mrg   (and (eq_attr "type" "fpload")
    132  1.1.1.2  mrg        (eq_attr "update" "no")
    133  1.1.1.2  mrg        (eq_attr "size" "64")
    134  1.1.1.2  mrg        (eq_attr "prefixed" "yes")
    135  1.1.1.2  mrg        (eq_attr "cpu" "power10"))
    136  1.1.1.2  mrg   "DU_even_power10,LU_power10")
    137      1.1  mrg 
    138      1.1  mrg (define_insn_reservation "power10-fpload-update-double" 4
    139      1.1  mrg   (and (eq_attr "type" "fpload")
    140      1.1  mrg        (eq_attr "update" "yes")
    141      1.1  mrg        (eq_attr "size" "64")
    142      1.1  mrg        (eq_attr "cpu" "power10"))
    143  1.1.1.2  mrg   "DU_even_power10,LU_power10+SXU_power10")
    144      1.1  mrg 
    145  1.1.1.2  mrg ; SFmode loads are cracked and have additional 3 cycles over DFmode
    146  1.1.1.2  mrg ; Prefixed forms behave the same
    147  1.1.1.2  mrg (define_insn_reservation "power10-fpload-single" 7
    148      1.1  mrg   (and (eq_attr "type" "fpload")
    149      1.1  mrg        (eq_attr "update" "no")
    150      1.1  mrg        (eq_attr "size" "32")
    151      1.1  mrg        (eq_attr "cpu" "power10"))
    152  1.1.1.2  mrg   "DU_even_power10,LU_power10")
    153      1.1  mrg 
    154  1.1.1.2  mrg (define_insn_reservation "power10-fpload-update-single" 7
    155      1.1  mrg   (and (eq_attr "type" "fpload")
    156      1.1  mrg        (eq_attr "update" "yes")
    157      1.1  mrg        (eq_attr "size" "32")
    158      1.1  mrg        (eq_attr "cpu" "power10"))
    159  1.1.1.2  mrg   "DU_even_power10,LU_power10+SXU_power10")
    160      1.1  mrg 
    161  1.1.1.2  mrg (define_insn_reservation "power10-vecload" 4
    162      1.1  mrg   (and (eq_attr "type" "vecload")
    163  1.1.1.2  mrg        (eq_attr "size" "!256")
    164      1.1  mrg        (eq_attr "cpu" "power10"))
    165  1.1.1.2  mrg   "DU_any_power10,LU_power10")
    166      1.1  mrg 
    167  1.1.1.2  mrg ; lxvp
    168  1.1.1.2  mrg (define_insn_reservation "power10-vecload-pair" 4
    169  1.1.1.2  mrg   (and (eq_attr "type" "vecload")
    170  1.1.1.2  mrg        (eq_attr "size" "256")
    171      1.1  mrg        (eq_attr "cpu" "power10"))
    172  1.1.1.2  mrg   "DU_even_power10,LU_power10+SXU_power10")
    173      1.1  mrg 
    174  1.1.1.2  mrg ; Store Unit
    175  1.1.1.2  mrg (define_insn_reservation "power10-store" 0
    176  1.1.1.2  mrg   (and (eq_attr "type" "store,fpstore,vecstore")
    177      1.1  mrg        (eq_attr "update" "no")
    178  1.1.1.2  mrg        (eq_attr "prefixed" "no")
    179  1.1.1.2  mrg        (eq_attr "size" "!128")
    180  1.1.1.2  mrg        (eq_attr "size" "!256")
    181      1.1  mrg        (eq_attr "cpu" "power10"))
    182  1.1.1.2  mrg   "DU_any_power10,STU_power10")
    183      1.1  mrg 
    184  1.1.1.2  mrg (define_insn_reservation "power10-fused-store" 0
    185  1.1.1.2  mrg   (and (eq_attr "type" "fused_store_store")
    186      1.1  mrg        (eq_attr "cpu" "power10"))
    187  1.1.1.2  mrg   "DU_even_power10,STU_power10")
    188      1.1  mrg 
    189  1.1.1.2  mrg (define_insn_reservation "power10-prefixed-store" 0
    190  1.1.1.2  mrg   (and (eq_attr "type" "store,fpstore,vecstore")
    191  1.1.1.2  mrg        (eq_attr "prefixed" "yes")
    192  1.1.1.2  mrg        (eq_attr "size" "!128")
    193  1.1.1.2  mrg        (eq_attr "size" "!256")
    194      1.1  mrg        (eq_attr "cpu" "power10"))
    195  1.1.1.2  mrg   "DU_even_power10,STU_power10")
    196      1.1  mrg 
    197      1.1  mrg ; Update forms have 2 cycle latency for updated addr reg
    198  1.1.1.2  mrg (define_insn_reservation "power10-store-update" 2
    199  1.1.1.2  mrg   (and (eq_attr "type" "store,fpstore")
    200      1.1  mrg        (eq_attr "update" "yes")
    201      1.1  mrg        (eq_attr "cpu" "power10"))
    202  1.1.1.2  mrg   "DU_any_power10,STU_power10")
    203      1.1  mrg 
    204  1.1.1.2  mrg ; stxvp
    205  1.1.1.2  mrg (define_insn_reservation "power10-vecstore-pair" 0
    206      1.1  mrg   (and (eq_attr "type" "vecstore")
    207  1.1.1.2  mrg        (eq_attr "size" "256")
    208      1.1  mrg        (eq_attr "cpu" "power10"))
    209  1.1.1.2  mrg   "DU_even_power10,stu0_power10+stu1_power10")
    210      1.1  mrg 
    211      1.1  mrg (define_insn_reservation "power10-larx" 4
    212      1.1  mrg   (and (eq_attr "type" "load_l")
    213  1.1.1.2  mrg        (eq_attr "size" "!128")
    214      1.1  mrg        (eq_attr "cpu" "power10"))
    215  1.1.1.2  mrg   "DU_any_power10,LU_power10")
    216      1.1  mrg 
    217  1.1.1.2  mrg ; All load quad forms
    218  1.1.1.2  mrg (define_insn_reservation "power10-lq" 4
    219  1.1.1.2  mrg   (and (eq_attr "type" "load,load_l")
    220  1.1.1.2  mrg        (eq_attr "size" "128")
    221  1.1.1.2  mrg        (eq_attr "cpu" "power10"))
    222  1.1.1.2  mrg   "DU_even_power10,LU_power10+SXU_power10")
    223  1.1.1.2  mrg 
    224  1.1.1.2  mrg (define_insn_reservation "power10-stcx" 0
    225      1.1  mrg   (and (eq_attr "type" "store_c")
    226  1.1.1.2  mrg        (eq_attr "size" "!128")
    227  1.1.1.2  mrg        (eq_attr "cpu" "power10"))
    228  1.1.1.2  mrg   "DU_any_power10,STU_power10")
    229  1.1.1.2  mrg 
    230  1.1.1.2  mrg ; All store quad forms
    231  1.1.1.2  mrg (define_insn_reservation "power10-stq" 0
    232  1.1.1.2  mrg   (and (eq_attr "type" "store,store_c")
    233  1.1.1.2  mrg        (eq_attr "size" "128")
    234      1.1  mrg        (eq_attr "cpu" "power10"))
    235  1.1.1.2  mrg   "DU_even_power10,stu0_power10+stu1_power10")
    236      1.1  mrg 
    237  1.1.1.2  mrg (define_insn_reservation "power10-sync" 1
    238      1.1  mrg   (and (eq_attr "type" "sync,isync")
    239      1.1  mrg        (eq_attr "cpu" "power10"))
    240  1.1.1.2  mrg   "DU_even_power10,STU_power10")
    241      1.1  mrg 
    242      1.1  mrg 
    243      1.1  mrg ; VSU Execution Unit
    244      1.1  mrg 
    245      1.1  mrg ; Fixed point ops
    246      1.1  mrg 
    247      1.1  mrg ; Most ALU insns are simple 2 cycle, including record form
    248      1.1  mrg (define_insn_reservation "power10-alu" 2
    249      1.1  mrg   (and (eq_attr "type" "add,exts,integer,logical,isel")
    250  1.1.1.2  mrg        (eq_attr "prefixed" "no")
    251      1.1  mrg        (eq_attr "cpu" "power10"))
    252  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    253  1.1.1.2  mrg ; 4 cycle CR latency
    254  1.1.1.2  mrg (define_bypass 4 "power10-alu"
    255      1.1  mrg 		 "power10-crlogical,power10-mfcr,power10-mfcrf")
    256      1.1  mrg 
    257  1.1.1.2  mrg (define_insn_reservation "power10-fused_alu" 2
    258  1.1.1.2  mrg   (and (eq_attr "type" "fused_arith_logical,fused_cmp_isel,fused_carry")
    259  1.1.1.2  mrg        (eq_attr "cpu" "power10"))
    260  1.1.1.2  mrg   "DU_even_power10,EXU_power10")
    261  1.1.1.2  mrg 
    262  1.1.1.2  mrg ; paddi
    263  1.1.1.2  mrg (define_insn_reservation "power10-paddi" 2
    264  1.1.1.2  mrg   (and (eq_attr "type" "add")
    265  1.1.1.2  mrg        (eq_attr "prefixed" "yes")
    266  1.1.1.2  mrg        (eq_attr "cpu" "power10"))
    267  1.1.1.2  mrg   "DU_even_power10,EXU_power10")
    268  1.1.1.2  mrg 
    269  1.1.1.2  mrg ; Rotate/shift (non-record form)
    270      1.1  mrg (define_insn_reservation "power10-rot" 2
    271      1.1  mrg   (and (eq_attr "type" "insert,shift")
    272      1.1  mrg        (eq_attr "dot" "no")
    273      1.1  mrg        (eq_attr "cpu" "power10"))
    274  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    275      1.1  mrg 
    276  1.1.1.2  mrg ; Record form rotate/shift
    277  1.1.1.2  mrg (define_insn_reservation "power10-rot-compare" 3
    278      1.1  mrg   (and (eq_attr "type" "insert,shift")
    279      1.1  mrg        (eq_attr "dot" "yes")
    280      1.1  mrg        (eq_attr "cpu" "power10"))
    281  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    282  1.1.1.2  mrg ; 5 cycle CR latency
    283  1.1.1.2  mrg (define_bypass 5 "power10-rot-compare"
    284      1.1  mrg 		 "power10-crlogical,power10-mfcr,power10-mfcrf")
    285      1.1  mrg 
    286      1.1  mrg (define_insn_reservation "power10-alu2" 3
    287      1.1  mrg   (and (eq_attr "type" "cntlz,popcnt,trap")
    288      1.1  mrg        (eq_attr "cpu" "power10"))
    289  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    290  1.1.1.2  mrg ; 5 cycle CR latency
    291  1.1.1.2  mrg (define_bypass 5 "power10-alu2"
    292      1.1  mrg 		 "power10-crlogical,power10-mfcr,power10-mfcrf")
    293      1.1  mrg 
    294      1.1  mrg (define_insn_reservation "power10-cmp" 2
    295      1.1  mrg   (and (eq_attr "type" "cmp")
    296      1.1  mrg        (eq_attr "cpu" "power10"))
    297  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    298      1.1  mrg 
    299      1.1  mrg ; Treat 'two' and 'three' types as 2 or 3 way cracked
    300      1.1  mrg (define_insn_reservation "power10-two" 4
    301      1.1  mrg   (and (eq_attr "type" "two")
    302      1.1  mrg        (eq_attr "cpu" "power10"))
    303  1.1.1.2  mrg   "DU_even_power10,EXU_power10")
    304      1.1  mrg 
    305      1.1  mrg (define_insn_reservation "power10-three" 6
    306      1.1  mrg   (and (eq_attr "type" "three")
    307      1.1  mrg        (eq_attr "cpu" "power10"))
    308  1.1.1.2  mrg   "DU_all_power10,EXU_power10")
    309      1.1  mrg 
    310      1.1  mrg (define_insn_reservation "power10-mul" 5
    311      1.1  mrg   (and (eq_attr "type" "mul")
    312      1.1  mrg        (eq_attr "dot" "no")
    313      1.1  mrg        (eq_attr "cpu" "power10"))
    314  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    315  1.1.1.2  mrg ; 4 cycle MUL->MUL latency
    316  1.1.1.2  mrg (define_bypass 4 "power10-mul"
    317  1.1.1.2  mrg 		 "power10-mul,power10-mul-compare")
    318      1.1  mrg 
    319      1.1  mrg (define_insn_reservation "power10-mul-compare" 5
    320      1.1  mrg   (and (eq_attr "type" "mul")
    321      1.1  mrg        (eq_attr "dot" "yes")
    322      1.1  mrg        (eq_attr "cpu" "power10"))
    323  1.1.1.2  mrg   "DU_even_power10,EXU_power10")
    324  1.1.1.2  mrg ; 4 cycle MUL->MUL latency
    325  1.1.1.2  mrg (define_bypass 4 "power10-mul-compare"
    326  1.1.1.2  mrg 		 "power10-mul,power10-mul-compare")
    327  1.1.1.2  mrg ; 7 cycle CR latency
    328  1.1.1.2  mrg (define_bypass 7 "power10-mul-compare"
    329      1.1  mrg 		 "power10-crlogical,power10-mfcr,power10-mfcrf")
    330      1.1  mrg 
    331  1.1.1.2  mrg (define_insn_reservation "power10-div" 12
    332      1.1  mrg   (and (eq_attr "type" "div")
    333  1.1.1.2  mrg        (eq_attr "dot" "no")
    334      1.1  mrg        (eq_attr "cpu" "power10"))
    335  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    336      1.1  mrg 
    337  1.1.1.2  mrg (define_insn_reservation "power10-div-compare" 12
    338      1.1  mrg   (and (eq_attr "type" "div")
    339  1.1.1.2  mrg        (eq_attr "dot" "yes")
    340      1.1  mrg        (eq_attr "cpu" "power10"))
    341  1.1.1.2  mrg   "DU_even_power10,EXU_power10")
    342  1.1.1.2  mrg ; 14 cycle CR latency
    343  1.1.1.2  mrg (define_bypass 14 "power10-div-compare"
    344  1.1.1.2  mrg 		 "power10-crlogical,power10-mfcr,power10-mfcrf")
    345      1.1  mrg 
    346      1.1  mrg (define_insn_reservation "power10-crlogical" 2
    347      1.1  mrg   (and (eq_attr "type" "cr_logical")
    348      1.1  mrg        (eq_attr "cpu" "power10"))
    349  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    350      1.1  mrg 
    351      1.1  mrg (define_insn_reservation "power10-mfcrf" 2
    352      1.1  mrg   (and (eq_attr "type" "mfcrf")
    353      1.1  mrg        (eq_attr "cpu" "power10"))
    354  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    355      1.1  mrg 
    356  1.1.1.2  mrg (define_insn_reservation "power10-mfcr" 3
    357      1.1  mrg   (and (eq_attr "type" "mfcr")
    358      1.1  mrg        (eq_attr "cpu" "power10"))
    359  1.1.1.2  mrg   "DU_even_power10,EXU_power10")
    360      1.1  mrg 
    361      1.1  mrg ; Should differentiate between 1 cr field and > 1 since target of > 1 cr
    362      1.1  mrg ; is cracked
    363  1.1.1.2  mrg (define_insn_reservation "power10-mtcr" 3
    364      1.1  mrg   (and (eq_attr "type" "mtcr")
    365      1.1  mrg        (eq_attr "cpu" "power10"))
    366  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    367      1.1  mrg 
    368  1.1.1.2  mrg (define_insn_reservation "power10-mtjmpr" 3
    369      1.1  mrg   (and (eq_attr "type" "mtjmpr")
    370      1.1  mrg        (eq_attr "cpu" "power10"))
    371  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    372  1.1.1.2  mrg 
    373  1.1.1.2  mrg (define_insn_reservation "power10-mfjmpr" 2
    374  1.1.1.2  mrg   (and (eq_attr "type" "mfjmpr")
    375  1.1.1.2  mrg        (eq_attr "cpu" "power10"))
    376  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    377  1.1.1.2  mrg 
    378      1.1  mrg 
    379      1.1  mrg ; Floating point/Vector ops
    380  1.1.1.2  mrg 
    381  1.1.1.2  mrg (define_insn_reservation "power10-fpsimple" 3
    382      1.1  mrg   (and (eq_attr "type" "fpsimple")
    383      1.1  mrg        (eq_attr "cpu" "power10"))
    384  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    385      1.1  mrg 
    386      1.1  mrg (define_insn_reservation "power10-fp" 5
    387      1.1  mrg   (and (eq_attr "type" "fp,dmul")
    388      1.1  mrg        (eq_attr "cpu" "power10"))
    389  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    390      1.1  mrg 
    391      1.1  mrg (define_insn_reservation "power10-fpcompare" 3
    392      1.1  mrg   (and (eq_attr "type" "fpcompare")
    393      1.1  mrg        (eq_attr "cpu" "power10"))
    394  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    395      1.1  mrg 
    396      1.1  mrg (define_insn_reservation "power10-sdiv" 22
    397      1.1  mrg   (and (eq_attr "type" "sdiv")
    398      1.1  mrg        (eq_attr "cpu" "power10"))
    399  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    400      1.1  mrg 
    401      1.1  mrg (define_insn_reservation "power10-ddiv" 27
    402      1.1  mrg   (and (eq_attr "type" "ddiv")
    403      1.1  mrg        (eq_attr "cpu" "power10"))
    404  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    405      1.1  mrg 
    406      1.1  mrg (define_insn_reservation "power10-sqrt" 26
    407      1.1  mrg   (and (eq_attr "type" "ssqrt")
    408      1.1  mrg        (eq_attr "cpu" "power10"))
    409  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    410      1.1  mrg 
    411      1.1  mrg (define_insn_reservation "power10-dsqrt" 36
    412      1.1  mrg   (and (eq_attr "type" "dsqrt")
    413      1.1  mrg        (eq_attr "cpu" "power10"))
    414  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    415      1.1  mrg 
    416      1.1  mrg (define_insn_reservation "power10-vec-2cyc" 2
    417      1.1  mrg   (and (eq_attr "type" "vecmove,veclogical,vecexts,veccmpfx")
    418      1.1  mrg        (eq_attr "cpu" "power10"))
    419  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    420  1.1.1.2  mrg 
    421  1.1.1.2  mrg (define_insn_reservation "power10-fused-vec" 2
    422  1.1.1.2  mrg   (and (eq_attr "type" "fused_vector")
    423  1.1.1.2  mrg        (eq_attr "cpu" "power10"))
    424  1.1.1.2  mrg   "DU_even_power10,EXU_power10")
    425      1.1  mrg 
    426      1.1  mrg (define_insn_reservation "power10-veccmp" 3
    427      1.1  mrg   (and (eq_attr "type" "veccmp")
    428      1.1  mrg        (eq_attr "cpu" "power10"))
    429  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    430      1.1  mrg 
    431  1.1.1.2  mrg (define_insn_reservation "power10-vecsimple" 2
    432      1.1  mrg   (and (eq_attr "type" "vecsimple")
    433      1.1  mrg        (eq_attr "cpu" "power10"))
    434  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    435      1.1  mrg 
    436  1.1.1.2  mrg (define_insn_reservation "power10-vecnormal" 5
    437      1.1  mrg   (and (eq_attr "type" "vecfloat,vecdouble")
    438      1.1  mrg        (eq_attr "size" "!128")
    439      1.1  mrg        (eq_attr "cpu" "power10"))
    440  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    441      1.1  mrg 
    442      1.1  mrg (define_insn_reservation "power10-qp" 12
    443      1.1  mrg   (and (eq_attr "type" "vecfloat,vecdouble")
    444      1.1  mrg        (eq_attr "size" "128")
    445      1.1  mrg        (eq_attr "cpu" "power10"))
    446  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    447      1.1  mrg 
    448      1.1  mrg (define_insn_reservation "power10-vecperm" 3
    449      1.1  mrg   (and (eq_attr "type" "vecperm")
    450  1.1.1.2  mrg        (eq_attr "prefixed" "no")
    451  1.1.1.2  mrg        (eq_attr "dot" "no")
    452      1.1  mrg        (eq_attr "cpu" "power10"))
    453  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    454      1.1  mrg 
    455  1.1.1.2  mrg (define_insn_reservation "power10-vecperm-compare" 3
    456  1.1.1.2  mrg   (and (eq_attr "type" "vecperm")
    457  1.1.1.2  mrg        (eq_attr "dot" "yes")
    458  1.1.1.2  mrg        (eq_attr "cpu" "power10"))
    459  1.1.1.2  mrg   "DU_even_power10,EXU_power10")
    460  1.1.1.2  mrg 
    461  1.1.1.2  mrg (define_insn_reservation "power10-prefixed-vecperm" 3
    462  1.1.1.2  mrg   (and (eq_attr "type" "vecperm")
    463  1.1.1.2  mrg        (eq_attr "prefixed" "yes")
    464  1.1.1.2  mrg        (eq_attr "cpu" "power10"))
    465  1.1.1.2  mrg   "DU_even_power10,EXU_power10")
    466  1.1.1.2  mrg 
    467  1.1.1.2  mrg (define_insn_reservation "power10-veccomplex" 6
    468      1.1  mrg   (and (eq_attr "type" "veccomplex")
    469      1.1  mrg        (eq_attr "cpu" "power10"))
    470  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    471      1.1  mrg 
    472      1.1  mrg (define_insn_reservation "power10-vecfdiv" 24
    473      1.1  mrg   (and (eq_attr "type" "vecfdiv")
    474      1.1  mrg        (eq_attr "cpu" "power10"))
    475  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    476      1.1  mrg 
    477      1.1  mrg (define_insn_reservation "power10-vecdiv" 27
    478      1.1  mrg   (and (eq_attr "type" "vecdiv")
    479      1.1  mrg        (eq_attr "size" "!128")
    480      1.1  mrg        (eq_attr "cpu" "power10"))
    481  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    482      1.1  mrg 
    483      1.1  mrg (define_insn_reservation "power10-qpdiv" 56
    484      1.1  mrg   (and (eq_attr "type" "vecdiv")
    485      1.1  mrg        (eq_attr "size" "128")
    486      1.1  mrg        (eq_attr "cpu" "power10"))
    487  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    488      1.1  mrg 
    489      1.1  mrg (define_insn_reservation "power10-qpmul" 24
    490      1.1  mrg   (and (eq_attr "type" "qmul")
    491      1.1  mrg        (eq_attr "size" "128")
    492      1.1  mrg        (eq_attr "cpu" "power10"))
    493  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    494      1.1  mrg 
    495  1.1.1.2  mrg (define_insn_reservation "power10-mtvsr" 2
    496  1.1.1.2  mrg   (and (eq_attr "type" "mtvsr")
    497      1.1  mrg        (eq_attr "cpu" "power10"))
    498  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    499      1.1  mrg 
    500  1.1.1.2  mrg (define_insn_reservation "power10-mfvsr" 2
    501  1.1.1.2  mrg   (and (eq_attr "type" "mfvsr")
    502      1.1  mrg        (eq_attr "cpu" "power10"))
    503  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    504      1.1  mrg 
    505      1.1  mrg 
    506  1.1.1.2  mrg ; Branch
    507  1.1.1.2  mrg ; Branch is 2 cycles, grouped with STU for issue
    508      1.1  mrg (define_insn_reservation "power10-branch" 2
    509      1.1  mrg   (and (eq_attr "type" "jmpreg,branch")
    510      1.1  mrg        (eq_attr "cpu" "power10"))
    511  1.1.1.2  mrg   "DU_any_power10,STU_power10")
    512      1.1  mrg 
    513  1.1.1.2  mrg (define_insn_reservation "power10-fused-branch" 3
    514  1.1.1.2  mrg   (and (eq_attr "type" "fused_mtbc")
    515      1.1  mrg        (eq_attr "cpu" "power10"))
    516  1.1.1.2  mrg   "DU_even_power10,STU_power10")
    517      1.1  mrg 
    518      1.1  mrg 
    519  1.1.1.2  mrg ; Crypto
    520  1.1.1.2  mrg (define_insn_reservation "power10-crypto" 4
    521  1.1.1.2  mrg   (and (eq_attr "type" "crypto")
    522      1.1  mrg        (eq_attr "cpu" "power10"))
    523  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    524  1.1.1.2  mrg 
    525      1.1  mrg 
    526  1.1.1.2  mrg ; HTM
    527  1.1.1.2  mrg (define_insn_reservation "power10-htm" 2
    528  1.1.1.2  mrg   (and (eq_attr "type" "htmsimple,htm")
    529      1.1  mrg        (eq_attr "cpu" "power10"))
    530  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    531      1.1  mrg 
    532      1.1  mrg 
    533  1.1.1.2  mrg ; DFP
    534  1.1.1.2  mrg ; Use the minimum 12 cycle latency for all DFP insns
    535      1.1  mrg (define_insn_reservation "power10-dfp" 12
    536      1.1  mrg   (and (eq_attr "type" "dfp")
    537  1.1.1.2  mrg        (eq_attr "size" "!128")
    538  1.1.1.2  mrg        (eq_attr "cpu" "power10"))
    539  1.1.1.2  mrg   "DU_any_power10,EXU_power10")
    540  1.1.1.2  mrg 
    541  1.1.1.2  mrg (define_insn_reservation "power10-dfpq" 12
    542  1.1.1.2  mrg   (and (eq_attr "type" "dfp")
    543  1.1.1.2  mrg        (eq_attr "size" "128")
    544      1.1  mrg        (eq_attr "cpu" "power10"))
    545  1.1.1.2  mrg   "DU_even_power10,EXU_power10")
    546  1.1.1.2  mrg 
    547  1.1.1.2  mrg ; MMA
    548  1.1.1.2  mrg (define_insn_reservation "power10-mma" 9
    549  1.1.1.2  mrg   (and (eq_attr "type" "mma")
    550  1.1.1.2  mrg        (eq_attr "prefixed" "no")
    551  1.1.1.2  mrg        (eq_attr "cpu" "power10"))
    552  1.1.1.2  mrg   "DU_any_power10,EXU_super_power10")
    553  1.1.1.2  mrg 
    554  1.1.1.2  mrg (define_insn_reservation "power10-prefixed-mma" 9
    555  1.1.1.2  mrg   (and (eq_attr "type" "mma")
    556  1.1.1.2  mrg        (eq_attr "prefixed" "yes")
    557  1.1.1.2  mrg        (eq_attr "cpu" "power10"))
    558  1.1.1.2  mrg   "DU_even_power10,EXU_super_power10")
    559  1.1.1.2  mrg ; 4 cycle MMA->MMA latency
    560  1.1.1.2  mrg (define_bypass 4 "power10-mma,power10-prefixed-mma"
    561  1.1.1.2  mrg 		 "power10-mma,power10-prefixed-mma")
    562  1.1.1.2  mrg 
    563      1.1  mrg 
    564