1 1.1 mrg ;; Scheduling description for IBM POWER9 processor. 2 1.7 mrg ;; Copyright (C) 2016-2022 Free Software Foundation, Inc. 3 1.1 mrg ;; 4 1.1 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.4 mrg (define_automaton "power9dsp,power9lsu,power9vsu,power9fpdiv,power9misc") 23 1.1 mrg 24 1.1 mrg (define_cpu_unit "lsu0_power9,lsu1_power9,lsu2_power9,lsu3_power9" "power9lsu") 25 1.1 mrg (define_cpu_unit "vsu0_power9,vsu1_power9,vsu2_power9,vsu3_power9" "power9vsu") 26 1.1 mrg ; Two vector permute units, part of vsu 27 1.1 mrg (define_cpu_unit "prm0_power9,prm1_power9" "power9vsu") 28 1.1 mrg ; Two fixed point divide units, not pipelined 29 1.1 mrg (define_cpu_unit "fx_div0_power9,fx_div1_power9" "power9misc") 30 1.1 mrg (define_cpu_unit "bru_power9,cryptu_power9,dfu_power9" "power9misc") 31 1.4 mrg ; Create a false unit for use by non-pipelined FP div/sqrt 32 1.4 mrg (define_cpu_unit "fp_div0_power9,fp_div1_power9,fp_div2_power9,fp_div3_power9" 33 1.4 mrg "power9fpdiv") 34 1.4 mrg 35 1.1 mrg 36 1.1 mrg (define_cpu_unit "x0_power9,x1_power9,xa0_power9,xa1_power9, 37 1.1 mrg x2_power9,x3_power9,xb0_power9,xb1_power9, 38 1.1 mrg br0_power9,br1_power9" "power9dsp") 39 1.1 mrg 40 1.1 mrg 41 1.1 mrg ; Dispatch port reservations 42 1.1 mrg ; 43 1.1 mrg ; Power9 can dispatch a maximum of 6 iops per cycle with the following 44 1.1 mrg ; general restrictions (other restrictions also apply): 45 1.1 mrg ; 1) At most 2 iops per execution slice 46 1.1 mrg ; 2) At most 2 iops to the branch unit 47 1.1 mrg ; Note that insn position in a dispatch group of 6 insns does not infer which 48 1.1 mrg ; execution slice the insn is routed to. The units are used to infer the 49 1.1 mrg ; conflicts that exist (i.e. an 'even' requirement will preclude dispatch 50 1.1 mrg ; with 2 insns with 'superslice' requirement). 51 1.1 mrg 52 1.1 mrg ; The xa0/xa1 units really represent the 3rd dispatch port for a superslice but 53 1.1 mrg ; are listed as separate units to allow those insns that preclude its use to 54 1.1 mrg ; still be scheduled two to a superslice while reserving the 3rd slot. The 55 1.1 mrg ; same applies for xb0/xb1. 56 1.1 mrg (define_reservation "DU_xa_power9" "xa0_power9+xa1_power9") 57 1.1 mrg (define_reservation "DU_xb_power9" "xb0_power9+xb1_power9") 58 1.1 mrg 59 1.1 mrg ; Any execution slice dispatch 60 1.1 mrg (define_reservation "DU_any_power9" 61 1.1 mrg "x0_power9|x1_power9|DU_xa_power9|x2_power9|x3_power9| 62 1.1 mrg DU_xb_power9") 63 1.1 mrg 64 1.1 mrg ; Even slice, actually takes even/odd slots 65 1.1 mrg (define_reservation "DU_even_power9" "x0_power9+x1_power9|x2_power9+x3_power9") 66 1.1 mrg 67 1.1 mrg ; Slice plus 3rd slot 68 1.1 mrg (define_reservation "DU_slice_3_power9" 69 1.1 mrg "x0_power9+xa0_power9|x1_power9+xa1_power9| 70 1.1 mrg x2_power9+xb0_power9|x3_power9+xb1_power9") 71 1.1 mrg 72 1.1 mrg ; Superslice 73 1.1 mrg (define_reservation "DU_super_power9" 74 1.1 mrg "x0_power9+x1_power9|x2_power9+x3_power9") 75 1.1 mrg 76 1.1 mrg ; 2-way cracked 77 1.1 mrg (define_reservation "DU_C2_power9" "x0_power9+x1_power9| 78 1.1 mrg x1_power9+DU_xa_power9| 79 1.1 mrg x1_power9+x2_power9| 80 1.1 mrg DU_xa_power9+x2_power9| 81 1.1 mrg x2_power9+x3_power9| 82 1.1 mrg x3_power9+DU_xb_power9") 83 1.1 mrg 84 1.1 mrg ; 2-way cracked plus 3rd slot 85 1.1 mrg (define_reservation "DU_C2_3_power9" "x0_power9+x1_power9+xa0_power9| 86 1.4 mrg x1_power9+x2_power9+xa1_power9| 87 1.1 mrg x2_power9+x3_power9+xb0_power9") 88 1.1 mrg 89 1.1 mrg ; 3-way cracked (consumes whole decode/dispatch cycle) 90 1.1 mrg (define_reservation "DU_C3_power9" 91 1.1 mrg "x0_power9+x1_power9+xa0_power9+xa1_power9+x2_power9+ 92 1.1 mrg x3_power9+xb0_power9+xb1_power9+br0_power9+br1_power9") 93 1.1 mrg 94 1.1 mrg ; Branch ports 95 1.1 mrg (define_reservation "DU_branch_power9" "br0_power9|br1_power9") 96 1.1 mrg 97 1.1 mrg 98 1.1 mrg ; Execution unit reservations 99 1.1 mrg (define_reservation "LSU_power9" 100 1.1 mrg "lsu0_power9|lsu1_power9|lsu2_power9|lsu3_power9") 101 1.1 mrg 102 1.1 mrg (define_reservation "LSU_pair_power9" 103 1.1 mrg "lsu0_power9+lsu1_power9|lsu1_power9+lsu2_power9| 104 1.1 mrg lsu2_power9+lsu3_power9|lsu3_power9+lsu0_power9") 105 1.1 mrg 106 1.1 mrg (define_reservation "VSU_power9" 107 1.1 mrg "vsu0_power9|vsu1_power9|vsu2_power9|vsu3_power9") 108 1.1 mrg 109 1.1 mrg (define_reservation "VSU_super_power9" 110 1.1 mrg "vsu0_power9+vsu1_power9|vsu2_power9+vsu3_power9") 111 1.1 mrg 112 1.1 mrg (define_reservation "VSU_PRM_power9" "prm0_power9|prm1_power9") 113 1.1 mrg 114 1.4 mrg ; Define the reservation to be used by FP div/sqrt which allows other insns 115 1.4 mrg ; to be issued to the VSU, but blocks other div/sqrt for a number of cycles. 116 1.4 mrg ; Note that the number of cycles blocked varies depending on insn, but we 117 1.4 mrg ; just use the same number for all in order to keep the number of DFA states 118 1.4 mrg ; reasonable. 119 1.4 mrg (define_reservation "FP_DIV_power9" 120 1.4 mrg "fp_div0_power9*8|fp_div1_power9*8|fp_div2_power9*8| 121 1.4 mrg fp_div3_power9*8") 122 1.4 mrg (define_reservation "VEC_DIV_power9" 123 1.4 mrg "fp_div0_power9*8+fp_div1_power9*8| 124 1.4 mrg fp_div2_power9*8+fp_div3_power9*8") 125 1.4 mrg 126 1.1 mrg 127 1.1 mrg ; LS Unit 128 1.1 mrg (define_insn_reservation "power9-load" 4 129 1.1 mrg (and (eq_attr "type" "load") 130 1.1 mrg (eq_attr "sign_extend" "no") 131 1.1 mrg (eq_attr "update" "no") 132 1.1 mrg (eq_attr "cpu" "power9")) 133 1.1 mrg "DU_any_power9,LSU_power9") 134 1.1 mrg 135 1.1 mrg (define_insn_reservation "power9-load-update" 4 136 1.1 mrg (and (eq_attr "type" "load") 137 1.1 mrg (eq_attr "sign_extend" "no") 138 1.1 mrg (eq_attr "update" "yes") 139 1.1 mrg (eq_attr "cpu" "power9")) 140 1.1 mrg "DU_C2_power9,LSU_power9+VSU_power9") 141 1.1 mrg 142 1.1 mrg (define_insn_reservation "power9-load-ext" 6 143 1.1 mrg (and (eq_attr "type" "load") 144 1.1 mrg (eq_attr "sign_extend" "yes") 145 1.1 mrg (eq_attr "update" "no") 146 1.1 mrg (eq_attr "cpu" "power9")) 147 1.1 mrg "DU_C2_power9,LSU_power9") 148 1.1 mrg 149 1.1 mrg (define_insn_reservation "power9-load-ext-update" 6 150 1.1 mrg (and (eq_attr "type" "load") 151 1.1 mrg (eq_attr "sign_extend" "yes") 152 1.1 mrg (eq_attr "update" "yes") 153 1.1 mrg (eq_attr "cpu" "power9")) 154 1.1 mrg "DU_C3_power9,LSU_power9+VSU_power9") 155 1.1 mrg 156 1.1 mrg (define_insn_reservation "power9-fpload-double" 4 157 1.1 mrg (and (eq_attr "type" "fpload") 158 1.1 mrg (eq_attr "update" "no") 159 1.1 mrg (eq_attr "size" "64") 160 1.1 mrg (eq_attr "cpu" "power9")) 161 1.1 mrg "DU_slice_3_power9,LSU_power9") 162 1.1 mrg 163 1.1 mrg (define_insn_reservation "power9-fpload-update-double" 4 164 1.1 mrg (and (eq_attr "type" "fpload") 165 1.1 mrg (eq_attr "update" "yes") 166 1.1 mrg (eq_attr "size" "64") 167 1.1 mrg (eq_attr "cpu" "power9")) 168 1.1 mrg "DU_C2_3_power9,LSU_power9+VSU_power9") 169 1.1 mrg 170 1.1 mrg ; SFmode loads are cracked and have additional 2 cycles over DFmode 171 1.1 mrg (define_insn_reservation "power9-fpload-single" 6 172 1.1 mrg (and (eq_attr "type" "fpload") 173 1.1 mrg (eq_attr "update" "no") 174 1.1 mrg (eq_attr "size" "32") 175 1.1 mrg (eq_attr "cpu" "power9")) 176 1.1 mrg "DU_C2_3_power9,LSU_power9") 177 1.1 mrg 178 1.1 mrg (define_insn_reservation "power9-fpload-update-single" 6 179 1.1 mrg (and (eq_attr "type" "fpload") 180 1.1 mrg (eq_attr "update" "yes") 181 1.1 mrg (eq_attr "size" "32") 182 1.1 mrg (eq_attr "cpu" "power9")) 183 1.1 mrg "DU_C3_power9,LSU_power9+VSU_power9") 184 1.1 mrg 185 1.1 mrg (define_insn_reservation "power9-vecload" 5 186 1.1 mrg (and (eq_attr "type" "vecload") 187 1.1 mrg (eq_attr "cpu" "power9")) 188 1.1 mrg "DU_any_power9,LSU_pair_power9") 189 1.1 mrg 190 1.1 mrg ; Store data can issue 2 cycles after AGEN issue, 3 cycles for vector store 191 1.1 mrg (define_insn_reservation "power9-store" 0 192 1.1 mrg (and (eq_attr "type" "store") 193 1.1 mrg (eq_attr "update" "no") 194 1.1 mrg (eq_attr "indexed" "no") 195 1.1 mrg (eq_attr "cpu" "power9")) 196 1.1 mrg "DU_slice_3_power9,LSU_power9") 197 1.1 mrg 198 1.1 mrg (define_insn_reservation "power9-store-indexed" 0 199 1.1 mrg (and (eq_attr "type" "store") 200 1.1 mrg (eq_attr "update" "no") 201 1.1 mrg (eq_attr "indexed" "yes") 202 1.1 mrg (eq_attr "cpu" "power9")) 203 1.1 mrg "DU_slice_3_power9,LSU_power9") 204 1.1 mrg 205 1.1 mrg ; Update forms have 2 cycle latency for updated addr reg 206 1.1 mrg (define_insn_reservation "power9-store-update" 2 207 1.1 mrg (and (eq_attr "type" "store") 208 1.1 mrg (eq_attr "update" "yes") 209 1.1 mrg (eq_attr "indexed" "no") 210 1.1 mrg (eq_attr "cpu" "power9")) 211 1.1 mrg "DU_C2_3_power9,LSU_power9+VSU_power9") 212 1.1 mrg 213 1.1 mrg ; Update forms have 2 cycle latency for updated addr reg 214 1.1 mrg (define_insn_reservation "power9-store-update-indexed" 2 215 1.1 mrg (and (eq_attr "type" "store") 216 1.1 mrg (eq_attr "update" "yes") 217 1.1 mrg (eq_attr "indexed" "yes") 218 1.1 mrg (eq_attr "cpu" "power9")) 219 1.1 mrg "DU_C2_3_power9,LSU_power9+VSU_power9") 220 1.1 mrg 221 1.1 mrg (define_insn_reservation "power9-fpstore" 0 222 1.1 mrg (and (eq_attr "type" "fpstore") 223 1.1 mrg (eq_attr "update" "no") 224 1.1 mrg (eq_attr "cpu" "power9")) 225 1.1 mrg "DU_slice_3_power9,LSU_power9") 226 1.1 mrg 227 1.1 mrg ; Update forms have 2 cycle latency for updated addr reg 228 1.1 mrg (define_insn_reservation "power9-fpstore-update" 2 229 1.1 mrg (and (eq_attr "type" "fpstore") 230 1.1 mrg (eq_attr "update" "yes") 231 1.1 mrg (eq_attr "cpu" "power9")) 232 1.1 mrg "DU_C2_3_power9,LSU_power9+VSU_power9") 233 1.1 mrg 234 1.1 mrg (define_insn_reservation "power9-vecstore" 0 235 1.1 mrg (and (eq_attr "type" "vecstore") 236 1.1 mrg (eq_attr "cpu" "power9")) 237 1.1 mrg "DU_super_power9,LSU_pair_power9") 238 1.1 mrg 239 1.4 mrg ; Store forwarding latency is 6 240 1.4 mrg (define_bypass 6 "power9-*store*" "power9-*load*") 241 1.4 mrg 242 1.1 mrg (define_insn_reservation "power9-larx" 4 243 1.1 mrg (and (eq_attr "type" "load_l") 244 1.1 mrg (eq_attr "cpu" "power9")) 245 1.1 mrg "DU_any_power9,LSU_power9") 246 1.1 mrg 247 1.1 mrg (define_insn_reservation "power9-stcx" 2 248 1.1 mrg (and (eq_attr "type" "store_c") 249 1.1 mrg (eq_attr "cpu" "power9")) 250 1.1 mrg "DU_C2_3_power9,LSU_power9+VSU_power9") 251 1.1 mrg 252 1.1 mrg (define_insn_reservation "power9-sync" 4 253 1.1 mrg (and (eq_attr "type" "sync,isync") 254 1.1 mrg (eq_attr "cpu" "power9")) 255 1.1 mrg "DU_any_power9,LSU_power9") 256 1.1 mrg 257 1.1 mrg 258 1.1 mrg ; VSU Execution Unit 259 1.1 mrg 260 1.1 mrg ; Fixed point ops 261 1.1 mrg 262 1.1 mrg ; Most ALU insns are simple 2 cycle, including record form 263 1.1 mrg (define_insn_reservation "power9-alu" 2 264 1.4 mrg (and (eq_attr "type" "add,exts,integer,logical,isel") 265 1.1 mrg (eq_attr "cpu" "power9")) 266 1.1 mrg "DU_any_power9,VSU_power9") 267 1.3 mrg ; 5 cycle CR latency 268 1.3 mrg (define_bypass 5 "power9-alu" 269 1.3 mrg "power9-crlogical,power9-mfcr,power9-mfcrf") 270 1.1 mrg 271 1.4 mrg ; Rotate/shift prevent use of third slot 272 1.4 mrg (define_insn_reservation "power9-rot" 2 273 1.4 mrg (and (eq_attr "type" "insert,shift") 274 1.4 mrg (eq_attr "dot" "no") 275 1.4 mrg (eq_attr "cpu" "power9")) 276 1.4 mrg "DU_slice_3_power9,VSU_power9") 277 1.4 mrg 278 1.1 mrg ; Record form rotate/shift are cracked 279 1.1 mrg (define_insn_reservation "power9-cracked-alu" 2 280 1.1 mrg (and (eq_attr "type" "insert,shift") 281 1.1 mrg (eq_attr "dot" "yes") 282 1.1 mrg (eq_attr "cpu" "power9")) 283 1.4 mrg "DU_C2_3_power9,VSU_power9") 284 1.3 mrg ; 7 cycle CR latency 285 1.3 mrg (define_bypass 7 "power9-cracked-alu" 286 1.3 mrg "power9-crlogical,power9-mfcr,power9-mfcrf") 287 1.1 mrg 288 1.1 mrg (define_insn_reservation "power9-alu2" 3 289 1.1 mrg (and (eq_attr "type" "cntlz,popcnt,trap") 290 1.1 mrg (eq_attr "cpu" "power9")) 291 1.1 mrg "DU_any_power9,VSU_power9") 292 1.3 mrg ; 6 cycle CR latency 293 1.3 mrg (define_bypass 6 "power9-alu2" 294 1.3 mrg "power9-crlogical,power9-mfcr,power9-mfcrf") 295 1.3 mrg 296 1.3 mrg (define_insn_reservation "power9-cmp" 2 297 1.3 mrg (and (eq_attr "type" "cmp") 298 1.3 mrg (eq_attr "cpu" "power9")) 299 1.3 mrg "DU_any_power9,VSU_power9") 300 1.3 mrg 301 1.1 mrg 302 1.1 mrg ; Treat 'two' and 'three' types as 2 or 3 way cracked 303 1.1 mrg (define_insn_reservation "power9-two" 4 304 1.1 mrg (and (eq_attr "type" "two") 305 1.1 mrg (eq_attr "cpu" "power9")) 306 1.1 mrg "DU_C2_power9,VSU_power9") 307 1.1 mrg 308 1.1 mrg (define_insn_reservation "power9-three" 6 309 1.1 mrg (and (eq_attr "type" "three") 310 1.1 mrg (eq_attr "cpu" "power9")) 311 1.1 mrg "DU_C3_power9,VSU_power9") 312 1.1 mrg 313 1.3 mrg (define_insn_reservation "power9-mul" 5 314 1.1 mrg (and (eq_attr "type" "mul") 315 1.1 mrg (eq_attr "dot" "no") 316 1.1 mrg (eq_attr "cpu" "power9")) 317 1.4 mrg "DU_slice_3_power9,VSU_power9") 318 1.1 mrg 319 1.3 mrg (define_insn_reservation "power9-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" "power9")) 323 1.4 mrg "DU_C2_3_power9,VSU_power9") 324 1.3 mrg ; 10 cycle CR latency 325 1.3 mrg (define_bypass 10 "power9-mul-compare" 326 1.3 mrg "power9-crlogical,power9-mfcr,power9-mfcrf") 327 1.1 mrg 328 1.1 mrg ; Fixed point divides reserve the divide units for a minimum of 8 cycles 329 1.1 mrg (define_insn_reservation "power9-idiv" 16 330 1.1 mrg (and (eq_attr "type" "div") 331 1.1 mrg (eq_attr "size" "32") 332 1.1 mrg (eq_attr "cpu" "power9")) 333 1.1 mrg "DU_even_power9,fx_div0_power9*8|fx_div1_power9*8") 334 1.1 mrg 335 1.1 mrg (define_insn_reservation "power9-ldiv" 24 336 1.1 mrg (and (eq_attr "type" "div") 337 1.1 mrg (eq_attr "size" "64") 338 1.1 mrg (eq_attr "cpu" "power9")) 339 1.1 mrg "DU_even_power9,fx_div0_power9*8|fx_div1_power9*8") 340 1.1 mrg 341 1.1 mrg (define_insn_reservation "power9-crlogical" 2 342 1.4 mrg (and (eq_attr "type" "cr_logical") 343 1.1 mrg (eq_attr "cpu" "power9")) 344 1.1 mrg "DU_any_power9,VSU_power9") 345 1.1 mrg 346 1.1 mrg (define_insn_reservation "power9-mfcrf" 2 347 1.1 mrg (and (eq_attr "type" "mfcrf") 348 1.1 mrg (eq_attr "cpu" "power9")) 349 1.1 mrg "DU_any_power9,VSU_power9") 350 1.1 mrg 351 1.1 mrg (define_insn_reservation "power9-mfcr" 6 352 1.1 mrg (and (eq_attr "type" "mfcr") 353 1.1 mrg (eq_attr "cpu" "power9")) 354 1.1 mrg "DU_C3_power9,VSU_power9") 355 1.1 mrg 356 1.1 mrg ; Should differentiate between 1 cr field and > 1 since target of > 1 cr 357 1.1 mrg ; is cracked 358 1.1 mrg (define_insn_reservation "power9-mtcr" 2 359 1.1 mrg (and (eq_attr "type" "mtcr") 360 1.1 mrg (eq_attr "cpu" "power9")) 361 1.1 mrg "DU_any_power9,VSU_power9") 362 1.1 mrg 363 1.1 mrg ; Move to LR/CTR are executed in VSU 364 1.1 mrg (define_insn_reservation "power9-mtjmpr" 5 365 1.1 mrg (and (eq_attr "type" "mtjmpr") 366 1.1 mrg (eq_attr "cpu" "power9")) 367 1.1 mrg "DU_any_power9,VSU_power9") 368 1.1 mrg 369 1.1 mrg ; Floating point/Vector ops 370 1.1 mrg (define_insn_reservation "power9-fpsimple" 2 371 1.1 mrg (and (eq_attr "type" "fpsimple") 372 1.1 mrg (eq_attr "cpu" "power9")) 373 1.1 mrg "DU_slice_3_power9,VSU_power9") 374 1.1 mrg 375 1.4 mrg (define_insn_reservation "power9-fp" 5 376 1.1 mrg (and (eq_attr "type" "fp,dmul") 377 1.1 mrg (eq_attr "cpu" "power9")) 378 1.1 mrg "DU_slice_3_power9,VSU_power9") 379 1.1 mrg 380 1.1 mrg (define_insn_reservation "power9-fpcompare" 3 381 1.1 mrg (and (eq_attr "type" "fpcompare") 382 1.1 mrg (eq_attr "cpu" "power9")) 383 1.1 mrg "DU_slice_3_power9,VSU_power9") 384 1.1 mrg 385 1.1 mrg ; FP div/sqrt are executed in the VSU slices. They are not pipelined wrt other 386 1.4 mrg ; div/sqrt insns, but for the most part do not block pipelined ops. 387 1.1 mrg (define_insn_reservation "power9-sdiv" 22 388 1.1 mrg (and (eq_attr "type" "sdiv") 389 1.1 mrg (eq_attr "cpu" "power9")) 390 1.4 mrg "DU_slice_3_power9,VSU_power9,FP_DIV_power9") 391 1.1 mrg 392 1.4 mrg (define_insn_reservation "power9-ddiv" 27 393 1.1 mrg (and (eq_attr "type" "ddiv") 394 1.1 mrg (eq_attr "cpu" "power9")) 395 1.4 mrg "DU_slice_3_power9,VSU_power9,FP_DIV_power9") 396 1.1 mrg 397 1.1 mrg (define_insn_reservation "power9-sqrt" 26 398 1.1 mrg (and (eq_attr "type" "ssqrt") 399 1.1 mrg (eq_attr "cpu" "power9")) 400 1.4 mrg "DU_slice_3_power9,VSU_power9,FP_DIV_power9") 401 1.1 mrg 402 1.1 mrg (define_insn_reservation "power9-dsqrt" 36 403 1.1 mrg (and (eq_attr "type" "dsqrt") 404 1.1 mrg (eq_attr "cpu" "power9")) 405 1.4 mrg "DU_slice_3_power9,VSU_power9,FP_DIV_power9") 406 1.1 mrg 407 1.1 mrg (define_insn_reservation "power9-vec-2cyc" 2 408 1.1 mrg (and (eq_attr "type" "vecmove,veclogical,vecexts,veccmpfx") 409 1.1 mrg (eq_attr "cpu" "power9")) 410 1.1 mrg "DU_super_power9,VSU_super_power9") 411 1.1 mrg 412 1.1 mrg (define_insn_reservation "power9-veccmp" 3 413 1.1 mrg (and (eq_attr "type" "veccmp") 414 1.1 mrg (eq_attr "cpu" "power9")) 415 1.1 mrg "DU_super_power9,VSU_super_power9") 416 1.1 mrg 417 1.1 mrg (define_insn_reservation "power9-vecsimple" 3 418 1.1 mrg (and (eq_attr "type" "vecsimple") 419 1.1 mrg (eq_attr "cpu" "power9")) 420 1.1 mrg "DU_super_power9,VSU_super_power9") 421 1.1 mrg 422 1.1 mrg (define_insn_reservation "power9-vecnormal" 7 423 1.1 mrg (and (eq_attr "type" "vecfloat,vecdouble") 424 1.1 mrg (eq_attr "size" "!128") 425 1.1 mrg (eq_attr "cpu" "power9")) 426 1.1 mrg "DU_super_power9,VSU_super_power9") 427 1.1 mrg 428 1.1 mrg ; Quad-precision FP ops, execute in DFU 429 1.1 mrg (define_insn_reservation "power9-qp" 12 430 1.1 mrg (and (eq_attr "type" "vecfloat,vecdouble") 431 1.1 mrg (eq_attr "size" "128") 432 1.1 mrg (eq_attr "cpu" "power9")) 433 1.1 mrg "DU_super_power9,dfu_power9") 434 1.1 mrg 435 1.1 mrg (define_insn_reservation "power9-vecperm" 3 436 1.1 mrg (and (eq_attr "type" "vecperm") 437 1.1 mrg (eq_attr "cpu" "power9")) 438 1.1 mrg "DU_super_power9,VSU_PRM_power9") 439 1.1 mrg 440 1.1 mrg (define_insn_reservation "power9-veccomplex" 7 441 1.1 mrg (and (eq_attr "type" "veccomplex") 442 1.1 mrg (eq_attr "cpu" "power9")) 443 1.1 mrg "DU_super_power9,VSU_super_power9") 444 1.1 mrg 445 1.4 mrg (define_insn_reservation "power9-vecfdiv" 24 446 1.1 mrg (and (eq_attr "type" "vecfdiv") 447 1.1 mrg (eq_attr "cpu" "power9")) 448 1.4 mrg "DU_super_power9,VSU_super_power9,VEC_DIV_power9") 449 1.1 mrg 450 1.4 mrg (define_insn_reservation "power9-vecdiv" 27 451 1.1 mrg (and (eq_attr "type" "vecdiv") 452 1.1 mrg (eq_attr "size" "!128") 453 1.1 mrg (eq_attr "cpu" "power9")) 454 1.4 mrg "DU_super_power9,VSU_super_power9,VEC_DIV_power9") 455 1.1 mrg 456 1.4 mrg ; Use 8 for DFU reservation on QP div/mul to limit DFA state size 457 1.1 mrg (define_insn_reservation "power9-qpdiv" 56 458 1.1 mrg (and (eq_attr "type" "vecdiv") 459 1.1 mrg (eq_attr "size" "128") 460 1.1 mrg (eq_attr "cpu" "power9")) 461 1.4 mrg "DU_super_power9,dfu_power9*8") 462 1.4 mrg 463 1.4 mrg (define_insn_reservation "power9-qpmul" 24 464 1.4 mrg (and (eq_attr "type" "qmul") 465 1.4 mrg (eq_attr "size" "128") 466 1.4 mrg (eq_attr "cpu" "power9")) 467 1.4 mrg "DU_super_power9,dfu_power9*8") 468 1.1 mrg 469 1.7 mrg (define_insn_reservation "power9-mtvsr" 2 470 1.7 mrg (and (eq_attr "type" "mtvsr") 471 1.1 mrg (eq_attr "cpu" "power9")) 472 1.1 mrg "DU_slice_3_power9,VSU_power9") 473 1.1 mrg 474 1.7 mrg (define_insn_reservation "power9-mfvsr" 2 475 1.7 mrg (and (eq_attr "type" "mfvsr") 476 1.1 mrg (eq_attr "cpu" "power9")) 477 1.1 mrg "DU_slice_3_power9,VSU_power9") 478 1.1 mrg 479 1.1 mrg 480 1.1 mrg ; Branch Unit 481 1.1 mrg ; Move from LR/CTR are executed in BRU but consume a writeback port from an 482 1.1 mrg ; execution slice. 483 1.1 mrg (define_insn_reservation "power9-mfjmpr" 6 484 1.1 mrg (and (eq_attr "type" "mfjmpr") 485 1.1 mrg (eq_attr "cpu" "power9")) 486 1.1 mrg "DU_branch_power9,bru_power9+VSU_power9") 487 1.1 mrg 488 1.1 mrg ; Branch is 2 cycles 489 1.1 mrg (define_insn_reservation "power9-branch" 2 490 1.1 mrg (and (eq_attr "type" "jmpreg,branch") 491 1.1 mrg (eq_attr "cpu" "power9")) 492 1.1 mrg "DU_branch_power9,bru_power9") 493 1.1 mrg 494 1.1 mrg 495 1.1 mrg ; Crypto Unit 496 1.1 mrg (define_insn_reservation "power9-crypto" 6 497 1.1 mrg (and (eq_attr "type" "crypto") 498 1.1 mrg (eq_attr "cpu" "power9")) 499 1.1 mrg "DU_super_power9,cryptu_power9") 500 1.1 mrg 501 1.1 mrg 502 1.1 mrg ; HTM Unit 503 1.1 mrg (define_insn_reservation "power9-htm" 4 504 1.1 mrg (and (eq_attr "type" "htm") 505 1.1 mrg (eq_attr "cpu" "power9")) 506 1.1 mrg "DU_C2_power9,LSU_power9") 507 1.1 mrg 508 1.1 mrg (define_insn_reservation "power9-htm-simple" 2 509 1.1 mrg (and (eq_attr "type" "htmsimple") 510 1.1 mrg (eq_attr "cpu" "power9")) 511 1.1 mrg "DU_any_power9,VSU_power9") 512 1.1 mrg 513 1.1 mrg 514 1.1 mrg ; DFP Unit 515 1.1 mrg (define_insn_reservation "power9-dfp" 12 516 1.1 mrg (and (eq_attr "type" "dfp") 517 1.1 mrg (eq_attr "cpu" "power9")) 518 1.1 mrg "DU_even_power9,dfu_power9") 519 1.1 mrg 520