1// RUN:     llvm-mc -triple aarch64 -show-encoding -mattr=+mte   < %s      | FileCheck %s
2// RUN: not llvm-mc -triple aarch64 -show-encoding -mattr=+v8.5a < %s 2>&1 | FileCheck %s --check-prefix=NOMTE
3// RUN: not llvm-mc -triple aarch64 -show-encoding -mattr=-mte   < %s 2>&1 | FileCheck %s --check-prefix=NOMTE
4
5irg x0, x1
6irg sp, x1
7irg x0, sp
8irg x0, x1, x2
9irg sp, x1, x2
10
11// CHECK: irg x0, x1            // encoding: [0x20,0x10,0xdf,0x9a]
12// CHECK: irg sp, x1            // encoding: [0x3f,0x10,0xdf,0x9a]
13// CHECK: irg x0, sp            // encoding: [0xe0,0x13,0xdf,0x9a]
14// CHECK: irg x0, x1, x2        // encoding: [0x20,0x10,0xc2,0x9a]
15// CHECK: irg sp, x1, x2        // encoding: [0x3f,0x10,0xc2,0x9a]
16
17// NOMTE:      instruction requires: mte
18// NOMTE-NEXT: irg x0, x1
19// NOMTE:      instruction requires: mte
20// NOMTE-NEXT: irg sp, x1
21// NOMTE:      instruction requires: mte
22// NOMTE-NEXT: irg x0, sp
23// NOMTE:      instruction requires: mte
24// NOMTE-NEXT: irg x0, x1, x2
25// NOMTE:      instruction requires: mte
26// NOMTE-NEXT: irg sp, x1, x2
27
28addg x0, x1, #0, #1
29addg sp, x2, #32, #3
30addg x0, sp, #64, #5
31addg x3, x4, #1008, #6
32addg x5, x6, #112, #15
33
34subg x0, x1, #0, #1
35subg sp, x2, #32, #3
36subg x0, sp, #64, #5
37subg x3, x4, #1008, #6
38subg x5, x6, #112, #15
39
40// CHECK: addg x0, x1, #0, #1   // encoding: [0x20,0x04,0x80,0x91]
41// CHECK: addg sp, x2, #32, #3   // encoding: [0x5f,0x0c,0x82,0x91]
42// CHECK: addg x0, sp, #64, #5   // encoding: [0xe0,0x17,0x84,0x91]
43// CHECK: addg x3, x4, #1008, #6  // encoding: [0x83,0x18,0xbf,0x91]
44// CHECK: addg x5, x6, #112, #15  // encoding: [0xc5,0x3c,0x87,0x91]
45
46// CHECK: subg x0, x1, #0, #1   // encoding: [0x20,0x04,0x80,0xd1]
47// CHECK: subg sp, x2, #32, #3   // encoding: [0x5f,0x0c,0x82,0xd1]
48// CHECK: subg x0, sp, #64, #5   // encoding: [0xe0,0x17,0x84,0xd1]
49// CHECK: subg x3, x4, #1008, #6  // encoding: [0x83,0x18,0xbf,0xd1]
50// CHECK: subg x5, x6, #112, #15  // encoding: [0xc5,0x3c,0x87,0xd1]
51
52// NOMTE:      instruction requires: mte
53// NOMTE-NEXT: addg x0, x1, #0, #1
54// NOMTE:      instruction requires: mte
55// NOMTE-NEXT: addg sp, x2, #32, #3
56// NOMTE:      instruction requires: mte
57// NOMTE-NEXT: addg x0, sp, #64, #5
58// NOMTE:      instruction requires: mte
59// NOMTE-NEXT: addg x3, x4, #1008, #6
60// NOMTE:      instruction requires: mte
61// NOMTE-NEXT: addg x5, x6, #112, #15
62
63// NOMTE:      instruction requires: mte
64// NOMTE-NEXT: subg x0, x1, #0, #1
65// NOMTE:      instruction requires: mte
66// NOMTE-NEXT: subg sp, x2, #32, #3
67// NOMTE:      instruction requires: mte
68// NOMTE-NEXT: subg x0, sp, #64, #5
69// NOMTE:      instruction requires: mte
70// NOMTE-NEXT: subg x3, x4, #1008, #6
71// NOMTE:      instruction requires: mte
72// NOMTE-NEXT: subg x5, x6, #112, #15
73
74gmi x0, x1, x2
75gmi x3, sp, x4
76gmi xzr, x0, x30
77gmi x30, x0, xzr
78
79// CHECK: gmi x0, x1, x2        // encoding: [0x20,0x14,0xc2,0x9a]
80// CHECK: gmi x3, sp, x4        // encoding: [0xe3,0x17,0xc4,0x9a]
81// CHECK: gmi xzr, x0, x30      // encoding: [0x1f,0x14,0xde,0x9a]
82// CHECK: gmi x30, x0, xzr      // encoding: [0x1e,0x14,0xdf,0x9a]
83
84// NOMTE:      instruction requires: mte
85// NOMTE-NEXT: gmi x0, x1, x2
86// NOMTE:      instruction requires: mte
87// NOMTE-NEXT: gmi x3, sp, x4
88// NOMTE:      instruction requires: mte
89// NOMTE-NEXT: gmi xzr, x0, x30
90// NOMTE:      instruction requires: mte
91// NOMTE-NEXT: gmi x30, x0, xzr
92
93stg x0,  [x1]
94stg x1,  [x1, #-4096]
95stg x2,  [x2, #4080]
96stg x3,  [sp, #16]
97stg sp,  [sp, #16]
98
99// CHECK: stg x0,  [x1]              // encoding: [0x20,0x08,0x20,0xd9]
100// CHECK: stg x1,  [x1, #-4096]      // encoding: [0x21,0x08,0x30,0xd9]
101// CHECK: stg x2,  [x2, #4080]       // encoding: [0x42,0xf8,0x2f,0xd9]
102// CHECK: stg x3,  [sp, #16]         // encoding: [0xe3,0x1b,0x20,0xd9]
103// CHECK: stg sp,  [sp, #16]         // encoding: [0xff,0x1b,0x20,0xd9]
104
105// NOMTE:      instruction requires: mte
106// NOMTE-NEXT: stg
107// NOMTE:      instruction requires: mte
108// NOMTE-NEXT: stg
109// NOMTE:      instruction requires: mte
110// NOMTE-NEXT: stg
111// NOMTE:      instruction requires: mte
112// NOMTE-NEXT: stg
113// NOMTE:      instruction requires: mte
114// NOMTE-NEXT: stg
115
116stzg x0,  [x1]
117stzg x1,  [x1, #-4096]
118stzg x2,  [x2, #4080]
119stzg x3,  [sp, #16]
120stzg sp,  [sp, #16]
121
122// CHECK: stzg x0,  [x1]             // encoding: [0x20,0x08,0x60,0xd9]
123// CHECK: stzg x1,  [x1, #-4096]     // encoding: [0x21,0x08,0x70,0xd9]
124// CHECK: stzg x2,  [x2, #4080]      // encoding: [0x42,0xf8,0x6f,0xd9]
125// CHECK: stzg x3,  [sp, #16]        // encoding: [0xe3,0x1b,0x60,0xd9]
126// CHECK: stzg sp,  [sp, #16]        // encoding: [0xff,0x1b,0x60,0xd9]
127
128// NOMTE:      instruction requires: mte
129// NOMTE-NEXT: stzg
130// NOMTE:      instruction requires: mte
131// NOMTE-NEXT: stzg
132// NOMTE:      instruction requires: mte
133// NOMTE-NEXT: stzg
134// NOMTE:      instruction requires: mte
135// NOMTE-NEXT: stzg
136// NOMTE:      instruction requires: mte
137// NOMTE-NEXT: stzg
138
139stg x0,  [x1, #-4096]!
140stg x1,  [x2, #4080]!
141stg x2,  [sp, #16]!
142stg sp,  [sp, #16]!
143
144// CHECK: stg x0,  [x1, #-4096]!      // encoding: [0x20,0x0c,0x30,0xd9]
145// CHECK: stg x1,  [x2, #4080]!       // encoding: [0x41,0xfc,0x2f,0xd9]
146// CHECK: stg x2,  [sp, #16]!         // encoding: [0xe2,0x1f,0x20,0xd9]
147// CHECK: stg sp,  [sp, #16]!         // encoding: [0xff,0x1f,0x20,0xd9]
148
149// NOMTE:      instruction requires: mte
150// NOMTE-NEXT: stg
151// NOMTE:      instruction requires: mte
152// NOMTE-NEXT: stg
153// NOMTE:      instruction requires: mte
154// NOMTE-NEXT: stg
155// NOMTE:      instruction requires: mte
156// NOMTE-NEXT: stg
157
158stzg x0,  [x1, #-4096]!
159stzg x1,  [x2, #4080]!
160stzg x2,  [sp, #16]!
161stzg sp,  [sp, #16]!
162
163// CHECK: stzg x0,  [x1, #-4096]!     // encoding: [0x20,0x0c,0x70,0xd9]
164// CHECK: stzg x1,  [x2, #4080]!      // encoding: [0x41,0xfc,0x6f,0xd9]
165// CHECK: stzg x2,  [sp, #16]!        // encoding: [0xe2,0x1f,0x60,0xd9]
166// CHECK: stzg sp,  [sp, #16]!        // encoding: [0xff,0x1f,0x60,0xd9]
167
168// NOMTE:      instruction requires: mte
169// NOMTE-NEXT: stzg
170// NOMTE:      instruction requires: mte
171// NOMTE-NEXT: stzg
172// NOMTE:      instruction requires: mte
173// NOMTE-NEXT: stzg
174// NOMTE:      instruction requires: mte
175// NOMTE-NEXT: stzg
176
177stg x0,  [x1], #-4096
178stg x1,  [x2], #4080
179stg x2,  [sp], #16
180stg sp,  [sp], #16
181
182// CHECK: stg x0,  [x1], #-4096       // encoding: [0x20,0x04,0x30,0xd9]
183// CHECK: stg x1,  [x2], #4080        // encoding: [0x41,0xf4,0x2f,0xd9]
184// CHECK: stg x2,  [sp], #16          // encoding: [0xe2,0x17,0x20,0xd9]
185// CHECK: stg sp,  [sp], #16          // encoding: [0xff,0x17,0x20,0xd9]
186
187// NOMTE:      instruction requires: mte
188// NOMTE-NEXT: stg
189// NOMTE:      instruction requires: mte
190// NOMTE-NEXT: stg
191// NOMTE:      instruction requires: mte
192// NOMTE-NEXT: stg
193// NOMTE:      instruction requires: mte
194// NOMTE-NEXT: stg
195
196stzg x0,  [x1], #-4096
197stzg x1,  [x2], #4080
198stzg x2,  [sp], #16
199stzg sp,  [sp], #16
200
201// CHECK: stzg x0,  [x1], #-4096      // encoding: [0x20,0x04,0x70,0xd9]
202// CHECK: stzg x1,  [x2], #4080       // encoding: [0x41,0xf4,0x6f,0xd9]
203// CHECK: stzg x2,  [sp], #16         // encoding: [0xe2,0x17,0x60,0xd9]
204// CHECK: stzg sp,  [sp], #16         // encoding: [0xff,0x17,0x60,0xd9]
205
206// NOMTE:      instruction requires: mte
207// NOMTE-NEXT: stzg
208// NOMTE:      instruction requires: mte
209// NOMTE-NEXT: stzg
210// NOMTE:      instruction requires: mte
211// NOMTE-NEXT: stzg
212// NOMTE:      instruction requires: mte
213// NOMTE-NEXT: stzg
214
215st2g x0,  [x1]
216st2g x1,  [x1, #-4096]
217st2g x2,  [x2, #4080]
218st2g x3,  [sp, #16]
219st2g sp,  [sp, #16]
220
221// CHECK: st2g x0,  [x1]              // encoding: [0x20,0x08,0xa0,0xd9]
222// CHECK: st2g x1,  [x1, #-4096]      // encoding: [0x21,0x08,0xb0,0xd9]
223// CHECK: st2g x2,  [x2, #4080]       // encoding: [0x42,0xf8,0xaf,0xd9]
224// CHECK: st2g x3,  [sp, #16]         // encoding: [0xe3,0x1b,0xa0,0xd9]
225// CHECK: st2g sp,  [sp, #16]         // encoding: [0xff,0x1b,0xa0,0xd9]
226
227// NOMTE:      instruction requires: mte
228// NOMTE-NEXT: st2g
229// NOMTE:      instruction requires: mte
230// NOMTE-NEXT: st2g
231// NOMTE:      instruction requires: mte
232// NOMTE-NEXT: st2g
233// NOMTE:      instruction requires: mte
234// NOMTE-NEXT: st2g
235// NOMTE:      instruction requires: mte
236// NOMTE-NEXT: st2g
237
238stz2g x0,  [x1]
239stz2g x1,  [x1, #-4096]
240stz2g x2,  [x2, #4080]
241stz2g x3,  [sp, #16]
242stz2g sp,  [sp, #16]
243
244// CHECK: stz2g x0,  [x1]             // encoding: [0x20,0x08,0xe0,0xd9]
245// CHECK: stz2g x1,  [x1, #-4096]     // encoding: [0x21,0x08,0xf0,0xd9]
246// CHECK: stz2g x2,  [x2, #4080]      // encoding: [0x42,0xf8,0xef,0xd9]
247// CHECK: stz2g x3,  [sp, #16]        // encoding: [0xe3,0x1b,0xe0,0xd9]
248// CHECK: stz2g sp,  [sp, #16]        // encoding: [0xff,0x1b,0xe0,0xd9]
249
250// NOMTE:      instruction requires: mte
251// NOMTE-NEXT: stz2g
252// NOMTE:      instruction requires: mte
253// NOMTE-NEXT: stz2g
254// NOMTE:      instruction requires: mte
255// NOMTE-NEXT: stz2g
256// NOMTE:      instruction requires: mte
257// NOMTE-NEXT: stz2g
258// NOMTE:      instruction requires: mte
259// NOMTE-NEXT: stz2g
260
261st2g x0,  [x1, #-4096]!
262st2g x1,  [x2, #4080]!
263st2g x2,  [sp, #16]!
264st2g sp,  [sp, #16]!
265
266// CHECK: st2g x0,  [x1, #-4096]!     // encoding: [0x20,0x0c,0xb0,0xd9]
267// CHECK: st2g x1,  [x2, #4080]!      // encoding: [0x41,0xfc,0xaf,0xd9]
268// CHECK: st2g x2,  [sp, #16]!        // encoding: [0xe2,0x1f,0xa0,0xd9]
269// CHECK: st2g sp,  [sp, #16]!        // encoding: [0xff,0x1f,0xa0,0xd9]
270
271// NOMTE:      instruction requires: mte
272// NOMTE-NEXT: st2g
273// NOMTE:      instruction requires: mte
274// NOMTE-NEXT: st2g
275// NOMTE:      instruction requires: mte
276// NOMTE-NEXT: st2g
277// NOMTE:      instruction requires: mte
278// NOMTE-NEXT: st2g
279
280stz2g x0,  [x1, #-4096]!
281stz2g x1,  [x2, #4080]!
282stz2g x2,  [sp, #16]!
283stz2g sp,  [sp, #16]!
284
285// CHECK: stz2g x0,  [x1, #-4096]!    // encoding: [0x20,0x0c,0xf0,0xd9]
286// CHECK: stz2g x1,  [x2, #4080]!     // encoding: [0x41,0xfc,0xef,0xd9]
287// CHECK: stz2g x2,  [sp, #16]!       // encoding: [0xe2,0x1f,0xe0,0xd9]
288// CHECK: stz2g sp,  [sp, #16]!       // encoding: [0xff,0x1f,0xe0,0xd9]
289
290// NOMTE:      instruction requires: mte
291// NOMTE-NEXT: stz2g
292// NOMTE:      instruction requires: mte
293// NOMTE-NEXT: stz2g
294// NOMTE:      instruction requires: mte
295// NOMTE-NEXT: stz2g
296// NOMTE:      instruction requires: mte
297// NOMTE-NEXT: stz2g
298
299st2g x0,  [x1], #-4096
300st2g x1,  [x2], #4080
301st2g x2,  [sp], #16
302st2g sp,  [sp], #16
303
304// CHECK: st2g x0,  [x1], #-4096      // encoding: [0x20,0x04,0xb0,0xd9]
305// CHECK: st2g x1,  [x2], #4080       // encoding: [0x41,0xf4,0xaf,0xd9]
306// CHECK: st2g x2,  [sp], #16         // encoding: [0xe2,0x17,0xa0,0xd9]
307// CHECK: st2g sp,  [sp], #16         // encoding: [0xff,0x17,0xa0,0xd9]
308
309// NOMTE:      instruction requires: mte
310// NOMTE-NEXT: st2g
311// NOMTE:      instruction requires: mte
312// NOMTE-NEXT: st2g
313// NOMTE:      instruction requires: mte
314// NOMTE-NEXT: st2g
315// NOMTE:      instruction requires: mte
316// NOMTE-NEXT: st2g
317
318stz2g x0,  [x1], #-4096
319stz2g x1,  [x2], #4080
320stz2g x2,  [sp], #16
321stz2g sp,  [sp], #16
322
323// CHECK: stz2g x0,  [x1], #-4096     // encoding: [0x20,0x04,0xf0,0xd9]
324// CHECK: stz2g x1,  [x2], #4080      // encoding: [0x41,0xf4,0xef,0xd9]
325// CHECK: stz2g x2,  [sp], #16        // encoding: [0xe2,0x17,0xe0,0xd9]
326// CHECK: stz2g sp,  [sp], #16        // encoding: [0xff,0x17,0xe0,0xd9]
327
328// NOMTE:      instruction requires: mte
329// NOMTE-NEXT: stz2g
330// NOMTE:      instruction requires: mte
331// NOMTE-NEXT: stz2g
332// NOMTE:      instruction requires: mte
333// NOMTE-NEXT: stz2g
334// NOMTE:      instruction requires: mte
335// NOMTE-NEXT: stz2g
336
337stgp x0, x1, [x2]
338stgp x0, x1, [x2, #-1024]
339stgp x0, x1, [x2, #1008]
340stgp x0, x1, [sp, #16]
341stgp xzr, x1, [x2, #16]
342stgp x0, xzr, [x2, #16]
343
344// CHECK: stgp x0, x1, [x2]           // encoding: [0x40,0x04,0x00,0x69]
345// CHECK: stgp x0, x1, [x2, #-1024]   // encoding: [0x40,0x04,0x20,0x69]
346// CHECK: stgp x0, x1, [x2, #1008]    // encoding: [0x40,0x84,0x1f,0x69]
347// CHECK: stgp x0, x1, [sp, #16]      // encoding: [0xe0,0x87,0x00,0x69]
348// CHECK: stgp xzr, x1, [x2, #16]     // encoding: [0x5f,0x84,0x00,0x69]
349// CHECK: stgp x0, xzr, [x2, #16]     // encoding: [0x40,0xfc,0x00,0x69]
350
351// NOMTE:      instruction requires: mte
352// NOMTE-NEXT: stgp
353// NOMTE:      instruction requires: mte
354// NOMTE-NEXT: stgp
355// NOMTE:      instruction requires: mte
356// NOMTE-NEXT: stgp
357// NOMTE:      instruction requires: mte
358// NOMTE-NEXT: stgp
359
360stgp x0, x1, [x2, #-1024]!
361stgp x0, x1, [x2, #1008]!
362stgp x0, x1, [sp, #16]!
363stgp xzr, x1, [x2, #16]!
364stgp x0, xzr, [x2, #16]!
365
366// CHECK: stgp x0, x1, [x2, #-1024]!   // encoding: [0x40,0x04,0xa0,0x69]
367// CHECK: stgp x0, x1, [x2, #1008]!    // encoding: [0x40,0x84,0x9f,0x69]
368// CHECK: stgp x0, x1, [sp, #16]!      // encoding: [0xe0,0x87,0x80,0x69]
369// CHECK: stgp xzr, x1, [x2, #16]!     // encoding: [0x5f,0x84,0x80,0x69]
370// CHECK: stgp x0, xzr, [x2, #16]!     // encoding: [0x40,0xfc,0x80,0x69]
371
372// NOMTE:      instruction requires: mte
373// NOMTE-NEXT: stgp
374// NOMTE:      instruction requires: mte
375// NOMTE-NEXT: stgp
376// NOMTE:      instruction requires: mte
377// NOMTE-NEXT: stgp
378// NOMTE:      instruction requires: mte
379// NOMTE-NEXT: stgp
380// NOMTE:      instruction requires: mte
381// NOMTE-NEXT: stgp
382
383stgp x0, x1, [x2], #-1024
384stgp x0, x1, [x2], #1008
385stgp x0, x1, [sp], #16
386stgp xzr, x1, [x2], #16
387stgp x0, xzr, [x2], #16
388
389// CHECK: stgp x0, x1, [x2], #-1024    // encoding: [0x40,0x04,0xa0,0x68]
390// CHECK: stgp x0, x1, [x2], #1008     // encoding: [0x40,0x84,0x9f,0x68]
391// CHECK: stgp x0, x1, [sp], #16       // encoding: [0xe0,0x87,0x80,0x68]
392// CHECK: stgp xzr, x1, [x2], #16      // encoding: [0x5f,0x84,0x80,0x68]
393// CHECK: stgp x0, xzr, [x2], #16      // encoding: [0x40,0xfc,0x80,0x68]
394
395// NOMTE:      instruction requires: mte
396// NOMTE-NEXT: stgp
397// NOMTE:      instruction requires: mte
398// NOMTE-NEXT: stgp
399// NOMTE:      instruction requires: mte
400// NOMTE-NEXT: stgp
401// NOMTE:      instruction requires: mte
402// NOMTE-NEXT: stgp
403// NOMTE:      instruction requires: mte
404// NOMTE-NEXT: stgp
405
406dc igvac, x0
407dc igsw, x1
408dc cgsw, x2
409dc cigsw, x3
410dc cgvac, x4
411dc cgvap, x5
412dc cgvadp, x6
413dc cigvac, x7
414dc gva, x8
415dc igdvac, x9
416dc igdsw, x10
417dc cgdsw, x11
418dc cigdsw, x12
419dc cgdvac, x13
420dc cgdvap, x14
421dc cgdvadp, x15
422dc cigdvac, x16
423dc gzva, x17
424
425// CHECK: dc igvac, x0          // encoding: [0x60,0x76,0x08,0xd5]
426// CHECK: dc igsw, x1           // encoding: [0x81,0x76,0x08,0xd5]
427// CHECK: dc cgsw, x2           // encoding: [0x82,0x7a,0x08,0xd5]
428// CHECK: dc cigsw, x3          // encoding: [0x83,0x7e,0x08,0xd5]
429// CHECK: dc cgvac, x4          // encoding: [0x64,0x7a,0x0b,0xd5]
430// CHECK: dc cgvap, x5          // encoding: [0x65,0x7c,0x0b,0xd5]
431// CHECK: dc cgvadp, x6         // encoding: [0x66,0x7d,0x0b,0xd5]
432// CHECK: dc cigvac, x7         // encoding: [0x67,0x7e,0x0b,0xd5]
433// CHECK: dc gva, x8            // encoding: [0x68,0x74,0x0b,0xd5]
434// CHECK: dc igdvac, x9         // encoding: [0xa9,0x76,0x08,0xd5]
435// CHECK: dc igdsw, x10         // encoding: [0xca,0x76,0x08,0xd5]
436// CHECK: dc cgdsw, x11         // encoding: [0xcb,0x7a,0x08,0xd5]
437// CHECK: dc cigdsw, x12        // encoding: [0xcc,0x7e,0x08,0xd5]
438// CHECK: dc cgdvac, x13        // encoding: [0xad,0x7a,0x0b,0xd5]
439// CHECK: dc cgdvap, x14        // encoding: [0xae,0x7c,0x0b,0xd5]
440// CHECK: dc cgdvadp, x15       // encoding: [0xaf,0x7d,0x0b,0xd5]
441// CHECK: dc cigdvac, x16       // encoding: [0xb0,0x7e,0x0b,0xd5]
442// CHECK: dc gzva, x17          // encoding: [0x91,0x74,0x0b,0xd5]
443
444// NOMTE: DC IGVAC requires mte
445// NOMTE: DC IGSW requires mte
446// NOMTE: DC CGSW requires mte
447// NOMTE: DC CIGSW requires mte
448// NOMTE: DC CGVAC requires mte
449// NOMTE: DC CGVAP requires mte
450// NOMTE: DC CGVADP requires mte
451// NOMTE: DC CIGVAC requires mte
452// NOMTE: DC GVA requires mte
453// NOMTE: DC IGDVAC requires mte
454// NOMTE: DC IGDSW requires mte
455// NOMTE: DC CGDSW requires mte
456// NOMTE: DC CIGDSW requires mte
457// NOMTE: DC CGDVAC requires mte
458// NOMTE: DC CGDVAP requires mte
459// NOMTE: DC CGDVADP requires mte
460// NOMTE: DC CIGDVAC requires mte
461// NOMTE: DC GZVA requires mte
462
463mrs x0, tco
464mrs x1, gcr_el1
465mrs x2, rgsr_el1
466mrs x3, tfsr_el1
467mrs x4, tfsr_el2
468mrs x5, tfsr_el3
469mrs x6, tfsr_el12
470mrs x7, tfsre0_el1
471mrs x7, gmid_el1
472
473// CHECK: mrs x0, TCO           // encoding: [0xe0,0x42,0x3b,0xd5]
474// CHECK: mrs x1, GCR_EL1       // encoding: [0xc1,0x10,0x38,0xd5]
475// CHECK: mrs x2, RGSR_EL1      // encoding: [0xa2,0x10,0x38,0xd5]
476// CHECK: mrs x3, TFSR_EL1      // encoding: [0x03,0x56,0x38,0xd5]
477// CHECK: mrs x4, TFSR_EL2      // encoding: [0x04,0x56,0x3c,0xd5]
478// CHECK: mrs x5, TFSR_EL3      // encoding: [0x05,0x56,0x3e,0xd5]
479// CHECK: mrs x6, TFSR_EL12     // encoding: [0x06,0x56,0x3d,0xd5]
480// CHECK: mrs x7, TFSRE0_EL1    // encoding: [0x27,0x56,0x38,0xd5]
481// CHECK: mrs x7, GMID_EL1      // encoding: [0x87,0x00,0x39,0xd5]
482
483// NOMTE: expected readable system register
484// NOMTE-NEXT: tco
485// NOMTE: expected readable system register
486// NOMTE-NEXT: gcr_el1
487// NOMTE: expected readable system register
488// NOMTE-NEXT: rgsr_el1
489// NOMTE: expected readable system register
490// NOMTE-NEXT: tfsr_el1
491// NOMTE: expected readable system register
492// NOMTE-NEXT: tfsr_el2
493// NOMTE: expected readable system register
494// NOMTE-NEXT: tfsr_el3
495// NOMTE: expected readable system register
496// NOMTE-NEXT: tfsr_el12
497// NOMTE: expected readable system register
498// NOMTE-NEXT: tfsre0_el1
499// NOMTE: expected readable system register
500// NOMTE-NEXT: gmid_el1
501
502msr tco, #0
503
504// CHECK: msr TCO, #0           // encoding: [0x9f,0x40,0x03,0xd5]
505
506// NOMTE: expected writable system register or pstate
507// NOMTE-NEXT: tco
508
509msr tco, x0
510msr gcr_el1, x1
511msr rgsr_el1, x2
512msr tfsr_el1, x3
513msr tfsr_el2, x4
514msr tfsr_el3, x5
515msr tfsr_el12, x6
516msr tfsre0_el1, x7
517
518// CHECK: msr TCO, x0           // encoding: [0xe0,0x42,0x1b,0xd5]
519// CHECK: msr GCR_EL1, x1       // encoding: [0xc1,0x10,0x18,0xd5]
520// CHECK: msr RGSR_EL1, x2      // encoding: [0xa2,0x10,0x18,0xd5]
521// CHECK: msr TFSR_EL1, x3      // encoding: [0x03,0x56,0x18,0xd5]
522// CHECK: msr TFSR_EL2, x4      // encoding: [0x04,0x56,0x1c,0xd5]
523// CHECK: msr TFSR_EL3, x5      // encoding: [0x05,0x56,0x1e,0xd5]
524// CHECK: msr TFSR_EL12, x6     // encoding: [0x06,0x56,0x1d,0xd5]
525// CHECK: msr TFSRE0_EL1, x7    // encoding: [0x27,0x56,0x18,0xd5]
526
527// NOMTE: expected writable system register or pstate
528// NOMTE-NEXT: tco
529// NOMTE: expected writable system register or pstate
530// NOMTE-NEXT: gcr_el1
531// NOMTE: expected writable system register or pstate
532// NOMTE-NEXT: rgsr_el1
533// NOMTE: expected writable system register or pstate
534// NOMTE-NEXT: tfsr_el1
535// NOMTE: expected writable system register or pstate
536// NOMTE-NEXT: tfsr_el2
537// NOMTE: expected writable system register or pstate
538// NOMTE-NEXT: tfsr_el3
539// NOMTE: expected writable system register or pstate
540// NOMTE-NEXT: tfsr_el12
541// NOMTE: expected writable system register or pstate
542// NOMTE-NEXT: tfsre0_el1
543
544subp  x0, x1, x2
545subp  x0, sp, sp
546subps x0, x1, x2
547subps x0, sp, sp
548
549// CHECK: subp  x0, x1, x2  // encoding: [0x20,0x00,0xc2,0x9a]
550// CHECK: subp  x0, sp, sp  // encoding: [0xe0,0x03,0xdf,0x9a]
551// CHECK: subps x0, x1, x2  // encoding: [0x20,0x00,0xc2,0xba]
552// CHECK: subps x0, sp, sp  // encoding: [0xe0,0x03,0xdf,0xba]
553
554// NOMTE: instruction requires: mte
555// NOMTE: instruction requires: mte
556// NOMTE: instruction requires: mte
557
558subps xzr, x0, x1
559cmpp  x0, x1
560subps xzr, sp, sp
561cmpp  sp, sp
562
563// CHECK: subps xzr, x0, x1 // encoding: [0x1f,0x00,0xc1,0xba]
564// CHECK: subps xzr, x0, x1 // encoding: [0x1f,0x00,0xc1,0xba]
565// CHECK: subps xzr, sp, sp // encoding: [0xff,0x03,0xdf,0xba]
566// CHECK: subps xzr, sp, sp // encoding: [0xff,0x03,0xdf,0xba]
567
568// NOMTE: instruction requires: mte
569// NOMTE: instruction requires: mte
570// NOMTE: instruction requires: mte
571// NOMTE: instruction requires: mte
572
573ldg X0, [X1, #0]
574ldg X2, [sp, #-4096]
575ldg x3, [x4, #4080]
576
577// CHECK: ldg x0, [x1]         // encoding: [0x20,0x00,0x60,0xd9]
578// CHECK: ldg x2, [sp, #-4096] // encoding: [0xe2,0x03,0x70,0xd9]
579// CHECK: ldg x3, [x4, #4080]  // encoding: [0x83,0xf0,0x6f,0xd9]
580
581// NOMTE: instruction requires: mte
582// NOMTE: instruction requires: mte
583// NOMTE: instruction requires: mte
584
585ldgm x0, [x1]
586ldgm x1, [sp]
587ldgm xzr, [x2]
588
589// CHECK: ldgm x0, [x1]  // encoding: [0x20,0x00,0xe0,0xd9]
590// CHECK: ldgm x1, [sp]  // encoding: [0xe1,0x03,0xe0,0xd9]
591// CHECK: ldgm xzr, [x2] // encoding: [0x5f,0x00,0xe0,0xd9]
592
593// NOMTE: instruction requires: mte
594// NOMTE: instruction requires: mte
595// NOMTE: instruction requires: mte
596
597stgm x0, [x1]
598stgm x1, [sp]
599stgm xzr, [x2]
600
601// CHECK: stgm x0, [x1]  // encoding: [0x20,0x00,0xa0,0xd9]
602// CHECK: stgm x1, [sp]  // encoding: [0xe1,0x03,0xa0,0xd9]
603// CHECK: stgm xzr, [x2] // encoding: [0x5f,0x00,0xa0,0xd9]
604
605// NOMTE: instruction requires: mte
606// NOMTE: instruction requires: mte
607// NOMTE: instruction requires: mte
608
609stzgm x0, [x1]
610stzgm x1, [sp]
611stzgm xzr, [x2]
612
613// CHECK: stzgm x0, [x1]  // encoding: [0x20,0x00,0x20,0xd9]
614// CHECK: stzgm x1, [sp]  // encoding: [0xe1,0x03,0x20,0xd9]
615// CHECK: stzgm xzr, [x2] // encoding: [0x5f,0x00,0x20,0xd9]
616
617// NOMTE: instruction requires: mte
618// NOMTE: instruction requires: mte
619// NOMTE: instruction requires: mte
620