Home | History | Annotate | Download | only in AArch64
      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_18cyc_1X : SchedWriteRes<[A57UnitX]> { let Latency = 18; }
     32 def A57Write_19cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 19; }
     33 def A57Write_1cyc_1B  : SchedWriteRes<[A57UnitB]> { let Latency = 1;  }
     34 def A57Write_1cyc_1I  : SchedWriteRes<[A57UnitI]> { let Latency = 1;  }
     35 def A57Write_1cyc_1S  : SchedWriteRes<[A57UnitS]> { let Latency = 1;  }
     36 def A57Write_2cyc_1M  : SchedWriteRes<[A57UnitM]> { let Latency = 2;  }
     37 def A57Write_32cyc_1X : SchedWriteRes<[A57UnitX]> { let Latency = 32; }
     38 def A57Write_35cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 35; }
     39 def A57Write_3cyc_1M  : SchedWriteRes<[A57UnitM]> { let Latency = 3;  }
     40 def A57Write_3cyc_1V  : SchedWriteRes<[A57UnitV]> { let Latency = 3;  }
     41 def A57Write_3cyc_1W  : SchedWriteRes<[A57UnitW]> { let Latency = 3;  }
     42 def A57Write_3cyc_1X  : SchedWriteRes<[A57UnitX]> { let Latency = 3;  }
     43 def A57Write_4cyc_1L  : SchedWriteRes<[A57UnitL]> { let Latency = 4;  }
     44 def A57Write_4cyc_1X  : SchedWriteRes<[A57UnitX]> { let Latency = 4;  }
     45 def A57Write_9cyc_1V  : SchedWriteRes<[A57UnitV]> { let Latency = 9;  }
     46 def A57Write_6cyc_1M  : SchedWriteRes<[A57UnitM]> { let Latency = 6;  }
     47 def A57Write_6cyc_1V  : SchedWriteRes<[A57UnitV]> { let Latency = 6;  }
     48 
     49 
     50 //===----------------------------------------------------------------------===//
     51 // Define Generic 2 micro-op types
     52 
     53 def A57Write_64cyc_2X    : SchedWriteRes<[A57UnitX, A57UnitX]> {
     54   let Latency     = 64;
     55   let NumMicroOps = 2;
     56 }
     57 def A57Write_6cyc_1I_1L  : SchedWriteRes<[A57UnitI,
     58                                           A57UnitL]> {
     59   let Latency     = 6;
     60   let NumMicroOps = 2;
     61 }
     62 def A57Write_7cyc_1V_1X  : SchedWriteRes<[A57UnitV,
     63                                           A57UnitX]> {
     64   let Latency     = 7;
     65   let NumMicroOps = 2;
     66 }
     67 def A57Write_8cyc_1L_1V  : SchedWriteRes<[A57UnitL,
     68                                           A57UnitV]> {
     69   let Latency     = 8;
     70   let NumMicroOps = 2;
     71 }
     72 def A57Write_9cyc_2V     : SchedWriteRes<[A57UnitV, A57UnitV]> {
     73   let Latency     = 9;
     74   let NumMicroOps = 2;
     75 }
     76 def A57Write_8cyc_2X     : SchedWriteRes<[A57UnitX, A57UnitX]> {
     77   let Latency     = 8;
     78   let NumMicroOps = 2;
     79 }
     80 def A57Write_6cyc_2L     : SchedWriteRes<[A57UnitL, A57UnitL]> {
     81   let Latency     = 6;
     82   let NumMicroOps = 2;
     83 }
     84 def A57Write_6cyc_2V     : SchedWriteRes<[A57UnitV, A57UnitV]> {
     85   let Latency     = 6;
     86   let NumMicroOps = 2;
     87 }
     88 def A57Write_6cyc_2W     : SchedWriteRes<[A57UnitW, A57UnitW]> {
     89   let Latency     = 6;
     90   let NumMicroOps = 2;
     91 }
     92 def A57Write_5cyc_1I_1L  : SchedWriteRes<[A57UnitI,
     93                                           A57UnitL]> {
     94   let Latency     = 5;
     95   let NumMicroOps = 2;
     96 }
     97 def A57Write_5cyc_2V     : SchedWriteRes<[A57UnitV, A57UnitV]> {
     98   let Latency     = 5;
     99   let NumMicroOps = 2;
    100 }
    101 def A57Write_5cyc_2X     : SchedWriteRes<[A57UnitX, A57UnitX]> {
    102   let Latency     = 5;
    103   let NumMicroOps = 2;
    104 }
    105 def A57Write_10cyc_1L_1V : SchedWriteRes<[A57UnitL,
    106                                           A57UnitV]> {
    107   let Latency     = 10;
    108   let NumMicroOps = 2;
    109 }
    110 def A57Write_10cyc_2V    : SchedWriteRes<[A57UnitV, A57UnitV]> {
    111   let Latency     = 10;
    112   let NumMicroOps = 2;
    113 }
    114 def A57Write_1cyc_1B_1I  : SchedWriteRes<[A57UnitB,
    115                                           A57UnitI]> {
    116   let Latency     = 1;
    117   let NumMicroOps = 2;
    118 }
    119 def A57Write_1cyc_1I_1S  : SchedWriteRes<[A57UnitI,
    120                                           A57UnitS]> {
    121   let Latency     = 1;
    122   let NumMicroOps = 2;
    123 }
    124 def A57Write_2cyc_1B_1I  : SchedWriteRes<[A57UnitB,
    125                                           A57UnitI]> {
    126   let Latency     = 2;
    127   let NumMicroOps = 2;
    128 }
    129 def A57Write_2cyc_2S     : SchedWriteRes<[A57UnitS, A57UnitS]> {
    130   let Latency     = 2;
    131   let NumMicroOps = 2;
    132 }
    133 def A57Write_2cyc_2V     : SchedWriteRes<[A57UnitV, A57UnitV]> {
    134   let Latency     = 2;
    135   let NumMicroOps = 2;
    136 }
    137 def A57Write_36cyc_2X    : SchedWriteRes<[A57UnitX, A57UnitX]> {
    138   let Latency     = 36;
    139   let NumMicroOps = 2;
    140 }
    141 def A57Write_3cyc_1I_1M  : SchedWriteRes<[A57UnitI,
    142                                           A57UnitM]> {
    143   let Latency     = 3;
    144   let NumMicroOps = 2;
    145 }
    146 def A57Write_3cyc_1I_1S  : SchedWriteRes<[A57UnitI,
    147                                           A57UnitS]> {
    148   let Latency     = 3;
    149   let NumMicroOps = 2;
    150 }
    151 def A57Write_3cyc_1S_1V  : SchedWriteRes<[A57UnitS,
    152                                           A57UnitV]> {
    153   let Latency     = 3;
    154   let NumMicroOps = 2;
    155 }
    156 def A57Write_4cyc_1I_1L  : SchedWriteRes<[A57UnitI,
    157                                           A57UnitL]> {
    158   let Latency     = 4;
    159   let NumMicroOps = 2;
    160 }
    161 def 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 
    170 def A57Write_10cyc_3V       : SchedWriteRes<[A57UnitV, A57UnitV, A57UnitV]> {
    171   let Latency     = 10;
    172   let NumMicroOps = 3;
    173 }
    174 def A57Write_2cyc_1I_2S     : SchedWriteRes<[A57UnitI,
    175                                              A57UnitS, A57UnitS]> {
    176   let Latency     = 2;
    177   let NumMicroOps = 3;
    178 }
    179 def A57Write_3cyc_1I_1S_1V  : SchedWriteRes<[A57UnitI,
    180                                              A57UnitS,
    181                                              A57UnitV]> {
    182   let Latency     = 3;
    183   let NumMicroOps = 3;
    184 }
    185 def A57Write_3cyc_1M_2S     : SchedWriteRes<[A57UnitM,
    186                                              A57UnitS, A57UnitS]> {
    187   let Latency     = 3;
    188   let NumMicroOps = 3;
    189 }
    190 def A57Write_3cyc_3S        : SchedWriteRes<[A57UnitS, A57UnitS, A57UnitS]> {
    191   let Latency     = 3;
    192   let NumMicroOps = 3;
    193 }
    194 def A57Write_3cyc_2S_1V     : SchedWriteRes<[A57UnitS, A57UnitS,
    195                                              A57UnitV]> {
    196   let Latency     = 3;
    197   let NumMicroOps = 3;
    198 }
    199 def A57Write_5cyc_1I_2L     : SchedWriteRes<[A57UnitI,
    200                                              A57UnitL, A57UnitL]> {
    201   let Latency     = 5;
    202   let NumMicroOps = 3;
    203 }
    204 def A57Write_6cyc_1I_2L     : SchedWriteRes<[A57UnitI,
    205                                              A57UnitL, A57UnitL]> {
    206   let Latency     = 6;
    207   let NumMicroOps = 3;
    208 }
    209 def A57Write_6cyc_3V        : SchedWriteRes<[A57UnitV, A57UnitV, A57UnitV]> {
    210   let Latency     = 6;
    211   let NumMicroOps = 3;
    212 }
    213 def A57Write_7cyc_3L        : SchedWriteRes<[A57UnitL, A57UnitL, A57UnitL]> {
    214   let Latency     = 7;
    215   let NumMicroOps = 3;
    216 }
    217 def A57Write_8cyc_1I_1L_1V  : SchedWriteRes<[A57UnitI,
    218                                              A57UnitL,
    219                                              A57UnitV]> {
    220   let Latency     = 8;
    221   let NumMicroOps = 3;
    222 }
    223 def A57Write_8cyc_1L_2V     : SchedWriteRes<[A57UnitL,
    224                                              A57UnitV, A57UnitV]> {
    225   let Latency     = 8;
    226   let NumMicroOps = 3;
    227 }
    228 def A57Write_8cyc_3V        : SchedWriteRes<[A57UnitV, A57UnitV, A57UnitV]> {
    229   let Latency     = 8;
    230   let NumMicroOps = 3;
    231 }
    232 def 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 
    241 def A57Write_2cyc_2I_2S    : SchedWriteRes<[A57UnitI, A57UnitI,
    242                                             A57UnitS, A57UnitS]> {
    243   let Latency     = 2;
    244   let NumMicroOps = 4;
    245 }
    246 def A57Write_3cyc_2I_2S    : SchedWriteRes<[A57UnitI, A57UnitI,
    247                                             A57UnitS, A57UnitS]> {
    248   let Latency     = 3;
    249   let NumMicroOps = 4;
    250 }
    251 def A57Write_3cyc_1I_3S    : SchedWriteRes<[A57UnitI,
    252                                             A57UnitS, A57UnitS, A57UnitS]> {
    253   let Latency     = 3;
    254   let NumMicroOps = 4;
    255 }
    256 def A57Write_3cyc_1I_2S_1V : SchedWriteRes<[A57UnitI,
    257                                             A57UnitS, A57UnitS,
    258                                             A57UnitV]> {
    259   let Latency     = 3;
    260   let NumMicroOps = 4;
    261 }
    262 def A57Write_4cyc_4S       : SchedWriteRes<[A57UnitS, A57UnitS,
    263                                             A57UnitS, A57UnitS]> {
    264   let Latency     = 4;
    265   let NumMicroOps = 4;
    266 }
    267 def A57Write_7cyc_1I_3L    : SchedWriteRes<[A57UnitI,
    268                                             A57UnitL, A57UnitL, A57UnitL]> {
    269   let Latency     = 7;
    270   let NumMicroOps = 4;
    271 }
    272 def A57Write_5cyc_2I_2L    : SchedWriteRes<[A57UnitI, A57UnitI,
    273                                             A57UnitL, A57UnitL]> {
    274   let Latency     = 5;
    275   let NumMicroOps = 4;
    276 }
    277 def A57Write_8cyc_1I_1L_2V : SchedWriteRes<[A57UnitI,
    278                                             A57UnitL,
    279                                             A57UnitV, A57UnitV]> {
    280   let Latency     = 8;
    281   let NumMicroOps = 4;
    282 }
    283 def A57Write_8cyc_4L       : SchedWriteRes<[A57UnitL, A57UnitL,
    284                                             A57UnitL, A57UnitL]> {
    285   let Latency     = 8;
    286   let NumMicroOps = 4;
    287 }
    288 def A57Write_9cyc_2L_2V    : SchedWriteRes<[A57UnitL, A57UnitL,
    289                                             A57UnitV, A57UnitV]> {
    290   let Latency     = 9;
    291   let NumMicroOps = 4;
    292 }
    293 def 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 
    303 def A57Write_3cyc_3S_2V    : SchedWriteRes<[A57UnitS, A57UnitS, A57UnitS,
    304                                             A57UnitV, A57UnitV]> {
    305   let Latency     = 3;
    306   let NumMicroOps = 5;
    307 }
    308 def A57Write_8cyc_1I_4L    : SchedWriteRes<[A57UnitI,
    309                                             A57UnitL, A57UnitL,
    310                                             A57UnitL, A57UnitL]> {
    311   let Latency     = 8;
    312   let NumMicroOps = 5;
    313 }
    314 def A57Write_4cyc_1I_4S    : SchedWriteRes<[A57UnitI,
    315                                             A57UnitS, A57UnitS,
    316                                             A57UnitS, A57UnitS]> {
    317   let Latency     = 4;
    318   let NumMicroOps = 5;
    319 }
    320 def A57Write_9cyc_1I_2L_2V : SchedWriteRes<[A57UnitI,
    321                                             A57UnitL, A57UnitL,
    322                                             A57UnitV, A57UnitV]> {
    323   let Latency     = 9;
    324   let NumMicroOps = 5;
    325 }
    326 def A57Write_9cyc_1I_1L_3V : SchedWriteRes<[A57UnitI,
    327                                             A57UnitL,
    328                                             A57UnitV, A57UnitV, A57UnitV]> {
    329   let Latency     = 9;
    330   let NumMicroOps = 5;
    331 }
    332 def 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 
    342 def A57Write_3cyc_1I_3S_2V : SchedWriteRes<[A57UnitI,
    343                                             A57UnitS, A57UnitS, A57UnitS,
    344                                             A57UnitV, A57UnitV]> {
    345   let Latency     = 3;
    346   let NumMicroOps = 6;
    347 }
    348 def A57Write_4cyc_2I_4S    : SchedWriteRes<[A57UnitI, A57UnitI,
    349                                             A57UnitS, A57UnitS,
    350                                             A57UnitS, A57UnitS]> {
    351   let Latency     = 4;
    352   let NumMicroOps = 6;
    353 }
    354 def A57Write_4cyc_4S_2V    : SchedWriteRes<[A57UnitS, A57UnitS,
    355                                             A57UnitS, A57UnitS,
    356                                             A57UnitV, A57UnitV]> {
    357   let Latency     = 4;
    358   let NumMicroOps = 6;
    359 }
    360 def A57Write_6cyc_6S       : SchedWriteRes<[A57UnitS, A57UnitS, A57UnitS,
    361                                             A57UnitS, A57UnitS, A57UnitS]> {
    362   let Latency     = 6;
    363   let NumMicroOps = 6;
    364 }
    365 def A57Write_9cyc_1I_2L_3V : SchedWriteRes<[A57UnitI,
    366                                             A57UnitL, A57UnitL,
    367                                             A57UnitV, A57UnitV, A57UnitV]> {
    368   let Latency     = 9;
    369   let NumMicroOps = 6;
    370 }
    371 def A57Write_9cyc_1I_1L_4V : SchedWriteRes<[A57UnitI,
    372                                             A57UnitL,
    373                                             A57UnitV, A57UnitV,
    374                                             A57UnitV, A57UnitV]> {
    375   let Latency     = 9;
    376   let NumMicroOps = 6;
    377 }
    378 def 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 
    389 def A57Write_10cyc_3L_4V : SchedWriteRes<[A57UnitL, A57UnitL, A57UnitL,
    390                                           A57UnitV, A57UnitV,
    391                                           A57UnitV, A57UnitV]> {
    392   let Latency     = 10;
    393   let NumMicroOps = 7;
    394 }
    395 def 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 }
    402 def A57Write_6cyc_1I_6S  : SchedWriteRes<[A57UnitI,
    403                                           A57UnitS, A57UnitS, A57UnitS,
    404                                           A57UnitS, A57UnitS, A57UnitS]> {
    405   let Latency     = 6;
    406   let NumMicroOps = 7;
    407 }
    408 def 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 
    420 def 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 }
    427 def 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 }
    434 def 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 
    446 def 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 }
    454 def 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 
    467 def 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 
    479 def 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 
    492 def 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 
    503 def 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