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