]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/AArch64/AArch64SchedKryoDetails.td
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / AArch64 / AArch64SchedKryoDetails.td
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.
11 //
12 //===----------------------------------------------------------------------===//
13
14 def KryoWrite_3cyc_X_noRSV_138ln :
15         SchedWriteRes<[KryoUnitX]> {
16     let Latency = 3; let NumMicroOps = 2;
17 }
18 def : InstRW<[KryoWrite_3cyc_X_noRSV_138ln],
19     (instregex "(S|U)R?SRA(d|(v2i32|v4i16|v8i8)_shift)")>;
20
21 def KryoWrite_3cyc_X_X_139ln :
22         SchedWriteRes<[KryoUnitX, KryoUnitX]> {
23     let Latency = 3; let NumMicroOps = 2;
24 }
25 def : InstRW<[KryoWrite_3cyc_X_X_139ln],
26     (instregex "(S|U)R?SRA(v2i64|v4i32|v8i16|v16i8)_shift")>;
27
28 def KryoWrite_4cyc_XY_XY_noRSV_172ln :
29     SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
30     let Latency = 4; let NumMicroOps = 3;
31 }
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;
37 }
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;
43 }
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;
49 }
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;
55 }
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;
61 }
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;
67 }
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;
73 }
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;
79 }
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;
85 }
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;
91 }
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;
97 }
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;
103 }
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;
109 }
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;
115 }
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;
121 }
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;
127 }
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;
133 }
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;
139 }
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;
145 }
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;
151 }
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;
157 }
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;
163 }
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;
169 }
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;
175 }
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;
181 }
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;
187 }
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;
193 }
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;
199 }
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;
205 }
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;
211 }
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;
217 }
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;
223 }
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;
229 }
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;
235 }
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;
241 }
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;
247 }
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;
253 }
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;
259 }
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;
265 }
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;
271 }
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;
277 }
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;
283 }
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;
289 }
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;
295 }
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;
301 }
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;
307 }
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;
313 }
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;
319 }
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;
325 }
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;
331 }
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;
337 }
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;
343 }
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;
349 }
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;
355 }
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;
361 }
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;
367 }
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;
373 }
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;
379 }
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;
385 }
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;
391 }
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;
397 }
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;
403 }
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;
409 }
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;
415 }
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;
421 }
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;
427 }
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;
433 }
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;
439 }
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;
445 }
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;
451 }
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;
457 }
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;
463 }
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;
469 }
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;
475 }
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;
481 }
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;
487 }
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;
493 }
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;
499 }
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;
505 }
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;
511 }
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;
517 }
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;
523 }
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;
529 }
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;
535 }
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;
541 }
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;
547 }
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;
553 }
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;
559 }
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;
565 }
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;
571 }
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;
577 }
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;
583 }
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;
589 }
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;
595 }
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;
601 }
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;
607 }
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;
613 }
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;
619 }
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;
625 }
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;
631 }
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;
637 }
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;
643 }
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;
649 }
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;
655 }
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;
661 }
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;
667 }
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;
673 }
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;
679 }
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;
685 }
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;
691 }
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;
697 }
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;
703 }
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;
709 }
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;
715 }
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;
721 }
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;
727 }
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;
733 }
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;
739 }
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;
745 }
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;
751 }
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;
757 }
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;
763 }
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;
769 }
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;
775 }
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;
781 }
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;
787 }
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;
793 }
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;
799 }
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;
805 }
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;
811 }
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;
817 }
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;
823 }
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;
829 }
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;
835 }
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;
841 }
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;
847 }
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;
853 }
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;
859 }
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;
865 }
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;
871 }
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;
877 }
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;
883 }
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;
889 }
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;
895 }
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;
901 }
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;
907 }
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;
913 }
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;
919 }
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;
925 }
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;
931 }
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;
937 }
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;
943 }
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;
949 }
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;
955 }
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;
961 }
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;
967 }
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;
973 }
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;
979 }
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;
985 }
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;
991 }
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;
997 }
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;
1003 }
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;
1009 }
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;
1015 }
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;
1021 }
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;
1027 }
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;
1033 }
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;
1039 }
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;
1045 }
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;
1051 }
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;
1057 }
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;
1063 }
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;
1069 }
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;
1075 }
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;
1081 }
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;
1087 }
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;
1093 }
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;
1099 }
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;
1105 }
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;
1111 }
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;
1117 }
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;
1123 }
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;
1129 }
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;
1135 }
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;
1141 }
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;
1147 }
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;
1153 }
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;
1159 }
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;
1165 }
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;
1171 }
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;
1177 }
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;
1183 }
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;
1189 }
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;
1195 }
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;
1201 }
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;
1207 }
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;
1213 }
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;
1219 }
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;
1225 }
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;
1231 }
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;
1238 }
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;
1245 }
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;
1253 }
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;
1259 }
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;
1265 }
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;
1271 }
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;
1277 }
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;
1283 }
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;
1289 }
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;
1295 }
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;
1301 }
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;
1307 }
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;
1314 }
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;
1321 }
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;
1328 }
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;
1336 }
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;
1344 }
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;
1350 }
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;
1356 }
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;
1362 }
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;
1368 }
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;
1374 }
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;
1382 }
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;
1388 }
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;
1394 }
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;
1400 }
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;
1406 }
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;
1412 }
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;
1418 }
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;
1424 }
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;
1430 }
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;
1436 }
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;
1442 }
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;
1448 }
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;
1454 }
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;
1460 }
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;
1466 }
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;
1472 }
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;
1478 }
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;
1484 }
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;
1490 }
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;
1496 }
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;
1502 }
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;
1508 }
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;
1514 }
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;
1520 }
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;
1526 }
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;
1532 }
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;
1538 }
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;
1544 }
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;
1550 }
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;
1556 }
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;
1562 }
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;
1568 }
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;
1574 }
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;
1580 }
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;
1586 }
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;
1592 }
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;
1598 }
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;
1604 }
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;
1610 }
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;
1616 }
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;
1622 }
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;
1628 }
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;
1634 }
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;
1640 }
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;
1646 }
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;
1652 }
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;
1660 }
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;
1666 }
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;
1672 }
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;
1678 }
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;
1684 }
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;
1690 }
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;
1696 }
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;
1702 }
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;
1708 }
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;
1714 }
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;
1720 }
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;
1726 }
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;
1732 }
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;
1738 }
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;
1744 }
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;
1750 }
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;
1756 }
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;
1762 }
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;
1768 }
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;
1774 }
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;
1780 }
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;
1786 }
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;
1792 }
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;
1798 }
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;
1804 }
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;
1810 }
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;
1816 }
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;
1822 }
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;
1828 }
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;
1834 }
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;
1840 }
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;
1846 }
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;
1852 }
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;
1858 }
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;
1864 }
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;
1870 }
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;
1877 }
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;
1884 }
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;
1891 }
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;
1898 }
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;
1904 }
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;
1910 }
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;
1916 }
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;
1922 }
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;
1928 }
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;
1934 }
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;
1941 }
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;
1948 }
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;
1955 }
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;
1962 }
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;
1970 }
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;
1978 }
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;
1984 }
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;
1990 }
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;
1997 }
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;
2004 }
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;
2011 }
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;
2018 }
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;
2027 }
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;
2036 }
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;
2042 }
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;
2048 }
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;
2054 }
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;
2060 }
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;
2066 }
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;
2072 }
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;
2078 }
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;
2084 }
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;
2090 }
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;
2096 }
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;
2102 }
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;
2108 }
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;
2114 }
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;
2120 }
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;
2127 }
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;
2133 }
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;
2139 }
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;
2145 }
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;
2151 }
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;
2157 }
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;
2163 }
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;
2169 }
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;
2175 }
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;
2181 }
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;
2187 }
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;
2193 }
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;
2199 }
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;
2205 }
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;
2211 }
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;
2217 }
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;
2223 }
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;
2229 }
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;
2236 }
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;
2242 }
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;
2249 }
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;
2257 }
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;
2265 }
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;
2271 }
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;
2277 }
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;
2283 }
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;
2290 }
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;
2297 }
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;
2304 }
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;
2312 }
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;
2321 }
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;
2327 }
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;
2333 }
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;
2339 }
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;
2345 }
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;
2351 }
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;
2357 }
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;
2363 }
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;
2369 }
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;
2375 }
2376 def : InstRW<[KryoWrite_1cyc_X_X_209ln],
2377         (instregex "ZIP1(v4i32|v8i16|v16i8)")>;