xref: /llvm-project/llvm/test/MC/AArch64/armv8.3a-signed-pointer.s (revision 7b23f413d1f76532825e470b523e971818d453ca)
1// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.3a -o - %s 2>&1 | \
2// RUN: FileCheck --check-prefixes=CHECK,ALL %s
3
4// RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding %s -o - > %t.1 2>%t.2
5// RUN: FileCheck --check-prefixes=NO83,ALL %s < %t.1
6// RUN: FileCheck --check-prefix=CHECK-REQ %s < %t.2
7
8.text
9  mrs x0, apiakeylo_el1
10  mrs x0, apiakeyhi_el1
11  mrs x0, apibkeylo_el1
12  mrs x0, apibkeyhi_el1
13  mrs x0, apdakeylo_el1
14  mrs x0, apdakeyhi_el1
15  mrs x0, apdbkeylo_el1
16  mrs x0, apdbkeyhi_el1
17  mrs x0, apgakeylo_el1
18  mrs x0, apgakeyhi_el1
19// ALL: .text
20// CHECK-NEXT: mrs x0, APIAKeyLo_EL1     // encoding: [0x00,0x21,0x38,0xd5]
21// CHECK-NEXT: mrs x0, APIAKeyHi_EL1     // encoding: [0x20,0x21,0x38,0xd5]
22// CHECK-NEXT: mrs x0, APIBKeyLo_EL1     // encoding: [0x40,0x21,0x38,0xd5]
23// CHECK-NEXT: mrs x0, APIBKeyHi_EL1     // encoding: [0x60,0x21,0x38,0xd5]
24// CHECK-NEXT: mrs x0, APDAKeyLo_EL1     // encoding: [0x00,0x22,0x38,0xd5]
25// CHECK-NEXT: mrs x0, APDAKeyHi_EL1     // encoding: [0x20,0x22,0x38,0xd5]
26// CHECK-NEXT: mrs x0, APDBKeyLo_EL1     // encoding: [0x40,0x22,0x38,0xd5]
27// CHECK-NEXT: mrs x0, APDBKeyHi_EL1     // encoding: [0x60,0x22,0x38,0xd5]
28// CHECK-NEXT: mrs x0, APGAKeyLo_EL1     // encoding: [0x00,0x23,0x38,0xd5]
29// CHECK-NEXT: mrs x0, APGAKeyHi_EL1     // encoding: [0x20,0x23,0x38,0xd5]
30
31// CHECK-REQ: error: expected readable system register
32// CHECK-REQ-NEXT: mrs x0, apiakeylo_el1
33// CHECK-REQ: error: expected readable system register
34// CHECK-REQ-NEXT: mrs x0, apiakeyhi_el1
35// CHECK-REQ: error: expected readable system register
36// CHECK-REQ-NEXT: mrs x0, apibkeylo_el1
37// CHECK-REQ: error: expected readable system register
38// CHECK-REQ-NEXT: mrs x0, apibkeyhi_el1
39// CHECK-REQ: error: expected readable system register
40// CHECK-REQ-NEXT: mrs x0, apdakeylo_el1
41// CHECK-REQ: error: expected readable system register
42// CHECK-REQ-NEXT: mrs x0, apdakeyhi_el1
43// CHECK-REQ: error: expected readable system register
44// CHECK-REQ-NEXT: mrs x0, apdbkeylo_el1
45// CHECK-REQ: error: expected readable system register
46// CHECK-REQ-NEXT: mrs x0, apdbkeyhi_el1
47// CHECK-REQ: error: expected readable system register
48// CHECK-REQ-NEXT: mrs x0, apgakeylo_el1
49// CHECK-REQ: error: expected readable system register
50// CHECK-REQ-NEXT: mrs x0, apgakeyhi_el1
51
52  msr apiakeylo_el1, x0
53  msr apiakeyhi_el1, x0
54  msr apibkeylo_el1, x0
55  msr apibkeyhi_el1, x0
56  msr apdakeylo_el1, x0
57  msr apdakeyhi_el1, x0
58  msr apdbkeylo_el1, x0
59  msr apdbkeyhi_el1, x0
60  msr apgakeylo_el1, x0
61  msr apgakeyhi_el1, x0
62// ALL-EMPTY:
63// ALL-EMPTY:
64// CHECK-NEXT: msr APIAKeyLo_EL1, x0     // encoding: [0x00,0x21,0x18,0xd5]
65// CHECK-NEXT: msr APIAKeyHi_EL1, x0     // encoding: [0x20,0x21,0x18,0xd5]
66// CHECK-NEXT: msr APIBKeyLo_EL1, x0     // encoding: [0x40,0x21,0x18,0xd5]
67// CHECK-NEXT: msr APIBKeyHi_EL1, x0     // encoding: [0x60,0x21,0x18,0xd5]
68// CHECK-NEXT: msr APDAKeyLo_EL1, x0     // encoding: [0x00,0x22,0x18,0xd5]
69// CHECK-NEXT: msr APDAKeyHi_EL1, x0     // encoding: [0x20,0x22,0x18,0xd5]
70// CHECK-NEXT: msr APDBKeyLo_EL1, x0     // encoding: [0x40,0x22,0x18,0xd5]
71// CHECK-NEXT: msr APDBKeyHi_EL1, x0     // encoding: [0x60,0x22,0x18,0xd5]
72// CHECK-NEXT: msr APGAKeyLo_EL1, x0     // encoding: [0x00,0x23,0x18,0xd5]
73// CHECK-NEXT: msr APGAKeyHi_EL1, x0     // encoding: [0x20,0x23,0x18,0xd5]
74
75// CHECK-REQ: error: expected writable system register or pstate
76// CHECK-REQ-NEXT:  msr apiakeylo_el1, x0
77// CHECK-REQ: error: expected writable system register or pstate
78// CHECK-REQ-NEXT:  msr apiakeyhi_el1, x0
79// CHECK-REQ: error: expected writable system register or pstate
80// CHECK-REQ-NEXT:  msr apibkeylo_el1, x0
81// CHECK-REQ: error: expected writable system register or pstate
82// CHECK-REQ-NEXT:  msr apibkeyhi_el1, x0
83// CHECK-REQ: error: expected writable system register or pstate
84// CHECK-REQ-NEXT:  msr apdakeylo_el1, x0
85// CHECK-REQ: error: expected writable system register or pstate
86// CHECK-REQ-NEXT:  msr apdakeyhi_el1, x0
87// CHECK-REQ: error: expected writable system register or pstate
88// CHECK-REQ-NEXT:  msr apdbkeylo_el1, x0
89// CHECK-REQ: error: expected writable system register or pstate
90// CHECK-REQ-NEXT:  msr apdbkeyhi_el1, x0
91// CHECK-REQ: error: expected writable system register or pstate
92// CHECK-REQ-NEXT:  msr apgakeylo_el1, x0
93// CHECK-REQ: error: expected writable system register or pstate
94// CHECK-REQ-NEXT:  msr apgakeyhi_el1, x0
95
96// ALL-EMPTY:
97// ALL-EMPTY:
98  hint #7
99  xpaclri
100// CHECK-NEXT: xpaclri        // encoding: [0xff,0x20,0x03,0xd5]
101// CHECK-NEXT: xpaclri        // encoding: [0xff,0x20,0x03,0xd5]
102// NO83-NEXT: hint #7         // encoding: [0xff,0x20,0x03,0xd5]
103// NO83-NEXT: hint #7         // encoding: [0xff,0x20,0x03,0xd5]
104  hint #8
105  pacia1716
106// CHECK-NEXT: pacia1716      // encoding: [0x1f,0x21,0x03,0xd5]
107// CHECK-NEXT: pacia1716      // encoding: [0x1f,0x21,0x03,0xd5]
108// NO83-NEXT: hint #8         // encoding: [0x1f,0x21,0x03,0xd5]
109// NO83-NEXT: hint #8         // encoding: [0x1f,0x21,0x03,0xd5]
110  hint #10
111  pacib1716
112// CHECK-NEXT: pacib1716      // encoding: [0x5f,0x21,0x03,0xd5]
113// CHECK-NEXT: pacib1716      // encoding: [0x5f,0x21,0x03,0xd5]
114// NO83-NEXT: hint #10        // encoding: [0x5f,0x21,0x03,0xd5]
115// NO83-NEXT: hint #10        // encoding: [0x5f,0x21,0x03,0xd5]
116  hint #12
117  autia1716
118// CHECK-NEXT: autia1716      // encoding: [0x9f,0x21,0x03,0xd5]
119// CHECK-NEXT: autia1716      // encoding: [0x9f,0x21,0x03,0xd5]
120// NO83-NEXT: hint #12        // encoding: [0x9f,0x21,0x03,0xd5]
121// NO83-NEXT: hint #12        // encoding: [0x9f,0x21,0x03,0xd5]
122  hint #14
123  autib1716
124// CHECK-NEXT: autib1716      // encoding: [0xdf,0x21,0x03,0xd5]
125// CHECK-NEXT: autib1716      // encoding: [0xdf,0x21,0x03,0xd5]
126// NO83-NEXT: hint #14        // encoding: [0xdf,0x21,0x03,0xd5]
127// NO83-NEXT: hint #14        // encoding: [0xdf,0x21,0x03,0xd5]
128  hint #24
129  paciaz
130// CHECK-NEXT: paciaz         // encoding: [0x1f,0x23,0x03,0xd5]
131// CHECK-NEXT: paciaz         // encoding: [0x1f,0x23,0x03,0xd5]
132// NO83-NEXT: hint #24        // encoding: [0x1f,0x23,0x03,0xd5]
133// NO83-NEXT: hint #24        // encoding: [0x1f,0x23,0x03,0xd5]
134  hint #25
135  paciasp
136// CHECK-NEXT: paciasp        // encoding: [0x3f,0x23,0x03,0xd5]
137// CHECK-NEXT: paciasp        // encoding: [0x3f,0x23,0x03,0xd5]
138// NO83-NEXT: hint #25        // encoding: [0x3f,0x23,0x03,0xd5]
139// NO83-NEXT: hint #25        // encoding: [0x3f,0x23,0x03,0xd5]
140  hint #26
141  pacibz
142// CHECK-NEXT: pacibz         // encoding: [0x5f,0x23,0x03,0xd5]
143// CHECK-NEXT: pacibz         // encoding: [0x5f,0x23,0x03,0xd5]
144// NO83-NEXT: hint #26        // encoding: [0x5f,0x23,0x03,0xd5]
145// NO83-NEXT: hint #26        // encoding: [0x5f,0x23,0x03,0xd5]
146  hint #27
147  pacibsp
148// CHECK-NEXT: pacibsp        // encoding: [0x7f,0x23,0x03,0xd5]
149// CHECK-NEXT: pacibsp        // encoding: [0x7f,0x23,0x03,0xd5]
150// NO83-NEXT: hint #27        // encoding: [0x7f,0x23,0x03,0xd5]
151// NO83-NEXT: hint #27        // encoding: [0x7f,0x23,0x03,0xd5]
152  hint #28
153  autiaz
154// CHECK-NEXT: autiaz         // encoding: [0x9f,0x23,0x03,0xd5]
155// CHECK-NEXT: autiaz         // encoding: [0x9f,0x23,0x03,0xd5]
156// NO83-NEXT: hint #28        // encoding: [0x9f,0x23,0x03,0xd5]
157// NO83-NEXT: hint #28        // encoding: [0x9f,0x23,0x03,0xd5]
158  hint #29
159  autiasp
160// CHECK-NEXT: autiasp        // encoding: [0xbf,0x23,0x03,0xd5]
161// CHECK-NEXT: autiasp        // encoding: [0xbf,0x23,0x03,0xd5]
162// NO83-NEXT: hint #29        // encoding: [0xbf,0x23,0x03,0xd5]
163// NO83-NEXT: hint #29        // encoding: [0xbf,0x23,0x03,0xd5]
164  hint #30
165  autibz
166// CHECK-NEXT: autibz         // encoding: [0xdf,0x23,0x03,0xd5]
167// CHECK-NEXT: autibz         // encoding: [0xdf,0x23,0x03,0xd5]
168// NO83-NEXT: hint #30        // encoding: [0xdf,0x23,0x03,0xd5]
169// NO83-NEXT: hint #30        // encoding: [0xdf,0x23,0x03,0xd5]
170  hint #31
171  autibsp
172// CHECK-NEXT: autibsp        // encoding: [0xff,0x23,0x03,0xd5]
173// CHECK-NEXT: autibsp        // encoding: [0xff,0x23,0x03,0xd5]
174// NO83-NEXT: hint #31        // encoding: [0xff,0x23,0x03,0xd5]
175// NO83-NEXT: hint #31        // encoding: [0xff,0x23,0x03,0xd5]
176
177// ALL-EMPTY:
178  pacia x0, x1
179// CHECK-NEXT: pacia x0, x1     // encoding: [0x20,0x00,0xc1,0xda]
180// CHECK-REQ-NEXT:      ^
181// CHECK-REQ-NEXT: error: instruction requires: pa
182// CHECK-REQ-NEXT: pacia x0, x1
183  autia x0, x1
184// CHECK-NEXT: autia x0, x1     // encoding: [0x20,0x10,0xc1,0xda]
185// CHECK-REQ: error: instruction requires: pa
186// CHECK-REQ-NEXT: autia x0, x1
187  pacda x0, x1
188// CHECK-NEXT: pacda x0, x1     // encoding: [0x20,0x08,0xc1,0xda]
189// CHECK-REQ: error: instruction requires: pa
190// CHECK-REQ-NEXT:  pacda x0, x1
191  autda x0, x1
192// CHECK-NEXT: autda x0, x1     // encoding: [0x20,0x18,0xc1,0xda]
193// CHECK-REQ: error: instruction requires: pa
194// CHECK-REQ-NEXT:  autda x0, x1
195  pacib x0, x1
196// CHECK-NEXT: pacib x0, x1     // encoding: [0x20,0x04,0xc1,0xda]
197// CHECK-REQ: error: instruction requires: pa
198// CHECK-REQ-NEXT:  pacib x0, x1
199  autib x0, x1
200// CHECK-NEXT: autib x0, x1     // encoding: [0x20,0x14,0xc1,0xda]
201// CHECK-REQ: error: instruction requires: pa
202// CHECK-REQ-NEXT:  autib x0, x1
203  pacdb x0, x1
204// CHECK-NEXT: pacdb x0, x1     // encoding: [0x20,0x0c,0xc1,0xda]
205// CHECK-REQ: error: instruction requires: pa
206// CHECK-REQ-NEXT:  pacdb x0, x1
207  autdb x0, x1
208// CHECK-NEXT: autdb x0, x1     // encoding: [0x20,0x1c,0xc1,0xda]
209// CHECK-REQ: error: instruction requires: pa
210// CHECK-REQ-NEXT:  autdb x0, x1
211  pacga x0, x1, x2
212// CHECK-NEXT: pacga x0, x1, x2  // encoding: [0x20,0x30,0xc2,0x9a]
213// CHECK-REQ: error: instruction requires: pa
214// CHECK-REQ-NEXT:  pacga x0, x1, x2
215  paciza x0
216// CHECK-NEXT: paciza x0         // encoding: [0xe0,0x23,0xc1,0xda]
217// CHECK-REQ: error: instruction requires: pa
218// CHECK-REQ-NEXT:  paciza x0
219  autiza x0
220// CHECK-NEXT: autiza x0         // encoding: [0xe0,0x33,0xc1,0xda]
221// CHECK-REQ: error: instruction requires: pa
222// CHECK-REQ-NEXT:  autiza x0
223  pacdza x0
224// CHECK-NEXT: pacdza x0         // encoding: [0xe0,0x2b,0xc1,0xda]
225// CHECK-REQ: error: instruction requires: pa
226// CHECK-REQ-NEXT:  pacdza x0
227  autdza x0
228// CHECK-NEXT: autdza x0         // encoding: [0xe0,0x3b,0xc1,0xda]
229// CHECK-REQ: error: instruction requires: pa
230// CHECK-REQ-NEXT:  autdza x0
231  pacizb x0
232// CHECK-NEXT: pacizb x0         // encoding: [0xe0,0x27,0xc1,0xda]
233// CHECK-REQ: error: instruction requires: pa
234// CHECK-REQ-NEXT:  pacizb x0
235  autizb x0
236// CHECK-NEXT: autizb x0         // encoding: [0xe0,0x37,0xc1,0xda]
237// CHECK-REQ: error: instruction requires: pa
238// CHECK-REQ-NEXT:  autizb x0
239  pacdzb x0
240// CHECK-NEXT: pacdzb x0         // encoding: [0xe0,0x2f,0xc1,0xda]
241// CHECK-REQ: error: instruction requires: pa
242// CHECK-REQ-NEXT:  pacdzb x0
243  autdzb x0
244// CHECK-NEXT: autdzb x0         // encoding: [0xe0,0x3f,0xc1,0xda]
245// CHECK-REQ: error: instruction requires: pa
246// CHECK-REQ-NEXT:  autdzb x0
247  xpaci x0
248// CHECK-NEXT: xpaci x0          // encoding: [0xe0,0x43,0xc1,0xda]
249// CHECK-REQ: error: instruction requires: pa
250// CHECK-REQ-NEXT:  xpaci x0
251  xpacd x0
252// CHECK-NEXT: xpacd x0          // encoding: [0xe0,0x47,0xc1,0xda]
253// CHECK-REQ: error: instruction requires: pa
254// CHECK-REQ-NEXT:  xpacd x0
255
256  braa x0, x1
257// CHECK-EMPTY:
258// CHECK-NEXT: braa x0, x1       // encoding: [0x01,0x08,0x1f,0xd7]
259// CHECK-REQ: error: instruction requires: pa
260// CHECK-REQ-NEXT:  braa x0, x1
261  brab x0, x1
262// CHECK-NEXT: brab x0, x1       // encoding: [0x01,0x0c,0x1f,0xd7]
263// CHECK-REQ: error: instruction requires: pa
264// CHECK-REQ-NEXT:  brab x0, x1
265  blraa x0, x1
266// CHECK-NEXT: blraa x0, x1      // encoding: [0x01,0x08,0x3f,0xd7]
267// CHECK-REQ: error: instruction requires: pa
268// CHECK-REQ-NEXT:  blraa x0, x1
269  blrab x0, x1
270// CHECK-NEXT: blrab x0, x1      // encoding: [0x01,0x0c,0x3f,0xd7]
271// CHECK-REQ: error: instruction requires: pa
272// CHECK-REQ-NEXT:  blrab x0, x1
273
274  braaz x0
275// CHECK-EMPTY:
276// CHECK-NEXT: braaz x0          // encoding: [0x1f,0x08,0x1f,0xd6]
277// CHECK-REQ: error: instruction requires: pa
278// CHECK-REQ-NEXT:  braaz x0
279  brabz x0
280// CHECK-NEXT: brabz x0          // encoding: [0x1f,0x0c,0x1f,0xd6]
281// CHECK-REQ: error: instruction requires: pa
282// CHECK-REQ-NEXT:  brabz x0
283  blraaz x0
284// CHECK-NEXT: blraaz x0         // encoding: [0x1f,0x08,0x3f,0xd6]
285// CHECK-REQ: error: instruction requires: pa
286// CHECK-REQ-NEXT:  blraaz x0
287  blrabz x0
288// CHECK-NEXT: blrabz x0         // encoding: [0x1f,0x0c,0x3f,0xd6]
289// CHECK-REQ: error: instruction requires: pa
290// CHECK-REQ-NEXT:  blrabz x0
291  retaa
292// CHECK-NEXT: retaa             // encoding: [0xff,0x0b,0x5f,0xd6]
293// CHECK-REQ: error: instruction requires: pa
294// CHECK-REQ-NEXT:  retaa
295  retab
296// CHECK-NEXT: retab             // encoding: [0xff,0x0f,0x5f,0xd6]
297// CHECK-REQ: error: instruction requires: pa
298// CHECK-REQ-NEXT:  retab
299  eretaa
300// CHECK-NEXT: eretaa            // encoding: [0xff,0x0b,0x9f,0xd6]
301// CHECK-REQ: error: instruction requires: pa
302// CHECK-REQ-NEXT:  eretaa
303  eretab
304// CHECK-NEXT: eretab            // encoding: [0xff,0x0f,0x9f,0xd6]
305// CHECK-REQ: error: instruction requires: pa
306// CHECK-REQ-NEXT:  eretab
307  ldraa x0, [x1, 4088]
308// CHECK-NEXT: ldraa x0, [x1, #4088]  // encoding: [0x20,0xf4,0x3f,0xf8]
309// CHECK-REQ: error: instruction requires: pa
310// CHECK-REQ-NEXT:  ldraa x0, [x1, 4088]
311  ldraa x0, [x1, -4096]
312// CHECK-NEXT: ldraa x0, [x1, #-4096] // encoding: [0x20,0x04,0x60,0xf8]
313// CHECK-REQ: error: instruction requires: pa
314// CHECK-REQ-NEXT:  ldraa x0, [x1, -4096]
315  ldrab x0, [x1, 4088]
316// CHECK-NEXT: ldrab x0, [x1, #4088]  // encoding: [0x20,0xf4,0xbf,0xf8]
317// CHECK-REQ: error: instruction requires: pa
318// CHECK-REQ-NEXT:  ldrab x0, [x1, 4088]
319  ldrab x0, [x1, -4096]
320// CHECK-NEXT: ldrab x0, [x1, #-4096] // encoding: [0x20,0x04,0xe0,0xf8]
321// CHECK-REQ: error: instruction requires: pa
322// CHECK-REQ-NEXT:  ldrab x0, [x1, -4096]
323  ldraa x0, [x1, 4088]!
324// CHECK-NEXT: ldraa x0, [x1, #4088]!  // encoding: [0x20,0xfc,0x3f,0xf8]
325// CHECK-REQ: error: instruction requires: pa
326// CHECK-REQ-NEXT:  ldraa x0, [x1, 4088]!
327  ldraa x0, [x1, -4096]!
328// CHECK-NEXT: ldraa x0, [x1, #-4096]! // encoding: [0x20,0x0c,0x60,0xf8]
329// CHECK-REQ: error: instruction requires: pa
330// CHECK-REQ-NEXT:  ldraa x0, [x1, -4096]!
331  ldrab x0, [x1, 4088]!
332// CHECK-NEXT: ldrab x0, [x1, #4088]!  // encoding: [0x20,0xfc,0xbf,0xf8]
333// CHECK-REQ: error: instruction requires: pa
334// CHECK-REQ-NEXT:  ldrab x0, [x1, 4088]!
335  ldrab x0, [x1, -4096]!
336// CHECK-NEXT: ldrab x0, [x1, #-4096]! // encoding: [0x20,0x0c,0xe0,0xf8]
337// CHECK-REQ: error: instruction requires: pa
338// CHECK-REQ-NEXT:  ldrab x0, [x1, -4096]!
339  ldraa x0, [x1]
340// CHECK-NEXT: ldraa x0, [x1]  // encoding: [0x20,0x04,0x20,0xf8]
341// CHECK-REQ: error: instruction requires: pa
342// CHECK-REQ-NEXT:  ldraa x0, [x1]
343  ldrab x0, [x1]
344// CHECK-NEXT: ldrab x0, [x1]  // encoding: [0x20,0x04,0xa0,0xf8]
345// CHECK-REQ: error: instruction requires: pa
346// CHECK-REQ-NEXT:  ldrab x0, [x1]
347  ldraa x0, [x1]!
348// CHECK-NEXT: ldraa x0, [x1, #0]!  // encoding: [0x20,0x0c,0x20,0xf8]
349// CHECK-REQ: error: instruction requires: pa
350// CHECK-REQ-NEXT:  ldraa x0, [x1]!
351  ldrab x0, [x1]!
352// CHECK-NEXT: ldrab x0, [x1, #0]!  // encoding: [0x20,0x0c,0xa0,0xf8]
353// CHECK-REQ: error: instruction requires: pa
354// CHECK-REQ-NEXT:  ldrab x0, [x1]!
355  ldraa xzr, [sp, -4096]!
356// CHECK-NEXT: ldraa xzr, [sp, #-4096]!  // encoding: [0xff,0x0f,0x60,0xf8]
357// CHECK-REQ: error: instruction requires: pa
358// CHECK-REQ-NEXT:  ldraa xzr, [sp, -4096]!
359  ldrab xzr, [sp, -4096]!
360// CHECK-NEXT: ldrab xzr, [sp, #-4096]!  // encoding: [0xff,0x0f,0xe0,0xf8]
361// CHECK-REQ: error: instruction requires: pa
362// CHECK-REQ-NEXT:  ldrab xzr, [sp, -4096]!
363