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