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, #-129, lsl #8
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, #-129, lsl #8
159// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
160
161// Note: 65281 is a valid logical immediate.
162mov z0.h, #65282
163// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
164// CHECK-NEXT: mov z0.h, #65282
165// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
166
167mov z0.h, #256, lsl #8
168// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
169// CHECK-NEXT: mov z0.h, #256, lsl #8
170// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
171
172mov z0.s, #-33024
173// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
174// CHECK-NEXT: mov z0.s, #-33024
175// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
176
177mov z0.s, #-129, 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, 32512]
179// CHECK-NEXT: mov z0.s, #-129, lsl #8
180// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
181
182mov z0.s, #32513
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, #32513
185// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
186
187mov z0.s, #128, 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, #128, lsl #8
190// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
191
192mov z0.d, #-33024
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.d, #-33024
195// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
196
197mov z0.d, #-129, 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.d, #-129, lsl #8
200// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
201
202mov z0.d, #32513
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, #32513
205// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
206
207mov z0.d, #128, 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, #128, lsl #8
210// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
211
212mov z5.b, #0xfff9
213// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255] with a shift amount of 0
214// CHECK-NEXT: mov z5.b, #0xfff9
215// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
216
217mov z5.h, #0xfffa
218// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
219// CHECK-NEXT: mov z5.h, #0xfffa
220// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
221
222mov z5.h, #0xfffffff9
223// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
224// CHECK-NEXT: mov z5.h, #0xfffffff9
225// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
226
227mov z5.s, #0xfffffffa
228// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
229// CHECK-NEXT: mov z5.s, #0xfffffffa
230// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
231
232mov z5.s, #0xffffffffffffff9
233// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
234// CHECK-NEXT: mov z5.s, #0xffffffffffffff9
235// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
236
237mov z0.b, p0/z, #0, lsl #8      // #0, lsl #8 is not valid for .b
238// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
239// CHECK-NEXT: mov z0.b, p0/z, #0, lsl #8
240// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
241
242mov z0.b, p0/z, #-129
243// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
244// CHECK-NEXT: mov z0.b, p0/z, #-129
245// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
246
247mov z0.b, p0/z, #-1, lsl #8
248// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
249// CHECK-NEXT: mov z0.b, p0/z, #-1, lsl #8
250// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
251
252mov z0.b, p0/z, #256
253// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]
254// CHECK-NEXT: mov z0.b, p0/z, #256
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.h, p0/z, #-33024
263// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
264// CHECK-NEXT: mov z0.h, p0/z, #-33024
265// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
266
267mov z0.h, p0/z, #-32769
268// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]
269// CHECK-NEXT: mov z0.h, p0/z, #-32769
270// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
271
272mov z0.h, p0/z, #-129, lsl #8
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, #-129, lsl #8
275// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
276
277mov z0.h, p0/z, #32513
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, #32513
280// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
281
282mov z0.h, p0/z, #65281
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, #65281
285// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
286
287mov z0.h, p0/z, #256, lsl #8
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, #256, lsl #8
290// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
291
292mov z0.s, p0/z, #-33024
293// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
294// CHECK-NEXT: mov z0.s, p0/z, #-33024
295// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
296
297mov z0.s, p0/z, #-32769
298// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
299// CHECK-NEXT: mov z0.s, p0/z, #-32769
300// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
301
302mov z0.s, p0/z, #-129, lsl #8
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, #-129, lsl #8
305// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
306
307mov z0.s, p0/z, #32513
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, #32513
310// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
311
312mov z0.s, p0/z, #32768
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, #32768
315// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
316
317mov z0.s, p0/z, #128, lsl #8
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, #128, lsl #8
320// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
321
322mov z0.d, p0/z, #-33024
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.d, p0/z, #-33024
325// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
326
327mov z0.d, p0/z, #-32769
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.d, p0/z, #-32769
330// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
331
332mov z0.d, p0/z, #-129, lsl #8
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, #-129, lsl #8
335// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
336
337mov z0.d, p0/z, #32513
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, #32513
340// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
341
342mov z0.d, p0/z, #32768
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, #32768
345// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
346
347mov z0.d, p0/z, #128, lsl #8
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, #128, lsl #8
350// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
351
352
353// --------------------------------------------------------------------------//
354// Immediate not compatible with encode/decode function.
355
356mov z24.b, z17.b[-1]
357// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 63].
358// CHECK-NEXT: mov z24.b, z17.b[-1]
359// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
360
361mov z17.b, z5.b[64]
362// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 63].
363// CHECK-NEXT: mov z17.b, z5.b[64]
364// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
365
366mov z16.h, z30.h[-1]
367// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 31].
368// CHECK-NEXT: mov z16.h, z30.h[-1]
369// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
370
371mov z19.h, z23.h[32]
372// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 31].
373// CHECK-NEXT: mov z19.h, z23.h[32]
374// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
375
376mov z1.s, z6.s[-1]
377// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 15].
378// CHECK-NEXT: mov z1.s, z6.s[-1]
379// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
380
381mov z24.s, z3.s[16]
382// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 15].
383// CHECK-NEXT: mov z24.s, z3.s[16]
384// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
385
386mov z5.d, z25.d[-1]
387// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
388// CHECK-NEXT: mov z5.d, z25.d[-1]
389// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
390
391mov z12.d, z28.d[8]
392// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
393// CHECK-NEXT: mov z12.d, z28.d[8]
394// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
395
396mov z22.q, z7.q[-1]
397// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
398// CHECK-NEXT: mov z22.q, z7.q[-1]
399// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
400
401mov z24.q, z21.q[4]
402// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
403// CHECK-NEXT: mov z24.q, z21.q[4]
404// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
405
406
407// --------------------------------------------------------------------------//
408// Negative tests for instructions that are incompatible with movprfx
409
410movprfx z31.b, p0/z, z6.b
411mov     z31.b, wsp
412// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
413// CHECK-NEXT: mov     z31.b, wsp
414// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
415
416movprfx z31, z6
417mov     z31.b, wsp
418// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
419// CHECK-NEXT: mov     z31.b, wsp
420// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
421
422movprfx z0.d, p0/z, z7.d
423mov     z0.d, #0xe0000000000003ff
424// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
425// CHECK-NEXT: mov     z0.d, #0xe0000000000003ff
426// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
427
428movprfx z0, z7
429mov     z0.d, #0xe0000000000003ff
430// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
431// CHECK-NEXT: mov     z0.d, #0xe0000000000003ff
432// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
433
434movprfx z4.d, p7/z, z6.d
435mov     z4.d, p7/m, z31.d
436// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
437// CHECK-NEXT: mov     z4.d, p7/m, z31.d
438// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
439
440movprfx z31, z6
441mov     z31.d, p15/m, z31.d
442// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
443// CHECK-NEXT: mov     z31.d, p15/m, z31.d
444// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
445
446movprfx z0.d, p0/z, z7.d
447mov     z0.d, d0
448// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
449// CHECK-NEXT: mov     z0.d, d0
450// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
451
452movprfx z0, z7
453mov     z0.d, d0
454// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
455// CHECK-NEXT: mov     z0.d, d0
456// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
457
458movprfx z31.d, p0/z, z6.d
459mov     z31.d, z0.d
460// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
461// CHECK-NEXT: mov     z31.d, z0.d
462// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
463
464movprfx z31, z6
465mov     z31.d, z0.d
466// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
467// CHECK-NEXT: mov     z31.d, z0.d
468// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
469
470movprfx z31.d, p0/z, z6.d
471mov     z31.d, z31.d[7]
472// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
473// CHECK-NEXT: mov     z31.d, z31.d[7]
474// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
475
476movprfx z31, z6
477mov     z31.d, z31.d[7]
478// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
479// CHECK-NEXT: mov     z31.d, z31.d[7]
480// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
481