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