1 // RUN
: llvm-mc
-triple aarch64
-show-encoding
-mattr
=+mte
< %s | FileCheck
%s
2 // RUN
: not llvm-mc
-triple aarch64
-show-encoding
-mattr
=+v8.5
a < %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
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]
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
31 addg x3
, x4
, #1008, #6
32 addg x5
, x6
, #112, #15
37 subg x3
, x4
, #1008, #6
38 subg x5
, x6
, #112, #15
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]
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]
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
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
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]
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
98 // CHECK
: stg
[x1
] // encoding
: [0x3f,0x08,0x20,0xd9]
99 // CHECK
: stg
[x1
, #-4096] // encoding: [0x3f,0x08,0x30,0xd9]
100 // CHECK
: stg
[x2
, #4080] // encoding: [0x5f,0xf8,0x2f,0xd9]
101 // CHECK
: stg
[sp
, #16] // encoding: [0xff,0x1b,0x20,0xd9]
103 // NOMTE
: instruction requires
: mte
105 // NOMTE
: instruction requires
: mte
107 // NOMTE
: instruction requires
: mte
109 // NOMTE
: instruction requires
: mte
117 // CHECK
: stzg
[x1
] // encoding
: [0x3f,0x08,0x60,0xd9]
118 // CHECK
: stzg
[x1
, #-4096] // encoding: [0x3f,0x08,0x70,0xd9]
119 // CHECK
: stzg
[x2
, #4080] // encoding: [0x5f,0xf8,0x6f,0xd9]
120 // CHECK
: stzg
[sp
, #16] // encoding: [0xff,0x1b,0x60,0xd9]
122 // NOMTE
: instruction requires
: mte
124 // NOMTE
: instruction requires
: mte
126 // NOMTE
: instruction requires
: mte
128 // NOMTE
: instruction requires
: mte
135 // CHECK
: stg
[x1
, #-4096]! // encoding: [0x3f,0x0c,0x30,0xd9]
136 // CHECK
: stg
[x2
, #4080]! // encoding: [0x5f,0xfc,0x2f,0xd9]
137 // CHECK
: stg
[sp
, #16]! // encoding: [0xff,0x1f,0x20,0xd9]
139 // NOMTE
: instruction requires
: mte
141 // NOMTE
: instruction requires
: mte
143 // NOMTE
: instruction requires
: mte
150 // CHECK
: stzg
[x1
, #-4096]! // encoding: [0x3f,0x0c,0x70,0xd9]
151 // CHECK
: stzg
[x2
, #4080]! // encoding: [0x5f,0xfc,0x6f,0xd9]
152 // CHECK
: stzg
[sp
, #16]! // encoding: [0xff,0x1f,0x60,0xd9]
154 // NOMTE
: instruction requires
: mte
156 // NOMTE
: instruction requires
: mte
158 // NOMTE
: instruction requires
: mte
165 // CHECK
: stg
[x1
], #-4096 // encoding: [0x3f,0x04,0x30,0xd9]
166 // CHECK
: stg
[x2
], #4080 // encoding: [0x5f,0xf4,0x2f,0xd9]
167 // CHECK
: stg
[sp
], #16 // encoding: [0xff,0x17,0x20,0xd9]
169 // NOMTE
: instruction requires
: mte
171 // NOMTE
: instruction requires
: mte
173 // NOMTE
: instruction requires
: mte
180 // CHECK
: stzg
[x1
], #-4096 // encoding: [0x3f,0x04,0x70,0xd9]
181 // CHECK
: stzg
[x2
], #4080 // encoding: [0x5f,0xf4,0x6f,0xd9]
182 // CHECK
: stzg
[sp
], #16 // encoding: [0xff,0x17,0x60,0xd9]
184 // NOMTE
: instruction requires
: mte
186 // NOMTE
: instruction requires
: mte
188 // NOMTE
: instruction requires
: mte
196 // CHECK
: st2g
[x1
] // encoding
: [0x3f,0x08,0xa0,0xd9]
197 // CHECK
: st2g
[x1
, #-4096] // encoding: [0x3f,0x08,0xb0,0xd9]
198 // CHECK
: st2g
[x2
, #4080] // encoding: [0x5f,0xf8,0xaf,0xd9]
199 // CHECK
: st2g
[sp
, #16] // encoding: [0xff,0x1b,0xa0,0xd9]
201 // NOMTE
: instruction requires
: mte
203 // NOMTE
: instruction requires
: mte
205 // NOMTE
: instruction requires
: mte
207 // NOMTE
: instruction requires
: mte
215 // CHECK
: stz2g
[x1
] // encoding
: [0x3f,0x08,0xe0,0xd9]
216 // CHECK
: stz2g
[x1
, #-4096] // encoding: [0x3f,0x08,0xf0,0xd9]
217 // CHECK
: stz2g
[x2
, #4080] // encoding: [0x5f,0xf8,0xef,0xd9]
218 // CHECK
: stz2g
[sp
, #16] // encoding: [0xff,0x1b,0xe0,0xd9]
220 // NOMTE
: instruction requires
: mte
222 // NOMTE
: instruction requires
: mte
224 // NOMTE
: instruction requires
: mte
226 // NOMTE
: instruction requires
: mte
233 // CHECK
: st2g
[x1
, #-4096]! // encoding: [0x3f,0x0c,0xb0,0xd9]
234 // CHECK
: st2g
[x2
, #4080]! // encoding: [0x5f,0xfc,0xaf,0xd9]
235 // CHECK
: st2g
[sp
, #16]! // encoding: [0xff,0x1f,0xa0,0xd9]
237 // NOMTE
: instruction requires
: mte
239 // NOMTE
: instruction requires
: mte
241 // NOMTE
: instruction requires
: mte
248 // CHECK
: stz2g
[x1
, #-4096]! // encoding: [0x3f,0x0c,0xf0,0xd9]
249 // CHECK
: stz2g
[x2
, #4080]! // encoding: [0x5f,0xfc,0xef,0xd9]
250 // CHECK
: stz2g
[sp
, #16]! // encoding: [0xff,0x1f,0xe0,0xd9]
252 // NOMTE
: instruction requires
: mte
254 // NOMTE
: instruction requires
: mte
256 // NOMTE
: instruction requires
: mte
263 // CHECK
: st2g
[x1
], #-4096 // encoding: [0x3f,0x04,0xb0,0xd9]
264 // CHECK
: st2g
[x2
], #4080 // encoding: [0x5f,0xf4,0xaf,0xd9]
265 // CHECK
: st2g
[sp
], #16 // encoding: [0xff,0x17,0xa0,0xd9]
267 // NOMTE
: instruction requires
: mte
269 // NOMTE
: instruction requires
: mte
271 // NOMTE
: instruction requires
: mte
278 // CHECK
: stz2g
[x1
], #-4096 // encoding: [0x3f,0x04,0xf0,0xd9]
279 // CHECK
: stz2g
[x2
], #4080 // encoding: [0x5f,0xf4,0xef,0xd9]
280 // CHECK
: stz2g
[sp
], #16 // encoding: [0xff,0x17,0xe0,0xd9]
282 // NOMTE
: instruction requires
: mte
284 // NOMTE
: instruction requires
: mte
286 // NOMTE
: instruction requires
: mte
290 stgp x0
, x1
, [x2
, #-1024]
291 stgp x0
, x1
, [x2
, #1008]
292 stgp x0
, x1
, [sp
, #16]
293 stgp xzr
, x1
, [x2
, #16]
294 stgp x0
, xzr
, [x2
, #16]
296 // CHECK
: stgp x0
, x1
, [x2
] // encoding
: [0x40,0x04,0x00,0x69]
297 // CHECK
: stgp x0
, x1
, [x2
, #-1024] // encoding: [0x40,0x04,0x20,0x69]
298 // CHECK
: stgp x0
, x1
, [x2
, #1008] // encoding: [0x40,0x84,0x1f,0x69]
299 // CHECK
: stgp x0
, x1
, [sp
, #16] // encoding: [0xe0,0x87,0x00,0x69]
300 // CHECK
: stgp xzr
, x1
, [x2
, #16] // encoding: [0x5f,0x84,0x00,0x69]
301 // CHECK
: stgp x0
, xzr
, [x2
, #16] // encoding: [0x40,0xfc,0x00,0x69]
303 // NOMTE
: instruction requires
: mte
305 // NOMTE
: instruction requires
: mte
307 // NOMTE
: instruction requires
: mte
309 // NOMTE
: instruction requires
: mte
312 stgp x0
, x1
, [x2
, #-1024]!
313 stgp x0
, x1
, [x2
, #1008]!
314 stgp x0
, x1
, [sp
, #16]!
315 stgp xzr
, x1
, [x2
, #16]!
316 stgp x0
, xzr
, [x2
, #16]!
318 // CHECK
: stgp x0
, x1
, [x2
, #-1024]! // encoding: [0x40,0x04,0xa0,0x69]
319 // CHECK
: stgp x0
, x1
, [x2
, #1008]! // encoding: [0x40,0x84,0x9f,0x69]
320 // CHECK
: stgp x0
, x1
, [sp
, #16]! // encoding: [0xe0,0x87,0x80,0x69]
321 // CHECK
: stgp xzr
, x1
, [x2
, #16]! // encoding: [0x5f,0x84,0x80,0x69]
322 // CHECK
: stgp x0
, xzr
, [x2
, #16]! // encoding: [0x40,0xfc,0x80,0x69]
324 // NOMTE
: instruction requires
: mte
326 // NOMTE
: instruction requires
: mte
328 // NOMTE
: instruction requires
: mte
330 // NOMTE
: instruction requires
: mte
332 // NOMTE
: instruction requires
: mte
335 stgp x0
, x1
, [x2
], #-1024
336 stgp x0
, x1
, [x2
], #1008
337 stgp x0
, x1
, [sp
], #16
338 stgp xzr
, x1
, [x2
], #16
339 stgp x0
, xzr
, [x2
], #16
341 // CHECK
: stgp x0
, x1
, [x2
], #-1024 // encoding: [0x40,0x04,0xa0,0x68]
342 // CHECK
: stgp x0
, x1
, [x2
], #1008 // encoding: [0x40,0x84,0x9f,0x68]
343 // CHECK
: stgp x0
, x1
, [sp
], #16 // encoding: [0xe0,0x87,0x80,0x68]
344 // CHECK
: stgp xzr
, x1
, [x2
], #16 // encoding: [0x5f,0x84,0x80,0x68]
345 // CHECK
: stgp x0
, xzr
, [x2
], #16 // encoding: [0x40,0xfc,0x80,0x68]
347 // NOMTE
: instruction requires
: mte
349 // NOMTE
: instruction requires
: mte
351 // NOMTE
: instruction requires
: mte
353 // NOMTE
: instruction requires
: mte
355 // NOMTE
: instruction requires
: mte
377 // CHECK
: dc igvac
, x0
// encoding
: [0x60,0x76,0x08,0xd5]
378 // CHECK
: dc igsw
, x1
// encoding
: [0x81,0x76,0x08,0xd5]
379 // CHECK
: dc cgsw
, x2
// encoding
: [0x82,0x7a,0x08,0xd5]
380 // CHECK
: dc cigsw
, x3
// encoding
: [0x83,0x7e,0x08,0xd5]
381 // CHECK
: dc cgvac
, x4
// encoding
: [0x64,0x7a,0x0b,0xd5]
382 // CHECK
: dc cgvap
, x5
// encoding
: [0x65,0x7c,0x0b,0xd5]
383 // CHECK
: dc cgvadp
, x6
// encoding
: [0x66,0x7d,0x0b,0xd5]
384 // CHECK
: dc cigvac
, x7
// encoding
: [0x67,0x7e,0x0b,0xd5]
385 // CHECK
: dc gva
, x8
// encoding
: [0x68,0x74,0x0b,0xd5]
386 // CHECK
: dc igdvac
, x9
// encoding
: [0xa9,0x76,0x08,0xd5]
387 // CHECK
: dc igdsw
, x10
// encoding
: [0xca,0x76,0x08,0xd5]
388 // CHECK
: dc cgdsw
, x11
// encoding
: [0xcb,0x7a,0x08,0xd5]
389 // CHECK
: dc cigdsw
, x12
// encoding
: [0xcc,0x7e,0x08,0xd5]
390 // CHECK
: dc cgdvac
, x13
// encoding
: [0xad,0x7a,0x0b,0xd5]
391 // CHECK
: dc cgdvap
, x14
// encoding
: [0xae,0x7c,0x0b,0xd5]
392 // CHECK
: dc cgdvadp
, x15
// encoding
: [0xaf,0x7d,0x0b,0xd5]
393 // CHECK
: dc cigdvac
, x16
// encoding
: [0xb0,0x7e,0x0b,0xd5]
394 // CHECK
: dc gzva
, x17
// encoding
: [0x91,0x74,0x0b,0xd5]
396 // NOMTE
: DC IGVAC requires mte
397 // NOMTE
: DC IGSW requires mte
398 // NOMTE
: DC CGSW requires mte
399 // NOMTE
: DC CIGSW requires mte
400 // NOMTE
: DC CGVAC requires mte
401 // NOMTE
: DC CGVAP requires mte
402 // NOMTE
: DC CGVADP requires mte
403 // NOMTE
: DC CIGVAC requires mte
404 // NOMTE
: DC GVA requires mte
405 // NOMTE
: DC IGDVAC requires mte
406 // NOMTE
: DC IGDSW requires mte
407 // NOMTE
: DC CGDSW requires mte
408 // NOMTE
: DC CIGDSW requires mte
409 // NOMTE
: DC CGDVAC requires mte
410 // NOMTE
: DC CGDVAP requires mte
411 // NOMTE
: DC CGDVADP requires mte
412 // NOMTE
: DC CIGDVAC requires mte
413 // NOMTE
: DC GZVA requires mte
424 // CHECK
: mrs x0
, TCO
// encoding
: [0xe0,0x42,0x3b,0xd5]
425 // CHECK
: mrs x1
, GCR_EL1
// encoding
: [0xc1,0x10,0x38,0xd5]
426 // CHECK
: mrs x2
, RGSR_EL1
// encoding
: [0xa2,0x10,0x38,0xd5]
427 // CHECK
: mrs x3
, TFSR_EL1
// encoding
: [0x03,0x65,0x38,0xd5]
428 // CHECK
: mrs x4
, TFSR_EL2
// encoding
: [0x04,0x65,0x3c,0xd5]
429 // CHECK
: mrs x5
, TFSR_EL3
// encoding
: [0x05,0x66,0x3e,0xd5]
430 // CHECK
: mrs x6
, TFSR_EL12
// encoding
: [0x06,0x66,0x3d,0xd5]
431 // CHECK
: mrs x7
, TFSRE0_EL1
// encoding
: [0x27,0x66,0x38,0xd5]
433 // NOMTE
: expected readable system register
435 // NOMTE
: expected readable system register
436 // NOMTE-NEXT
: gcr_el1
437 // NOMTE
: expected readable system register
438 // NOMTE-NEXT
: rgsr_el1
439 // NOMTE
: expected readable system register
440 // NOMTE-NEXT
: tfsr_el1
441 // NOMTE
: expected readable system register
442 // NOMTE-NEXT
: tfsr_el2
443 // NOMTE
: expected readable system register
444 // NOMTE-NEXT
: tfsr_el3
445 // NOMTE
: expected readable system register
446 // NOMTE-NEXT
: tfsr_el12
447 // NOMTE
: expected readable system register
448 // NOMTE-NEXT
: tfsre0_el1
452 // CHECK
: msr TCO
, #0 // encoding: [0x9f,0x40,0x03,0xd5]
454 // NOMTE
: expected writable system register
or pstate
466 // CHECK
: msr TCO
, x0
// encoding
: [0xe0,0x42,0x1b,0xd5]
467 // CHECK
: msr GCR_EL1
, x1
// encoding
: [0xc1,0x10,0x18,0xd5]
468 // CHECK
: msr RGSR_EL1
, x2
// encoding
: [0xa2,0x10,0x18,0xd5]
469 // CHECK
: msr TFSR_EL1
, x3
// encoding
: [0x03,0x65,0x18,0xd5]
470 // CHECK
: msr TFSR_EL2
, x4
// encoding
: [0x04,0x65,0x1c,0xd5]
471 // CHECK
: msr TFSR_EL3
, x5
// encoding
: [0x05,0x66,0x1e,0xd5]
472 // CHECK
: msr TFSR_EL12
, x6
// encoding
: [0x06,0x66,0x1d,0xd5]
473 // CHECK
: msr TFSRE0_EL1
, x7
// encoding
: [0x27,0x66,0x18,0xd5]
475 // NOMTE
: expected writable system register
or pstate
477 // NOMTE
: expected writable system register
or pstate
478 // NOMTE-NEXT
: gcr_el1
479 // NOMTE
: expected writable system register
or pstate
480 // NOMTE-NEXT
: rgsr_el1
481 // NOMTE
: expected writable system register
or pstate
482 // NOMTE-NEXT
: tfsr_el1
483 // NOMTE
: expected writable system register
or pstate
484 // NOMTE-NEXT
: tfsr_el2
485 // NOMTE
: expected writable system register
or pstate
486 // NOMTE-NEXT
: tfsr_el3
487 // NOMTE
: expected writable system register
or pstate
488 // NOMTE-NEXT
: tfsr_el12
489 // NOMTE
: expected writable system register
or pstate
490 // NOMTE-NEXT
: tfsre0_el1
497 // CHECK
: subp x0
, x1
, x2
// encoding
: [0x20,0x00,0xc2,0x9a]
498 // CHECK
: subp x0
, sp
, sp
// encoding
: [0xe0,0x03,0xdf,0x9a]
499 // CHECK
: subps x0
, x1
, x2
// encoding
: [0x20,0x00,0xc2,0xba]
500 // CHECK
: subps x0
, sp
, sp
// encoding
: [0xe0,0x03,0xdf,0xba]
502 // NOMTE
: instruction requires
: mte
503 // NOMTE
: instruction requires
: mte
504 // NOMTE
: instruction requires
: mte
511 // CHECK
: subps xzr
, x0
, x1
// encoding
: [0x1f,0x00,0xc1,0xba]
512 // CHECK
: subps xzr
, x0
, x1
// encoding
: [0x1f,0x00,0xc1,0xba]
513 // CHECK
: subps xzr
, sp
, sp
// encoding
: [0xff,0x03,0xdf,0xba]
514 // CHECK
: subps xzr
, sp
, sp
// encoding
: [0xff,0x03,0xdf,0xba]
516 // NOMTE
: instruction requires
: mte
517 // NOMTE
: instruction requires
: mte
518 // NOMTE
: instruction requires
: mte
519 // NOMTE
: instruction requires
: mte
525 // CHECK
: ldg x0
, [x1
] // encoding
: [0x20,0x00,0x60,0xd9]
526 // CHECK
: ldg x2
, [sp
, #-4096] // encoding: [0xe2,0x03,0x70,0xd9]
527 // CHECK
: ldg x3
, [x4
, #4080] // encoding: [0x83,0xf0,0x6f,0xd9]
529 // NOMTE
: instruction requires
: mte
530 // NOMTE
: instruction requires
: mte
531 // NOMTE
: instruction requires
: mte
537 // CHECK
: ldgv x0
, [x1
]! // encoding
: [0x20,0x00,0xe0,0xd9]
538 // CHECK
: ldgv x1
, [sp
]! // encoding
: [0xe1,0x03,0xe0,0xd9]
539 // CHECK
: ldgv xzr
, [x2
]! // encoding
: [0x5f,0x00,0xe0,0xd9]
541 // NOMTE
: instruction requires
: mte
542 // NOMTE
: instruction requires
: mte
548 // CHECK
: stgv x0
, [x1
]! // encoding
: [0x20,0x00,0xa0,0xd9]
549 // CHECK
: stgv x1
, [sp
]! // encoding
: [0xe1,0x03,0xa0,0xd9]
550 // CHECK
: stgv xzr
, [x2
]! // encoding
: [0x5f,0x00,0xa0,0xd9]
552 // NOMTE
: instruction requires
: mte
553 // NOMTE
: instruction requires
: mte