1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2  2>&1 < %s| FileCheck %s
2
3
4// ------------------------------------------------------------------------- //
5// z register out of range for index
6
7sqdmullb z0.s, z1.h, z8.h[0]
8// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
9// CHECK-NEXT: sqdmullb z0.s, z1.h, z8.h[0]
10// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
11
12sqdmullb z0.d, z1.s, z16.s[0]
13// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
14// CHECK-NEXT: sqdmullb z0.d, z1.s, z16.s[0]
15// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
16
17// ------------------------------------------------------------------------- //
18// Index out of bounds
19
20sqdmullb z0.s, z1.h, z7.h[-1]
21// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
22// CHECK-NEXT: sqdmullb z0.s, z1.h, z7.h[-1]
23// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
24
25sqdmullb z0.s, z1.h, z7.h[8]
26// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].
27// CHECK-NEXT: sqdmullb z0.s, z1.h, z7.h[8]
28// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
29
30sqdmullb z0.d, z1.s, z15.s[-1]
31// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
32// CHECK-NEXT: sqdmullb z0.d, z1.s, z15.s[-1]
33// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
34
35sqdmullb z0.d, z1.s, z15.s[4]
36// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].
37// CHECK-NEXT: sqdmullb z0.d, z1.s, z15.s[4]
38// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
39
40// ------------------------------------------------------------------------- //
41// Invalid element width
42
43sqdmullb z0.b, z0.b, z0.b
44// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
45// CHECK-NEXT: sqdmullb z0.b, z0.b, z0.b
46// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
47
48sqdmullb z0.h, z0.h, z0.h
49// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
50// CHECK-NEXT: sqdmullb z0.h, z0.h, z0.h
51// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
52
53sqdmullb z0.s, z0.s, z0.s
54// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
55// CHECK-NEXT: sqdmullb z0.s, z0.s, z0.s
56// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
57
58sqdmullb z0.d, z0.d, z0.d
59// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
60// CHECK-NEXT: sqdmullb z0.d, z0.d, z0.d
61// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
62
63sqdmullb z0.s, z1.b, z2.b[0]
64// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
65// CHECK-NEXT: sqdmullb z0.s, z1.b, z2.b[0]
66// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
67
68sqdmullb z0.s, z1.s, z2.s[0]
69// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
70// CHECK-NEXT: sqdmullb z0.s, z1.s, z2.s[0]
71// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
72
73sqdmullb z0.s, z1.d, z2.d[0]
74// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
75// CHECK-NEXT: sqdmullb z0.s, z1.d, z2.d[0]
76// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
77
78sqdmullb z0.d, z1.b, z2.b[0]
79// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
80// CHECK-NEXT: sqdmullb z0.d, z1.b, z2.b[0]
81// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
82
83sqdmullb z0.d, z1.h, z2.h[0]
84// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
85// CHECK-NEXT: sqdmullb z0.d, z1.h, z2.h[0]
86// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
87
88sqdmullb z0.d, z1.d, z2.d[0]
89// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
90// CHECK-NEXT: sqdmullb z0.d, z1.d, z2.d[0]
91// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
92
93// --------------------------------------------------------------------------//
94// Negative tests for instructions that are incompatible with movprfx
95
96movprfx z31.d, p0/z, z6.d
97sqdmullb z31.d, z31.s, z15.s[1]
98// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
99// CHECK-NEXT: sqdmullb z31.d, z31.s, z15.s[1]
100// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
101
102movprfx z31, z6
103sqdmullb z31.d, z31.s, z15.s[1]
104// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
105// CHECK-NEXT: sqdmullb z31.d, z31.s, z15.s[1]
106// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
107