]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/AArch64/AArch64SchedKryoDetails.td
Upgrade our copies of clang, llvm, lldb, compiler-rt and libc++ to 3.9.0
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / AArch64 / AArch64SchedKryoDetails.td
1 //=- AArch64SchedKryoDetails.td - QC Kryo Scheduling Defs ----*- 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 // This file defines the uop and latency details for the machine model for the
11 // Qualcomm Kryo subtarget.
12 //
13 //===----------------------------------------------------------------------===//
14
15 def KryoWrite_3cyc_X_noRSV_138ln :
16         SchedWriteRes<[KryoUnitX]> {
17     let Latency = 3; let NumMicroOps = 2;
18 }
19 def : InstRW<[KryoWrite_3cyc_X_noRSV_138ln],
20     (instregex "(S|U)R?SRA(d|(v2i32|v4i16|v8i8)_shift)")>;
21
22 def KryoWrite_3cyc_X_X_139ln :
23         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
24     let Latency = 3; let NumMicroOps = 2;
25 }
26 def : InstRW<[KryoWrite_3cyc_X_X_139ln],
27     (instregex "(S|U)R?SRA(v2i64|v4i32|v8i16|v16i8)_shift")>;
28
29 def KryoWrite_4cyc_XY_XY_noRSV_172ln :
30     SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
31     let Latency = 4; let NumMicroOps = 3;
32 }
33 def : InstRW<[KryoWrite_4cyc_XY_XY_noRSV_172ln],
34         (instregex "(S|U)ABA(v8i8|v4i16|v2i32)")>;
35 def KryoWrite_4cyc_XY_XY_XY_XY_178ln :
36     SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitXY, KryoUnitXY]> {
37     let Latency = 4; let NumMicroOps = 4;
38 }
39 def : InstRW<[KryoWrite_4cyc_XY_XY_XY_XY_178ln],
40         (instregex "(S|U)ABA(v16i8|v8i16|v4i32)")>;
41 def KryoWrite_3cyc_XY_XY_XY_XY_177ln :
42         SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitXY, KryoUnitXY]> {
43     let Latency = 3; let NumMicroOps = 4;
44 }
45 def : InstRW<[KryoWrite_3cyc_XY_XY_XY_XY_177ln],
46         (instregex "(S|U)ABALv.*")>;
47 def KryoWrite_3cyc_XY_XY_166ln :
48         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
49     let Latency = 3; let NumMicroOps = 2;
50 }
51 def : InstRW<[KryoWrite_3cyc_XY_XY_166ln],
52         (instregex "(S|U)(ABD|QSUB|RHADD)(v16i8|v8i16|v4i32|v2i64)")>;
53 def KryoWrite_3cyc_XY_noRSV_159ln :
54         SchedWriteRes<[KryoUnitXY]> {
55     let Latency = 3; let NumMicroOps = 2;
56 }
57 def : InstRW<[KryoWrite_3cyc_XY_noRSV_159ln],
58         (instregex "(S|U)(ABD|RHADD)(v8i8|v4i16|v2i32)")>;
59 def KryoWrite_3cyc_XY_XY_165ln :
60         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
61     let Latency = 3; let NumMicroOps = 2;
62 }
63 def : InstRW<[KryoWrite_3cyc_XY_XY_165ln],
64         (instregex "(S|U)ABDLv.*")>;
65 def KryoWrite_3cyc_X_noRSV_154ln :
66         SchedWriteRes<[KryoUnitX]> {
67 let Latency = 3; let NumMicroOps = 2;
68 }
69 def : InstRW<[KryoWrite_3cyc_X_noRSV_154ln],
70         (instregex "(S|U)ADALP(v8i8|v4i16|v2i32)_v.*")>;
71 def KryoWrite_3cyc_X_X_155ln :
72         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
73         let Latency = 3; let NumMicroOps = 2;
74 }
75 def : InstRW<[KryoWrite_3cyc_X_X_155ln],
76         (instregex "(S|U)ADALP(v16i8|v8i16|v4i32)_v.*")>;
77 def KryoWrite_2cyc_XY_XY_151ln :
78         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
79         let Latency = 2; let NumMicroOps = 2;
80 }
81 def : InstRW<[KryoWrite_2cyc_XY_XY_151ln],
82         (instregex "(S|U)(ADD|SUB)Lv.*")>;
83 def KryoWrite_2cyc_XY_noRSV_148ln :
84         SchedWriteRes<[KryoUnitXY]> {
85         let Latency = 2; let NumMicroOps = 2;
86 }
87 def : InstRW<[KryoWrite_2cyc_XY_noRSV_148ln],
88         (instregex "((S|U)ADDLP|ABS)(v2i32|v4i16|v8i8)(_v.*)?")>;
89 def KryoWrite_2cyc_XY_XY_150ln :
90         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
91         let Latency = 2; let NumMicroOps = 2;
92 }
93 def : InstRW<[KryoWrite_2cyc_XY_XY_150ln],
94         (instregex "((S|U)ADDLP|ABS)(v2i64|v4i32|v8i16|v16i8)(_v.*)?")>;
95 def KryoWrite_3cyc_XY_XY_XY_noRSV_179ln :
96         SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitXY]> {
97         let Latency = 3; let NumMicroOps = 4;
98 }
99 def : InstRW<[KryoWrite_3cyc_XY_XY_XY_noRSV_179ln],
100         (instrs SADDLVv4i32v, UADDLVv4i32v)>;
101 def KryoWrite_5cyc_XY_XY_XY_noRSV_180ln :
102         SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitXY]> {
103         let Latency = 5; let NumMicroOps = 4;
104 }
105 def : InstRW<[KryoWrite_5cyc_XY_XY_XY_noRSV_180ln],
106         (instrs SADDLVv8i16v, UADDLVv8i16v)>;
107 def KryoWrite_6cyc_XY_XY_X_noRSV_181ln :
108         SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitX]> {
109         let Latency = 6; let NumMicroOps = 4;
110 }
111 def : InstRW<[KryoWrite_6cyc_XY_XY_X_noRSV_181ln],
112         (instrs SADDLVv16i8v, UADDLVv16i8v)>;
113 def KryoWrite_3cyc_XY_noRSV_158ln :
114         SchedWriteRes<[KryoUnitXY]> {
115         let Latency = 3; let NumMicroOps = 2;
116 }
117 def : InstRW<[KryoWrite_3cyc_XY_noRSV_158ln],
118         (instrs SADDLVv4i16v, UADDLVv4i16v, ADDVv4i16v)>;
119 def KryoWrite_4cyc_X_noRSV_169ln :
120         SchedWriteRes<[KryoUnitX]> {
121         let Latency = 4; let NumMicroOps = 2;
122 }
123 def : InstRW<[KryoWrite_4cyc_X_noRSV_169ln],
124         (instrs SADDLVv8i8v, UADDLVv8i8v, ADDVv8i8v)>;
125 def KryoWrite_2cyc_XY_XY_XY_XY_176ln :
126         SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitXY, KryoUnitXY]> {
127         let Latency = 2; let NumMicroOps = 4;
128 }
129 def : InstRW<[KryoWrite_2cyc_XY_XY_XY_XY_176ln],
130         (instregex "(S|U)(ADDW|SUBW)v.*")>;
131 def KryoWrite_4cyc_X_noRSV_40ln :
132         SchedWriteRes<[KryoUnitX]> {
133         let Latency = 4; let NumMicroOps = 2;
134 }
135 def : InstRW<[KryoWrite_4cyc_X_noRSV_40ln],
136         (instregex "(S|U)CVTFS(W|X)(D|S)ri")>;
137 def KryoWrite_4cyc_X_noRSV_97ln :
138         SchedWriteRes<[KryoUnitX]> {
139         let Latency = 4; let NumMicroOps = 2;
140 }
141 def : InstRW<[KryoWrite_4cyc_X_noRSV_97ln],
142         (instregex "(S|U)CVTFU(W|X)(D|S)ri")>;
143 def KryoWrite_4cyc_X_noRSV_110ln :
144         SchedWriteRes<[KryoUnitX]> {
145         let Latency = 4; let NumMicroOps = 2;
146 }
147 def : InstRW<[KryoWrite_4cyc_X_noRSV_110ln],
148         (instregex "(S|U)CVTF(v1i32|v2i32|v1i64|v2f32|d|s)(_shift)?")>;
149 def KryoWrite_4cyc_X_X_114ln :
150         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
151         let Latency = 4; let NumMicroOps = 2;
152 }
153 def : InstRW<[KryoWrite_4cyc_X_X_114ln],
154         (instregex "(S|U)CVTF(v2i64|v4i32|v2f64|v4f32)(_shift)?")>;
155 def KryoWrite_1cyc_XA_Y_98ln :
156         SchedWriteRes<[KryoUnitXA, KryoUnitY]> {
157         let Latency = 1; let NumMicroOps = 2;
158 }
159 def : InstRW<[KryoWrite_1cyc_XA_Y_98ln],
160         (instregex "(S|U)DIV(_Int)?(W|X)r")>;
161 def KryoWrite_2cyc_XY_XY_152ln :
162         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
163         let Latency = 2; let NumMicroOps = 2;
164 }
165 def : InstRW<[KryoWrite_2cyc_XY_XY_152ln],
166         (instregex "(S|U)H(ADD|SUB)(v16i8|v8i16|v4i32)")>;
167 def KryoWrite_2cyc_XY_noRSV_149ln :
168         SchedWriteRes<[KryoUnitXY]> {
169         let Latency = 2; let NumMicroOps = 2;
170 }
171 def : InstRW<[KryoWrite_2cyc_XY_noRSV_149ln],
172         (instregex "((S|U)H(ADD|SUB)|ADDP)(v8i8|v4i16|v2i32)")>;
173 def KryoWrite_4cyc_X_70ln :
174         SchedWriteRes<[KryoUnitX]> {
175         let Latency = 4; let NumMicroOps = 1;
176 }
177 def : InstRW<[KryoWrite_4cyc_X_70ln],
178         (instregex "(S|U)(MADDL|MSUBL)rrr")>;
179 def KryoWrite_4cyc_X_X_191ln :
180         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
181         let Latency = 4; let NumMicroOps = 2;
182 }
183 def : InstRW<[KryoWrite_4cyc_X_X_191ln],
184         (instregex "(S|U|SQD)(MLAL|MLSL|MULL)v.*")>;
185 def KryoWrite_1cyc_XY_195ln :
186         SchedWriteRes<[KryoUnitXY]> {
187         let Latency = 1; let NumMicroOps = 1;
188 }
189 def : InstRW<[KryoWrite_1cyc_XY_195ln],
190         (instregex "(S|U)MOVv.*")>;
191 def KryoWrite_5cyc_X_71ln :
192         SchedWriteRes<[KryoUnitX]> {
193         let Latency = 5; let NumMicroOps = 1;
194 }
195 def : InstRW<[KryoWrite_5cyc_X_71ln],
196         (instrs SMULHrr, UMULHrr)>;
197 def KryoWrite_3cyc_XY_noRSV_186ln :
198         SchedWriteRes<[KryoUnitXY]> {
199         let Latency = 3; let NumMicroOps = 2;
200 }
201 def : InstRW<[KryoWrite_3cyc_XY_noRSV_186ln],
202         (instregex "^(S|U)QADD(v8i8|v4i16|v2i32)")>;
203 def KryoWrite_3cyc_XY_XY_187ln :
204         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
205         let Latency = 3; let NumMicroOps = 2;
206 }
207 def : InstRW<[KryoWrite_3cyc_XY_XY_187ln],
208         (instregex "^(S|U)QADD(v16i8|v8i16|v4i32|v2i64)")>;
209 def KryoWrite_3cyc_XY_noRSV_69ln :
210         SchedWriteRes<[KryoUnitXY]> {
211         let Latency = 3; let NumMicroOps = 2;
212 }
213 def : InstRW<[KryoWrite_3cyc_XY_noRSV_69ln],
214         (instregex "(S|U|SU|US)QADD(v1i8|v1i16|v2i16|v1i32|v1i64)")>;
215 def KryoWrite_3cyc_XY_noRSV_248ln :
216         SchedWriteRes<[KryoUnitXY]> {
217         let Latency = 3; let NumMicroOps = 2;
218 }
219 def : InstRW<[KryoWrite_3cyc_XY_noRSV_248ln],
220         (instregex "(S|U)QSHLU?(d|s|h|b|(v8i8|v4i16|v2i32)_shift)$")>;
221 def KryoWrite_3cyc_XY_XY_250ln :
222         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
223         let Latency = 3; let NumMicroOps = 2;
224 }
225 def : InstRW<[KryoWrite_3cyc_XY_XY_250ln],
226         (instregex "(S|U)(QSHLU?|RSHR)(v16i8|v8i16|v4i32|v2i64)_shift$")>;
227 def KryoWrite_3cyc_XY_noRSV_246ln :
228         SchedWriteRes<[KryoUnitXY]> {
229         let Latency = 3; let NumMicroOps = 2;
230 }
231 def : InstRW<[KryoWrite_3cyc_XY_noRSV_246ln],
232         (instregex "(S|U)(QSHL|RSHL|QRSHL)(v1i8|v1i16|v1i32|v1i64|v8i8|v4i16|v2i32)$")>;
233 def KryoWrite_3cyc_XY_XY_251ln :
234         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
235         let Latency = 3; let NumMicroOps = 2;
236 }
237 def : InstRW<[KryoWrite_3cyc_XY_XY_251ln],
238         (instregex "(S|U)(QSHL|RSHL|QRSHL)(v16i8|v8i16|v4i32|v2i64)$")>;
239 def KryoWrite_6cyc_XY_X_238ln :
240         SchedWriteRes<[KryoUnitXY, KryoUnitX]> {
241         let Latency = 6; let NumMicroOps = 2;
242 }
243 def : InstRW<[KryoWrite_6cyc_XY_X_238ln],
244         (instregex "((S|U)QR?SHRN|SQR?SHRUN)(v16i8|v8i16|v4i32)_shift$")>;
245 def KryoWrite_3cyc_XY_noRSV_249ln :
246         SchedWriteRes<[KryoUnitXY]> {
247         let Latency = 3; let NumMicroOps = 2;
248 }
249 def : InstRW<[KryoWrite_3cyc_XY_noRSV_249ln],
250         (instregex "((S|U)QR?SHRN|SQR?SHRUN)(s|h|b)?")>;
251 def KryoWrite_6cyc_XY_X_noRSV_252ln :
252         SchedWriteRes<[KryoUnitXY, KryoUnitX]> {
253         let Latency = 6; let NumMicroOps = 3;
254 }
255 def : InstRW<[KryoWrite_6cyc_XY_X_noRSV_252ln],
256         (instregex "((S|U)QR?SHRN|SQR?SHRUN)(v8i8|v4i16|v2i32)_shift?")>;
257 def KryoWrite_3cyc_XY_noRSV_161ln :
258         SchedWriteRes<[KryoUnitXY]> {
259         let Latency = 3; let NumMicroOps = 2;
260 }
261 def : InstRW<[KryoWrite_3cyc_XY_noRSV_161ln],
262         (instregex "(S|U)QSUB(v8i8|v4i16|v2i32|v1i64|v1i32|v1i16|v1i8)")>;
263 def KryoWrite_3cyc_XY_noRSV_163ln :
264         SchedWriteRes<[KryoUnitXY]> {
265         let Latency = 3; let NumMicroOps = 2;
266 }
267 def : InstRW<[KryoWrite_3cyc_XY_noRSV_163ln],
268         (instregex "(S|U)QXTU?N(v16i8|v8i16|v4i32|v8i8|v4i16|v2i32)")>;
269 def KryoWrite_3cyc_XY_noRSV_162ln :
270         SchedWriteRes<[KryoUnitXY]> {
271         let Latency = 3; let NumMicroOps = 2;
272 }
273 def : InstRW<[KryoWrite_3cyc_XY_noRSV_162ln],
274         (instregex "(S|U)QXTU?N(v1i8|v1i16|v1i32)")>;
275 def KryoWrite_3cyc_XY_noRSV_247ln :
276         SchedWriteRes<[KryoUnitXY]> {
277         let Latency = 3; let NumMicroOps = 2;
278 }
279 def : InstRW<[KryoWrite_3cyc_XY_noRSV_247ln],
280         (instregex "(S|U)RSHR(d|(v8i8|v4i16|v2i32)_shift)$")>;
281 def KryoWrite_2cyc_XY_noRSV_239ln :
282         SchedWriteRes<[KryoUnitXY]> {
283         let Latency = 2; let NumMicroOps = 2;
284 }
285 def : InstRW<[KryoWrite_2cyc_XY_noRSV_239ln],
286         (instregex "(S|U)SHL(d|v8i8|v4i16|v2i32|v1i64)$")>;
287 def KryoWrite_2cyc_XY_XY_243ln :
288         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
289         let Latency = 2; let NumMicroOps = 2;
290 }
291 def : InstRW<[KryoWrite_2cyc_XY_XY_243ln],
292         (instregex "(S|U)SHL(v16i8|v8i16|v4i32|v2i64)$")>;
293 def KryoWrite_2cyc_XY_XY_241ln :
294         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
295         let Latency = 2; let NumMicroOps = 2;
296 }
297 def : InstRW<[KryoWrite_2cyc_XY_XY_241ln],
298         (instregex "(S|U)?SHLL(v16i8|v8i16|v4i32|v8i8|v4i16|v2i32)(_shift)?$")>;
299 def KryoWrite_2cyc_XY_noRSV_240ln :
300         SchedWriteRes<[KryoUnitXY]> {
301         let Latency = 2; let NumMicroOps = 2;
302 }
303 def : InstRW<[KryoWrite_2cyc_XY_noRSV_240ln],
304         (instregex "((S|U)SHR|SHL)(d|(v8i8|v4i16|v2i32)_shift)$")>;
305 def KryoWrite_2cyc_XY_XY_242ln :
306         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
307         let Latency = 2; let NumMicroOps = 2;
308 }
309 def : InstRW<[KryoWrite_2cyc_XY_XY_242ln],
310         (instregex "((S|U)SHR|SHL)(v16i8|v8i16|v4i32|v2i64)_shift$")>;
311 def KryoWrite_2cyc_XY_XY_183ln :
312         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
313         let Latency = 2; let NumMicroOps = 2;
314 }
315 def : InstRW<[KryoWrite_2cyc_XY_XY_183ln],
316         (instregex "(S|U)(MAX|MIN)P?(v16i8|v8i16|v4i32)")>;
317 def KryoWrite_2cyc_XY_noRSV_182ln :
318         SchedWriteRes<[KryoUnitXY]> {
319         let Latency = 2; let NumMicroOps = 2;
320 }
321 def : InstRW<[KryoWrite_2cyc_XY_noRSV_182ln],
322         (instregex "(S|U)(MAX|MIN)P?(v8i8|v4i16|v2i32)")>;
323 def KryoWrite_3cyc_XY_noRSV_184ln :
324         SchedWriteRes<[KryoUnitXY]> {
325         let Latency = 3; let NumMicroOps = 2;
326 }
327 def : InstRW<[KryoWrite_3cyc_XY_noRSV_184ln],
328         (instregex "(S|U)(MAX|MIN)V(v4i16v|v8i8v|v4i32)")>;
329 def KryoWrite_4cyc_X_noRSV_185ln :
330         SchedWriteRes<[KryoUnitX]> {
331         let Latency = 4; let NumMicroOps = 2;
332 }
333 def : InstRW<[KryoWrite_4cyc_X_noRSV_185ln],
334         (instregex "(S|U)(MAX|MIN)V(v16i8v|v8i16v)")>;
335 def KryoWrite_2cyc_XY_noRSV_67ln :
336         SchedWriteRes<[KryoUnitXY]> {
337         let Latency = 2; let NumMicroOps = 2;
338 }
339 def : InstRW<[KryoWrite_2cyc_XY_noRSV_67ln],
340         (instrs ABSv1i64)>;
341 def KryoWrite_1cyc_XY_63ln :
342         SchedWriteRes<[KryoUnitXY]> {
343         let Latency = 1; let NumMicroOps = 1;
344 }
345 def : InstRW<[KryoWrite_1cyc_XY_63ln, ReadI, ReadI],
346         (instregex "ADC.*")>;
347 def KryoWrite_1cyc_XY_63_1ln :
348         SchedWriteRes<[KryoUnitXY]> {
349         let Latency = 1; let NumMicroOps = 1;
350 }
351 def : InstRW<[KryoWrite_1cyc_XY_63_1ln],
352         (instregex "ADR.*")>;
353 def KryoWrite_1cyc_XY_62ln :
354         SchedWriteRes<[KryoUnitXY]> {
355         let Latency = 1; let NumMicroOps = 1;
356 }
357 def : InstRW<[KryoWrite_1cyc_XY_62ln, ReadI],
358         (instregex "ADDS?(W|X)ri")>;
359 def KryoWrite_2cyc_XY_XY_64ln :
360         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
361         let Latency = 2; let NumMicroOps = 2;
362 }
363 def : InstRW<[KryoWrite_2cyc_XY_XY_64ln, ReadI, ReadI],
364         (instregex "ADDS?(W|X)r(r|s|x)(64)?")>;
365 def KryoWrite_1cyc_XY_noRSV_65ln :
366         SchedWriteRes<[KryoUnitXY]> {
367         let Latency = 1; let NumMicroOps = 2;
368 }
369 def : InstRW<[KryoWrite_1cyc_XY_noRSV_65ln],
370         (instrs ADDv1i64)>;
371 def KryoWrite_1cyc_XY_noRSV_144ln :
372         SchedWriteRes<[KryoUnitXY]> {
373         let Latency = 1; let NumMicroOps = 2;
374 }
375 def : InstRW<[KryoWrite_1cyc_XY_noRSV_144ln],
376         (instregex "(ADD|SUB)(v8i8|v4i16|v2i32|v1i64)")>;
377 def KryoWrite_1cyc_XY_XY_146ln :
378         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
379         let Latency = 1; let NumMicroOps = 2;
380 }
381 def : InstRW<[KryoWrite_1cyc_XY_XY_146ln],
382         (instregex "(ADD|SUB)(v16i8|v8i16|v4i32|v2i64)")>;
383 def KryoWrite_4cyc_XY_X_noRSV_171ln :
384         SchedWriteRes<[KryoUnitXY, KryoUnitX]> {
385         let Latency = 4; let NumMicroOps = 3;
386 }
387 def : InstRW<[KryoWrite_4cyc_XY_X_noRSV_171ln],
388         (instregex "(ADD|SUB)HNv.*")>;
389 def KryoWrite_1cyc_XY_noRSV_66ln :
390         SchedWriteRes<[KryoUnitXY]> {
391         let Latency = 1; let NumMicroOps = 2;
392 }
393 def : InstRW<[KryoWrite_1cyc_XY_noRSV_66ln],
394         (instrs ADDPv2i64p)>;
395 def KryoWrite_2cyc_XY_XY_153ln :
396         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
397         let Latency = 2; let NumMicroOps = 2;
398 }
399 def : InstRW<[KryoWrite_2cyc_XY_XY_153ln],
400         (instregex "ADDP(v16i8|v8i16|v4i32|v2i64)")>;
401 def KryoWrite_3cyc_XY_XY_noRSV_170ln :
402         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
403         let Latency = 3; let NumMicroOps = 3;
404 }
405 def : InstRW<[KryoWrite_3cyc_XY_XY_noRSV_170ln],
406         (instrs ADDVv4i32v)>;
407 def KryoWrite_4cyc_XY_XY_noRSV_173ln :
408         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
409         let Latency = 4; let NumMicroOps = 3;
410 }
411 def : InstRW<[KryoWrite_4cyc_XY_XY_noRSV_173ln],
412         (instrs ADDVv8i16v)>;
413 def KryoWrite_5cyc_XY_X_noRSV_174ln :
414         SchedWriteRes<[KryoUnitXY, KryoUnitX]> {
415         let Latency = 5; let NumMicroOps = 3;
416 }
417 def : InstRW<[KryoWrite_5cyc_XY_X_noRSV_174ln],
418         (instrs ADDVv16i8v)>;
419 def KryoWrite_3cyc_XY_XY_X_X_27ln :
420         SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitX, KryoUnitX]> {
421         let Latency = 3; let NumMicroOps = 4;
422 }
423 def : InstRW<[KryoWrite_3cyc_XY_XY_X_X_27ln],
424         (instrs AESDrr, AESErr)>;
425 def KryoWrite_2cyc_X_X_22ln :
426         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
427         let Latency = 2; let NumMicroOps = 2;
428 }
429 def : InstRW<[KryoWrite_2cyc_X_X_22ln],
430         (instrs AESIMCrr, AESMCrr)>;
431 def KryoWrite_1cyc_XY_noRSV_76ln :
432         SchedWriteRes<[KryoUnitXY]> {
433         let Latency = 1; let NumMicroOps = 2;
434 }
435 def : InstRW<[KryoWrite_1cyc_XY_noRSV_76ln],
436         (instregex "((AND|ORN|EOR|EON)S?(Wr[rsi]|v8i8|v4i16|v2i32)|(ORR|BIC)S?(Wr[rs]|v8i8|v4i16|v2i32))")>;
437 def KryoWrite_1cyc_XY_XY_79ln :
438         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
439         let Latency = 1; let NumMicroOps = 2;
440 }
441 def : InstRW<[KryoWrite_1cyc_XY_XY_79ln],
442         (instregex "((AND|ORN|EOR|EON)S?(Xr[rsi]|v16i8|v8i16|v4i32)|(ORR|BIC)S?(Xr[rs]|v16i8|v8i16|v4i32))")>;
443 def KryoWrite_1cyc_X_72ln :
444         SchedWriteRes<[KryoUnitX]> {
445         let Latency = 1; let NumMicroOps = 1;
446 }
447 def : InstRW<[KryoWrite_1cyc_X_72ln],
448         (instregex "(S|U)?BFM.*")>;
449 def KryoWrite_1cyc_XY_noRSV_77ln :
450         SchedWriteRes<[KryoUnitXY]> {
451         let Latency = 1; let NumMicroOps = 2;
452 }
453 def : InstRW<[KryoWrite_1cyc_XY_noRSV_77ln],
454         (instregex "(BIC|ORR)S?Wri")>;
455 def KryoWrite_1cyc_XY_XY_78ln :
456         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
457         let Latency = 1; let NumMicroOps = 2;
458 }
459 def : InstRW<[KryoWrite_1cyc_XY_XY_78ln],
460         (instregex "(BIC|ORR)S?Xri")>;
461 def KryoWrite_1cyc_X_noRSV_74ln :
462         SchedWriteRes<[KryoUnitX]> {
463         let Latency = 1; let NumMicroOps = 2;
464 }
465 def : InstRW<[KryoWrite_1cyc_X_noRSV_74ln],
466         (instrs BIFv8i8, BITv8i8, BSLv8i8)>;
467 def KryoWrite_1cyc_X_X_75ln :
468         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
469         let Latency = 1; let NumMicroOps = 2;
470 }
471 def : InstRW<[KryoWrite_1cyc_X_X_75ln],
472         (instrs BIFv16i8, BITv16i8, BSLv16i8)>;
473 def KryoWrite_0cyc_noRSV_11ln :
474         SchedWriteRes<[]> {
475         let Latency = 0; let NumMicroOps = 1;
476 }
477 def : InstRW<[KryoWrite_0cyc_noRSV_11ln],
478         (instrs BRK, DCPS1, DCPS2, DCPS3, HLT, HVC, ISB, HINT, SMC, SVC)>;
479 def KryoWrite_0cyc_XY_16ln :
480         SchedWriteRes<[KryoUnitXY]> {
481         let Latency = 0; let NumMicroOps = 1;
482 }
483 def : InstRW<[KryoWrite_0cyc_XY_16ln, ReadI],
484         (instregex "(CCMN|CCMP)(W|X)i")>;
485 def KryoWrite_0cyc_XY_16_1ln :
486         SchedWriteRes<[KryoUnitXY]> {
487         let Latency = 0; let NumMicroOps = 1;
488 }
489 def : InstRW<[KryoWrite_0cyc_XY_16_1ln, ReadI, ReadI],
490         (instregex "(CCMN|CCMP)(W|X)r")>;
491 def KryoWrite_2cyc_XY_3ln :
492         SchedWriteRes<[KryoUnitXY]> {
493         let Latency = 2; let NumMicroOps = 1;
494 }
495 def : InstRW<[KryoWrite_2cyc_XY_3ln, ReadI],
496         (instregex "(CLS|CLZ)(W|X)r")>;
497 def KryoWrite_2cyc_XY_noRSV_7ln :
498         SchedWriteRes<[KryoUnitXY]> {
499         let Latency = 2; let NumMicroOps = 2;
500 }
501 def : InstRW<[KryoWrite_2cyc_XY_noRSV_7ln],
502         (instregex "(CLS|CLZ|CNT)(v4i32|v8i16|v16i8)")>;
503 def KryoWrite_2cyc_XY_XY_8ln :
504         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
505         let Latency = 2; let NumMicroOps = 2;
506 }
507 def : InstRW<[KryoWrite_2cyc_XY_XY_8ln],
508         (instregex "(CLS|CLZ|CNT)(v2i32|v4i16|v8i8)")>;
509 def KryoWrite_2cyc_XY_noRSV_80ln :
510         SchedWriteRes<[KryoUnitXY]> {
511         let Latency = 2; let NumMicroOps = 2;
512 }
513 def : InstRW<[KryoWrite_2cyc_XY_noRSV_80ln],
514         (instregex "CM(EQ|GE|HS|GT|HI|TST)(v8i8|v4i16|v2i32|v1i64)$")>;
515 def KryoWrite_2cyc_XY_XY_83ln :
516         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
517         let Latency = 2; let NumMicroOps = 2;
518 }
519 def : InstRW<[KryoWrite_2cyc_XY_XY_83ln],
520         (instregex "CM(EQ|GE|HS|GT|HI|TST)(v16i8|v8i16|v4i32|v2i64)$")>;
521 def KryoWrite_2cyc_XY_noRSV_81ln :
522         SchedWriteRes<[KryoUnitXY]> {
523         let Latency = 2; let NumMicroOps = 2;
524 }
525 def : InstRW<[KryoWrite_2cyc_XY_noRSV_81ln],
526         (instregex "CM(EQ|LE|GE|GT|LT)(v8i8|v4i16|v2i32|v1i64)rz$")>;
527 def KryoWrite_2cyc_XY_XY_82ln :
528         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
529         let Latency = 2; let NumMicroOps = 2;
530 }
531 def : InstRW<[KryoWrite_2cyc_XY_XY_82ln],
532         (instregex "CM(EQ|LE|GE|GT|LT)(v16i8|v8i16|v4i32|v2i64)rz$")>;
533 def KryoWrite_3cyc_XY_4ln :
534         SchedWriteRes<[KryoUnitXY]> {
535         let Latency = 3; let NumMicroOps = 1;
536 }
537 def : InstRW<[KryoWrite_3cyc_XY_4ln, ReadI, ReadISReg],
538         (instregex "CRC32.*")>;
539 def KryoWrite_1cyc_XY_20ln :
540         SchedWriteRes<[KryoUnitXY]> {
541         let Latency = 1; let NumMicroOps = 1;
542 }
543 def : InstRW<[KryoWrite_1cyc_XY_20ln, ReadI, ReadI],
544         (instregex "CSEL(W|X)r")>;
545 def KryoWrite_1cyc_X_17ln :
546         SchedWriteRes<[KryoUnitX]> {
547         let Latency = 1; let NumMicroOps = 1;
548 }
549 def : InstRW<[KryoWrite_1cyc_X_17ln, ReadI, ReadI],
550         (instregex "(CSINC|CSNEG)(W|X)r")>;
551 def KryoWrite_1cyc_XY_18ln :
552         SchedWriteRes<[KryoUnitXY]> {
553         let Latency = 1; let NumMicroOps = 1;
554 }
555 def : InstRW<[KryoWrite_1cyc_XY_18ln, ReadI, ReadI],
556         (instregex "(CSINV)(W|X)r")>;
557 def KryoWrite_3cyc_LS_X_13ln :
558         SchedWriteRes<[KryoUnitLS, KryoUnitX]> {
559         let Latency = 3; let NumMicroOps = 2;
560 }
561 def : InstRW<[KryoWrite_3cyc_LS_X_13ln],
562         (instrs DRPS)>;
563 def KryoWrite_0cyc_LS_10ln :
564         SchedWriteRes<[KryoUnitLS]> {
565         let Latency = 0; let NumMicroOps = 1;
566 }
567 def : InstRW<[KryoWrite_0cyc_LS_10ln],
568         (instrs DSB, DMB, CLREX)>;
569 def KryoWrite_1cyc_X_noRSV_196ln :
570         SchedWriteRes<[KryoUnitX]> {
571         let Latency = 1; let NumMicroOps = 2;
572 }
573 def : InstRW<[KryoWrite_1cyc_X_noRSV_196ln],
574         (instregex "DUP(v8i8|v4i16|v2i32)(gpr|lane)")>;
575 def KryoWrite_1cyc_X_X_197ln :
576         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
577         let Latency = 1; let NumMicroOps = 2;
578 }
579 def : InstRW<[KryoWrite_1cyc_X_X_197ln],
580         (instregex "DUP(v16i8|v8i16|v4i32|v2i64)(gpr|lane)")>;
581 def KryoWrite_3cyc_LS_LS_X_15ln :
582         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX]> {
583         let Latency = 3; let NumMicroOps = 3;
584 }
585 def : InstRW<[KryoWrite_3cyc_LS_LS_X_15ln],
586         (instrs ERET)>;
587 def KryoWrite_1cyc_X_noRSV_207ln :
588         SchedWriteRes<[KryoUnitX]> {
589         let Latency = 1; let NumMicroOps = 2;
590 }
591 def : InstRW<[KryoWrite_1cyc_X_noRSV_207ln],
592         (instrs EXTv8i8)>;
593 def KryoWrite_1cyc_X_X_212ln :
594         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
595         let Latency = 1; let NumMicroOps = 2;
596 }
597 def : InstRW<[KryoWrite_1cyc_X_X_212ln],
598         (instrs EXTv16i8)>;
599 def KryoWrite_2cyc_XY_X_136ln :
600         SchedWriteRes<[KryoUnitXY, KryoUnitX]> {
601         let Latency = 2; let NumMicroOps = 2;
602 }
603 def : InstRW<[KryoWrite_2cyc_XY_X_136ln],
604         (instrs EXTRWrri, EXTRXrri)>;
605 def KryoWrite_2cyc_XY_noRSV_35ln :
606         SchedWriteRes<[KryoUnitXY]> {
607         let Latency = 2; let NumMicroOps = 2;
608 }
609 def : InstRW<[KryoWrite_2cyc_XY_noRSV_35ln],
610         (instregex "F(MAX|MIN)(NM)?P?(D|S)rr")>;
611 def KryoWrite_2cyc_XY_XY_106ln :
612         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
613         let Latency = 2; let NumMicroOps = 2;
614 }
615 def : InstRW<[KryoWrite_2cyc_XY_XY_106ln],
616         (instregex "(F(MAX|MIN)(NM)?P?|FAC(GE|GT)|FCM(EQ|GE|GT))(v2i64p|v2f64|v4f32)")>;
617 def KryoWrite_2cyc_XY_noRSV_104ln :
618         SchedWriteRes<[KryoUnitXY]> {
619         let Latency = 2; let NumMicroOps = 2;
620 }
621 def : InstRW<[KryoWrite_2cyc_XY_noRSV_104ln],
622         (instregex "(F(MAX|MIN)(NM)?P?|FAC(GE|GT)|FCM(EQ|GE|GT))(v2f32|v2i32p)")>;
623 def KryoWrite_3cyc_XY_noRSV_107ln :
624         SchedWriteRes<[KryoUnitXY]> {
625         let Latency = 3; let NumMicroOps = 2;
626 }
627 def : InstRW<[KryoWrite_3cyc_XY_noRSV_107ln],
628         (instregex "F(MAX|MIN)(NM)?Vv4i32v")>;
629 def KryoWrite_3cyc_XY_noRSV_101ln :
630         SchedWriteRes<[KryoUnitXY]> {
631         let Latency = 3; let NumMicroOps = 2;
632 }
633 def : InstRW<[KryoWrite_3cyc_XY_noRSV_101ln],
634         (instregex "FABD(32|64|v2f32)")>;
635 def KryoWrite_3cyc_XY_XY_103ln :
636         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
637         let Latency = 3; let NumMicroOps = 2;
638 }
639 def : InstRW<[KryoWrite_3cyc_XY_XY_103ln],
640         (instregex "(FABD|FADD|FSUB|FADDP)(v4f32|v2f64)")>;
641 def KryoWrite_1cyc_XY_noRSV_48ln :
642         SchedWriteRes<[KryoUnitXY]> {
643         let Latency = 1; let NumMicroOps = 2;
644 }
645 def : InstRW<[KryoWrite_1cyc_XY_noRSV_48ln],
646         (instregex "F(ABS|NEG)(D|S)r")>;
647 def KryoWrite_1cyc_XY_noRSV_124ln :
648         SchedWriteRes<[KryoUnitXY]> {
649         let Latency = 1; let NumMicroOps = 2;
650 }
651 def : InstRW<[KryoWrite_1cyc_XY_noRSV_124ln],
652         (instregex "F(ABS|NEG)v2f32")>;
653 def KryoWrite_1cyc_XY_XY_125ln :
654         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
655         let Latency = 1; let NumMicroOps = 2;
656 }
657 def : InstRW<[KryoWrite_1cyc_XY_XY_125ln],
658         (instregex "F(ABS|NEG)(v2f64|v4f32)")>;
659 def KryoWrite_2cyc_XY_noRSV_33ln :
660         SchedWriteRes<[KryoUnitXY]> {
661         let Latency = 2; let NumMicroOps = 2;
662 }
663 def : InstRW<[KryoWrite_2cyc_XY_noRSV_33ln],
664         (instregex "(FAC(GE|GT)|FCM(EQ|GE|GT))(32|64)")>;
665 def KryoWrite_3cyc_XY_noRSV_30ln :
666         SchedWriteRes<[KryoUnitXY]> {
667         let Latency = 3; let NumMicroOps = 2;
668 }
669 def : InstRW<[KryoWrite_3cyc_XY_noRSV_30ln],
670         (instregex "(FADD|FSUB)(D|S)rr")>;
671 def KryoWrite_3cyc_XY_noRSV_100ln :
672         SchedWriteRes<[KryoUnitXY]> {
673         let Latency = 3; let NumMicroOps = 2;
674 }
675 def : InstRW<[KryoWrite_3cyc_XY_noRSV_100ln],
676         (instregex "(FADD|FSUB|FADDP)v2f32")>;
677 def KryoWrite_3cyc_XY_noRSV_29ln :
678         SchedWriteRes<[KryoUnitXY]> {
679         let Latency = 3; let NumMicroOps = 2;
680 }
681 def : InstRW<[KryoWrite_3cyc_XY_noRSV_29ln],
682         (instregex "FADDP(v2i32p|v2i64p)")>;
683 def KryoWrite_0cyc_XY_31ln :
684         SchedWriteRes<[KryoUnitXY]> {
685         let Latency = 0; let NumMicroOps = 1;
686 }
687 def : InstRW<[KryoWrite_0cyc_XY_31ln],
688         (instregex "FCCMPE?(D|S)rr")>;
689 def KryoWrite_2cyc_XY_noRSV_34ln :
690         SchedWriteRes<[KryoUnitXY]> {
691         let Latency = 2; let NumMicroOps = 2;
692 }
693 def : InstRW<[KryoWrite_2cyc_XY_noRSV_34ln],
694         (instregex "FCM(EQ|LE|GE|GT|LT)(v1i32|v1i64)rz")>;
695 def KryoWrite_2cyc_XY_XY_36ln :
696         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
697         let Latency = 2; let NumMicroOps = 2;
698 }
699 def : InstRW<[KryoWrite_2cyc_XY_XY_36ln],
700         (instregex "FCM(EQ|LE|GE|GT|LT)(v2i64|v4i32)rz")>;
701 def KryoWrite_2cyc_XY_noRSV_105ln :
702         SchedWriteRes<[KryoUnitXY]> {
703         let Latency = 2; let NumMicroOps = 2;
704 }
705 def : InstRW<[KryoWrite_2cyc_XY_noRSV_105ln],
706         (instregex "FCM(EQ|LE|GE|GT|LT)v2i32rz")>;
707 def KryoWrite_0cyc_XY_32ln :
708         SchedWriteRes<[KryoUnitXY]> {
709         let Latency = 0; let NumMicroOps = 1;
710 }
711 def : InstRW<[KryoWrite_0cyc_XY_32ln],
712         (instregex "FCMPE?(D|S)r(r|i)")>;
713 def KryoWrite_1cyc_XY_noRSV_49ln :
714         SchedWriteRes<[KryoUnitXY]> {
715         let Latency = 1; let NumMicroOps = 2;
716 }
717 def : InstRW<[KryoWrite_1cyc_XY_noRSV_49ln],
718         (instrs FCSELDrrr, FCSELSrrr)>;
719 def KryoWrite_4cyc_X_noRSV_41ln :
720         SchedWriteRes<[KryoUnitX]> {
721         let Latency = 4; let NumMicroOps = 2;
722 }
723 def : InstRW<[KryoWrite_4cyc_X_noRSV_41ln],
724         (instrs FCVTDHr, FCVTDSr, FCVTHDr, FCVTHSr, FCVTSDr, FCVTSHr)>;
725 def KryoWrite_4cyc_X_38ln :
726         SchedWriteRes<[KryoUnitX]> {
727         let Latency = 4; let NumMicroOps = 1;
728 }
729 def : InstRW<[KryoWrite_4cyc_X_38ln],
730         (instregex "FCVT(((A|N|M|P)(S|U)(S|U)|Z(S|U)_Int(S|U))(W|X)(D|S)ri?|Z(S|U)(d|s))$")>;
731 def KryoWrite_4cyc_X_noRSV_113ln :
732         SchedWriteRes<[KryoUnitX]> {
733         let Latency = 4; let NumMicroOps = 2;
734 }
735 def : InstRW<[KryoWrite_4cyc_X_noRSV_113ln],
736         (instregex "FCVT((A|N|M|P)(S|U)|Z(S|U)_Int)(v1i32|v1i64|v2f32)$")>;
737 def KryoWrite_4cyc_X_X_117ln :
738         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
739         let Latency = 4; let NumMicroOps = 2;
740 }
741 def : InstRW<[KryoWrite_4cyc_X_X_117ln],
742         (instregex "FCVT((A|N|M|P)(S|U)|Z(S|U)_Int)(v4f32|v2f64)$")>;
743 def KryoWrite_5cyc_X_X_XY_noRSV_119ln :
744         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitXY]> {
745         let Latency = 5; let NumMicroOps = 4;
746 }
747 def : InstRW<[KryoWrite_5cyc_X_X_XY_noRSV_119ln],
748         (instregex "FCVTX?N(v2f32|v4f32|v2i32|v4i16|v4i32|v8i16)$")>;
749 def KryoWrite_4cyc_X_X_116ln :
750         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
751         let Latency = 4; let NumMicroOps = 2;
752 }
753 def : InstRW<[KryoWrite_4cyc_X_X_116ln],
754         (instregex "FCVTL(v2i32|v4i16|v4i32|v8i16)$")>;
755 def KryoWrite_4cyc_X_noRSV_112ln :
756         SchedWriteRes<[KryoUnitX]> {
757         let Latency = 4; let NumMicroOps = 2;
758 }
759 def : InstRW<[KryoWrite_4cyc_X_noRSV_112ln],
760         (instrs FCVTXNv1i64)>;
761 def KryoWrite_4cyc_X_37ln :
762         SchedWriteRes<[KryoUnitX]> {
763         let Latency = 4; let NumMicroOps = 1;
764 }
765 def : InstRW<[KryoWrite_4cyc_X_37ln],
766         (instregex "FCVTZ(S|U)(S|U)(W|X)(D|S)ri?$")>;
767 def KryoWrite_4cyc_X_noRSV_111ln :
768         SchedWriteRes<[KryoUnitX]> {
769         let Latency = 4; let NumMicroOps = 2;
770 }
771 def : InstRW<[KryoWrite_4cyc_X_noRSV_111ln],
772         (instregex "FCVTZ(S|U)(v2f32|v1i32|v1i64|v2i32(_shift)?)$")>;
773 def KryoWrite_4cyc_X_X_115ln :
774         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
775         let Latency = 4; let NumMicroOps = 2;
776 }
777 def : InstRW<[KryoWrite_4cyc_X_X_115ln],
778         (instregex "FCVTZ(S|U)(v2f64|v4f32|(v2i64|v4i32)(_shift)?)$")>;
779 def KryoWrite_1cyc_XA_Y_noRSV_43ln :
780         SchedWriteRes<[KryoUnitXA, KryoUnitY]> {
781         let Latency = 1; let NumMicroOps = 3;
782 }
783 def : InstRW<[KryoWrite_1cyc_XA_Y_noRSV_43ln],
784         (instrs FDIVDrr, FDIVSrr)>;
785 def KryoWrite_1cyc_XA_Y_noRSV_121ln :
786         SchedWriteRes<[KryoUnitXA, KryoUnitY]> {
787         let Latency = 1; let NumMicroOps = 3;
788 }
789 def : InstRW<[KryoWrite_1cyc_XA_Y_noRSV_121ln],
790         (instrs FDIVv2f32)>;
791 def KryoWrite_1cyc_XA_Y_XA_Y_123ln :
792         SchedWriteRes<[KryoUnitXA, KryoUnitY, KryoUnitXA, KryoUnitY]> {
793         let Latency = 1; let NumMicroOps = 4;
794 }
795 def : InstRW<[KryoWrite_1cyc_XA_Y_XA_Y_123ln],
796         (instrs FDIVv2f64, FDIVv4f32)>;
797 def KryoWrite_5cyc_X_noRSV_55ln :
798         SchedWriteRes<[KryoUnitX]> {
799         let Latency = 5; let NumMicroOps = 2;
800 }
801 def : InstRW<[KryoWrite_5cyc_X_noRSV_55ln],
802         (instregex "FN?M(ADD|SUB)Srrr")>;
803 def KryoWrite_6cyc_X_noRSV_57ln :
804         SchedWriteRes<[KryoUnitX]> {
805         let Latency = 6; let NumMicroOps = 2;
806 }
807 def : InstRW<[KryoWrite_6cyc_X_noRSV_57ln],
808         (instregex "FN?M(ADD|SUB)Drrr")>;
809 def KryoWrite_5cyc_X_noRSV_51ln :
810         SchedWriteRes<[KryoUnitX]> {
811         let Latency = 5; let NumMicroOps = 2;
812 }
813 def : InstRW<[KryoWrite_5cyc_X_noRSV_51ln],
814         (instrs FMLAv2f32, FMLSv2f32, FMLAv1i32_indexed, FMLSv1i32_indexed)>;
815 def KryoWrite_5cyc_X_X_56ln :
816         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
817         let Latency = 5; let NumMicroOps = 2;
818 }
819 def : InstRW<[KryoWrite_5cyc_X_X_56ln],
820         (instrs FMLAv4f32, FMLSv4f32)>;
821 def KryoWrite_6cyc_X_X_61ln :
822         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
823         let Latency = 6; let NumMicroOps = 2;
824 }
825 def : InstRW<[KryoWrite_6cyc_X_X_61ln],
826         (instrs FMLAv2f64, FMLSv2f64)>;
827 def KryoWrite_5cyc_X_noRSV_128ln :
828         SchedWriteRes<[KryoUnitX]> {
829         let Latency = 5; let NumMicroOps = 2;
830 }
831 def : InstRW<[KryoWrite_5cyc_X_noRSV_128ln],
832         (instrs FMLAv2i32_indexed, FMLSv2i32_indexed)>;
833 def KryoWrite_5cyc_X_X_131ln :
834         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
835         let Latency = 5; let NumMicroOps = 2;
836 }
837 def : InstRW<[KryoWrite_5cyc_X_X_131ln],
838         (instrs FMLAv4i32_indexed, FMLSv4i32_indexed)>;
839 def KryoWrite_6cyc_X_X_134ln :
840         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
841         let Latency = 6; let NumMicroOps = 2;
842 }
843 def : InstRW<[KryoWrite_6cyc_X_X_134ln],
844         (instrs FMLAv2i64_indexed, FMLSv2i64_indexed)>;
845 def KryoWrite_6cyc_X_noRSV_60ln :
846         SchedWriteRes<[KryoUnitX]> {
847         let Latency = 6; let NumMicroOps = 2;
848 }
849 def : InstRW<[KryoWrite_6cyc_X_noRSV_60ln],
850         (instrs FMLAv1i64_indexed, FMLSv1i64_indexed, FMULv1i64_indexed, FMULXv1i64_indexed)>;
851 def KryoWrite_1cyc_XY_45ln :
852         SchedWriteRes<[KryoUnitXY]> {
853         let Latency = 1; let NumMicroOps = 1;
854 }
855 def : InstRW<[KryoWrite_1cyc_XY_45ln],
856         (instregex "FMOV(XDHigh|DXHigh|DX)r")>;
857 def KryoWrite_1cyc_XY_noRSV_47ln :
858         SchedWriteRes<[KryoUnitXY]> {
859         let Latency = 1; let NumMicroOps = 2;
860 }
861 def : InstRW<[KryoWrite_1cyc_XY_noRSV_47ln],
862         (instregex "FMOV(Di|Dr|Si|Sr|SWr|WSr|XDr|v.*_ns)")>;
863 def KryoWrite_5cyc_X_noRSV_53ln :
864         SchedWriteRes<[KryoUnitX]> {
865         let Latency = 5; let NumMicroOps = 2;
866 }
867 def : InstRW<[KryoWrite_5cyc_X_noRSV_53ln],
868         (instrs FMULv1i32_indexed, FMULXv1i32_indexed)>;
869 def KryoWrite_5cyc_X_noRSV_127ln :
870         SchedWriteRes<[KryoUnitX]> {
871         let Latency = 5; let NumMicroOps = 2;
872 }
873 def : InstRW<[KryoWrite_5cyc_X_noRSV_127ln],
874         (instrs FMULv2f32, FMULXv2f32, FMULv2i32_indexed, FMULXv2i32_indexed)>;
875 def KryoWrite_5cyc_X_X_130ln :
876         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
877         let Latency = 5; let NumMicroOps = 2;
878 }
879 def : InstRW<[KryoWrite_5cyc_X_X_130ln],
880         (instrs FMULv4f32, FMULXv4f32, FMULv4i32_indexed, FMULXv4i32_indexed)>;
881 def KryoWrite_6cyc_X_X_133ln :
882         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
883         let Latency = 6; let NumMicroOps = 2;
884 }
885 def : InstRW<[KryoWrite_6cyc_X_X_133ln],
886         (instrs FMULv2f64, FMULXv2f64, FMULv2i64_indexed, FMULXv2i64_indexed)>;
887 def KryoWrite_5cyc_X_noRSV_54ln :
888         SchedWriteRes<[KryoUnitX]> {
889         let Latency = 5; let NumMicroOps = 2;
890 }
891 def : InstRW<[KryoWrite_5cyc_X_noRSV_54ln],
892         (instrs FMULSrr, FNMULSrr, FMULX32)>;
893 def KryoWrite_6cyc_X_noRSV_59ln :
894         SchedWriteRes<[KryoUnitX]> {
895         let Latency = 6; let NumMicroOps = 2;
896 }
897 def : InstRW<[KryoWrite_6cyc_X_noRSV_59ln],
898         (instrs FMULDrr, FNMULDrr, FMULX64)>;
899 def KryoWrite_3cyc_XY_noRSV_28ln :
900         SchedWriteRes<[KryoUnitXY]> {
901         let Latency = 3; let NumMicroOps = 2;
902 }
903 def : InstRW<[KryoWrite_3cyc_XY_noRSV_28ln],
904         (instrs FRECPEv1i32, FRECPEv1i64, FRSQRTEv1i32, FRSQRTEv1i64 )>;
905 def KryoWrite_3cyc_XY_noRSV_99ln :
906         SchedWriteRes<[KryoUnitXY]> {
907         let Latency = 3; let NumMicroOps = 2;
908 }
909 def : InstRW<[KryoWrite_3cyc_XY_noRSV_99ln],
910         (instrs FRECPEv2f32, FRSQRTEv2f32)>;
911 def KryoWrite_3cyc_XY_XY_102ln :
912         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
913         let Latency = 3; let NumMicroOps = 2;
914 }
915 def : InstRW<[KryoWrite_3cyc_XY_XY_102ln],
916         (instrs FRECPEv2f64, FRECPEv4f32, FRSQRTEv2f64, FRSQRTEv4f32)>;
917 def KryoWrite_5cyc_X_noRSV_52ln :
918         SchedWriteRes<[KryoUnitX]> {
919         let Latency = 5; let NumMicroOps = 2;
920 }
921 def : InstRW<[KryoWrite_5cyc_X_noRSV_52ln],
922         (instrs FRECPS32, FRSQRTS32)>;
923 def KryoWrite_6cyc_X_noRSV_58ln :
924         SchedWriteRes<[KryoUnitX]> {
925         let Latency = 6; let NumMicroOps = 2;
926 }
927 def : InstRW<[KryoWrite_6cyc_X_noRSV_58ln],
928         (instrs FRECPS64, FRSQRTS64)>;
929 def KryoWrite_5cyc_X_noRSV_126ln :
930         SchedWriteRes<[KryoUnitX]> {
931         let Latency = 5; let NumMicroOps = 2;
932 }
933 def : InstRW<[KryoWrite_5cyc_X_noRSV_126ln],
934         (instrs FRECPSv2f32, FRSQRTSv2f32)>;
935 def KryoWrite_5cyc_X_X_129ln :
936         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
937         let Latency = 5; let NumMicroOps = 2;
938 }
939 def : InstRW<[KryoWrite_5cyc_X_X_129ln],
940         (instrs FRECPSv4f32, FRSQRTSv4f32)>;
941 def KryoWrite_6cyc_X_X_132ln :
942         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
943         let Latency = 6; let NumMicroOps = 2;
944 }
945 def : InstRW<[KryoWrite_6cyc_X_X_132ln],
946         (instrs FRECPSv2f64, FRSQRTSv2f64)>;
947 def KryoWrite_3cyc_XY_noRSV_50ln :
948         SchedWriteRes<[KryoUnitXY]> {
949         let Latency = 3; let NumMicroOps = 2;
950 }
951 def : InstRW<[KryoWrite_3cyc_XY_noRSV_50ln],
952         (instrs FRECPXv1i32, FRECPXv1i64)>;
953 def KryoWrite_2cyc_XY_noRSV_39ln :
954         SchedWriteRes<[KryoUnitXY]> {
955         let Latency = 2; let NumMicroOps = 2;
956 }
957 def : InstRW<[KryoWrite_2cyc_XY_noRSV_39ln],
958         (instregex "FRINT(A|I|M|N|P|X|Z)(S|D)r")>;
959 def KryoWrite_2cyc_XY_noRSV_108ln :
960         SchedWriteRes<[KryoUnitXY]> {
961         let Latency = 2; let NumMicroOps = 2;
962 }
963 def : InstRW<[KryoWrite_2cyc_XY_noRSV_108ln],
964         (instregex "FRINT(A|I|M|N|P|X|Z)v2f32")>;
965 def KryoWrite_2cyc_XY_XY_109ln :
966         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
967         let Latency = 2; let NumMicroOps = 2;
968 }
969 def : InstRW<[KryoWrite_2cyc_XY_XY_109ln],
970         (instregex "FRINT(A|I|M|N|P|X|Z)(v2f64|v4f32)")>;
971 def KryoWrite_1cyc_XA_Y_noRSV_42ln :
972         SchedWriteRes<[KryoUnitXA, KryoUnitY]> {
973         let Latency = 1; let NumMicroOps = 3;
974 }
975 def : InstRW<[KryoWrite_1cyc_XA_Y_noRSV_42ln],
976         (instregex "FSQRT(S|D)r")>;
977 def KryoWrite_1cyc_XA_Y_noRSV_120ln :
978         SchedWriteRes<[KryoUnitXA, KryoUnitY]> {
979         let Latency = 1; let NumMicroOps = 3;
980 }
981 def : InstRW<[KryoWrite_1cyc_XA_Y_noRSV_120ln],
982         (instregex "FSQRTv2f32")>;
983 def KryoWrite_1cyc_XA_Y_XA_Y_122ln :
984         SchedWriteRes<[KryoUnitXA, KryoUnitY, KryoUnitXA, KryoUnitY]> {
985         let Latency = 1; let NumMicroOps = 4;
986 }
987 def : InstRW<[KryoWrite_1cyc_XA_Y_XA_Y_122ln],
988         (instregex "FSQRT(v2f64|v4f32)")>;
989 def KryoWrite_1cyc_X_201ln :
990         SchedWriteRes<[KryoUnitX]> {
991         let Latency = 1; let NumMicroOps = 1;
992 }
993 def : InstRW<[KryoWrite_1cyc_X_201ln],
994         (instregex "INSv.*")>;
995 def KryoWrite_3cyc_LS_255ln :
996         SchedWriteRes<[KryoUnitLS]> {
997         let Latency = 3; let NumMicroOps = 1;
998 }
999 def : InstRW<[KryoWrite_3cyc_LS_255ln],
1000         (instregex "LD1(One(v16b|v8h|v4s|v2d)|i64)$")>;
1001 def KryoWrite_4cyc_LS_X_270ln :
1002         SchedWriteRes<[KryoUnitLS, KryoUnitX]> {
1003         let Latency = 4; let NumMicroOps = 2;
1004 }
1005 def : InstRW<[KryoWrite_4cyc_LS_X_270ln],
1006         (instregex "LD1(i8|i16|i32)$")>;
1007 def KryoWrite_3cyc_LS_noRSV_285ln :
1008         SchedWriteRes<[KryoUnitLS]> {
1009         let Latency = 3; let NumMicroOps = 2;
1010 }
1011 def : InstRW<[KryoWrite_3cyc_LS_noRSV_285ln],
1012         (instregex "LD1One(v8b|v4h|v2s|v1d)$")>;
1013 def KryoWrite_3cyc_LS_XY_289ln :
1014         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1015         let Latency = 3; let NumMicroOps = 2;
1016 }
1017 def : InstRW<[KryoWrite_3cyc_LS_XY_289ln, WriteAdr],
1018         (instregex "LD1(One(v16b|v8h|v4s|v2d)|i64)_POST$")>;
1019 def KryoWrite_4cyc_LS_XY_X_298ln :
1020         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitX]> {
1021         let Latency = 4; let NumMicroOps = 3;
1022 }
1023 def : InstRW<[KryoWrite_4cyc_LS_XY_X_298ln, WriteAdr],
1024         (instregex "LD1(i8|i16|i32)_POST$")>;
1025 def KryoWrite_3cyc_LS_LS_LS_308ln :
1026         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
1027         let Latency = 3; let NumMicroOps = 3;
1028 }
1029 def : InstRW<[KryoWrite_3cyc_LS_LS_LS_308ln],
1030         (instregex "LD1Three(v16b|v8h|v4s|v2d)$")>;
1031 def KryoWrite_3cyc_LS_XY_noRSV_317ln :
1032         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1033         let Latency = 3; let NumMicroOps = 3;
1034 }
1035 def : InstRW<[KryoWrite_3cyc_LS_XY_noRSV_317ln, WriteAdr],
1036         (instregex "LD1One(v8b|v4h|v2s|v1d)_POST$")>;
1037 def KryoWrite_3cyc_LS_LS_LS_LS_328ln :
1038         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
1039         let Latency = 3; let NumMicroOps = 4;
1040 }
1041 def : InstRW<[KryoWrite_3cyc_LS_LS_LS_LS_328ln, WriteAdr],
1042         (instregex "LD1Four(v16b|v8h|v4s|v2d)_POST$")>;
1043 def KryoWrite_3cyc_LS_XY_LS_LS_332ln :
1044         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitLS]> {
1045         let Latency = 3; let NumMicroOps = 4;
1046 }
1047 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_LS_332ln, WriteAdr],
1048         (instregex "LD1Three(v16b|v8h|v4s|v2d)_POST$")>;
1049 def KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_348ln :
1050         SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
1051         let Latency = 3; let NumMicroOps = 5;
1052 }
1053 def : InstRW<[KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_348ln],
1054         (instregex "LD1Three(v8b|v4h|v2s|v1d)$")>;
1055 def KryoWrite_3cyc_LS_XY_LS_LS_LS_351ln :
1056         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
1057         let Latency = 3; let NumMicroOps = 5;
1058 }
1059 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_LS_LS_351ln],
1060         (instregex "LD1Four(v16b|v8h|v4s|v2d)$")>;
1061 def KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_noRSV_358ln :
1062         SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
1063         let Latency = 3; let NumMicroOps = 6;
1064 }
1065 def : InstRW<[KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_noRSV_358ln],
1066         (instregex "LD1Four(v8b|v4h|v2s|v1d)$")>;
1067 def KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_360ln :
1068         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
1069         let Latency = 3; let NumMicroOps = 6;
1070 }
1071 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_360ln, WriteAdr],
1072         (instregex "LD1Three(v8b|v4h|v2s|v1d)_POST$")>;
1073 def KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_noRSV_368ln :
1074         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
1075         let Latency = 3; let NumMicroOps = 7;
1076 }
1077 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_noRSV_368ln, WriteAdr],
1078         (instregex "LD1Four(v8b|v4h|v2s|v1d)_POST$")>;
1079 def KryoWrite_3cyc_LS_LS_281ln :
1080         SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
1081         let Latency = 3; let NumMicroOps = 2;
1082 }
1083 def : InstRW<[KryoWrite_3cyc_LS_LS_281ln],
1084         (instregex "LD(1|2)Two(v16b|v8h|v4s|v2d)$")>;
1085 def KryoWrite_3cyc_LS_noRSV_noRSV_311ln :
1086         SchedWriteRes<[KryoUnitLS]> {
1087         let Latency = 3; let NumMicroOps = 3;
1088 }
1089 def : InstRW<[KryoWrite_3cyc_LS_noRSV_noRSV_311ln],
1090         (instregex "LD(1|2)Two(v8b|v4h|v2s|v1d)$")>;
1091 def KryoWrite_3cyc_LS_XY_LS_313ln :
1092         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
1093         let Latency = 3; let NumMicroOps = 3;
1094 }
1095 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_313ln, WriteAdr],
1096         (instregex "LD(1|2)Two(v16b|v8h|v4s|v2d)_POST$")>;
1097 def KryoWrite_3cyc_LS_XY_noRSV_noRSV_334ln :
1098         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1099         let Latency = 3; let NumMicroOps = 4;
1100 }
1101 def : InstRW<[KryoWrite_3cyc_LS_XY_noRSV_noRSV_334ln, WriteAdr],
1102         (instregex "LD(1|2)Two(v8b|v4h|v2s|v1d)_POST$")>;
1103 def KryoWrite_3cyc_LS_256ln :
1104         SchedWriteRes<[KryoUnitLS]> {
1105         let Latency = 3; let NumMicroOps = 1;
1106 }
1107 def : InstRW<[KryoWrite_3cyc_LS_256ln],
1108         (instregex "LD1R(v16b|v8h|v4s|v2d)$")>;
1109 def KryoWrite_3cyc_LS_noRSV_286ln :
1110         SchedWriteRes<[KryoUnitLS]> {
1111         let Latency = 3; let NumMicroOps = 2;
1112 }
1113 def : InstRW<[KryoWrite_3cyc_LS_noRSV_286ln],
1114         (instregex "LD1R(v8b|v4h|v2s|v1d)$")>;
1115 def KryoWrite_3cyc_LS_XY_290ln :
1116         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1117         let Latency = 3; let NumMicroOps = 2;
1118 }
1119 def : InstRW<[KryoWrite_3cyc_LS_XY_290ln, WriteAdr],
1120         (instregex "LD1R(v16b|v8h|v4s|v2d)_POST$")>;
1121 def KryoWrite_3cyc_LS_XY_noRSV_318ln :
1122         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1123         let Latency = 3; let NumMicroOps = 3;
1124 }
1125 def : InstRW<[KryoWrite_3cyc_LS_XY_noRSV_318ln, WriteAdr],
1126         (instregex "LD1R(v8b|v4h|v2s|v1d)_POST$")>;
1127 def KryoWrite_3cyc_LS_257ln :
1128         SchedWriteRes<[KryoUnitLS]> {
1129         let Latency = 3; let NumMicroOps = 1;
1130 }
1131 def : InstRW<[KryoWrite_3cyc_LS_257ln],
1132         (instregex "LD2i64$")>;
1133 def KryoWrite_3cyc_LS_XY_291ln :
1134         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1135         let Latency = 3; let NumMicroOps = 2;
1136 }
1137 def : InstRW<[KryoWrite_3cyc_LS_XY_291ln, WriteAdr],
1138         (instregex "LD2i64_POST$")>;
1139 def KryoWrite_4cyc_LS_X_X_296ln :
1140         SchedWriteRes<[KryoUnitLS, KryoUnitX, KryoUnitX]> {
1141         let Latency = 4; let NumMicroOps = 3;
1142 }
1143 def : InstRW<[KryoWrite_4cyc_LS_X_X_296ln],
1144         (instregex "LD2(i8|i16|i32)$")>;
1145 def KryoWrite_4cyc_LS_XY_X_X_321ln :
1146         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitX, KryoUnitX]> {
1147         let Latency = 4; let NumMicroOps = 4;
1148 }
1149 def : InstRW<[KryoWrite_4cyc_LS_XY_X_X_321ln, WriteAdr],
1150         (instregex "LD2(i8|i16|i32)_POST$")>;
1151 def KryoWrite_3cyc_LS_LS_282ln :
1152         SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
1153         let Latency = 3; let NumMicroOps = 2;
1154 }
1155 def : InstRW<[KryoWrite_3cyc_LS_LS_282ln],
1156         (instregex "LD2R(v16b|v8h|v4s|v2d)$")>;
1157 def KryoWrite_3cyc_LS_noRSV_noRSV_312ln :
1158         SchedWriteRes<[KryoUnitLS]> {
1159         let Latency = 3; let NumMicroOps = 3;
1160 }
1161 def : InstRW<[KryoWrite_3cyc_LS_noRSV_noRSV_312ln],
1162         (instregex "LD2R(v8b|v4h|v2s|v1d)$")>;
1163 def KryoWrite_3cyc_LS_XY_LS_314ln :
1164         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
1165         let Latency = 3; let NumMicroOps = 3;
1166 }
1167 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_314ln, WriteAdr],
1168         (instregex "LD2R(v16b|v8h|v4s|v2d)_POST$")>;
1169 def KryoWrite_3cyc_LS_XY_noRSV_noRSV_335ln :
1170         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1171         let Latency = 3; let NumMicroOps = 4;
1172 }
1173 def : InstRW<[KryoWrite_3cyc_LS_XY_noRSV_noRSV_335ln, WriteAdr],
1174         (instregex "LD2R(v8b|v4h|v2s|v1d)_POST$")>;
1175 def KryoWrite_3cyc_LS_LS_283ln :
1176         SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
1177         let Latency = 3; let NumMicroOps = 2;
1178 }
1179 def : InstRW<[KryoWrite_3cyc_LS_LS_283ln],
1180         (instregex "LD3i64$")>;
1181 def KryoWrite_3cyc_LS_LS_LS_309ln :
1182         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
1183         let Latency = 3; let NumMicroOps = 3;
1184 }
1185 def : InstRW<[KryoWrite_3cyc_LS_LS_LS_309ln],
1186         (instregex "LD3Threev2d$")>;
1187 def KryoWrite_3cyc_LS_XY_LS_315ln :
1188         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
1189         let Latency = 3; let NumMicroOps = 3;
1190 }
1191 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_315ln, WriteAdr],
1192         (instregex "LD3i64_POST$")>;
1193 def KryoWrite_4cyc_LS_X_X_X_320ln :
1194         SchedWriteRes<[KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX]> {
1195         let Latency = 4; let NumMicroOps = 4;
1196 }
1197 def : InstRW<[KryoWrite_4cyc_LS_X_X_X_320ln],
1198         (instregex "LD3(i8|i16|i32)$")>;
1199 def KryoWrite_3cyc_LS_XY_LS_LS_331ln :
1200         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitLS]> {
1201         let Latency = 3; let NumMicroOps = 4;
1202 }
1203 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_LS_331ln, WriteAdr],
1204         (instregex "LD3Threev2d_POST$")>;
1205 def KryoWrite_4cyc_LS_XY_X_X_X_338ln :
1206         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitX, KryoUnitX, KryoUnitX]> {
1207         let Latency = 4; let NumMicroOps = 5;
1208 }
1209 def : InstRW<[KryoWrite_4cyc_LS_XY_X_X_X_338ln, WriteAdr],
1210         (instregex "LD3(i8|i16|i32)_POST$")>;
1211 def KryoWrite_4cyc_LS_LS_X_X_X_noRSV_noRSV_noRSV_373ln :
1212         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX]> {
1213         let Latency = 4; let NumMicroOps = 8;
1214 }
1215 def : InstRW<[KryoWrite_4cyc_LS_LS_X_X_X_noRSV_noRSV_noRSV_373ln],
1216         (instregex "LD3Three(v8b|v4h|v2s)$")>;
1217 def KryoWrite_4cyc_LS_XY_LS_X_X_X_noRSV_noRSV_noRSV_380ln :
1218         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitX, KryoUnitX,
1219                    KryoUnitX]> {
1220         let Latency = 4; let NumMicroOps = 9;
1221 }
1222 def : InstRW<[KryoWrite_4cyc_LS_XY_LS_X_X_X_noRSV_noRSV_noRSV_380ln, WriteAdr],
1223         (instregex "LD3Three(v8b|v4h|v2s)_POST$")>;
1224 def KryoWrite_4cyc_LS_LS_X_X_X_LS_LS_X_X_X_381ln :
1225         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX,
1226                    KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX]> {
1227         let Latency = 4; let NumMicroOps = 10;
1228 }
1229 def : InstRW<[KryoWrite_4cyc_LS_LS_X_X_X_LS_LS_X_X_X_381ln],
1230         (instregex "LD3Three(v16b|v8h|v4s)$")>;
1231 def KryoWrite_4cyc_LS_LS_X_X_X_LS_XY_LS_X_X_X_383ln :
1232         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX,
1233                    KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitX, KryoUnitX,
1234                    KryoUnitX]> {
1235         let Latency = 4; let NumMicroOps = 11;
1236 }
1237 def : InstRW<[KryoWrite_4cyc_LS_LS_X_X_X_LS_XY_LS_X_X_X_383ln, WriteAdr],
1238         (instregex "LD3Three(v16b|v8h|v4s)_POST$")>;
1239 def KryoWrite_3cyc_LS_LS_LS_310ln :
1240         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
1241         let Latency = 3; let NumMicroOps = 3;
1242 }
1243 def : InstRW<[KryoWrite_3cyc_LS_LS_LS_310ln],
1244         (instregex "LD3R(v16b|v8h|v4s|v2d)$")>;
1245 def KryoWrite_3cyc_LS_XY_LS_LS_333ln :
1246         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitLS]> {
1247         let Latency = 3; let NumMicroOps = 4;
1248 }
1249 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_LS_333ln, WriteAdr],
1250         (instregex "LD3R(v16b|v8h|v4s|v2d)_POST$")>;
1251 def KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_349ln :
1252         SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
1253         let Latency = 3; let NumMicroOps = 5;
1254 }
1255 def : InstRW<[KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_349ln],
1256         (instregex "LD3R(v8b|v4h|v2s|v1d)$")>;
1257 def KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_361ln :
1258         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
1259         let Latency = 3; let NumMicroOps = 6;
1260 }
1261 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_361ln, WriteAdr],
1262         (instregex "LD3R(v8b|v4h|v2s|v1d)_POST$")>;
1263 def KryoWrite_3cyc_LS_LS_284ln :
1264         SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
1265         let Latency = 3; let NumMicroOps = 2;
1266 }
1267 def : InstRW<[KryoWrite_3cyc_LS_LS_284ln],
1268         (instregex "LD4i64$")>;
1269 def KryoWrite_3cyc_LS_XY_LS_316ln :
1270         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
1271         let Latency = 3; let NumMicroOps = 3;
1272 }
1273 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_316ln, WriteAdr],
1274         (instregex "LD4i64_POST$")>;
1275 def KryoWrite_3cyc_LS_LS_LS_LS_329ln :
1276         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
1277         let Latency = 3; let NumMicroOps = 4;
1278 }
1279 def : InstRW<[KryoWrite_3cyc_LS_LS_LS_LS_329ln],
1280         (instregex "LD4Four(v2d)$")>;
1281 def KryoWrite_4cyc_LS_X_X_X_X_337ln :
1282         SchedWriteRes<[KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX]> {
1283         let Latency = 4; let NumMicroOps = 5;
1284 }
1285 def : InstRW<[KryoWrite_4cyc_LS_X_X_X_X_337ln],
1286         (instregex "LD4(i8|i16|i32)$")>;
1287 def KryoWrite_3cyc_LS_XY_LS_LS_LS_350ln :
1288         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
1289         let Latency = 3; let NumMicroOps = 5;
1290 }
1291 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_LS_LS_350ln, WriteAdr],
1292         (instregex "LD4Four(v2d)_POST$")>;
1293 def KryoWrite_4cyc_LS_XY_X_X_X_X_355ln :
1294         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitX, KryoUnitX, KryoUnitX,
1295                    KryoUnitX]> {
1296         let Latency = 4; let NumMicroOps = 6;
1297 }
1298 def : InstRW<[KryoWrite_4cyc_LS_XY_X_X_X_X_355ln, WriteAdr],
1299         (instregex "LD4(i8|i16|i32)_POST$")>;
1300 def KryoWrite_4cyc_LS_LS_X_X_X_X_noRSV_noRSV_noRSV_noRSV_382ln :
1301         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX,
1302                    KryoUnitX]> {
1303         let Latency = 4; let NumMicroOps = 10;
1304 }
1305 def : InstRW<[KryoWrite_4cyc_LS_LS_X_X_X_X_noRSV_noRSV_noRSV_noRSV_382ln],
1306         (instregex "LD4Four(v8b|v4h|v2s)$")>;
1307 def KryoWrite_4cyc_LS_XY_LS_X_X_X_X_noRSV_noRSV_noRSV_noRSV_384ln :
1308         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitX, KryoUnitX,
1309                    KryoUnitX, KryoUnitX]> {
1310         let Latency = 4; let NumMicroOps = 11;
1311 }
1312 def : InstRW<[KryoWrite_4cyc_LS_XY_LS_X_X_X_X_noRSV_noRSV_noRSV_noRSV_384ln, WriteAdr],
1313         (instregex "LD4Four(v8b|v4h|v2s)_POST$")>;
1314 def KryoWrite_4cyc_LS_LS_X_X_X_X_LS_LS_X_X_X_X_386ln :
1315         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX,
1316                    KryoUnitX, KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX,
1317                    KryoUnitX, KryoUnitX]> {
1318         let Latency = 4; let NumMicroOps = 12;
1319 }
1320 def : InstRW<[KryoWrite_4cyc_LS_LS_X_X_X_X_LS_LS_X_X_X_X_386ln],
1321         (instregex "LD4Four(v16b|v8h|v4s)$")>;
1322 def KryoWrite_4cyc_LS_LS_X_X_X_X_LS_XY_LS_X_X_X_X_389ln :
1323         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX,
1324                    KryoUnitX, KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitX,
1325                    KryoUnitX, KryoUnitX, KryoUnitX]> {
1326         let Latency = 4; let NumMicroOps = 13;
1327 }
1328 def : InstRW<[KryoWrite_4cyc_LS_LS_X_X_X_X_LS_XY_LS_X_X_X_X_389ln, WriteAdr],
1329         (instregex "LD4Four(v16b|v8h|v4s)_POST$")>;
1330 def KryoWrite_3cyc_LS_LS_LS_LS_330ln :
1331         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
1332         let Latency = 3; let NumMicroOps = 4;
1333 }
1334 def : InstRW<[KryoWrite_3cyc_LS_LS_LS_LS_330ln],
1335         (instregex "LD4R(v16b|v8h|v4s|v2d)$")>;
1336 def KryoWrite_3cyc_LS_XY_LS_LS_LS_352ln :
1337         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
1338         let Latency = 3; let NumMicroOps = 5;
1339 }
1340 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_LS_LS_352ln, WriteAdr],
1341         (instregex "LD4R(v16b|v8h|v4s|v2d)_POST$")>;
1342 def KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_noRSV_359ln :
1343         SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
1344         let Latency = 3; let NumMicroOps = 6;
1345 }
1346 def : InstRW<[KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_noRSV_359ln],
1347         (instregex "LD4R(v8b|v4h|v2s|v1d)$")>;
1348 def KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_noRSV_369ln :
1349         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
1350         let Latency = 3; let NumMicroOps = 7;
1351 }
1352 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_noRSV_369ln, WriteAdr],
1353         (instregex "LD4R(v8b|v4h|v2s|v1d)_POST$")>;
1354 def KryoWrite_3cyc_LS_LS_400ln :
1355         SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
1356         let Latency = 3; let NumMicroOps = 2;
1357 }
1358 def : InstRW<[KryoWrite_3cyc_LS_LS_400ln],
1359         (instregex "(LDAX?R(B|H|W|X)|LDAXP(W|X))")>;
1360 def KryoWrite_3cyc_LS_LS_401ln :
1361         SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
1362         let Latency = 3; let NumMicroOps = 2;
1363 }
1364 def : InstRW<[KryoWrite_3cyc_LS_LS_401ln, WriteLDHi],
1365         (instrs LDNPQi)>;
1366 def KryoWrite_3cyc_LS_noRSV_noRSV_408ln :
1367         SchedWriteRes<[KryoUnitLS]> {
1368         let Latency = 3; let NumMicroOps = 3;
1369 }
1370 def : InstRW<[KryoWrite_3cyc_LS_noRSV_noRSV_408ln, WriteLDHi],
1371         (instrs LDNPDi, LDNPSi)>;
1372 def KryoWrite_3cyc_LS_394ln :
1373         SchedWriteRes<[KryoUnitLS]> {
1374         let Latency = 3; let NumMicroOps = 1;
1375 }
1376 def : InstRW<[KryoWrite_3cyc_LS_394ln, WriteLDHi],
1377         (instrs LDNPWi, LDNPXi)>;
1378 def KryoWrite_3cyc_LS_LS_402ln :
1379         SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
1380         let Latency = 3; let NumMicroOps = 2;
1381 }
1382 def : InstRW<[KryoWrite_3cyc_LS_LS_402ln, WriteLDHi],
1383         (instrs LDPQi)>;
1384 def KryoWrite_3cyc_LS_noRSV_noRSV_409ln :
1385         SchedWriteRes<[KryoUnitLS]> {
1386         let Latency = 3; let NumMicroOps = 3;
1387 }
1388 def : InstRW<[KryoWrite_3cyc_LS_noRSV_noRSV_409ln, WriteLDHi],
1389         (instrs LDPDi, LDPSi)>;
1390 def KryoWrite_3cyc_LS_XY_LS_410ln :
1391         SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
1392         let Latency = 3; let NumMicroOps = 3;
1393 }
1394 def : InstRW<[KryoWrite_3cyc_LS_XY_LS_410ln, WriteLDHi, WriteAdr],
1395         (instregex "LDPQ(post|pre)")>;
1396 def KryoWrite_3cyc_LS_XY_noRSV_noRSV_411ln :
1397         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1398         let Latency = 3; let NumMicroOps = 4;
1399 }
1400 def : InstRW<[KryoWrite_3cyc_LS_XY_noRSV_noRSV_411ln, WriteLDHi, WriteAdr],
1401         (instregex "LDP(D|S)(post|pre)")>;
1402 def KryoWrite_3cyc_LS_393ln :
1403         SchedWriteRes<[KryoUnitLS]> {
1404         let Latency = 3; let NumMicroOps = 1;
1405 }
1406 def : InstRW<[KryoWrite_3cyc_LS_393ln, WriteLDHi],
1407         (instrs LDPWi, LDPXi)>;
1408 def KryoWrite_3cyc_LS_XY_403ln :
1409         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1410         let Latency = 3; let NumMicroOps = 2;
1411 }
1412 def : InstRW<[KryoWrite_3cyc_LS_XY_403ln, WriteLDHi, WriteAdr],
1413         (instregex "LDP(W|X)(post|pre)")>;
1414 def KryoWrite_4cyc_LS_395ln :
1415         SchedWriteRes<[KryoUnitLS]> {
1416         let Latency = 4; let NumMicroOps = 1;
1417 }
1418 def : InstRW<[KryoWrite_4cyc_LS_395ln, WriteLDHi],
1419         (instrs LDPSWi)>;
1420 def KryoWrite_4cyc_LS_XY_405ln :
1421         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1422         let Latency = 4; let NumMicroOps = 2;
1423 }
1424 def : InstRW<[KryoWrite_4cyc_LS_XY_405ln, WriteLDHi, WriteAdr],
1425         (instrs LDPSWpost, LDPSWpre)>;
1426 def KryoWrite_3cyc_LS_264ln :
1427         SchedWriteRes<[KryoUnitLS]> {
1428         let Latency = 3; let NumMicroOps = 1;
1429 }
1430 def : InstRW<[KryoWrite_3cyc_LS_264ln],
1431         (instrs LDRQui, LDRQl)>;
1432 def KryoWrite_4cyc_X_LS_271ln :
1433         SchedWriteRes<[KryoUnitX, KryoUnitLS]> {
1434         let Latency = 4; let NumMicroOps = 2;
1435 }
1436 def : InstRW<[KryoWrite_4cyc_X_LS_271ln],
1437         (instrs LDRQroW, LDRQroX)>;
1438 def KryoWrite_3cyc_LS_noRSV_287ln :
1439         SchedWriteRes<[KryoUnitLS]> {
1440         let Latency = 3; let NumMicroOps = 2;
1441 }
1442 def : InstRW<[KryoWrite_3cyc_LS_noRSV_287ln],
1443         (instregex "LDR((D|S)l|(D|S|H|B)ui)")>;
1444 def KryoWrite_3cyc_LS_XY_293ln :
1445         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1446         let Latency = 3; let NumMicroOps = 2;
1447 }
1448 def : InstRW<[KryoWrite_3cyc_LS_XY_293ln, WriteAdr],
1449         (instrs LDRQpost, LDRQpre)>;
1450 def KryoWrite_4cyc_X_LS_noRSV_297ln :
1451         SchedWriteRes<[KryoUnitX, KryoUnitLS]> {
1452         let Latency = 4; let NumMicroOps = 3;
1453 }
1454 def : InstRW<[KryoWrite_4cyc_X_LS_noRSV_297ln],
1455         (instregex "LDR(D|S|H|B)ro(W|X)")>;
1456 def KryoWrite_3cyc_LS_XY_noRSV_319ln :
1457         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1458         let Latency = 3; let NumMicroOps = 3;
1459 }
1460 def : InstRW<[KryoWrite_3cyc_LS_XY_noRSV_319ln, WriteAdr],
1461         (instregex "LDR(D|S|H|B)(post|pre)")>;
1462 def KryoWrite_3cyc_LS_261ln :
1463         SchedWriteRes<[KryoUnitLS]> {
1464         let Latency = 3; let NumMicroOps = 1;
1465 }
1466 def : InstRW<[KryoWrite_3cyc_LS_261ln],
1467         (instregex "LDR(BB|HH|W|X)ui")>;
1468 def KryoWrite_3cyc_LS_XY_292ln :
1469         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1470         let Latency = 3; let NumMicroOps = 2;
1471 }
1472 def : InstRW<[KryoWrite_3cyc_LS_XY_292ln, WriteAdr],
1473         (instregex "LDR(BB|HH|W|X)(post|pre)")>;
1474 def KryoWrite_4cyc_X_LS_272ln :
1475         SchedWriteRes<[KryoUnitX, KryoUnitLS]> {
1476         let Latency = 4; let NumMicroOps = 2;
1477 }
1478 def : InstRW<[KryoWrite_4cyc_X_LS_272ln],
1479         (instregex "(LDR(BB|HH|W|X)ro(W|X)|PRFMro(W|X))")>;
1480 def KryoWrite_3cyc_LS_262ln :
1481         SchedWriteRes<[KryoUnitLS]> {
1482         let Latency = 3; let NumMicroOps = 1;
1483 }
1484 def : InstRW<[KryoWrite_3cyc_LS_262ln],
1485         (instrs LDRWl, LDRXl)>;
1486 def KryoWrite_4cyc_LS_268ln :
1487         SchedWriteRes<[KryoUnitLS]> {
1488         let Latency = 4; let NumMicroOps = 1;
1489 }
1490 def : InstRW<[KryoWrite_4cyc_LS_268ln],
1491         (instregex "LDRS(BW|BX|HW|HX|W)ui")>;
1492 def KryoWrite_5cyc_X_LS_273ln :
1493         SchedWriteRes<[KryoUnitX, KryoUnitLS]> {
1494         let Latency = 5; let NumMicroOps = 2;
1495 }
1496 def : InstRW<[KryoWrite_5cyc_X_LS_273ln],
1497         (instregex "LDRS(BW|BX|HW|HX|W)ro(W|X)")>;
1498 def KryoWrite_4cyc_LS_XY_294ln :
1499         SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
1500         let Latency = 4; let NumMicroOps = 2;
1501 }
1502 def : InstRW<[KryoWrite_4cyc_LS_XY_294ln, WriteAdr],
1503         (instregex "LDRS(BW|BX|HW|HX|W)(post|pre)")>;
1504 def KryoWrite_4cyc_LS_269ln :
1505         SchedWriteRes<[KryoUnitLS]> {
1506         let Latency = 4; let NumMicroOps = 1;
1507 }
1508 def : InstRW<[KryoWrite_4cyc_LS_269ln],
1509         (instrs LDRSWl)>;
1510 def KryoWrite_3cyc_LS_260ln :
1511         SchedWriteRes<[KryoUnitLS]> {
1512         let Latency = 3; let NumMicroOps = 1;
1513 }
1514 def : InstRW<[KryoWrite_3cyc_LS_260ln],
1515         (instregex "LDTR(B|H|W|X)i")>;
1516 def KryoWrite_4cyc_LS_267ln :
1517         SchedWriteRes<[KryoUnitLS]> {
1518         let Latency = 4; let NumMicroOps = 1;
1519 }
1520 def : InstRW<[KryoWrite_4cyc_LS_267ln],
1521         (instregex "LDTRS(BW|BX|HW|HX|W)i")>;
1522 def KryoWrite_3cyc_LS_263ln :
1523         SchedWriteRes<[KryoUnitLS]> {
1524         let Latency = 3; let NumMicroOps = 1;
1525 }
1526 def : InstRW<[KryoWrite_3cyc_LS_263ln],
1527         (instrs LDURQi)>;
1528 def KryoWrite_3cyc_LS_noRSV_288ln :
1529         SchedWriteRes<[KryoUnitLS]> {
1530         let Latency = 3; let NumMicroOps = 2;
1531 }
1532 def : InstRW<[KryoWrite_3cyc_LS_noRSV_288ln],
1533         (instregex "LDUR(D|S|H|B)i")>;
1534 def KryoWrite_3cyc_LS_259ln :
1535         SchedWriteRes<[KryoUnitLS]> {
1536         let Latency = 3; let NumMicroOps = 1;
1537 }
1538 def : InstRW<[KryoWrite_3cyc_LS_259ln],
1539         (instregex "LDUR(BB|HH|W|X)i")>;
1540 def KryoWrite_4cyc_LS_266ln :
1541         SchedWriteRes<[KryoUnitLS]> {
1542         let Latency = 4; let NumMicroOps = 1;
1543 }
1544 def : InstRW<[KryoWrite_4cyc_LS_266ln],
1545         (instregex "LDURS(B|H)?(W|X)i")>;
1546 def KryoWrite_3cyc_LS_258ln :
1547         SchedWriteRes<[KryoUnitLS]> {
1548         let Latency = 3; let NumMicroOps = 1;
1549 }
1550 def : InstRW<[KryoWrite_3cyc_LS_258ln],
1551         (instregex "LDXP(W|X)")>;
1552 def KryoWrite_3cyc_LS_258_1ln :
1553         SchedWriteRes<[KryoUnitLS]> {
1554         let Latency = 3; let NumMicroOps = 1;
1555 }
1556 def : InstRW<[KryoWrite_3cyc_LS_258_1ln],
1557         (instregex "LDXR(B|H|W|X)")>;
1558 def KryoWrite_2cyc_XY_XY_137ln :
1559         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
1560         let Latency = 2; let NumMicroOps = 2;
1561 }
1562 def : InstRW<[KryoWrite_2cyc_XY_XY_137ln],
1563         (instrs LSLVWr, LSLVXr)>;
1564 def KryoWrite_1cyc_XY_135ln :
1565         SchedWriteRes<[KryoUnitXY]> {
1566         let Latency = 1; let NumMicroOps = 1;
1567 }
1568 def : InstRW<[KryoWrite_1cyc_XY_135ln],
1569         (instregex "(LS|AS|RO)RV(W|X)r")>;
1570 def KryoWrite_4cyc_X_84ln :
1571         SchedWriteRes<[KryoUnitX]> {
1572         let Latency = 4; let NumMicroOps = 1;
1573 }
1574 def : InstRW<[KryoWrite_4cyc_X_84ln],
1575         (instrs MADDWrrr, MSUBWrrr)>;
1576 def KryoWrite_5cyc_X_85ln :
1577         SchedWriteRes<[KryoUnitX]> {
1578         let Latency = 5; let NumMicroOps = 1;
1579 }
1580 def : InstRW<[KryoWrite_5cyc_X_85ln],
1581         (instrs MADDXrrr, MSUBXrrr)>;
1582 def KryoWrite_4cyc_X_noRSV_188ln :
1583         SchedWriteRes<[KryoUnitX]> {
1584         let Latency = 4; let NumMicroOps = 2;
1585 }
1586 def : InstRW<[KryoWrite_4cyc_X_noRSV_188ln],
1587         (instregex "(MLA|MLS|MUL)(v8i8|v4i16|v2i32)(_indexed)?")>;
1588 def KryoWrite_4cyc_X_X_192ln :
1589         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
1590         let Latency = 4; let NumMicroOps = 2;
1591 }
1592 def : InstRW<[KryoWrite_4cyc_X_X_192ln],
1593         (instregex "(MLA|MLS|MUL|SQR?DMULH)(v16i8|v8i16|v4i32)(_indexed)?")>;
1594 def KryoWrite_1cyc_XY_noRSV_198ln :
1595         SchedWriteRes<[KryoUnitXY]> {
1596         let Latency = 1; let NumMicroOps = 2;
1597 }
1598 def : InstRW<[KryoWrite_1cyc_XY_noRSV_198ln],
1599         (instregex "(MOVI|MVNI)(D|v8b_ns|v2i32|v4i16|v2s_msl)")>;
1600 def KryoWrite_1cyc_XY_XY_199ln :
1601         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
1602         let Latency = 1; let NumMicroOps = 2;
1603 }
1604 def : InstRW<[KryoWrite_1cyc_XY_XY_199ln],
1605         (instregex "(MOVI|MVNI)(v2d_ns|v16b_ns|v4i32|v8i16|v4s_msl)")>;
1606 def KryoWrite_1cyc_X_89ln :
1607         SchedWriteRes<[KryoUnitX]> {
1608         let Latency = 1; let NumMicroOps = 1;
1609 }
1610 def : InstRW<[KryoWrite_1cyc_X_89ln],
1611         (instrs MOVKWi, MOVKXi)>;
1612 def KryoWrite_1cyc_XY_91ln :
1613         SchedWriteRes<[KryoUnitXY]> {
1614         let Latency = 1; let NumMicroOps = 1;
1615 }
1616 def : InstRW<[KryoWrite_1cyc_XY_91ln],
1617         (instrs MOVNWi, MOVNXi)>;
1618 def KryoWrite_1cyc_XY_90ln :
1619         SchedWriteRes<[KryoUnitXY]> {
1620         let Latency = 1; let NumMicroOps = 1;
1621 }
1622 def : InstRW<[KryoWrite_1cyc_XY_90ln],
1623         (instrs MOVZWi, MOVZXi)>;
1624 def KryoWrite_2cyc_XY_93ln :
1625         SchedWriteRes<[KryoUnitXY]> {
1626         let Latency = 2; let NumMicroOps = 1;
1627 }
1628 def : InstRW<[KryoWrite_2cyc_XY_93ln],
1629         (instrs MRS)>;
1630 def KryoWrite_0cyc_X_87ln :
1631         SchedWriteRes<[KryoUnitX]> {
1632         let Latency = 0; let NumMicroOps = 1;
1633 }
1634 def : InstRW<[KryoWrite_0cyc_X_87ln],
1635         (instrs MSRpstateImm4)>;
1636 def : InstRW<[KryoWrite_0cyc_X_87ln],
1637         (instrs MSRpstateImm1)>;
1638 def KryoWrite_0cyc_XY_88ln :
1639         SchedWriteRes<[KryoUnitXY]> {
1640         let Latency = 0; let NumMicroOps = 1;
1641 }
1642 def : InstRW<[KryoWrite_0cyc_XY_88ln],
1643         (instrs MSR)>;
1644 def KryoWrite_1cyc_XY_noRSV_143ln :
1645         SchedWriteRes<[KryoUnitXY]> {
1646         let Latency = 1; let NumMicroOps = 2;
1647 }
1648 def : InstRW<[KryoWrite_1cyc_XY_noRSV_143ln],
1649         (instregex "NEG(v8i8|v4i16|v2i32|v1i64)")>;
1650 def KryoWrite_1cyc_XY_XY_145ln :
1651         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
1652         let Latency = 1; let NumMicroOps = 2;
1653 }
1654 def : InstRW<[KryoWrite_1cyc_XY_XY_145ln],
1655         (instregex "NEG(v16i8|v8i16|v4i32|v2i64)")>;
1656 def KryoWrite_1cyc_XY_noRSV_193ln :
1657         SchedWriteRes<[KryoUnitXY]> {
1658         let Latency = 1; let NumMicroOps = 2;
1659 }
1660 def : InstRW<[KryoWrite_1cyc_XY_noRSV_193ln],
1661         (instrs NOTv8i8)>;
1662 def KryoWrite_1cyc_XY_XY_194ln :
1663         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
1664         let Latency = 1; let NumMicroOps = 2;
1665 }
1666 def : InstRW<[KryoWrite_1cyc_XY_XY_194ln],
1667         (instrs NOTv16i8)>;
1668 def KryoWrite_2cyc_XY_noRSV_234ln :
1669         SchedWriteRes<[KryoUnitXY]> {
1670         let Latency = 2; let NumMicroOps = 2;
1671 }
1672 def : InstRW<[KryoWrite_2cyc_XY_noRSV_234ln],
1673         (instrs PMULv8i8)>;
1674 def KryoWrite_2cyc_XY_XY_236ln :
1675         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
1676         let Latency = 2; let NumMicroOps = 2;
1677 }
1678 def : InstRW<[KryoWrite_2cyc_XY_XY_236ln],
1679         (instrs PMULv16i8)>;
1680 def KryoWrite_2cyc_XY_XY_235ln :
1681         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
1682         let Latency = 2; let NumMicroOps = 2;
1683 }
1684 def : InstRW<[KryoWrite_2cyc_XY_XY_235ln],
1685         (instrs PMULLv8i8, PMULLv16i8)>;
1686 def KryoWrite_3cyc_XY_XY_237ln :
1687         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
1688         let Latency = 3; let NumMicroOps = 2;
1689 }
1690 def : InstRW<[KryoWrite_3cyc_XY_XY_237ln],
1691         (instrs PMULLv1i64, PMULLv2i64)>;
1692 def KryoWrite_0cyc_LS_254ln :
1693         SchedWriteRes<[KryoUnitLS]> {
1694         let Latency = 0; let NumMicroOps = 1;
1695 }
1696 def : InstRW<[KryoWrite_0cyc_LS_254ln],
1697         (instrs PRFMl, PRFMui)>;
1698 def KryoWrite_0cyc_LS_253ln :
1699         SchedWriteRes<[KryoUnitLS]> {
1700         let Latency = 0; let NumMicroOps = 1;
1701 }
1702 def : InstRW<[KryoWrite_0cyc_LS_253ln],
1703         (instrs PRFUMi)>;
1704 def KryoWrite_6cyc_XY_X_noRSV_175ln :
1705         SchedWriteRes<[KryoUnitXY, KryoUnitX]> {
1706         let Latency = 6; let NumMicroOps = 3;
1707 }
1708 def : InstRW<[KryoWrite_6cyc_XY_X_noRSV_175ln],
1709         (instregex "R(ADD|SUB)HNv.*")>;
1710 def KryoWrite_2cyc_XY_204ln :
1711         SchedWriteRes<[KryoUnitXY]> {
1712         let Latency = 2; let NumMicroOps = 1;
1713 }
1714 def : InstRW<[KryoWrite_2cyc_XY_204ln],
1715         (instrs RBITWr, RBITXr)>;
1716 def KryoWrite_2cyc_XY_noRSV_218ln :
1717         SchedWriteRes<[KryoUnitXY]> {
1718         let Latency = 2; let NumMicroOps = 2;
1719 }
1720 def : InstRW<[KryoWrite_2cyc_XY_noRSV_218ln],
1721         (instrs RBITv8i8)>;
1722 def KryoWrite_2cyc_XY_XY_219ln :
1723         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
1724         let Latency = 2; let NumMicroOps = 2;
1725 }
1726 def : InstRW<[KryoWrite_2cyc_XY_XY_219ln],
1727         (instrs RBITv16i8)>;
1728 def KryoWrite_1cyc_X_202ln :
1729         SchedWriteRes<[KryoUnitX]> {
1730         let Latency = 1; let NumMicroOps = 1;
1731 }
1732 def : InstRW<[KryoWrite_1cyc_X_202ln],
1733         (instregex "REV(16|32)?(W|X)r")>;
1734 def KryoWrite_1cyc_XY_noRSV_214ln :
1735         SchedWriteRes<[KryoUnitXY]> {
1736         let Latency = 1; let NumMicroOps = 2;
1737 }
1738 def : InstRW<[KryoWrite_1cyc_XY_noRSV_214ln],
1739         (instregex "REV(16|32|64)(v8i8|v4i16|v2i32)")>;
1740 def KryoWrite_1cyc_XY_XY_216ln :
1741         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
1742         let Latency = 1; let NumMicroOps = 2;
1743 }
1744 def : InstRW<[KryoWrite_1cyc_XY_XY_216ln],
1745         (instregex "REV(16|32|64)(v16i8|v8i16|v4i32)")>;
1746 def KryoWrite_3cyc_X_noRSV_244ln :
1747         SchedWriteRes<[KryoUnitX]> {
1748         let Latency = 3; let NumMicroOps = 2;
1749 }
1750 def : InstRW<[KryoWrite_3cyc_X_noRSV_244ln],
1751         (instregex "S(L|R)I(d|(v8i8|v4i16|v2i32)_shift)")>;
1752 def KryoWrite_3cyc_X_X_245ln :
1753         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
1754         let Latency = 3; let NumMicroOps = 2;
1755 }
1756 def : InstRW<[KryoWrite_3cyc_X_X_245ln],
1757         (instregex "S(L|R)I(v16i8|v8i16|v4i32|v2i64)_shift")>;
1758 def KryoWrite_1cyc_XY_2ln :
1759         SchedWriteRes<[KryoUnitXY]> {
1760         let Latency = 1; let NumMicroOps = 1;
1761 }
1762 def : InstRW<[KryoWrite_1cyc_XY_2ln, ReadI, ReadI],
1763         (instregex "SBCS?(W|X)r")>;
1764 def KryoWrite_2cyc_XA_XA_XA_24ln :
1765         SchedWriteRes<[KryoUnitXA, KryoUnitXA, KryoUnitXA]> {
1766         let Latency = 2; let NumMicroOps = 3;
1767 }
1768 def : InstRW<[KryoWrite_2cyc_XA_XA_XA_24ln],
1769         (instrs SHA1Crrr, SHA1Mrrr, SHA1Prrr)>;
1770 def KryoWrite_1cyc_XY_noRSV_21ln :
1771         SchedWriteRes<[KryoUnitXY]> {
1772         let Latency = 1; let NumMicroOps = 2;
1773 }
1774 def : InstRW<[KryoWrite_1cyc_XY_noRSV_21ln],
1775         (instrs SHA1Hrr)>;
1776 def KryoWrite_2cyc_X_X_23ln :
1777         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
1778         let Latency = 2; let NumMicroOps = 2;
1779 }
1780 def : InstRW<[KryoWrite_2cyc_X_X_23ln],
1781         (instrs SHA1SU0rrr, SHA1SU1rr, SHA256SU0rr)>;
1782 def KryoWrite_4cyc_XA_XA_XA_25ln :
1783         SchedWriteRes<[KryoUnitXA, KryoUnitXA, KryoUnitXA]> {
1784         let Latency = 4; let NumMicroOps = 3;
1785 }
1786 def : InstRW<[KryoWrite_4cyc_XA_XA_XA_25ln],
1787         (instrs SHA256Hrrr, SHA256H2rrr)>;
1788 def KryoWrite_3cyc_XY_XY_X_X_26ln :
1789         SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitX, KryoUnitX]> {
1790         let Latency = 3; let NumMicroOps = 4;
1791 }
1792 def : InstRW<[KryoWrite_3cyc_XY_XY_X_X_26ln],
1793         (instrs SHA256SU1rrr)>;
1794 def KryoWrite_4cyc_X_noRSV_189ln :
1795         SchedWriteRes<[KryoUnitX]> {
1796         let Latency = 4; let NumMicroOps = 2;
1797 }
1798 def : InstRW<[KryoWrite_4cyc_X_noRSV_189ln],
1799         (instregex "SQR?DMULH(v8i8|v4i16|v1i32|v2i32|v1i16)(_indexed)?")>;
1800 def KryoWrite_3cyc_XY_noRSV_68ln :
1801         SchedWriteRes<[KryoUnitXY]> {
1802         let Latency = 3; let NumMicroOps = 2;
1803 }
1804 def : InstRW<[KryoWrite_3cyc_XY_noRSV_68ln],
1805         (instregex "SQ(ABS|NEG)(v1i8|v1i16|v1i32|v1i64)")>;
1806 def KryoWrite_3cyc_XY_noRSV_157ln :
1807         SchedWriteRes<[KryoUnitXY]> {
1808         let Latency = 3; let NumMicroOps = 2;
1809 }
1810 def : InstRW<[KryoWrite_3cyc_XY_noRSV_157ln],
1811         (instregex "SQ(ABS|NEG)(v8i8|v4i16|v2i32)")>;
1812 def KryoWrite_3cyc_XY_XY_164ln :
1813         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
1814         let Latency = 3; let NumMicroOps = 2;
1815 }
1816 def : InstRW<[KryoWrite_3cyc_XY_XY_164ln],
1817         (instregex "SQ(ABS|NEG)(v16i8|v8i16|v4i32|v2i64)")>;
1818 def KryoWrite_4cyc_X_noRSV_190ln :
1819         SchedWriteRes<[KryoUnitX]> {
1820         let Latency = 4; let NumMicroOps = 2;
1821 }
1822 def : InstRW<[KryoWrite_4cyc_X_noRSV_190ln],
1823         (instregex "SQD(MLAL|MLSL|MULL)(i16|i32)")>;
1824 def KryoWrite_0cyc_LS_Y_274ln :
1825         SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
1826         let Latency = 0; let NumMicroOps = 2;
1827 }
1828 def : InstRW<[KryoWrite_0cyc_LS_Y_274ln],
1829         (instregex "ST1(One(v8b|v4h|v2s|v1d|v16b|v8h|v4s|v2d)|(i8|i16|i32|i64)|Two(v8b|v4h|v2s|v1d))$")>;
1830 def KryoWrite_1cyc_LS_Y_X_301ln :
1831         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitX]> {
1832         let Latency = 1; let NumMicroOps = 3;
1833 }
1834 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_X_301ln],
1835         (instregex "ST1(One(v8b|v4h|v2s|v1d|v16b|v8h|v4s|v2d)|(i8|i16|i32|i64)|Two(v8b|v4h|v2s|v1d))_POST$")>;
1836 def KryoWrite_1cyc_LS_Y_XY_305ln :
1837         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY]> {
1838         let Latency = 1; let NumMicroOps = 3;
1839 }
1840 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_305ln],
1841         (instregex "ST1(One(v16b|v8h|v4s|v2d)|Two(v8b|v4h|v2s|v1d))_POST$")>;
1842 def KryoWrite_0cyc_LS_Y_LS_Y_323ln :
1843         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
1844         let Latency = 0; let NumMicroOps = 4;
1845 }
1846 def : InstRW<[WriteAdr, KryoWrite_0cyc_LS_Y_LS_Y_323ln],
1847         (instregex "ST1(Two(v16b|v8h|v4s|v2d)|(Three|Four)(v8b|v4h|v2s|v1d))_POST$")>;
1848 def KryoWrite_1cyc_LS_Y_XY_LS_Y_345ln :
1849         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS, KryoUnitY]> {
1850         let Latency = 1; let NumMicroOps = 5;
1851 }
1852 def : InstRW<[KryoWrite_1cyc_LS_Y_XY_LS_Y_345ln],
1853         (instregex "ST1(Two(v16b|v8h|v4s|v2d)|(Three|Four)(v8b|v4h|v2s|v1d))$")>;
1854 def KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_356ln :
1855         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY, KryoUnitLS,
1856                    KryoUnitY]> {
1857         let Latency = 0; let NumMicroOps = 6;
1858 }
1859 def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_356ln],
1860         (instregex "ST1Three(v16b|v8h|v4s|v2d)$")>;
1861 def KryoWrite_1cyc_LS_Y_XY_LS_Y_LS_Y_366ln :
1862         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS, KryoUnitY,
1863                    KryoUnitLS, KryoUnitY]> {
1864         let Latency = 1; let NumMicroOps = 7;
1865 }
1866 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_LS_Y_LS_Y_366ln],
1867         (instregex "ST1Three(v16b|v8h|v4s|v2d)_POST$")>;
1868 def KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_LS_Y_371ln :
1869         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY, KryoUnitLS,
1870                    KryoUnitY, KryoUnitLS, KryoUnitY]> {
1871         let Latency = 0; let NumMicroOps = 8;
1872 }
1873 def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_LS_Y_371ln],
1874         (instregex "ST1Four(v16b|v8h|v4s|v2d)$")>;
1875 def KryoWrite_0cyc_LS_Y_LS_Y_XY_LS_Y_LS_Y_377ln :
1876         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY, KryoUnitXY,
1877                    KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
1878         let Latency = 0; let NumMicroOps = 9;
1879 }
1880 def : InstRW<[WriteAdr, KryoWrite_0cyc_LS_Y_LS_Y_XY_LS_Y_LS_Y_377ln],
1881         (instregex "ST1Four(v16b|v8h|v4s|v2d)_POST$")>;
1882 def KryoWrite_0cyc_LS_Y_275ln :
1883         SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
1884         let Latency = 0; let NumMicroOps = 2;
1885 }
1886 def : InstRW<[KryoWrite_0cyc_LS_Y_275ln],
1887         (instregex "ST2(Two(v8b|v4h|v2s|v1d|v16b|v8h|v4s|v2d)|(i8|i16|i32|i64))$")>;
1888 def KryoWrite_1cyc_LS_Y_XY_306ln :
1889         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY]> {
1890         let Latency = 1; let NumMicroOps = 3;
1891 }
1892 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_306ln],
1893         (instregex "ST2(Two(v8b|v4h|v2s|v1d)|(i8|i16|i32|i64))_POST$")>;
1894 def KryoWrite_0cyc_LS_Y_LS_Y_322ln :
1895         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
1896         let Latency = 0; let NumMicroOps = 4;
1897 }
1898 def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_322ln],
1899         (instregex "ST2Two(v16b|v8h|v4s|v2d)$")>;
1900 def KryoWrite_1cyc_LS_Y_XY_LS_Y_344ln :
1901         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS, KryoUnitY]> {
1902         let Latency = 1; let NumMicroOps = 5;
1903 }
1904 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_LS_Y_344ln],
1905         (instregex "ST2Two(v16b|v8h|v4s|v2d)_POST$")>;
1906 def KryoWrite_0cyc_LS_Y_LS_Y_324ln :
1907         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
1908         let Latency = 0; let NumMicroOps = 4;
1909 }
1910 def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_324ln],
1911         (instregex "ST3(Threev1d|(i8|i16|i32|i64))$")>;
1912 def KryoWrite_1cyc_LS_Y_XY_LS_Y_346ln :
1913         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS, KryoUnitY]> {
1914         let Latency = 1; let NumMicroOps = 5;
1915 }
1916 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_LS_Y_346ln],
1917         (instregex "ST3(Threev1d|(i8|i16|i32|i64))_POST$")>;
1918 def KryoWrite_1cyc_X_X_LS_Y_LS_Y_353ln :
1919         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitLS,
1920                    KryoUnitY]> {
1921         let Latency = 1; let NumMicroOps = 6;
1922 }
1923 def : InstRW<[KryoWrite_1cyc_X_X_LS_Y_LS_Y_353ln],
1924         (instregex "ST3Three(v8b|v4h|v2s)$")>;
1925 def KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_357ln :
1926         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY, KryoUnitLS,
1927                    KryoUnitY]> {
1928         let Latency = 0; let NumMicroOps = 6;
1929 }
1930 def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_357ln],
1931         (instregex "ST3Threev2d$")>;
1932 def KryoWrite_1cyc_X_X_LS_Y_XY_LS_Y_363ln :
1933         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitXY,
1934                    KryoUnitLS, KryoUnitY]> {
1935         let Latency = 1; let NumMicroOps = 7;
1936 }
1937 def : InstRW<[WriteAdr, KryoWrite_1cyc_X_X_LS_Y_XY_LS_Y_363ln],
1938         (instregex "ST3Three(v8b|v4h|v2s)_POST$")>;
1939 def KryoWrite_1cyc_LS_Y_XY_LS_Y_LS_Y_367ln :
1940         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS, KryoUnitY,
1941                    KryoUnitLS, KryoUnitY]> {
1942         let Latency = 1; let NumMicroOps = 7;
1943 }
1944 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_LS_Y_LS_Y_367ln],
1945         (instregex "ST3Threev2d_POST$")>;
1946 def KryoWrite_1cyc_X_X_LS_Y_LS_Y_X_X_LS_Y_LS_Y_385ln :
1947         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitLS,
1948                    KryoUnitY, KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY,
1949                    KryoUnitLS, KryoUnitY]> {
1950         let Latency = 1; let NumMicroOps = 12;
1951 }
1952 def : InstRW<[KryoWrite_1cyc_X_X_LS_Y_LS_Y_X_X_LS_Y_LS_Y_385ln],
1953         (instregex "ST3Three(v16b|v8h|v4s)$")>;
1954 def KryoWrite_1cyc_X_X_LS_Y_LS_Y_X_X_LS_Y_XY_LS_Y_388ln :
1955         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitLS,
1956                    KryoUnitY, KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY,
1957                    KryoUnitXY, KryoUnitLS, KryoUnitY]> {
1958         let Latency = 1; let NumMicroOps = 13;
1959 }
1960 def : InstRW<[WriteAdr, KryoWrite_1cyc_X_X_LS_Y_LS_Y_X_X_LS_Y_XY_LS_Y_388ln],
1961         (instregex "ST3Three(v16b|v8h|v4s)_POST$")>;
1962 def KryoWrite_0cyc_LS_Y_LS_Y_325ln :
1963         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
1964         let Latency = 0; let NumMicroOps = 4;
1965 }
1966 def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_325ln],
1967         (instregex "ST4(Fourv1d|(i8|i16|i32|i64))$")>;
1968 def KryoWrite_1cyc_LS_Y_XY_LS_Y_347ln :
1969         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS, KryoUnitY]> {
1970         let Latency = 1; let NumMicroOps = 5;
1971 }
1972 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_LS_Y_347ln],
1973         (instregex "ST4(Fourv1d|(i8|i16|i32|i64))_POST$")>;
1974 def KryoWrite_1cyc_X_X_LS_Y_X_X_LS_Y_370ln :
1975         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitX,
1976                    KryoUnitX, KryoUnitLS, KryoUnitY]> {
1977         let Latency = 1; let NumMicroOps = 8;
1978 }
1979 def : InstRW<[KryoWrite_1cyc_X_X_LS_Y_X_X_LS_Y_370ln],
1980         (instregex "ST4Four(v8b|v4h|v2s)$")>;
1981 def KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_LS_Y_372ln :
1982         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY, KryoUnitLS,
1983                    KryoUnitY, KryoUnitLS, KryoUnitY]> {
1984         let Latency = 0; let NumMicroOps = 8;
1985 }
1986 def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_LS_Y_372ln],
1987         (instregex "ST4Fourv2d$")>;
1988 def KryoWrite_1cyc_X_X_LS_Y_XY_X_X_LS_Y_375ln :
1989         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitXY,
1990                    KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY]> {
1991         let Latency = 1; let NumMicroOps = 9;
1992 }
1993 def : InstRW<[WriteAdr, KryoWrite_1cyc_X_X_LS_Y_XY_X_X_LS_Y_375ln],
1994         (instregex "ST4Four(v8b|v4h|v2s)_POST$")>;
1995 def KryoWrite_0cyc_LS_Y_LS_Y_XY_LS_Y_LS_Y_379ln :
1996         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY, KryoUnitXY,
1997                    KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
1998         let Latency = 0; let NumMicroOps = 9;
1999 }
2000 def : InstRW<[WriteAdr, KryoWrite_0cyc_LS_Y_LS_Y_XY_LS_Y_LS_Y_379ln],
2001         (instregex "ST4Fourv2d_POST$")>;
2002 def KryoWrite_1cyc_X_X_LS_Y_X_X_LS_Y_X_X_LS_Y_X_X_LS_Y_390ln :
2003         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitX,
2004                    KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitX, KryoUnitX,
2005                    KryoUnitLS, KryoUnitY, KryoUnitX, KryoUnitX, KryoUnitLS,
2006                    KryoUnitY]> {
2007         let Latency = 1; let NumMicroOps = 16;
2008 }
2009 def : InstRW<[KryoWrite_1cyc_X_X_LS_Y_X_X_LS_Y_X_X_LS_Y_X_X_LS_Y_390ln],
2010         (instregex "ST4Four(v16b|v8h|v4s)$")>;
2011 def KryoWrite_1cyc_X_X_LS_Y_X_X_LS_Y_X_X_LS_Y_XY_X_X_LS_Y_392ln :
2012         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitX,
2013                    KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitX, KryoUnitX,
2014                    KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitX, KryoUnitX,
2015                    KryoUnitLS, KryoUnitY]> {
2016         let Latency = 1; let NumMicroOps = 17;
2017 }
2018 def : InstRW<[WriteAdr, KryoWrite_1cyc_X_X_LS_Y_X_X_LS_Y_X_X_LS_Y_XY_X_X_LS_Y_392ln],
2019         (instregex "ST4Four(v16b|v8h|v4s)_POST$")>;
2020 def KryoWrite_0cyc_LS_LS_Y_299ln :
2021         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitY]> {
2022         let Latency = 0; let NumMicroOps = 3;
2023 }
2024 def : InstRW<[KryoWrite_0cyc_LS_LS_Y_299ln],
2025         (instregex "STLR(B|H|W|X)")>;
2026 def KryoWrite_3cyc_LS_LS_Y_307ln :
2027         SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitY]> {
2028         let Latency = 3; let NumMicroOps = 3;
2029 }
2030 def : InstRW<[KryoWrite_3cyc_LS_LS_Y_307ln],
2031         (instregex "STLX(P(W|X)|R(B|H|W|X))")>;
2032 def KryoWrite_0cyc_LS_Y_276ln :
2033         SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
2034         let Latency = 0; let NumMicroOps = 2;
2035 }
2036 def : InstRW<[KryoWrite_0cyc_LS_Y_276ln],
2037         (instrs STNPDi, STNPSi)>;
2038 def KryoWrite_0cyc_LS_Y_LS_Y_326ln :
2039         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
2040         let Latency = 0; let NumMicroOps = 4;
2041 }
2042 def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_326ln],
2043         (instrs STNPQi)>;
2044 def KryoWrite_0cyc_LS_Y_280ln :
2045         SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
2046         let Latency = 0; let NumMicroOps = 2;
2047 }
2048 def : InstRW<[KryoWrite_0cyc_LS_Y_280ln],
2049         (instrs STNPWi, STNPXi)>;
2050 def KryoWrite_0cyc_LS_Y_277ln :
2051         SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
2052         let Latency = 0; let NumMicroOps = 2;
2053 }
2054 def : InstRW<[KryoWrite_0cyc_LS_Y_277ln],
2055         (instregex "STP(D|S)i")>;
2056 def KryoWrite_1cyc_LS_Y_X_303ln :
2057         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitX]> {
2058         let Latency = 1; let NumMicroOps = 3;
2059 }
2060 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_X_303ln],
2061         (instregex "STP(D|S)(post|pre)")>;
2062 def KryoWrite_0cyc_LS_Y_LS_Y_327ln :
2063         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
2064         let Latency = 0; let NumMicroOps = 4;
2065 }
2066 def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_327ln],
2067         (instrs STPQi)>;
2068 def KryoWrite_1cyc_LS_Y_X_LS_Y_343ln :
2069         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitX, KryoUnitLS, KryoUnitY]> {
2070         let Latency = 1; let NumMicroOps = 5;
2071 }
2072 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_X_LS_Y_343ln],
2073         (instrs STPQpost, STPQpre)>;
2074 def KryoWrite_0cyc_LS_Y_279ln :
2075         SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
2076         let Latency = 0; let NumMicroOps = 2;
2077 }
2078 def : InstRW<[KryoWrite_0cyc_LS_Y_279ln],
2079         (instregex "STP(W|X)i")>;
2080 def KryoWrite_1cyc_LS_X_Y_300ln :
2081         SchedWriteRes<[KryoUnitLS, KryoUnitX, KryoUnitY]> {
2082         let Latency = 1; let NumMicroOps = 3;
2083 }
2084 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_X_Y_300ln],
2085         (instregex "STP(W|X)(post|pre)")>;
2086 def KryoWrite_0cyc_LS_Y_278ln :
2087         SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
2088         let Latency = 0; let NumMicroOps = 2;
2089 }
2090 def : InstRW<[KryoWrite_0cyc_LS_Y_278ln],
2091         (instregex "STR(Q|D|S|H|B)ui")>;
2092 def KryoWrite_1cyc_X_LS_Y_295ln :
2093         SchedWriteRes<[KryoUnitX, KryoUnitLS, KryoUnitY]> {
2094         let Latency = 1; let NumMicroOps = 3;
2095 }
2096 def : InstRW<[KryoWrite_1cyc_X_LS_Y_295ln],
2097         (instregex "STR(D|S|H|B)ro(W|X)")>;
2098 def KryoWrite_1cyc_LS_Y_X_304ln :
2099         SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitX]> {
2100         let Latency = 1; let NumMicroOps = 3;
2101 }
2102 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_X_304ln],
2103         (instregex "STR(Q|D|S|H|B)(post|pre)")>;
2104 def KryoWrite_2cyc_X_LS_Y_XY_LS_Y_354ln :
2105         SchedWriteRes<[KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS,
2106                    KryoUnitY]> {
2107         let Latency = 2; let NumMicroOps = 6;
2108 }
2109 def : InstRW<[KryoWrite_2cyc_X_LS_Y_XY_LS_Y_354ln],
2110         (instregex "STRQro(W|X)")>;
2111 def KryoWrite_0cyc_LS_Y_399ln :
2112         SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
2113         let Latency = 0; let NumMicroOps = 2;
2114 }
2115 def : InstRW<[KryoWrite_0cyc_LS_Y_399ln],
2116         (instregex "STR(BB|HH|W|X)ui")>;
2117 def KryoWrite_1cyc_X_LS_Y_406ln :
2118         SchedWriteRes<[KryoUnitX, KryoUnitLS, KryoUnitY]> {
2119         let Latency = 1; let NumMicroOps = 3;
2120 }
2121 def : InstRW<[KryoWrite_1cyc_X_LS_Y_406ln],
2122         (instregex "STR(BB|HH|W|X)ro(W|X)")>;
2123 def KryoWrite_1cyc_LS_X_Y_407ln :
2124         SchedWriteRes<[KryoUnitLS, KryoUnitX, KryoUnitY]> {
2125         let Latency = 1; let NumMicroOps = 3;
2126 }
2127 def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_X_Y_407ln],
2128         (instregex "STR(BB|HH|W|X)(post|pre)")>;
2129 def KryoWrite_0cyc_LS_Y_398ln :
2130         SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
2131         let Latency = 0; let NumMicroOps = 2;
2132 }
2133 def : InstRW<[KryoWrite_0cyc_LS_Y_398ln],
2134         (instregex "STTR(B|H|W|X)i")>;
2135 def KryoWrite_0cyc_LS_Y_396ln :
2136         SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
2137         let Latency = 0; let NumMicroOps = 2;
2138 }
2139 def : InstRW<[KryoWrite_0cyc_LS_Y_396ln],
2140         (instregex "STUR(Q|D|S|H|B)i")>;
2141 def KryoWrite_0cyc_LS_Y_397ln :
2142         SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
2143         let Latency = 0; let NumMicroOps = 2;
2144 }
2145 def : InstRW<[KryoWrite_0cyc_LS_Y_397ln],
2146         (instregex "STUR(BB|HH|W|X)i")>;
2147 def KryoWrite_3cyc_LS_Y_404ln :
2148         SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
2149         let Latency = 3; let NumMicroOps = 2;
2150 }
2151 def : InstRW<[KryoWrite_3cyc_LS_Y_404ln],
2152         (instregex "STX(P(W|X)|R(B|H|W|X))")>;
2153 def KryoWrite_3cyc_XY_noRSV_160ln :
2154         SchedWriteRes<[KryoUnitXY]> {
2155         let Latency = 3; let NumMicroOps = 2;
2156 }
2157 def : InstRW<[KryoWrite_3cyc_XY_noRSV_160ln],
2158         (instregex "^(SU|US)QADD(v8i8|v4i16|v2i32)")>;
2159 def KryoWrite_3cyc_XY_XY_167ln :
2160         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
2161         let Latency = 3; let NumMicroOps = 2;
2162 }
2163 def : InstRW<[KryoWrite_3cyc_XY_XY_167ln],
2164         (instregex "^(SU|US)QADD(v16i8|v8i16|v4i32|v2i64)")>;
2165 def KryoWrite_1cyc_XY_1ln :
2166         SchedWriteRes<[KryoUnitXY]> {
2167         let Latency = 1; let NumMicroOps = 1;
2168 }
2169 def : InstRW<[KryoWrite_1cyc_XY_1ln, ReadI],
2170         (instregex "SUBS?(W|X)ri")>;
2171 def KryoWrite_2cyc_XY_XY_5ln :
2172         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
2173         let Latency = 2; let NumMicroOps = 2;
2174 }
2175 def : InstRW<[KryoWrite_2cyc_XY_XY_5ln, ReadI, ReadIEReg],
2176         (instregex "SUBS?(W|X)rx")>;
2177 def KryoWrite_2cyc_XY_XY_5_1ln :
2178         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
2179         let Latency = 2; let NumMicroOps = 2;
2180 }
2181 def : InstRW<[KryoWrite_2cyc_XY_XY_5_1ln, ReadI, ReadISReg],
2182         (instregex "SUBS?(W|X)rs")>;
2183 def KryoWrite_1cyc_XY_noRSV_6ln :
2184         SchedWriteRes<[KryoUnitXY]> {
2185         let Latency = 1; let NumMicroOps = 2;
2186 }
2187 def : InstRW<[KryoWrite_1cyc_XY_noRSV_6ln, ReadI, ReadI],
2188         (instregex "SUBS?(W|X)rr")>;
2189 def KryoWrite_0cyc_LS_9ln :
2190         SchedWriteRes<[KryoUnitLS]> {
2191         let Latency = 0; let NumMicroOps = 1;
2192 }
2193 def : InstRW<[KryoWrite_0cyc_LS_9ln],
2194         (instregex "SYSL?xt")>;
2195 def KryoWrite_1cyc_X_noRSV_205ln :
2196         SchedWriteRes<[KryoUnitX]> {
2197         let Latency = 1; let NumMicroOps = 2;
2198 }
2199 def : InstRW<[KryoWrite_1cyc_X_noRSV_205ln],
2200         (instrs TBLv8i8One)>;
2201 def KryoWrite_1cyc_X_X_208ln :
2202         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
2203         let Latency = 1; let NumMicroOps = 2;
2204 }
2205 def : InstRW<[KryoWrite_1cyc_X_X_208ln],
2206         (instrs TBLv16i8One)>;
2207 def KryoWrite_2cyc_X_X_X_noRSV_222ln :
2208         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX]> {
2209         let Latency = 2; let NumMicroOps = 4;
2210 }
2211 def : InstRW<[KryoWrite_2cyc_X_X_X_noRSV_222ln],
2212         (instrs TBLv8i8Two)>;
2213 def KryoWrite_2cyc_X_X_X_X_X_X_224ln :
2214         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
2215                    KryoUnitX]> {
2216         let Latency = 2; let NumMicroOps = 6;
2217 }
2218 def : InstRW<[KryoWrite_2cyc_X_X_X_X_X_X_224ln],
2219         (instrs TBLv16i8Two)>;
2220 def KryoWrite_3cyc_X_X_X_X_X_noRSV_225ln :
2221         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX]> {
2222         let Latency = 3; let NumMicroOps = 6;
2223 }
2224 def : InstRW<[KryoWrite_3cyc_X_X_X_X_X_noRSV_225ln],
2225         (instrs TBLv8i8Three)>;
2226 def KryoWrite_3cyc_X_X_X_X_X_X_X_noRSV_228ln :
2227         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
2228                    KryoUnitX, KryoUnitX]> {
2229         let Latency = 3; let NumMicroOps = 8;
2230 }
2231 def : InstRW<[KryoWrite_3cyc_X_X_X_X_X_X_X_noRSV_228ln],
2232         (instrs TBLv8i8Four)>;
2233 def KryoWrite_4cyc_X_X_X_X_X_X_X_X_XY_X_X_230ln :
2234         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
2235                    KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitXY, KryoUnitX,
2236                    KryoUnitX]> {
2237         let Latency = 4; let NumMicroOps = 11;
2238 }
2239 def : InstRW<[KryoWrite_4cyc_X_X_X_X_X_X_X_X_XY_X_X_230ln],
2240         (instrs TBLv16i8Three)>;
2241 def KryoWrite_4cyc_X_X_X_X_X_X_X_X_X_X_XY_X_X_X_X_232ln :
2242         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
2243                    KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
2244                    KryoUnitXY, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX]> {
2245         let Latency = 4; let NumMicroOps = 15;
2246 }
2247 def : InstRW<[KryoWrite_4cyc_X_X_X_X_X_X_X_X_X_X_XY_X_X_X_X_232ln],
2248         (instrs TBLv16i8Four)>;
2249 def KryoWrite_2cyc_X_X_noRSV_220ln :
2250         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
2251         let Latency = 2; let NumMicroOps = 3;
2252 }
2253 def : InstRW<[KryoWrite_2cyc_X_X_noRSV_220ln],
2254         (instrs TBXv8i8One)>;
2255 def KryoWrite_2cyc_X_X_X_X_221ln :
2256         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX]> {
2257         let Latency = 2; let NumMicroOps = 4;
2258 }
2259 def : InstRW<[KryoWrite_2cyc_X_X_X_X_221ln],
2260         (instrs TBXv16i8One)>;
2261 def KryoWrite_3cyc_X_X_X_X_noRSV_223ln :
2262         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX]> {
2263         let Latency = 3; let NumMicroOps = 5;
2264 }
2265 def : InstRW<[KryoWrite_3cyc_X_X_X_X_noRSV_223ln],
2266         (instrs TBXv8i8Two)>;
2267 def KryoWrite_4cyc_X_X_X_X_X_X_noRSV_226ln :
2268         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
2269                    KryoUnitX]> {
2270         let Latency = 4; let NumMicroOps = 7;
2271 }
2272 def : InstRW<[KryoWrite_4cyc_X_X_X_X_X_X_noRSV_226ln],
2273         (instrs TBXv8i8Three)>;
2274 def KryoWrite_3cyc_X_X_X_X_X_X_X_X_227ln :
2275         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
2276                    KryoUnitX, KryoUnitX, KryoUnitX]> {
2277         let Latency = 3; let NumMicroOps = 8;
2278 }
2279 def : InstRW<[KryoWrite_3cyc_X_X_X_X_X_X_X_X_227ln],
2280         (instrs TBXv16i8Two)>;
2281 def KryoWrite_4cyc_X_X_X_X_X_X_X_X_noRSV_229ln :
2282         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
2283                    KryoUnitX, KryoUnitX, KryoUnitX]> {
2284         let Latency = 4; let NumMicroOps = 9;
2285 }
2286 def : InstRW<[KryoWrite_4cyc_X_X_X_X_X_X_X_X_noRSV_229ln],
2287         (instrs TBXv8i8Four)>;
2288 def KryoWrite_5cyc_X_X_X_X_X_X_X_X_X_XY_X_X_X_231ln :
2289         SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
2290                    KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitXY,
2291                    KryoUnitX, KryoUnitX, KryoUnitX]> {
2292         let Latency = 5; let NumMicroOps = 13;
2293 }
2294 def : InstRW<[KryoWrite_5cyc_X_X_X_X_X_X_X_X_X_XY_X_X_X_231ln],
2295         (instrs TBXv16i8Three)>;
2296 def KryoWrite_5cyc_X_X_X_X_X_X_X_X_X_X_X_XY_X_X_X_X_X_233ln :
2297     SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
2298                    KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
2299                    KryoUnitX, KryoUnitXY, KryoUnitX, KryoUnitX, KryoUnitX,
2300                    KryoUnitX, KryoUnitX]> {
2301         let Latency = 5; let NumMicroOps = 17;
2302 }
2303 def : InstRW<[KryoWrite_5cyc_X_X_X_X_X_X_X_X_X_X_X_XY_X_X_X_X_X_233ln],
2304         (instrs TBXv16i8Four)>;
2305 def KryoWrite_1cyc_XY_XY_217ln :
2306         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
2307         let Latency = 1; let NumMicroOps = 2;
2308 }
2309 def : InstRW<[KryoWrite_1cyc_XY_XY_217ln],
2310         (instregex "((TRN1|TRN2|ZIP1|UZP1|UZP2)v2i64|ZIP2(v2i64|v4i32|v8i16|v16i8))")>;
2311 def KryoWrite_1cyc_X_X_211ln :
2312         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
2313         let Latency = 1; let NumMicroOps = 2;
2314 }
2315 def : InstRW<[KryoWrite_1cyc_X_X_211ln],
2316         (instregex "(TRN1|TRN2)(v4i32|v8i16|v16i8)")>;
2317 def KryoWrite_1cyc_X_XY_213ln :
2318         SchedWriteRes<[KryoUnitX, KryoUnitXY]> {
2319         let Latency = 1; let NumMicroOps = 2;
2320 }
2321 def : InstRW<[KryoWrite_1cyc_X_XY_213ln],
2322         (instregex "(TRN1|TRN2)(v2i32|v4i16|v8i8)")>;
2323 def KryoWrite_3cyc_XY_noRSV_156ln :
2324         SchedWriteRes<[KryoUnitXY]> {
2325         let Latency = 3; let NumMicroOps = 2;
2326 }
2327 def : InstRW<[KryoWrite_3cyc_XY_noRSV_156ln],
2328         (instrs URECPEv2i32, URSQRTEv2i32)>;
2329 def KryoWrite_3cyc_XY_XY_168ln :
2330         SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
2331         let Latency = 3; let NumMicroOps = 2;
2332 }
2333 def : InstRW<[KryoWrite_3cyc_XY_XY_168ln],
2334         (instrs URECPEv4i32, URSQRTEv4i32)>;
2335 def KryoWrite_1cyc_X_X_210ln :
2336         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
2337         let Latency = 1; let NumMicroOps = 2;
2338 }
2339 def : InstRW<[KryoWrite_1cyc_X_X_210ln],
2340         (instregex "(UZP1|UZP2)(v4i32|v8i16|v16i8)")>;
2341 def KryoWrite_1cyc_X_noRSV_206ln :
2342         SchedWriteRes<[KryoUnitX]> {
2343         let Latency = 1; let NumMicroOps = 2;
2344 }
2345 def : InstRW<[KryoWrite_1cyc_X_noRSV_206ln],
2346         (instregex "(UZP1|UZP2|ZIP1|ZIP2)(v2i32|v4i16|v8i8)")>;
2347 def KryoWrite_1cyc_XY_noRSV_215ln :
2348         SchedWriteRes<[KryoUnitXY]> {
2349         let Latency = 1; let NumMicroOps = 2;
2350 }
2351 def : InstRW<[KryoWrite_1cyc_XY_noRSV_215ln],
2352         (instregex "XTNv.*")>;
2353 def KryoWrite_1cyc_X_X_209ln :
2354         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
2355         let Latency = 1; let NumMicroOps = 2;
2356 }
2357 def : InstRW<[KryoWrite_1cyc_X_X_209ln],
2358         (instregex "ZIP1(v4i32|v8i16|v16i8)")>;