1//=- ARMScheduleA57WriteRes.td - ARM Cortex-A57 Write Res ---*- tablegen -*-=// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// Contains all of the Cortex-A57 specific SchedWriteRes types. The approach 10// below is to define a generic SchedWriteRes for every combination of 11// latency and microOps. The naming conventions is to use a prefix, one field 12// for latency, and one or more microOp count/type designators. 13// Prefix: A57Write 14// Latency: #cyc 15// MicroOp Count/Types: #(B|I|M|L|S|X|W|V) 16// 17// e.g. A57Write_6cyc_1I_6S_4V means the total latency is 6 and there are 18// 11 micro-ops to be issued as follows: one to I pipe, six to S pipes and 19// four to V pipes. 20// 21//===----------------------------------------------------------------------===// 22 23//===----------------------------------------------------------------------===// 24// Define Generic 1 micro-op types 25 26def A57Write_5cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 5; } 27def A57Write_5cyc_1V : SchedWriteRes<[A57UnitV]> { let Latency = 5; } 28def A57Write_5cyc_1W : SchedWriteRes<[A57UnitW]> { let Latency = 5; } 29def A57Write_10cyc_1V : SchedWriteRes<[A57UnitV]> { let Latency = 10; } 30def A57Write_17cyc_1W : SchedWriteRes<[A57UnitW]> { let Latency = 17; 31 let ResourceCycles = [17]; } 32def A57Write_18cyc_1X : SchedWriteRes<[A57UnitX]> { let Latency = 18; 33 let ResourceCycles = [18]; } 34def A57Write_19cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 19; 35 let ResourceCycles = [19]; } 36def A57Write_20cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 20; 37 let ResourceCycles = [20]; } 38def A57Write_1cyc_1B : SchedWriteRes<[A57UnitB]> { let Latency = 1; } 39def A57Write_1cyc_1I : SchedWriteRes<[A57UnitI]> { let Latency = 1; } 40def A57Write_2cyc_1I : SchedWriteRes<[A57UnitI]> { let Latency = 2; } 41def A57Write_3cyc_1I : SchedWriteRes<[A57UnitI]> { let Latency = 3; } 42def A57Write_1cyc_1S : SchedWriteRes<[A57UnitS]> { let Latency = 1; } 43def A57Write_2cyc_1S : SchedWriteRes<[A57UnitS]> { let Latency = 2; } 44def A57Write_3cyc_1S : SchedWriteRes<[A57UnitS]> { let Latency = 3; } 45def A57Write_2cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 2; } 46def A57Write_32cyc_1W : SchedWriteRes<[A57UnitW]> { let Latency = 32; 47 let ResourceCycles = [32]; } 48def A57Write_32cyc_1X : SchedWriteRes<[A57UnitX]> { let Latency = 32; 49 let ResourceCycles = [32]; } 50def A57Write_35cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 35; 51 let ResourceCycles = [35]; } 52def A57Write_3cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 3; } 53def A57Write_3cyc_1V : SchedWriteRes<[A57UnitV]> { let Latency = 3; } 54def A57Write_3cyc_1W : SchedWriteRes<[A57UnitW]> { let Latency = 3; } 55def A57Write_3cyc_1X : SchedWriteRes<[A57UnitX]> { let Latency = 3; } 56 57// A57Write_3cyc_1L - A57Write_20cyc_1L 58foreach Lat = 3-20 in { 59 def A57Write_#Lat#cyc_1L : SchedWriteRes<[A57UnitL]> { 60 let Latency = Lat; 61 } 62} 63 64// A57Write_4cyc_1S - A57Write_16cyc_1S 65foreach Lat = 4-16 in { 66 def A57Write_#Lat#cyc_1S : SchedWriteRes<[A57UnitS]> { 67 let Latency = Lat; 68 } 69} 70 71def A57Write_4cyc_1M : SchedWriteRes<[A57UnitL]> { let Latency = 4; } 72def A57Write_4cyc_1X : SchedWriteRes<[A57UnitX]> { let Latency = 4; } 73def A57Write_4cyc_1W : SchedWriteRes<[A57UnitW]> { let Latency = 4; } 74def A57Write_5cyc_1X : SchedWriteRes<[A57UnitX]> { let Latency = 5; } 75def A57Write_6cyc_1X : SchedWriteRes<[A57UnitX]> { let Latency = 6; } 76def A57Write_6cyc_1W : SchedWriteRes<[A57UnitW]> { let Latency = 6; } 77def A57Write_8cyc_1V : SchedWriteRes<[A57UnitV]> { let Latency = 8; } 78def A57Write_9cyc_1V : SchedWriteRes<[A57UnitV]> { let Latency = 9; } 79def A57Write_6cyc_1M : SchedWriteRes<[A57UnitM]> { let Latency = 6; } 80def A57Write_6cyc_1V : SchedWriteRes<[A57UnitV]> { let Latency = 6; } 81 82 83//===----------------------------------------------------------------------===// 84// Define Generic 2 micro-op types 85 86def A57Write_64cyc_2X : SchedWriteRes<[A57UnitX, A57UnitX]> { 87 let Latency = 64; 88 let NumMicroOps = 2; 89 let ResourceCycles = [32, 32]; 90} 91def A57Write_6cyc_1I_1L : SchedWriteRes<[A57UnitI, 92 A57UnitL]> { 93 let Latency = 6; 94 let NumMicroOps = 2; 95} 96def A57Write_6cyc_1V_1X : SchedWriteRes<[A57UnitV, 97 A57UnitX]> { 98 let Latency = 6; 99 let NumMicroOps = 2; 100} 101def A57Write_7cyc_1V_1X : SchedWriteRes<[A57UnitV, 102 A57UnitX]> { 103 let Latency = 7; 104 let NumMicroOps = 2; 105} 106def A57Write_8cyc_1L_1V : SchedWriteRes<[A57UnitL, 107 A57UnitV]> { 108 let Latency = 8; 109 let NumMicroOps = 2; 110} 111def A57Write_9cyc_1L_1V : SchedWriteRes<[A57UnitL, 112 A57UnitV]> { 113 let Latency = 9; 114 let NumMicroOps = 2; 115} 116def A57Write_9cyc_2V : SchedWriteRes<[A57UnitV, A57UnitV]> { 117 let Latency = 9; 118 let NumMicroOps = 2; 119} 120def A57Write_8cyc_2X : SchedWriteRes<[A57UnitX, A57UnitX]> { 121 let Latency = 8; 122 let NumMicroOps = 2; 123} 124def A57Write_6cyc_2L : SchedWriteRes<[A57UnitL, A57UnitL]> { 125 let Latency = 6; 126 let NumMicroOps = 2; 127} 128def A57Write_6cyc_2V : SchedWriteRes<[A57UnitV, A57UnitV]> { 129 let Latency = 6; 130 let NumMicroOps = 2; 131} 132def A57Write_6cyc_2W : SchedWriteRes<[A57UnitW, A57UnitW]> { 133 let Latency = 6; 134 let NumMicroOps = 2; 135} 136def A57Write_5cyc_1I_1L : SchedWriteRes<[A57UnitI, 137 A57UnitL]> { 138 let Latency = 5; 139 let NumMicroOps = 2; 140} 141def A57Write_5cyc_1I_1M : SchedWriteRes<[A57UnitI, 142 A57UnitM]> { 143 let Latency = 5; 144 let NumMicroOps = 2; 145} 146def A57Write_5cyc_2V : SchedWriteRes<[A57UnitV, A57UnitV]> { 147 let Latency = 5; 148 let NumMicroOps = 2; 149} 150def A57Write_5cyc_2X : SchedWriteRes<[A57UnitX, A57UnitX]> { 151 let Latency = 5; 152 let NumMicroOps = 2; 153} 154def A57Write_10cyc_1L_1V : SchedWriteRes<[A57UnitL, 155 A57UnitV]> { 156 let Latency = 10; 157 let NumMicroOps = 2; 158} 159def A57Write_10cyc_2V : SchedWriteRes<[A57UnitV, A57UnitV]> { 160 let Latency = 10; 161 let NumMicroOps = 2; 162} 163def A57Write_1cyc_1B_1I : SchedWriteRes<[A57UnitB, 164 A57UnitI]> { 165 let Latency = 1; 166 let NumMicroOps = 2; 167} 168def A57Write_1cyc_1I_1S : SchedWriteRes<[A57UnitI, 169 A57UnitS]> { 170 let Latency = 1; 171 let NumMicroOps = 2; 172} 173def A57Write_1cyc_1S_1I : SchedWriteRes<[A57UnitS, 174 A57UnitI]> { 175 let Latency = 1; 176 let NumMicroOps = 2; 177} 178def A57Write_2cyc_1S_1I : SchedWriteRes<[A57UnitS, 179 A57UnitI]> { 180 let Latency = 2; 181 let NumMicroOps = 2; 182} 183def A57Write_3cyc_1S_1I : SchedWriteRes<[A57UnitS, 184 A57UnitI]> { 185 let Latency = 3; 186 let NumMicroOps = 2; 187} 188def A57Write_1cyc_1S_1M : SchedWriteRes<[A57UnitS, 189 A57UnitM]> { 190 let Latency = 1; 191 let NumMicroOps = 2; 192} 193def A57Write_2cyc_1B_1I : SchedWriteRes<[A57UnitB, 194 A57UnitI]> { 195 let Latency = 2; 196 let NumMicroOps = 2; 197} 198def A57Write_3cyc_1B_1I : SchedWriteRes<[A57UnitB, 199 A57UnitI]> { 200 let Latency = 3; 201 let NumMicroOps = 2; 202} 203def A57Write_6cyc_1B_1L : SchedWriteRes<[A57UnitB, 204 A57UnitI]> { 205 let Latency = 6; 206 let NumMicroOps = 2; 207} 208def A57Write_2cyc_1I_1M : SchedWriteRes<[A57UnitI, 209 A57UnitM]> { 210 let Latency = 2; 211 let NumMicroOps = 2; 212} 213def A57Write_2cyc_2S : SchedWriteRes<[A57UnitS, A57UnitS]> { 214 let Latency = 2; 215 let NumMicroOps = 2; 216} 217def A57Write_2cyc_2V : SchedWriteRes<[A57UnitV, A57UnitV]> { 218 let Latency = 2; 219 let NumMicroOps = 2; 220} 221def A57Write_36cyc_2X : SchedWriteRes<[A57UnitX, A57UnitX]> { 222 let Latency = 36; 223 let NumMicroOps = 2; 224 let ResourceCycles = [18, 18]; 225} 226def A57Write_3cyc_1I_1M : SchedWriteRes<[A57UnitI, 227 A57UnitM]> { 228 let Latency = 3; 229 let NumMicroOps = 2; 230} 231def A57Write_4cyc_1I_1M : SchedWriteRes<[A57UnitI, 232 A57UnitM]> { 233 let Latency = 4; 234 let NumMicroOps = 2; 235} 236 237// A57Write_3cyc_1L_1I - A57Write_20cyc_1L_1I 238foreach Lat = 3-20 in { 239 def A57Write_#Lat#cyc_1L_1I : SchedWriteRes<[A57UnitL, A57UnitI]> { 240 let Latency = Lat; let NumMicroOps = 2; 241 } 242} 243 244def A57Write_3cyc_1I_1S : SchedWriteRes<[A57UnitI, 245 A57UnitS]> { 246 let Latency = 3; 247 let NumMicroOps = 2; 248} 249def A57Write_3cyc_1S_1V : SchedWriteRes<[A57UnitS, 250 A57UnitV]> { 251 let Latency = 3; 252 let NumMicroOps = 2; 253} 254def A57Write_4cyc_1S_1V : SchedWriteRes<[A57UnitS, 255 A57UnitV]> { 256 let Latency = 4; 257 let NumMicroOps = 2; 258} 259def A57Write_3cyc_2V : SchedWriteRes<[A57UnitV, A57UnitV]> { 260 let Latency = 3; 261 let NumMicroOps = 2; 262} 263 264// A57Write_4cyc_1S_1I - A57Write_16cyc_1S_1I 265foreach Lat = 4-16 in { 266 def A57Write_#Lat#cyc_1S_1I : SchedWriteRes<[A57UnitS, A57UnitI]> { 267 let Latency = Lat; let NumMicroOps = 2; 268 } 269} 270 271def A57Write_4cyc_2X : SchedWriteRes<[A57UnitX, A57UnitX]> { 272 let Latency = 4; 273 let NumMicroOps = 2; 274} 275 276 277//===----------------------------------------------------------------------===// 278// Define Generic 3 micro-op types 279 280def A57Write_10cyc_3V : SchedWriteRes<[A57UnitV, A57UnitV, A57UnitV]> { 281 let Latency = 10; 282 let NumMicroOps = 3; 283} 284def A57Write_2cyc_1I_2S : SchedWriteRes<[A57UnitI, 285 A57UnitS, A57UnitS]> { 286 let Latency = 2; 287 let NumMicroOps = 3; 288} 289def A57Write_3cyc_1I_1S_1V : SchedWriteRes<[A57UnitI, 290 A57UnitS, 291 A57UnitV]> { 292 let Latency = 3; 293 let NumMicroOps = 3; 294} 295def A57Write_3cyc_1S_1V_1I : SchedWriteRes<[A57UnitS, 296 A57UnitV, 297 A57UnitI]> { 298 let Latency = 3; 299 let NumMicroOps = 3; 300} 301def A57Write_4cyc_1S_1V_1I : SchedWriteRes<[A57UnitS, 302 A57UnitV, 303 A57UnitI]> { 304 let Latency = 4; 305 let NumMicroOps = 3; 306} 307def A57Write_4cyc_1I_1L_1M : SchedWriteRes<[A57UnitI, A57UnitL, A57UnitM]> { 308 let Latency = 4; 309 let NumMicroOps = 3; 310} 311def A57Write_8cyc_1L_1V_1I : SchedWriteRes<[A57UnitL, 312 A57UnitV, 313 A57UnitI]> { 314 let Latency = 8; 315 let NumMicroOps = 3; 316} 317def A57Write_9cyc_1L_1V_1I : SchedWriteRes<[A57UnitL, 318 A57UnitV, 319 A57UnitI]> { 320 let Latency = 9; 321 let NumMicroOps = 3; 322} 323