1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2  2>&1 < %s| FileCheck %s
2
3srshr z18.b, p0/m, z18.b, #0
4// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
5// CHECK-NEXT: srshr z18.b, p0/m, z18.b, #0
6// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
7
8srshr z1.b, p0/m, z1.b, #9
9// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
10// CHECK-NEXT: srshr z1.b, p0/m, z1.b, #9
11// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
12
13srshr z21.h, p0/m, z21.h, #0
14// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
15// CHECK-NEXT: srshr z21.h, p0/m, z21.h, #0
16// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
17
18srshr z14.h, p0/m, z14.h, #17
19// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
20// CHECK-NEXT: srshr z14.h, p0/m, z14.h, #17
21// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
22
23srshr z6.s, p0/m, z6.s, #0
24// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
25// CHECK-NEXT: srshr z6.s, p0/m, z6.s, #0
26// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
27
28srshr z23.s, p0/m, z23.s, #33
29// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
30// CHECK-NEXT: srshr z23.s, p0/m, z23.s, #33
31// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
32
33srshr z3.d, p0/m, z3.d, #0
34// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 64]
35// CHECK-NEXT: srshr z3.d, p0/m, z3.d, #0
36// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
37
38srshr z25.d, p0/m, z25.d, #65
39// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 64]
40// CHECK-NEXT: srshr z25.d, p0/m, z25.d, #65
41// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
42
43
44// --------------------------------------------------------------------------//
45// Source and Destination Registers must match
46
47srshr z0.b, p0/m, z1.b, #1
48// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register
49// CHECK-NEXT: srshr z0.b, p0/m, z1.b, #1
50// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
51
52
53// --------------------------------------------------------------------------//
54// Element sizes must match
55
56srshr z0.b, p0/m, z0.d, #1
57// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
58// CHECK-NEXT: srshr z0.b, p0/m, z0.d, #1
59// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
60
61srshr z0.d, p0/m, z0.b, #1
62// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
63// CHECK-NEXT: srshr z0.d, p0/m, z0.b, #1
64// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
65
66
67// --------------------------------------------------------------------------//
68// Invalid predicate
69
70srshr z0.b, p0/z, z0.b, #1
71// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
72// CHECK-NEXT: srshr z0.b, p0/z, z0.b, #1
73// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
74
75srshr z0.b, p8/m, z0.b, #1
76// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
77// CHECK-NEXT: srshr z0.b, p8/m, z0.b, #1
78// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
79