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