• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve  2>&1 < %s| FileCheck %s
2
3// input should be a 64bit scalar register
4mov z0.d, w0
5// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
6// CHECK-NEXT: mov z0.d, w0
7// CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
8
9// wzr is not a valid operand to mov
10mov z0.s, wzr
11// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
12// CHECK-NEXT: mov z0.s, wzr
13// CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
14
15// xzr is not a valid operand to mov
16mov z0.d, xzr
17// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
18// CHECK-NEXT: mov z0.d, xzr
19// CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
20
21
22// --------------------------------------------------------------------------//
23// Unpredicated mov of Z register only allowed for .d
24
25mov z0.b, z1.b
26// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: too few operands for instruction
27// CHECK-NEXT: mov z0.b, z1.b
28// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
29
30mov z0.h, z1.h
31// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: too few operands for instruction
32// CHECK-NEXT: mov z0.h, z1.h
33// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
34
35mov z0.s, z1.s
36// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: too few operands for instruction
37// CHECK-NEXT: mov z0.s, z1.s
38// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
39
40// --------------------------------------------------------------------------//
41// Invalid scalar operand for result element width.
42
43mov z0.d, w0
44// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
45// CHECK-NEXT: mov z0.d, w0
46// CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:
47
48mov z0.b, p0/m, x0
49// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
50// CHECK-NEXT: mov z0.b, p0/m, x0
51// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
52
53mov z0.h, p0/m, x0
54// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
55// CHECK-NEXT: mov z0.h, p0/m, x0
56// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
57
58mov z0.s, p0/m, x0
59// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
60// CHECK-NEXT: mov z0.s, p0/m, x0
61// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
62
63mov z0.d, p0/m, w0
64// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
65// CHECK-NEXT: mov z0.d, p0/m, w0
66// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
67
68mov z0.b, p0/m, h0
69// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
70// CHECK-NEXT: mov z0.b, p0/m, h0
71// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
72
73mov z0.b, p0/m, s0
74// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
75// CHECK-NEXT: mov z0.b, p0/m, s0
76// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
77
78mov z0.b, p0/m, d0
79// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
80// CHECK-NEXT: mov z0.b, p0/m, d0
81// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
82
83mov z0.h, p0/m, b0
84// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
85// CHECK-NEXT: mov z0.h, p0/m, b0
86// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
87
88mov z0.h, p0/m, s0
89// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
90// CHECK-NEXT: mov z0.h, p0/m, s0
91// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
92
93mov z0.h, p0/m, d0
94// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
95// CHECK-NEXT: mov z0.h, p0/m, d0
96// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
97
98mov z0.s, p0/m, b0
99// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
100// CHECK-NEXT: mov z0.s, p0/m, b0
101// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
102
103mov z0.s, p0/m, h0
104// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
105// CHECK-NEXT: mov z0.s, p0/m, h0
106// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
107
108mov z0.s, p0/m, d0
109// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
110// CHECK-NEXT: mov z0.s, p0/m, d0
111// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
112
113mov z0.d, p0/m, b0
114// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
115// CHECK-NEXT: mov z0.d, p0/m, b0
116// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
117
118mov z0.d, p0/m, h0
119// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
120// CHECK-NEXT: mov z0.d, p0/m, h0
121// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
122
123mov z0.d, p0/m, s0
124// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
125// CHECK-NEXT: mov z0.d, p0/m, s0
126// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
127
128// --------------------------------------------------------------------------//
129// Invalid immediates
130
131mov z0.b, #0, lsl #8      // #0, lsl #8 is not valid for .b
132// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
133// CHECK-NEXT: mov z0.b, #0, lsl #8
134// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
135
136mov z0.b, #-129
137// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
138// CHECK-NEXT: mov z0.b, #-129
139// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
140
141mov z0.b, #-1, lsl #8
142// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
143// CHECK-NEXT: mov z0.b, #-1, lsl #8
144// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
145
146mov z0.b, #256
147// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
148// CHECK-NEXT: mov z0.b, #256
149// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
150
151mov z0.b, #1, lsl #8
152// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
153// CHECK-NEXT: mov z0.b, #1, lsl #8
154// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
155
156mov z0.h, #-33024
157// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
158// CHECK-NEXT: mov z0.h, #-33024
159// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
160
161mov z0.h, #-32769
162// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
163// CHECK-NEXT: mov z0.h, #-32769
164// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
165
166mov z0.h, #-129, lsl #8
167// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
168// CHECK-NEXT: mov z0.h, #-129, lsl #8
169// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
170
171// Note: 65281 is a valid logical immediate.
172mov z0.h, #65282
173// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
174// CHECK-NEXT: mov z0.h, #65282
175// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
176
177mov z0.h, #256, lsl #8
178// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
179// CHECK-NEXT: mov z0.h, #256, lsl #8
180// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
181
182mov z0.s, #-33024
183// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
184// CHECK-NEXT: mov z0.s, #-33024
185// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
186
187mov z0.s, #-129, lsl #8
188// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
189// CHECK-NEXT: mov z0.s, #-129, lsl #8
190// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
191
192mov z0.s, #32513
193// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
194// CHECK-NEXT: mov z0.s, #32513
195// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
196
197mov z0.s, #128, lsl #8
198// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
199// CHECK-NEXT: mov z0.s, #128, lsl #8
200// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
201
202mov z0.d, #-33024
203// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
204// CHECK-NEXT: mov z0.d, #-33024
205// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
206
207mov z0.d, #-129, lsl #8
208// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
209// CHECK-NEXT: mov z0.d, #-129, lsl #8
210// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
211
212mov z0.d, #32513
213// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
214// CHECK-NEXT: mov z0.d, #32513
215// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
216
217mov z0.d, #128, lsl #8
218// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
219// CHECK-NEXT: mov z0.d, #128, lsl #8
220// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
221
222mov z5.b, #0xfff9
223// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255] with a shift amount of 0
224// CHECK-NEXT: mov z5.b, #0xfff9
225// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
226
227mov z5.h, #0xfffa
228// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
229// CHECK-NEXT: mov z5.h, #0xfffa
230// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
231
232mov z5.h, #0xfffffff9
233// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
234// CHECK-NEXT: mov z5.h, #0xfffffff9
235// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
236
237mov z5.s, #0xfffffffa
238// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
239// CHECK-NEXT: mov z5.s, #0xfffffffa
240// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
241
242mov z5.s, #0xffffffffffffff9
243// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
244// CHECK-NEXT: mov z5.s, #0xffffffffffffff9
245// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
246
247mov z0.b, p0/z, #0, lsl #8      // #0, lsl #8 is not valid for .b
248// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
249// CHECK-NEXT: mov z0.b, p0/z, #0, lsl #8
250// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
251
252mov z0.b, p0/z, #-129
253// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
254// CHECK-NEXT: mov z0.b, p0/z, #-129
255// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
256
257mov z0.b, p0/z, #-1, lsl #8
258// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
259// CHECK-NEXT: mov z0.b, p0/z, #-1, lsl #8
260// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
261
262mov z0.b, p0/z, #256
263// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
264// CHECK-NEXT: mov z0.b, p0/z, #256
265// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
266
267mov z0.b, p0/z, #1, lsl #8
268// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
269// CHECK-NEXT: mov z0.b, p0/z, #1, lsl #8
270// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
271
272mov z0.h, p0/z, #-33024
273// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
274// CHECK-NEXT: mov z0.h, p0/z, #-33024
275// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
276
277mov z0.h, p0/z, #-32769
278// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
279// CHECK-NEXT: mov z0.h, p0/z, #-32769
280// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
281
282mov z0.h, p0/z, #-129, lsl #8
283// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
284// CHECK-NEXT: mov z0.h, p0/z, #-129, lsl #8
285// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
286
287mov z0.h, p0/z, #32513
288// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
289// CHECK-NEXT: mov z0.h, p0/z, #32513
290// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
291
292mov z0.h, p0/z, #65281
293// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
294// CHECK-NEXT: mov z0.h, p0/z, #65281
295// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
296
297mov z0.h, p0/z, #256, lsl #8
298// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
299// CHECK-NEXT: mov z0.h, p0/z, #256, lsl #8
300// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
301
302mov z0.s, p0/z, #-33024
303// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
304// CHECK-NEXT: mov z0.s, p0/z, #-33024
305// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
306
307mov z0.s, p0/z, #-32769
308// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
309// CHECK-NEXT: mov z0.s, p0/z, #-32769
310// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
311
312mov z0.s, p0/z, #-129, lsl #8
313// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
314// CHECK-NEXT: mov z0.s, p0/z, #-129, lsl #8
315// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
316
317mov z0.s, p0/z, #32513
318// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
319// CHECK-NEXT: mov z0.s, p0/z, #32513
320// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
321
322mov z0.s, p0/z, #32768
323// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
324// CHECK-NEXT: mov z0.s, p0/z, #32768
325// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
326
327mov z0.s, p0/z, #128, lsl #8
328// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
329// CHECK-NEXT: mov z0.s, p0/z, #128, lsl #8
330// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
331
332mov z0.d, p0/z, #-33024
333// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
334// CHECK-NEXT: mov z0.d, p0/z, #-33024
335// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
336
337mov z0.d, p0/z, #-32769
338// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
339// CHECK-NEXT: mov z0.d, p0/z, #-32769
340// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
341
342mov z0.d, p0/z, #-129, lsl #8
343// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
344// CHECK-NEXT: mov z0.d, p0/z, #-129, lsl #8
345// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
346
347mov z0.d, p0/z, #32513
348// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
349// CHECK-NEXT: mov z0.d, p0/z, #32513
350// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
351
352mov z0.d, p0/z, #32768
353// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
354// CHECK-NEXT: mov z0.d, p0/z, #32768
355// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
356
357mov z0.d, p0/z, #128, lsl #8
358// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
359// CHECK-NEXT: mov z0.d, p0/z, #128, lsl #8
360// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
361
362
363// --------------------------------------------------------------------------//
364// Immediate not compatible with encode/decode function.
365
366mov z24.b, z17.b[-1]
367// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 63].
368// CHECK-NEXT: mov z24.b, z17.b[-1]
369// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
370
371mov z17.b, z5.b[64]
372// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 63].
373// CHECK-NEXT: mov z17.b, z5.b[64]
374// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
375
376mov z16.h, z30.h[-1]
377// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 31].
378// CHECK-NEXT: mov z16.h, z30.h[-1]
379// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
380
381mov z19.h, z23.h[32]
382// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 31].
383// CHECK-NEXT: mov z19.h, z23.h[32]
384// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
385
386mov z1.s, z6.s[-1]
387// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 15].
388// CHECK-NEXT: mov z1.s, z6.s[-1]
389// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
390
391mov z24.s, z3.s[16]
392// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 15].
393// CHECK-NEXT: mov z24.s, z3.s[16]
394// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
395
396mov z5.d, z25.d[-1]
397// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
398// CHECK-NEXT: mov z5.d, z25.d[-1]
399// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
400
401mov z12.d, z28.d[8]
402// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
403// CHECK-NEXT: mov z12.d, z28.d[8]
404// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
405
406mov z22.q, z7.q[-1]
407// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
408// CHECK-NEXT: mov z22.q, z7.q[-1]
409// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
410
411mov z24.q, z21.q[4]
412// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
413// CHECK-NEXT: mov z24.q, z21.q[4]
414// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
415
416
417// --------------------------------------------------------------------------//
418// Negative tests for instructions that are incompatible with movprfx
419
420movprfx z31.b, p0/z, z6.b
421mov     z31.b, wsp
422// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
423// CHECK-NEXT: mov     z31.b, wsp
424// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
425
426movprfx z31, z6
427mov     z31.b, wsp
428// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
429// CHECK-NEXT: mov     z31.b, wsp
430// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
431
432movprfx z0.d, p0/z, z7.d
433mov     z0.d, #0xe0000000000003ff
434// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
435// CHECK-NEXT: mov     z0.d, #0xe0000000000003ff
436// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
437
438movprfx z0, z7
439mov     z0.d, #0xe0000000000003ff
440// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
441// CHECK-NEXT: mov     z0.d, #0xe0000000000003ff
442// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
443
444movprfx z4.d, p7/z, z6.d
445mov     z4.d, p7/m, z31.d
446// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
447// CHECK-NEXT: mov     z4.d, p7/m, z31.d
448// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
449
450movprfx z31, z6
451mov     z31.d, p15/m, z31.d
452// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
453// CHECK-NEXT: mov     z31.d, p15/m, z31.d
454// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
455
456movprfx z0.d, p0/z, z7.d
457mov     z0.d, d0
458// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
459// CHECK-NEXT: mov     z0.d, d0
460// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
461
462movprfx z0, z7
463mov     z0.d, d0
464// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
465// CHECK-NEXT: mov     z0.d, d0
466// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
467
468movprfx z31.d, p0/z, z6.d
469mov     z31.d, z0.d
470// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
471// CHECK-NEXT: mov     z31.d, z0.d
472// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
473
474movprfx z31, z6
475mov     z31.d, z0.d
476// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
477// CHECK-NEXT: mov     z31.d, z0.d
478// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
479
480movprfx z31.d, p0/z, z6.d
481mov     z31.d, z31.d[7]
482// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
483// CHECK-NEXT: mov     z31.d, z31.d[7]
484// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
485
486movprfx z31, z6
487mov     z31.d, z31.d[7]
488// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
489// CHECK-NEXT: mov     z31.d, z31.d[7]
490// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
491