1 //=- AArch64SchedA57WriteRes.td - ARM Cortex-A57 Write Res ---*- tablegen -*-=// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // Contains all of the Cortex-A57 specific SchedWriteRes types. The approach 11 // below is to define a generic SchedWriteRes for every combination of 12 // latency and microOps. The naming conventions is to use a prefix, one field 13 // for latency, and one or more microOp count/type designators. 14 // Prefix: A57Write 15 // Latency: #cyc 16 // MicroOp Count/Types: #(B|I|M|L|S|X|W|V) 17 // 18 // e.g. A57Write_6cyc_1I_6S_4V means the total latency is 6 and there are 19 // 11 micro-ops to be issued down one I pipe, six S pipes and four V pipes. 20 // 21 //===----------------------------------------------------------------------===// 22 23 //===----------------------------------------------------------------------===// 24 // Define Generic 1 micro-op types 25 26 def A57Write_5cyc_1L : SchedWriteRes<[A57UnitL]> { let Latency = 5; } 27 def A57Write_5cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 5; } 28 def A57Write_5cyc_1V : SchedWriteRes<[A57UnitV]> { let Latency = 5; } 29 def A57Write_5cyc_1W : SchedWriteRes<[A57UnitW]> { let Latency = 5; } 30 def A57Write_10cyc_1V : SchedWriteRes<[A57UnitV]> { let Latency = 10; } 31 def A57Write_17cyc_1W : SchedWriteRes<[A57UnitW]> { let Latency = 17; 32 let ResourceCycles = [17]; } 33 def A57Write_19cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 19; 34 let ResourceCycles = [19]; } 35 def A57Write_1cyc_1B : SchedWriteRes<[A57UnitB]> { let Latency = 1; } 36 def A57Write_1cyc_1I : SchedWriteRes<[A57UnitI]> { let Latency = 1; } 37 def A57Write_1cyc_1S : SchedWriteRes<[A57UnitS]> { let Latency = 1; } 38 def A57Write_2cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 2; } 39 def A57Write_32cyc_1W : SchedWriteRes<[A57UnitW]> { let Latency = 32; 40 let ResourceCycles = [32]; } 41 def A57Write_35cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 35; 42 let ResourceCycles = [35]; } 43 def A57Write_3cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 3; } 44 def A57Write_3cyc_1V : SchedWriteRes<[A57UnitV]> { let Latency = 3; } 45 def A57Write_3cyc_1W : SchedWriteRes<[A57UnitW]> { let Latency = 3; } 46 def A57Write_3cyc_1X : SchedWriteRes<[A57UnitX]> { let Latency = 3; } 47 def A57Write_4cyc_1L : SchedWriteRes<[A57UnitL]> { let Latency = 4; } 48 def A57Write_4cyc_1X : SchedWriteRes<[A57UnitX]> { let Latency = 4; } 49 def A57Write_9cyc_1V : SchedWriteRes<[A57UnitV]> { let Latency = 9; } 50 def A57Write_6cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 6; } 51 def A57Write_6cyc_1V : SchedWriteRes<[A57UnitV]> { let Latency = 6; } 52 53 54 //===----------------------------------------------------------------------===// 55 // Define Generic 2 micro-op types 56 57 def A57Write_64cyc_2W : SchedWriteRes<[A57UnitW, A57UnitW]> { 58 let Latency = 64; 59 let NumMicroOps = 2; 60 let ResourceCycles = [32, 32]; 61 } 62 def A57Write_6cyc_1I_1L : SchedWriteRes<[A57UnitI, 63 A57UnitL]> { 64 let Latency = 6; 65 let NumMicroOps = 2; 66 } 67 def A57Write_7cyc_1V_1X : SchedWriteRes<[A57UnitV, 68 A57UnitX]> { 69 let Latency = 7; 70 let NumMicroOps = 2; 71 } 72 def A57Write_8cyc_1L_1V : SchedWriteRes<[A57UnitL, 73 A57UnitV]> { 74 let Latency = 8; 75 let NumMicroOps = 2; 76 } 77 def A57Write_9cyc_2V : SchedWriteRes<[A57UnitV, A57UnitV]> { 78 let Latency = 9; 79 let NumMicroOps = 2; 80 } 81 def A57Write_8cyc_2X : SchedWriteRes<[A57UnitX, A57UnitX]> { 82 let Latency = 8; 83 let NumMicroOps = 2; 84 } 85 def A57Write_6cyc_2L : SchedWriteRes<[A57UnitL, A57UnitL]> { 86 let Latency = 6; 87 let NumMicroOps = 2; 88 } 89 def A57Write_6cyc_2V : SchedWriteRes<[A57UnitV, A57UnitV]> { 90 let Latency = 6; 91 let NumMicroOps = 2; 92 } 93 def A57Write_6cyc_2W : SchedWriteRes<[A57UnitW, A57UnitW]> { 94 let Latency = 6; 95 let NumMicroOps = 2; 96 } 97 def A57Write_5cyc_1I_1L : SchedWriteRes<[A57UnitI, 98 A57UnitL]> { 99 let Latency = 5; 100 let NumMicroOps = 2; 101 } 102 def A57Write_5cyc_2V : SchedWriteRes<[A57UnitV, A57UnitV]> { 103 let Latency = 5; 104 let NumMicroOps = 2; 105 } 106 def A57Write_5cyc_2X : SchedWriteRes<[A57UnitX, A57UnitX]> { 107 let Latency = 5; 108 let NumMicroOps = 2; 109 } 110 def A57Write_10cyc_1L_1V : SchedWriteRes<[A57UnitL, 111 A57UnitV]> { 112 let Latency = 10; 113 let NumMicroOps = 2; 114 } 115 def A57Write_10cyc_2V : SchedWriteRes<[A57UnitV, A57UnitV]> { 116 let Latency = 10; 117 let NumMicroOps = 2; 118 } 119 def A57Write_1cyc_1B_1I : SchedWriteRes<[A57UnitB, 120 A57UnitI]> { 121 let Latency = 1; 122 let NumMicroOps = 2; 123 } 124 def A57Write_1cyc_1I_1S : SchedWriteRes<[A57UnitI, 125 A57UnitS]> { 126 let Latency = 1; 127 let NumMicroOps = 2; 128 } 129 def A57Write_2cyc_1B_1I : SchedWriteRes<[A57UnitB, 130 A57UnitI]> { 131 let Latency = 2; 132 let NumMicroOps = 2; 133 } 134 def A57Write_2cyc_2S : SchedWriteRes<[A57UnitS, A57UnitS]> { 135 let Latency = 2; 136 let NumMicroOps = 2; 137 } 138 def A57Write_2cyc_2V : SchedWriteRes<[A57UnitV, A57UnitV]> { 139 let Latency = 2; 140 let NumMicroOps = 2; 141 } 142 def A57Write_34cyc_2W : SchedWriteRes<[A57UnitW, A57UnitW]> { 143 let Latency = 34; 144 let NumMicroOps = 2; 145 let ResourceCycles = [17, 17]; 146 } 147 def A57Write_3cyc_1I_1M : SchedWriteRes<[A57UnitI, 148 A57UnitM]> { 149 let Latency = 3; 150 let NumMicroOps = 2; 151 } 152 def A57Write_3cyc_1I_1S : SchedWriteRes<[A57UnitI, 153 A57UnitS]> { 154 let Latency = 3; 155 let NumMicroOps = 2; 156 } 157 def A57Write_3cyc_1S_1V : SchedWriteRes<[A57UnitS, 158 A57UnitV]> { 159 let Latency = 3; 160 let NumMicroOps = 2; 161 } 162 def A57Write_3cyc_2V : SchedWriteRes<[A57UnitV, A57UnitV]> { 163 let Latency = 3; 164 let NumMicroOps = 2; 165 } 166 def A57Write_4cyc_1I_1L : SchedWriteRes<[A57UnitI, 167 A57UnitL]> { 168 let Latency = 4; 169 let NumMicroOps = 2; 170 } 171 def A57Write_4cyc_2X : SchedWriteRes<[A57UnitX, A57UnitX]> { 172 let Latency = 4; 173 let NumMicroOps = 2; 174 } 175 176 177 //===----------------------------------------------------------------------===// 178 // Define Generic 3 micro-op types 179 180 def A57Write_10cyc_3V : SchedWriteRes<[A57UnitV, A57UnitV, A57UnitV]> { 181 let Latency = 10; 182 let NumMicroOps = 3; 183 } 184 def A57Write_2cyc_1I_2S : SchedWriteRes<[A57UnitI, 185 A57UnitS, A57UnitS]> { 186 let Latency = 2; 187 let NumMicroOps = 3; 188 } 189 def A57Write_3cyc_1I_1S_1V : SchedWriteRes<[A57UnitI, 190 A57UnitS, 191 A57UnitV]> { 192 let Latency = 3; 193 let NumMicroOps = 3; 194 } 195 def A57Write_3cyc_1M_2S : SchedWriteRes<[A57UnitM, 196 A57UnitS, A57UnitS]> { 197 let Latency = 3; 198 let NumMicroOps = 3; 199 } 200 def A57Write_3cyc_3S : SchedWriteRes<[A57UnitS, A57UnitS, A57UnitS]> { 201 let Latency = 3; 202 let NumMicroOps = 3; 203 } 204 def A57Write_3cyc_2S_1V : SchedWriteRes<[A57UnitS, A57UnitS, 205 A57UnitV]> { 206 let Latency = 3; 207 let NumMicroOps = 3; 208 } 209 def A57Write_5cyc_1I_2L : SchedWriteRes<[A57UnitI, 210 A57UnitL, A57UnitL]> { 211 let Latency = 5; 212 let NumMicroOps = 3; 213 } 214 def A57Write_6cyc_1I_2L : SchedWriteRes<[A57UnitI, 215 A57UnitL, A57UnitL]> { 216 let Latency = 6; 217 let NumMicroOps = 3; 218 } 219 def A57Write_6cyc_3V : SchedWriteRes<[A57UnitV, A57UnitV, A57UnitV]> { 220 let Latency = 6; 221 let NumMicroOps = 3; 222 } 223 def A57Write_7cyc_3L : SchedWriteRes<[A57UnitL, A57UnitL, A57UnitL]> { 224 let Latency = 7; 225 let NumMicroOps = 3; 226 } 227 def A57Write_8cyc_1I_1L_1V : SchedWriteRes<[A57UnitI, 228 A57UnitL, 229 A57UnitV]> { 230 let Latency = 8; 231 let NumMicroOps = 3; 232 } 233 def A57Write_8cyc_1L_2V : SchedWriteRes<[A57UnitL, 234 A57UnitV, A57UnitV]> { 235 let Latency = 8; 236 let NumMicroOps = 3; 237 } 238 def A57Write_8cyc_3V : SchedWriteRes<[A57UnitV, A57UnitV, A57UnitV]> { 239 let Latency = 8; 240 let NumMicroOps = 3; 241 } 242 def A57Write_9cyc_3V : SchedWriteRes<[A57UnitV, A57UnitV, A57UnitV]> { 243 let Latency = 9; 244 let NumMicroOps = 3; 245 } 246 247 248 //===----------------------------------------------------------------------===// 249 // Define Generic 4 micro-op types 250 251 def A57Write_2cyc_2I_2S : SchedWriteRes<[A57UnitI, A57UnitI, 252 A57UnitS, A57UnitS]> { 253 let Latency = 2; 254 let NumMicroOps = 4; 255 } 256 def A57Write_3cyc_2I_2S : SchedWriteRes<[A57UnitI, A57UnitI, 257 A57UnitS, A57UnitS]> { 258 let Latency = 3; 259 let NumMicroOps = 4; 260 } 261 def A57Write_3cyc_1I_3S : SchedWriteRes<[A57UnitI, 262 A57UnitS, A57UnitS, A57UnitS]> { 263 let Latency = 3; 264 let NumMicroOps = 4; 265 } 266 def A57Write_3cyc_1I_2S_1V : SchedWriteRes<[A57UnitI, 267 A57UnitS, A57UnitS, 268 A57UnitV]> { 269 let Latency = 3; 270 let NumMicroOps = 4; 271 } 272 def A57Write_4cyc_4S : SchedWriteRes<[A57UnitS, A57UnitS, 273 A57UnitS, A57UnitS]> { 274 let Latency = 4; 275 let NumMicroOps = 4; 276 } 277 def A57Write_7cyc_1I_3L : SchedWriteRes<[A57UnitI, 278 A57UnitL, A57UnitL, A57UnitL]> { 279 let Latency = 7; 280 let NumMicroOps = 4; 281 } 282 def A57Write_5cyc_2I_2L : SchedWriteRes<[A57UnitI, A57UnitI, 283 A57UnitL, A57UnitL]> { 284 let Latency = 5; 285 let NumMicroOps = 4; 286 } 287 def A57Write_8cyc_1I_1L_2V : SchedWriteRes<[A57UnitI, 288 A57UnitL, 289 A57UnitV, A57UnitV]> { 290 let Latency = 8; 291 let NumMicroOps = 4; 292 } 293 def A57Write_8cyc_4L : SchedWriteRes<[A57UnitL, A57UnitL, 294 A57UnitL, A57UnitL]> { 295 let Latency = 8; 296 let NumMicroOps = 4; 297 } 298 def A57Write_9cyc_2L_2V : SchedWriteRes<[A57UnitL, A57UnitL, 299 A57UnitV, A57UnitV]> { 300 let Latency = 9; 301 let NumMicroOps = 4; 302 } 303 def A57Write_9cyc_1L_3V : SchedWriteRes<[A57UnitL, 304 A57UnitV, A57UnitV, A57UnitV]> { 305 let Latency = 9; 306 let NumMicroOps = 4; 307 } 308 def A57Write_12cyc_4V : SchedWriteRes<[A57UnitV, A57UnitV, 309 A57UnitV, A57UnitV]> { 310 let Latency = 12; 311 let NumMicroOps = 4; 312 } 313 314 315 //===----------------------------------------------------------------------===// 316 // Define Generic 5 micro-op types 317 318 def A57Write_3cyc_3S_2V : SchedWriteRes<[A57UnitS, A57UnitS, A57UnitS, 319 A57UnitV, A57UnitV]> { 320 let Latency = 3; 321 let NumMicroOps = 5; 322 } 323 def A57Write_8cyc_1I_4L : SchedWriteRes<[A57UnitI, 324 A57UnitL, A57UnitL, 325 A57UnitL, A57UnitL]> { 326 let Latency = 8; 327 let NumMicroOps = 5; 328 } 329 def A57Write_4cyc_1I_4S : SchedWriteRes<[A57UnitI, 330 A57UnitS, A57UnitS, 331 A57UnitS, A57UnitS]> { 332 let Latency = 4; 333 let NumMicroOps = 5; 334 } 335 def A57Write_9cyc_1I_2L_2V : SchedWriteRes<[A57UnitI, 336 A57UnitL, A57UnitL, 337 A57UnitV, A57UnitV]> { 338 let Latency = 9; 339 let NumMicroOps = 5; 340 } 341 def A57Write_9cyc_1I_1L_3V : SchedWriteRes<[A57UnitI, 342 A57UnitL, 343 A57UnitV, A57UnitV, A57UnitV]> { 344 let Latency = 9; 345 let NumMicroOps = 5; 346 } 347 def A57Write_9cyc_2L_3V : SchedWriteRes<[A57UnitL, A57UnitL, 348 A57UnitV, A57UnitV, A57UnitV]> { 349 let Latency = 9; 350 let NumMicroOps = 5; 351 } 352 def A57Write_9cyc_5V : SchedWriteRes<[A57UnitV, A57UnitV, A57UnitV, 353 A57UnitV, A57UnitV]> { 354 let Latency = 9; 355 let NumMicroOps = 5; 356 } 357 358 359 //===----------------------------------------------------------------------===// 360 // Define Generic 6 micro-op types 361 362 def A57Write_3cyc_1I_3S_2V : SchedWriteRes<[A57UnitI, 363 A57UnitS, A57UnitS, A57UnitS, 364 A57UnitV, A57UnitV]> { 365 let Latency = 3; 366 let NumMicroOps = 6; 367 } 368 def A57Write_4cyc_2I_4S : SchedWriteRes<[A57UnitI, A57UnitI, 369 A57UnitS, A57UnitS, 370 A57UnitS, A57UnitS]> { 371 let Latency = 4; 372 let NumMicroOps = 6; 373 } 374 def A57Write_4cyc_4S_2V : SchedWriteRes<[A57UnitS, A57UnitS, 375 A57UnitS, A57UnitS, 376 A57UnitV, A57UnitV]> { 377 let Latency = 4; 378 let NumMicroOps = 6; 379 } 380 def A57Write_6cyc_6S : SchedWriteRes<[A57UnitS, A57UnitS, A57UnitS, 381 A57UnitS, A57UnitS, A57UnitS]> { 382 let Latency = 6; 383 let NumMicroOps = 6; 384 } 385 def A57Write_9cyc_1I_2L_3V : SchedWriteRes<[A57UnitI, 386 A57UnitL, A57UnitL, 387 A57UnitV, A57UnitV, A57UnitV]> { 388 let Latency = 9; 389 let NumMicroOps = 6; 390 } 391 def A57Write_9cyc_1I_1L_4V : SchedWriteRes<[A57UnitI, 392 A57UnitL, 393 A57UnitV, A57UnitV, 394 A57UnitV, A57UnitV]> { 395 let Latency = 9; 396 let NumMicroOps = 6; 397 } 398 def A57Write_9cyc_2L_4V : SchedWriteRes<[A57UnitL, A57UnitL, 399 A57UnitV, A57UnitV, 400 A57UnitV, A57UnitV]> { 401 let Latency = 9; 402 let NumMicroOps = 6; 403 } 404 405 406 //===----------------------------------------------------------------------===// 407 // Define Generic 7 micro-op types 408 409 def A57Write_10cyc_3L_4V : SchedWriteRes<[A57UnitL, A57UnitL, A57UnitL, 410 A57UnitV, A57UnitV, 411 A57UnitV, A57UnitV]> { 412 let Latency = 10; 413 let NumMicroOps = 7; 414 } 415 def A57Write_4cyc_1I_4S_2V : SchedWriteRes<[A57UnitI, 416 A57UnitS, A57UnitS, 417 A57UnitS, A57UnitS, 418 A57UnitV, A57UnitV]> { 419 let Latency = 4; 420 let NumMicroOps = 7; 421 } 422 def A57Write_6cyc_1I_6S : SchedWriteRes<[A57UnitI, 423 A57UnitS, A57UnitS, A57UnitS, 424 A57UnitS, A57UnitS, A57UnitS]> { 425 let Latency = 6; 426 let NumMicroOps = 7; 427 } 428 def A57Write_9cyc_1I_2L_4V : SchedWriteRes<[A57UnitI, 429 A57UnitL, A57UnitL, 430 A57UnitV, A57UnitV, 431 A57UnitV, A57UnitV]> { 432 let Latency = 9; 433 let NumMicroOps = 7; 434 } 435 def A57Write_12cyc_7V : SchedWriteRes<[A57UnitV, A57UnitV, A57UnitV, 436 A57UnitV, A57UnitV, 437 A57UnitV, A57UnitV]> { 438 let Latency = 12; 439 let NumMicroOps = 7; 440 } 441 442 443 //===----------------------------------------------------------------------===// 444 // Define Generic 8 micro-op types 445 446 def A57Write_10cyc_1I_3L_4V : SchedWriteRes<[A57UnitI, 447 A57UnitL, A57UnitL, A57UnitL, 448 A57UnitV, A57UnitV, 449 A57UnitV, A57UnitV]> { 450 let Latency = 10; 451 let NumMicroOps = 8; 452 } 453 def A57Write_11cyc_4L_4V : SchedWriteRes<[A57UnitL, A57UnitL, 454 A57UnitL, A57UnitL, 455 A57UnitV, A57UnitV, 456 A57UnitV, A57UnitV]> { 457 let Latency = 11; 458 let NumMicroOps = 8; 459 } 460 def A57Write_8cyc_8S : SchedWriteRes<[A57UnitS, A57UnitS, 461 A57UnitS, A57UnitS, 462 A57UnitS, A57UnitS, 463 A57UnitS, A57UnitS]> { 464 let Latency = 8; 465 let NumMicroOps = 8; 466 } 467 468 469 //===----------------------------------------------------------------------===// 470 // Define Generic 9 micro-op types 471 472 def A57Write_8cyc_1I_8S : SchedWriteRes<[A57UnitI, 473 A57UnitS, A57UnitS, 474 A57UnitS, A57UnitS, 475 A57UnitS, A57UnitS, 476 A57UnitS, A57UnitS]> { 477 let Latency = 8; 478 let NumMicroOps = 9; 479 } 480 def A57Write_11cyc_1I_4L_4V : SchedWriteRes<[A57UnitI, 481 A57UnitL, A57UnitL, 482 A57UnitL, A57UnitL, 483 A57UnitV, A57UnitV, 484 A57UnitV, A57UnitV]> { 485 let Latency = 11; 486 let NumMicroOps = 9; 487 } 488 def A57Write_15cyc_9V : SchedWriteRes<[A57UnitV, A57UnitV, A57UnitV, 489 A57UnitV, A57UnitV, A57UnitV, 490 A57UnitV, A57UnitV, A57UnitV]> { 491 let Latency = 15; 492 let NumMicroOps = 9; 493 } 494 495 496 //===----------------------------------------------------------------------===// 497 // Define Generic 10 micro-op types 498 499 def A57Write_6cyc_6S_4V : SchedWriteRes<[A57UnitS, A57UnitS, A57UnitS, 500 A57UnitS, A57UnitS, A57UnitS, 501 A57UnitV, A57UnitV, 502 A57UnitV, A57UnitV]> { 503 let Latency = 6; 504 let NumMicroOps = 10; 505 } 506 507 508 //===----------------------------------------------------------------------===// 509 // Define Generic 11 micro-op types 510 511 def A57Write_6cyc_1I_6S_4V : SchedWriteRes<[A57UnitI, 512 A57UnitS, A57UnitS, A57UnitS, 513 A57UnitS, A57UnitS, A57UnitS, 514 A57UnitV, A57UnitV, 515 A57UnitV, A57UnitV]> { 516 let Latency = 6; 517 let NumMicroOps = 11; 518 } 519 520 521 //===----------------------------------------------------------------------===// 522 // Define Generic 12 micro-op types 523 524 def A57Write_8cyc_8S_4V : SchedWriteRes<[A57UnitS, A57UnitS, A57UnitS, A57UnitS, 525 A57UnitS, A57UnitS, A57UnitS, A57UnitS, 526 A57UnitV, A57UnitV, 527 A57UnitV, A57UnitV]> { 528 let Latency = 8; 529 let NumMicroOps = 12; 530 } 531 532 //===----------------------------------------------------------------------===// 533 // Define Generic 13 micro-op types 534 535 def A57Write_8cyc_1I_8S_4V : SchedWriteRes<[A57UnitI, 536 A57UnitS, A57UnitS, A57UnitS, 537 A57UnitS, A57UnitS, A57UnitS, 538 A57UnitS, A57UnitS, 539 A57UnitV, A57UnitV, 540 A57UnitV, A57UnitV]> { 541 let Latency = 8; 542 let NumMicroOps = 13; 543 } 544 545