1 1.1 mrg ;; Scheduling description for IBM POWER6 processor. 2 1.13 mrg ;; Copyright (C) 2006-2022 Free Software Foundation, Inc. 3 1.1 mrg ;; Contributed by Peter Steinmetz (steinmtz (a] us.ibm.com) 4 1.1 mrg ;; 5 1.1 mrg ;; This file is part of GCC. 6 1.1 mrg ;; 7 1.1 mrg ;; GCC is free software; you can redistribute it and/or modify it 8 1.1 mrg ;; under the terms of the GNU General Public License as published 9 1.1 mrg ;; by the Free Software Foundation; either version 3, or (at your 10 1.1 mrg ;; option) any later version. 11 1.1 mrg ;; 12 1.1 mrg ;; GCC is distributed in the hope that it will be useful, but WITHOUT 13 1.1 mrg ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14 1.1 mrg ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 15 1.1 mrg ;; License for more details. 16 1.1 mrg ;; 17 1.1 mrg ;; You should have received a copy of the GNU General Public License 18 1.1 mrg ;; along with GCC; see the file COPYING3. If not see 19 1.1 mrg ;; <http://www.gnu.org/licenses/>. 20 1.1 mrg 21 1.1 mrg ;; Sources: 22 1.1 mrg 23 1.1 mrg ;; The POWER6 has 2 iu, 2 fpu, 2 lsu, and 1 bu/cru unit per engine 24 1.1 mrg ;; (2 engines per chip). The chip can issue up to 5 internal ops 25 1.1 mrg ;; per cycle. 26 1.1 mrg 27 1.1 mrg (define_automaton "power6iu,power6lsu,power6fpu,power6bu") 28 1.1 mrg 29 1.1 mrg (define_cpu_unit "iu1_power6,iu2_power6" "power6iu") 30 1.1 mrg (define_cpu_unit "lsu1_power6,lsu2_power6" "power6lsu") 31 1.1 mrg (define_cpu_unit "bpu_power6" "power6bu") 32 1.1 mrg (define_cpu_unit "fpu1_power6,fpu2_power6" "power6fpu") 33 1.1 mrg 34 1.1 mrg (define_reservation "LS2_power6" 35 1.1 mrg "lsu1_power6+lsu2_power6") 36 1.1 mrg 37 1.1 mrg (define_reservation "FPU_power6" 38 1.1 mrg "fpu1_power6|fpu2_power6") 39 1.1 mrg 40 1.1 mrg (define_reservation "BRU_power6" 41 1.1 mrg "bpu_power6") 42 1.1 mrg 43 1.1 mrg (define_reservation "LSU_power6" 44 1.1 mrg "lsu1_power6|lsu2_power6") 45 1.1 mrg 46 1.1 mrg (define_reservation "LSF_power6" 47 1.1 mrg "(lsu1_power6+fpu1_power6)\ 48 1.1 mrg |(lsu1_power6+fpu2_power6)\ 49 1.1 mrg |(lsu2_power6+fpu1_power6)\ 50 1.1 mrg |(lsu2_power6+fpu2_power6)") 51 1.1 mrg 52 1.1 mrg (define_reservation "LX2_power6" 53 1.1 mrg "(iu1_power6+iu2_power6+lsu1_power6)\ 54 1.1 mrg |(iu1_power6+iu2_power6+lsu2_power6)") 55 1.1 mrg 56 1.1 mrg (define_reservation "FX2_power6" 57 1.1 mrg "iu1_power6+iu2_power6") 58 1.1 mrg 59 1.1 mrg (define_reservation "BX2_power6" 60 1.1 mrg "iu1_power6+iu2_power6+bpu_power6") 61 1.1 mrg 62 1.1 mrg (define_reservation "LSX_power6" 63 1.1 mrg "(iu1_power6+lsu1_power6)\ 64 1.1 mrg |(iu1_power6+lsu2_power6)\ 65 1.1 mrg |(iu2_power6+lsu1_power6)\ 66 1.1 mrg |(iu2_power6+lsu2_power6)") 67 1.1 mrg 68 1.1 mrg (define_reservation "FXU_power6" 69 1.1 mrg "iu1_power6|iu2_power6") 70 1.1 mrg 71 1.1 mrg (define_reservation "XLF_power6" 72 1.1 mrg "(iu1_power6+lsu1_power6+fpu1_power6)\ 73 1.1 mrg |(iu1_power6+lsu1_power6+fpu2_power6)\ 74 1.1 mrg |(iu1_power6+lsu2_power6+fpu1_power6)\ 75 1.1 mrg |(iu1_power6+lsu2_power6+fpu2_power6)\ 76 1.1 mrg |(iu2_power6+lsu1_power6+fpu1_power6)\ 77 1.1 mrg |(iu2_power6+lsu1_power6+fpu2_power6)\ 78 1.1 mrg |(iu2_power6+lsu2_power6+fpu1_power6)\ 79 1.1 mrg |(iu2_power6+lsu2_power6+fpu2_power6)") 80 1.1 mrg 81 1.1 mrg (define_reservation "BRX_power6" 82 1.1 mrg "(bpu_power6+iu1_power6)\ 83 1.1 mrg |(bpu_power6+iu2_power6)") 84 1.1 mrg 85 1.1 mrg ; Load/store 86 1.1 mrg 87 1.1 mrg ; The default for a value written by a fixed point load 88 1.1 mrg ; that is read/written by a subsequent fixed point op. 89 1.1 mrg (define_insn_reservation "power6-load" 2 ; fx 90 1.1 mrg (and (eq_attr "type" "load") 91 1.5 mrg (eq_attr "sign_extend" "no") 92 1.5 mrg (eq_attr "update" "no") 93 1.1 mrg (eq_attr "cpu" "power6")) 94 1.1 mrg "LSU_power6") 95 1.1 mrg 96 1.1 mrg ; define the bypass for the case where the value written 97 1.1 mrg ; by a fixed point load is used as the source value on 98 1.1 mrg ; a store. 99 1.1 mrg (define_bypass 1 "power6-load,\ 100 1.1 mrg power6-load-update,\ 101 1.1 mrg power6-load-update-indexed" 102 1.1 mrg "power6-store,\ 103 1.1 mrg power6-store-update,\ 104 1.1 mrg power6-store-update-indexed,\ 105 1.1 mrg power6-fpstore,\ 106 1.1 mrg power6-fpstore-update" 107 1.7 mrg "rs6000_store_data_bypass_p") 108 1.1 mrg 109 1.1 mrg (define_insn_reservation "power6-load-ext" 4 ; fx 110 1.5 mrg (and (eq_attr "type" "load") 111 1.5 mrg (eq_attr "sign_extend" "yes") 112 1.5 mrg (eq_attr "update" "no") 113 1.1 mrg (eq_attr "cpu" "power6")) 114 1.1 mrg "LSU_power6") 115 1.1 mrg 116 1.1 mrg ; define the bypass for the case where the value written 117 1.1 mrg ; by a fixed point load ext is used as the source value on 118 1.1 mrg ; a store. 119 1.1 mrg (define_bypass 1 "power6-load-ext,\ 120 1.1 mrg power6-load-ext-update,\ 121 1.1 mrg power6-load-ext-update-indexed" 122 1.1 mrg "power6-store,\ 123 1.1 mrg power6-store-update,\ 124 1.1 mrg power6-store-update-indexed,\ 125 1.1 mrg power6-fpstore,\ 126 1.1 mrg power6-fpstore-update" 127 1.7 mrg "rs6000_store_data_bypass_p") 128 1.1 mrg 129 1.1 mrg (define_insn_reservation "power6-load-update" 2 ; fx 130 1.5 mrg (and (eq_attr "type" "load") 131 1.5 mrg (eq_attr "sign_extend" "no") 132 1.5 mrg (eq_attr "update" "yes") 133 1.5 mrg (eq_attr "indexed" "no") 134 1.1 mrg (eq_attr "cpu" "power6")) 135 1.1 mrg "LSX_power6") 136 1.1 mrg 137 1.1 mrg (define_insn_reservation "power6-load-update-indexed" 2 ; fx 138 1.5 mrg (and (eq_attr "type" "load") 139 1.5 mrg (eq_attr "sign_extend" "no") 140 1.5 mrg (eq_attr "update" "yes") 141 1.5 mrg (eq_attr "indexed" "yes") 142 1.1 mrg (eq_attr "cpu" "power6")) 143 1.1 mrg "LSX_power6") 144 1.1 mrg 145 1.1 mrg (define_insn_reservation "power6-load-ext-update" 4 ; fx 146 1.5 mrg (and (eq_attr "type" "load") 147 1.5 mrg (eq_attr "sign_extend" "yes") 148 1.5 mrg (eq_attr "update" "yes") 149 1.5 mrg (eq_attr "indexed" "no") 150 1.1 mrg (eq_attr "cpu" "power6")) 151 1.1 mrg "LSX_power6") 152 1.1 mrg 153 1.1 mrg (define_insn_reservation "power6-load-ext-update-indexed" 4 ; fx 154 1.5 mrg (and (eq_attr "type" "load") 155 1.5 mrg (eq_attr "sign_extend" "yes") 156 1.5 mrg (eq_attr "update" "yes") 157 1.5 mrg (eq_attr "indexed" "yes") 158 1.1 mrg (eq_attr "cpu" "power6")) 159 1.1 mrg "LSX_power6") 160 1.1 mrg 161 1.1 mrg (define_insn_reservation "power6-fpload" 1 162 1.1 mrg (and (eq_attr "type" "fpload") 163 1.5 mrg (eq_attr "update" "no") 164 1.1 mrg (eq_attr "cpu" "power6")) 165 1.1 mrg "LSU_power6") 166 1.1 mrg 167 1.1 mrg (define_insn_reservation "power6-fpload-update" 1 168 1.5 mrg (and (eq_attr "type" "fpload") 169 1.5 mrg (eq_attr "update" "yes") 170 1.1 mrg (eq_attr "cpu" "power6")) 171 1.1 mrg "LSX_power6") 172 1.1 mrg 173 1.1 mrg (define_insn_reservation "power6-store" 14 174 1.1 mrg (and (eq_attr "type" "store") 175 1.5 mrg (eq_attr "update" "no") 176 1.1 mrg (eq_attr "cpu" "power6")) 177 1.1 mrg "LSU_power6") 178 1.1 mrg 179 1.1 mrg (define_insn_reservation "power6-store-update" 14 180 1.5 mrg (and (eq_attr "type" "store") 181 1.5 mrg (eq_attr "update" "yes") 182 1.5 mrg (eq_attr "indexed" "no") 183 1.1 mrg (eq_attr "cpu" "power6")) 184 1.1 mrg "LSX_power6") 185 1.1 mrg 186 1.1 mrg (define_insn_reservation "power6-store-update-indexed" 14 187 1.5 mrg (and (eq_attr "type" "store") 188 1.5 mrg (eq_attr "update" "yes") 189 1.5 mrg (eq_attr "indexed" "yes") 190 1.1 mrg (eq_attr "cpu" "power6")) 191 1.1 mrg "LX2_power6") 192 1.1 mrg 193 1.1 mrg (define_insn_reservation "power6-fpstore" 14 194 1.1 mrg (and (eq_attr "type" "fpstore") 195 1.5 mrg (eq_attr "update" "no") 196 1.1 mrg (eq_attr "cpu" "power6")) 197 1.1 mrg "LSF_power6") 198 1.1 mrg 199 1.1 mrg (define_insn_reservation "power6-fpstore-update" 14 200 1.5 mrg (and (eq_attr "type" "fpstore") 201 1.5 mrg (eq_attr "update" "yes") 202 1.1 mrg (eq_attr "cpu" "power6")) 203 1.1 mrg "XLF_power6") 204 1.1 mrg 205 1.1 mrg (define_insn_reservation "power6-larx" 3 206 1.1 mrg (and (eq_attr "type" "load_l") 207 1.1 mrg (eq_attr "cpu" "power6")) 208 1.1 mrg "LS2_power6") 209 1.1 mrg 210 1.1 mrg (define_insn_reservation "power6-stcx" 10 ; best case 211 1.1 mrg (and (eq_attr "type" "store_c") 212 1.1 mrg (eq_attr "cpu" "power6")) 213 1.1 mrg "LSX_power6") 214 1.1 mrg 215 1.1 mrg (define_insn_reservation "power6-sync" 11 ; N/A 216 1.1 mrg (and (eq_attr "type" "sync") 217 1.1 mrg (eq_attr "cpu" "power6")) 218 1.1 mrg "LSU_power6") 219 1.1 mrg 220 1.1 mrg (define_insn_reservation "power6-integer" 1 221 1.5 mrg (and (ior (eq_attr "type" "integer") 222 1.5 mrg (and (eq_attr "type" "add,logical") 223 1.5 mrg (eq_attr "dot" "no"))) 224 1.1 mrg (eq_attr "cpu" "power6")) 225 1.1 mrg "FXU_power6") 226 1.1 mrg 227 1.1 mrg (define_insn_reservation "power6-isel" 1 228 1.1 mrg (and (eq_attr "type" "isel") 229 1.1 mrg (eq_attr "cpu" "power6")) 230 1.1 mrg "FXU_power6") 231 1.1 mrg 232 1.1 mrg (define_insn_reservation "power6-exts" 1 233 1.1 mrg (and (eq_attr "type" "exts") 234 1.5 mrg (eq_attr "dot" "no") 235 1.1 mrg (eq_attr "cpu" "power6")) 236 1.1 mrg "FXU_power6") 237 1.1 mrg 238 1.1 mrg (define_insn_reservation "power6-shift" 1 239 1.1 mrg (and (eq_attr "type" "shift") 240 1.5 mrg (eq_attr "var_shift" "no") 241 1.5 mrg (eq_attr "dot" "no") 242 1.1 mrg (eq_attr "cpu" "power6")) 243 1.1 mrg "FXU_power6") 244 1.1 mrg 245 1.3 mrg (define_insn_reservation "power6-popcnt" 1 246 1.3 mrg (and (eq_attr "type" "popcnt") 247 1.3 mrg (eq_attr "cpu" "power6")) 248 1.3 mrg "FXU_power6") 249 1.3 mrg 250 1.1 mrg (define_insn_reservation "power6-insert" 1 251 1.5 mrg (and (eq_attr "type" "insert") 252 1.5 mrg (eq_attr "size" "32") 253 1.1 mrg (eq_attr "cpu" "power6")) 254 1.1 mrg "FX2_power6") 255 1.1 mrg 256 1.1 mrg (define_insn_reservation "power6-insert-dword" 1 257 1.5 mrg (and (eq_attr "type" "insert") 258 1.5 mrg (eq_attr "size" "64") 259 1.1 mrg (eq_attr "cpu" "power6")) 260 1.1 mrg "FX2_power6") 261 1.1 mrg 262 1.1 mrg ; define the bypass for the case where the value written 263 1.1 mrg ; by a fixed point op is used as the source value on a 264 1.1 mrg ; store. 265 1.1 mrg (define_bypass 1 "power6-integer,\ 266 1.1 mrg power6-exts,\ 267 1.1 mrg power6-shift,\ 268 1.1 mrg power6-insert,\ 269 1.1 mrg power6-insert-dword" 270 1.1 mrg "power6-store,\ 271 1.1 mrg power6-store-update,\ 272 1.1 mrg power6-store-update-indexed,\ 273 1.1 mrg power6-fpstore,\ 274 1.1 mrg power6-fpstore-update" 275 1.7 mrg "rs6000_store_data_bypass_p") 276 1.1 mrg 277 1.1 mrg (define_insn_reservation "power6-cntlz" 2 278 1.1 mrg (and (eq_attr "type" "cntlz") 279 1.1 mrg (eq_attr "cpu" "power6")) 280 1.1 mrg "FXU_power6") 281 1.1 mrg 282 1.1 mrg (define_bypass 1 "power6-cntlz" 283 1.1 mrg "power6-store,\ 284 1.1 mrg power6-store-update,\ 285 1.1 mrg power6-store-update-indexed,\ 286 1.1 mrg power6-fpstore,\ 287 1.1 mrg power6-fpstore-update" 288 1.7 mrg "rs6000_store_data_bypass_p") 289 1.1 mrg 290 1.1 mrg (define_insn_reservation "power6-var-rotate" 4 291 1.5 mrg (and (eq_attr "type" "shift") 292 1.5 mrg (eq_attr "var_shift" "yes") 293 1.5 mrg (eq_attr "dot" "no") 294 1.1 mrg (eq_attr "cpu" "power6")) 295 1.1 mrg "FXU_power6") 296 1.1 mrg 297 1.1 mrg (define_insn_reservation "power6-trap" 1 ; N/A 298 1.1 mrg (and (eq_attr "type" "trap") 299 1.1 mrg (eq_attr "cpu" "power6")) 300 1.1 mrg "BRX_power6") 301 1.1 mrg 302 1.1 mrg (define_insn_reservation "power6-two" 1 303 1.1 mrg (and (eq_attr "type" "two") 304 1.1 mrg (eq_attr "cpu" "power6")) 305 1.1 mrg "(iu1_power6,iu1_power6)\ 306 1.1 mrg |(iu1_power6+iu2_power6,nothing)\ 307 1.1 mrg |(iu1_power6,iu2_power6)\ 308 1.1 mrg |(iu2_power6,iu1_power6)\ 309 1.1 mrg |(iu2_power6,iu2_power6)") 310 1.1 mrg 311 1.1 mrg (define_insn_reservation "power6-three" 1 312 1.1 mrg (and (eq_attr "type" "three") 313 1.1 mrg (eq_attr "cpu" "power6")) 314 1.1 mrg "(iu1_power6,iu1_power6,iu1_power6)\ 315 1.1 mrg |(iu1_power6,iu1_power6,iu2_power6)\ 316 1.1 mrg |(iu1_power6,iu2_power6,iu1_power6)\ 317 1.1 mrg |(iu1_power6,iu2_power6,iu2_power6)\ 318 1.1 mrg |(iu2_power6,iu1_power6,iu1_power6)\ 319 1.1 mrg |(iu2_power6,iu1_power6,iu2_power6)\ 320 1.1 mrg |(iu2_power6,iu2_power6,iu1_power6)\ 321 1.1 mrg |(iu2_power6,iu2_power6,iu2_power6)\ 322 1.1 mrg |(iu1_power6+iu2_power6,iu1_power6)\ 323 1.1 mrg |(iu1_power6+iu2_power6,iu2_power6)\ 324 1.1 mrg |(iu1_power6,iu1_power6+iu2_power6)\ 325 1.1 mrg |(iu2_power6,iu1_power6+iu2_power6)") 326 1.1 mrg 327 1.1 mrg (define_insn_reservation "power6-cmp" 1 328 1.1 mrg (and (eq_attr "type" "cmp") 329 1.1 mrg (eq_attr "cpu" "power6")) 330 1.1 mrg "FXU_power6") 331 1.1 mrg 332 1.1 mrg (define_insn_reservation "power6-compare" 1 333 1.5 mrg (and (eq_attr "type" "exts") 334 1.5 mrg (eq_attr "dot" "yes") 335 1.1 mrg (eq_attr "cpu" "power6")) 336 1.1 mrg "FXU_power6") 337 1.1 mrg 338 1.1 mrg (define_insn_reservation "power6-fast-compare" 1 339 1.5 mrg (and (eq_attr "type" "add,logical") 340 1.5 mrg (eq_attr "dot" "yes") 341 1.1 mrg (eq_attr "cpu" "power6")) 342 1.1 mrg "FXU_power6") 343 1.1 mrg 344 1.1 mrg ; define the bypass for the case where the value written 345 1.1 mrg ; by a fixed point rec form op is used as the source value 346 1.1 mrg ; on a store. 347 1.1 mrg (define_bypass 1 "power6-compare,\ 348 1.1 mrg power6-fast-compare" 349 1.1 mrg "power6-store,\ 350 1.1 mrg power6-store-update,\ 351 1.1 mrg power6-store-update-indexed,\ 352 1.1 mrg power6-fpstore,\ 353 1.1 mrg power6-fpstore-update" 354 1.7 mrg "rs6000_store_data_bypass_p") 355 1.1 mrg 356 1.1 mrg (define_insn_reservation "power6-delayed-compare" 2 ; N/A 357 1.5 mrg (and (eq_attr "type" "shift") 358 1.5 mrg (eq_attr "var_shift" "no") 359 1.5 mrg (eq_attr "dot" "yes") 360 1.1 mrg (eq_attr "cpu" "power6")) 361 1.1 mrg "FXU_power6") 362 1.1 mrg 363 1.1 mrg (define_insn_reservation "power6-var-delayed-compare" 4 364 1.5 mrg (and (eq_attr "type" "shift") 365 1.5 mrg (eq_attr "var_shift" "yes") 366 1.5 mrg (eq_attr "dot" "yes") 367 1.1 mrg (eq_attr "cpu" "power6")) 368 1.1 mrg "FXU_power6") 369 1.1 mrg 370 1.1 mrg (define_insn_reservation "power6-lmul-cmp" 16 371 1.5 mrg (and (eq_attr "type" "mul") 372 1.5 mrg (eq_attr "dot" "yes") 373 1.5 mrg (eq_attr "size" "64") 374 1.1 mrg (eq_attr "cpu" "power6")) 375 1.1 mrg "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\ 376 1.1 mrg |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)"); 377 1.1 mrg 378 1.1 mrg (define_insn_reservation "power6-imul-cmp" 16 379 1.5 mrg (and (eq_attr "type" "mul") 380 1.5 mrg (eq_attr "dot" "yes") 381 1.5 mrg (eq_attr "size" "32") 382 1.1 mrg (eq_attr "cpu" "power6")) 383 1.1 mrg "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\ 384 1.1 mrg |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)"); 385 1.1 mrg 386 1.1 mrg (define_insn_reservation "power6-lmul" 16 387 1.5 mrg (and (eq_attr "type" "mul") 388 1.5 mrg (eq_attr "dot" "no") 389 1.5 mrg (eq_attr "size" "64") 390 1.1 mrg (eq_attr "cpu" "power6")) 391 1.1 mrg "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\ 392 1.1 mrg |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)"); 393 1.1 mrg 394 1.1 mrg (define_insn_reservation "power6-imul" 16 395 1.5 mrg (and (eq_attr "type" "mul") 396 1.5 mrg (eq_attr "dot" "no") 397 1.5 mrg (eq_attr "size" "32") 398 1.1 mrg (eq_attr "cpu" "power6")) 399 1.1 mrg "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\ 400 1.1 mrg |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)"); 401 1.1 mrg 402 1.1 mrg (define_insn_reservation "power6-imul3" 16 403 1.5 mrg (and (eq_attr "type" "mul") 404 1.5 mrg (eq_attr "size" "8,16") 405 1.1 mrg (eq_attr "cpu" "power6")) 406 1.1 mrg "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\ 407 1.1 mrg |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)"); 408 1.1 mrg 409 1.1 mrg (define_bypass 9 "power6-imul,\ 410 1.1 mrg power6-lmul,\ 411 1.1 mrg power6-imul-cmp,\ 412 1.1 mrg power6-lmul-cmp,\ 413 1.1 mrg power6-imul3" 414 1.1 mrg "power6-store,\ 415 1.1 mrg power6-store-update,\ 416 1.1 mrg power6-store-update-indexed,\ 417 1.1 mrg power6-fpstore,\ 418 1.1 mrg power6-fpstore-update" 419 1.7 mrg "rs6000_store_data_bypass_p") 420 1.1 mrg 421 1.1 mrg (define_insn_reservation "power6-idiv" 44 422 1.5 mrg (and (eq_attr "type" "div") 423 1.5 mrg (eq_attr "size" "32") 424 1.1 mrg (eq_attr "cpu" "power6")) 425 1.1 mrg "(iu1_power6*44+iu2_power6*44+fpu1_power6*44)\ 426 1.1 mrg |(iu1_power6*44+iu2_power6*44+fpu2_power6*44)"); 427 1.1 mrg 428 1.1 mrg ; The latency for this bypass is yet to be defined 429 1.1 mrg ;(define_bypass ? "power6-idiv" 430 1.1 mrg ; "power6-store,\ 431 1.1 mrg ; power6-store-update,\ 432 1.1 mrg ; power6-store-update-indexed,\ 433 1.1 mrg ; power6-fpstore,\ 434 1.1 mrg ; power6-fpstore-update" 435 1.7 mrg ; "rs6000_store_data_bypass_p") 436 1.1 mrg 437 1.1 mrg (define_insn_reservation "power6-ldiv" 56 438 1.5 mrg (and (eq_attr "type" "div") 439 1.5 mrg (eq_attr "size" "64") 440 1.1 mrg (eq_attr "cpu" "power6")) 441 1.1 mrg "(iu1_power6*56+iu2_power6*56+fpu1_power6*56)\ 442 1.1 mrg |(iu1_power6*56+iu2_power6*56+fpu2_power6*56)"); 443 1.1 mrg 444 1.1 mrg ; The latency for this bypass is yet to be defined 445 1.1 mrg ;(define_bypass ? "power6-ldiv" 446 1.1 mrg ; "power6-store,\ 447 1.1 mrg ; power6-store-update,\ 448 1.1 mrg ; power6-store-update-indexed,\ 449 1.1 mrg ; power6-fpstore,\ 450 1.1 mrg ; power6-fpstore-update" 451 1.7 mrg ; "rs6000_store_data_bypass_p") 452 1.1 mrg 453 1.1 mrg (define_insn_reservation "power6-mtjmpr" 2 454 1.1 mrg (and (eq_attr "type" "mtjmpr,mfjmpr") 455 1.1 mrg (eq_attr "cpu" "power6")) 456 1.1 mrg "BX2_power6") 457 1.1 mrg 458 1.1 mrg (define_bypass 5 "power6-mtjmpr" "power6-branch") 459 1.1 mrg 460 1.1 mrg (define_insn_reservation "power6-branch" 2 461 1.1 mrg (and (eq_attr "type" "jmpreg,branch") 462 1.1 mrg (eq_attr "cpu" "power6")) 463 1.1 mrg "BRU_power6") 464 1.1 mrg 465 1.1 mrg (define_bypass 5 "power6-branch" "power6-mtjmpr") 466 1.1 mrg 467 1.1 mrg (define_insn_reservation "power6-crlogical" 3 468 1.1 mrg (and (eq_attr "type" "cr_logical") 469 1.1 mrg (eq_attr "cpu" "power6")) 470 1.1 mrg "BRU_power6") 471 1.1 mrg 472 1.1 mrg (define_bypass 3 "power6-crlogical" "power6-branch") 473 1.1 mrg 474 1.1 mrg (define_insn_reservation "power6-mfcr" 6 ; N/A 475 1.1 mrg (and (eq_attr "type" "mfcr") 476 1.1 mrg (eq_attr "cpu" "power6")) 477 1.1 mrg "BX2_power6") 478 1.1 mrg 479 1.1 mrg ; mfcrf (1 field) 480 1.1 mrg (define_insn_reservation "power6-mfcrf" 3 ; N/A 481 1.1 mrg (and (eq_attr "type" "mfcrf") 482 1.1 mrg (eq_attr "cpu" "power6")) 483 1.1 mrg "BX2_power6") ; 484 1.1 mrg 485 1.1 mrg ; mtcrf (1 field) 486 1.1 mrg (define_insn_reservation "power6-mtcr" 4 ; N/A 487 1.1 mrg (and (eq_attr "type" "mtcr") 488 1.1 mrg (eq_attr "cpu" "power6")) 489 1.1 mrg "BX2_power6") 490 1.1 mrg 491 1.1 mrg (define_bypass 9 "power6-mtcr" "power6-branch") 492 1.1 mrg 493 1.1 mrg (define_insn_reservation "power6-fp" 6 494 1.6 mrg (and (eq_attr "type" "fp,fpsimple,dmul,dfp") 495 1.1 mrg (eq_attr "cpu" "power6")) 496 1.1 mrg "FPU_power6") 497 1.1 mrg 498 1.1 mrg ; Any fp instruction that updates a CR has a latency 499 1.1 mrg ; of 6 to a dependent branch 500 1.1 mrg (define_bypass 6 "power6-fp" "power6-branch") 501 1.1 mrg 502 1.1 mrg (define_bypass 1 "power6-fp" 503 1.1 mrg "power6-fpstore,power6-fpstore-update" 504 1.7 mrg "rs6000_store_data_bypass_p") 505 1.1 mrg 506 1.1 mrg (define_insn_reservation "power6-fpcompare" 8 507 1.1 mrg (and (eq_attr "type" "fpcompare") 508 1.1 mrg (eq_attr "cpu" "power6")) 509 1.1 mrg "FPU_power6") 510 1.1 mrg 511 1.1 mrg (define_bypass 12 "power6-fpcompare" 512 1.1 mrg "power6-branch,power6-crlogical") 513 1.1 mrg 514 1.1 mrg (define_insn_reservation "power6-sdiv" 26 515 1.1 mrg (and (eq_attr "type" "sdiv") 516 1.1 mrg (eq_attr "cpu" "power6")) 517 1.1 mrg "FPU_power6") 518 1.1 mrg 519 1.1 mrg (define_insn_reservation "power6-ddiv" 32 520 1.1 mrg (and (eq_attr "type" "ddiv") 521 1.1 mrg (eq_attr "cpu" "power6")) 522 1.1 mrg "FPU_power6") 523 1.1 mrg 524 1.1 mrg (define_insn_reservation "power6-sqrt" 30 525 1.1 mrg (and (eq_attr "type" "ssqrt") 526 1.1 mrg (eq_attr "cpu" "power6")) 527 1.1 mrg "FPU_power6") 528 1.1 mrg 529 1.1 mrg (define_insn_reservation "power6-dsqrt" 42 530 1.1 mrg (and (eq_attr "type" "dsqrt") 531 1.1 mrg (eq_attr "cpu" "power6")) 532 1.1 mrg "FPU_power6") 533 1.1 mrg 534 1.1 mrg (define_insn_reservation "power6-isync" 2 ; N/A 535 1.1 mrg (and (eq_attr "type" "isync") 536 1.1 mrg (eq_attr "cpu" "power6")) 537 1.1 mrg "FXU_power6") 538 1.1 mrg 539 1.1 mrg (define_insn_reservation "power6-vecload" 1 540 1.1 mrg (and (eq_attr "type" "vecload") 541 1.1 mrg (eq_attr "cpu" "power6")) 542 1.1 mrg "LSU_power6") 543 1.1 mrg 544 1.1 mrg (define_insn_reservation "power6-vecstore" 1 545 1.1 mrg (and (eq_attr "type" "vecstore") 546 1.1 mrg (eq_attr "cpu" "power6")) 547 1.1 mrg "LSF_power6") 548 1.1 mrg 549 1.1 mrg (define_insn_reservation "power6-vecsimple" 3 550 1.6 mrg (and (eq_attr "type" "vecsimple,veclogical,vecmove") 551 1.1 mrg (eq_attr "cpu" "power6")) 552 1.1 mrg "FPU_power6") 553 1.1 mrg 554 1.1 mrg (define_bypass 6 "power6-vecsimple" "power6-veccomplex,\ 555 1.1 mrg power6-vecperm") 556 1.1 mrg 557 1.1 mrg (define_bypass 5 "power6-vecsimple" "power6-vecfloat") 558 1.1 mrg 559 1.1 mrg (define_bypass 4 "power6-vecsimple" "power6-vecstore" ) 560 1.1 mrg 561 1.1 mrg (define_insn_reservation "power6-veccmp" 1 562 1.6 mrg (and (eq_attr "type" "veccmp,veccmpfx") 563 1.1 mrg (eq_attr "cpu" "power6")) 564 1.1 mrg "FPU_power6") 565 1.1 mrg 566 1.1 mrg (define_bypass 10 "power6-veccmp" "power6-branch") 567 1.1 mrg 568 1.1 mrg (define_insn_reservation "power6-vecfloat" 7 569 1.1 mrg (and (eq_attr "type" "vecfloat") 570 1.1 mrg (eq_attr "cpu" "power6")) 571 1.1 mrg "FPU_power6") 572 1.1 mrg 573 1.1 mrg (define_bypass 10 "power6-vecfloat" "power6-vecsimple") 574 1.1 mrg 575 1.1 mrg (define_bypass 11 "power6-vecfloat" "power6-veccomplex,\ 576 1.1 mrg power6-vecperm") 577 1.1 mrg 578 1.1 mrg (define_bypass 9 "power6-vecfloat" "power6-vecstore" ) 579 1.1 mrg 580 1.1 mrg (define_insn_reservation "power6-veccomplex" 7 581 1.1 mrg (and (eq_attr "type" "vecsimple") 582 1.1 mrg (eq_attr "cpu" "power6")) 583 1.1 mrg "FPU_power6") 584 1.1 mrg 585 1.1 mrg (define_bypass 10 "power6-veccomplex" "power6-vecsimple,\ 586 1.1 mrg power6-vecfloat" ) 587 1.1 mrg 588 1.1 mrg (define_bypass 9 "power6-veccomplex" "power6-vecperm" ) 589 1.1 mrg 590 1.1 mrg (define_bypass 8 "power6-veccomplex" "power6-vecstore" ) 591 1.1 mrg 592 1.1 mrg (define_insn_reservation "power6-vecperm" 4 593 1.1 mrg (and (eq_attr "type" "vecperm") 594 1.1 mrg (eq_attr "cpu" "power6")) 595 1.1 mrg "FPU_power6") 596 1.1 mrg 597 1.1 mrg (define_bypass 7 "power6-vecperm" "power6-vecsimple,\ 598 1.1 mrg power6-vecfloat" ) 599 1.1 mrg 600 1.1 mrg (define_bypass 6 "power6-vecperm" "power6-veccomplex" ) 601 1.1 mrg 602 1.1 mrg (define_bypass 5 "power6-vecperm" "power6-vecstore" ) 603 1.1 mrg 604