1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve  2>&1 < %s| FileCheck %s
2
3// --------------------------------------------------------------------------//
4// Immediate out of lower bound [-8, 7].
5
6stnt1d z23.d, p0, [x13, #-9, MUL VL]
7// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-8, 7].
8// CHECK-NEXT: stnt1d z23.d, p0, [x13, #-9, MUL VL]
9// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
10
11stnt1d z29.d, p0, [x3, #8, MUL VL]
12// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-8, 7].
13// CHECK-NEXT: stnt1d z29.d, p0, [x3, #8, MUL VL]
14// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
15
16
17// --------------------------------------------------------------------------//
18// Invalid source type.
19
20stnt1d z0.b, p0, [x0]
21// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
22// CHECK-NEXT: stnt1d z0.b, p0, [x0]
23// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
24
25stnt1d z0.h, p0, [x0]
26// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
27// CHECK-NEXT: stnt1d z0.h, p0, [x0]
28// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
29
30stnt1d z0.s, p0, [x0]
31// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
32// CHECK-NEXT: stnt1d z0.s, p0, [x0]
33// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
34
35
36// --------------------------------------------------------------------------//
37// invalid predicate
38
39stnt1d z27.d, p8, [x0]
40// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7].
41// CHECK-NEXT: stnt1d z27.d, p8, [x0]
42// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
43
44stnt1d z0.d, p0/z, [x0]
45// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
46// CHECK-NEXT: stnt1d z0.d, p0/z, [x0]
47// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
48
49
50// --------------------------------------------------------------------------//
51// Invalid vector list.
52
53stnt1d { }, p0, [x1, #1, MUL VL]
54// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector register expected
55// CHECK-NEXT: stnt1d { }, p0, [x1, #1, MUL VL]
56// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
57
58stnt1d { z1.d, z2.d }, p0, [x1, #1, MUL VL]
59// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand
60// CHECK-NEXT: stnt1d { z1.d, z2.d }, p0, [x1, #1, MUL VL]
61// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
62
63stnt1d { v0.2d }, p0, [x1, #1, MUL VL]
64// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand
65// CHECK-NEXT: stnt1d { v0.2d }, p0, [x1, #1, MUL VL]
66// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
67
68
69// --------------------------------------------------------------------------//
70// Negative tests for instructions that are incompatible with movprfx
71
72movprfx z0.d, p0/z, z7.d
73stnt1d  { z0.d }, p0, [x0, x0, lsl #3]
74// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
75// CHECK-NEXT: stnt1d  { z0.d }, p0, [x0, x0, lsl #3]
76// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
77
78movprfx z0, z7
79stnt1d  { z0.d }, p0, [x0, x0, lsl #3]
80// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
81// CHECK-NEXT: stnt1d  { z0.d }, p0, [x0, x0, lsl #3]
82// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
83