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
7umullt z0.s, z1.h, z8.h[0]
8// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
9// CHECK-NEXT: umullt z0.s, z1.h, z8.h[0]
10// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
11
12umullt z0.d, z1.s, z16.s[0]
13// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
14// CHECK-NEXT: umullt z0.d, z1.s, z16.s[0]
15// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
16
17// ------------------------------------------------------------------------- //
18// Index out of bounds
19
20umullt 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: umullt z0.s, z1.h, z7.h[-1]
23// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
24
25umullt 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: umullt z0.s, z1.h, z7.h[8]
28// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
29
30umullt 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: umullt z0.d, z1.s, z15.s[-1]
33// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
34
35umullt 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: umullt z0.d, z1.s, z15.s[4]
38// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
39
40// ------------------------------------------------------------------------- //
41// Invalid element width
42
43umullt z0.b, z0.b, z0.b
44// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
45// CHECK-NEXT: umullt z0.b, z0.b, z0.b
46// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
47
48umullt z0.h, z0.h, z0.h
49// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
50// CHECK-NEXT: umullt z0.h, z0.h, z0.h
51// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
52
53umullt z0.s, z0.s, z0.s
54// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
55// CHECK-NEXT: umullt z0.s, z0.s, z0.s
56// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
57
58umullt z0.d, z0.d, z0.d
59// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
60// CHECK-NEXT: umullt z0.d, z0.d, z0.d
61// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
62
63umullt z0.s, z1.b, z2.b[0]
64// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
65// CHECK-NEXT: umullt z0.s, z1.b, z2.b[0]
66// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
67
68umullt z0.s, z1.s, z2.s[0]
69// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
70// CHECK-NEXT: umullt z0.s, z1.s, z2.s[0]
71// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
72
73umullt z0.s, z1.d, z2.d[0]
74// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
75// CHECK-NEXT: umullt z0.s, z1.d, z2.d[0]
76// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
77
78umullt z0.d, z1.b, z2.b[0]
79// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
80// CHECK-NEXT: umullt z0.d, z1.b, z2.b[0]
81// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
82
83umullt z0.d, z1.h, z2.h[0]
84// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
85// CHECK-NEXT: umullt z0.d, z1.h, z2.h[0]
86// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
87
88umullt z0.d, z1.d, z2.d[0]
89// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
90// CHECK-NEXT: umullt 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
97umullt 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: umullt z31.d, z31.s, z15.s[1]
100// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
101
102movprfx z31, z6
103umullt 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: umullt z31.d, z31.s, z15.s[1]
106// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
107