1 // RUN
: not llvm-mc
-triple
=aarch64
-show-encoding
-mattr
=+sve2
2>&1 < %s| FileCheck
%s
4 // ------------------------------------------------------------------------- //
5 // z register out of range for index
7 mul z0.h
, z1.h
, z8.h
[0]
8 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
9 // CHECK-NEXT
: mul z0.h
, z1.h
, z8.h
[0]
10 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
12 mul z0.s
, z1.s
, z8.s
[0]
13 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
14 // CHECK-NEXT
: mul z0.s
, z1.s
, z8.s
[0]
15 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
17 mul z0.d
, z1.d
, z16.d
[0]
18 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
19 // CHECK-NEXT
: mul z0.d
, z1.d
, z16.d
[0]
20 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
23 // ------------------------------------------------------------------------- //
24 // Invalid element index
26 mul z0.h
, z1.h
, z2.h
[-1]
27 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 7].
28 // CHECK-NEXT
: mul z0.h
, z1.h
, z2.h
[-1]
29 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
31 mul z0.h
, z1.h
, z2.h
[8]
32 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 7].
33 // CHECK-NEXT
: mul z0.h
, z1.h
, z2.h
[8]
34 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
36 mul z0.s
, z1.s
, z2.s
[-1]
37 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 3].
38 // CHECK-NEXT
: mul z0.s
, z1.s
, z2.s
[-1]
39 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
41 mul z0.s
, z1.s
, z2.s
[4]
42 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 3].
43 // CHECK-NEXT
: mul z0.s
, z1.s
, z2.s
[4]
44 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
46 mul z0.d
, z1.d
, z2.d
[-1]
47 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 1].
48 // CHECK-NEXT
: mul z0.d
, z1.d
, z2.d
[-1]
49 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
51 mul z0.d
, z1.d
, z2.d
[2]
52 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 1].
53 // CHECK-NEXT
: mul z0.d
, z1.d
, z2.d
[2]
54 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
56 // ------------------------------------------------------------------------- //
57 // Invalid element width
60 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid element width
61 // CHECK-NEXT
: mul z0.
b, z1.h
, z2.h
62 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
65 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid element width
66 // CHECK-NEXT
: mul z0.h
, z1.s
, z2.s
67 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
70 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid element width
71 // CHECK-NEXT
: mul z0.s
, z1.d
, z2.d
72 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
75 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid element width
76 // CHECK-NEXT
: mul z0.d
, z1.
b, z2.
b
77 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
79 mul z0.
b, z1.
b, z2.
b[0]
80 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
81 // CHECK-NEXT
: mul z0.
b, z1.
b, z2.
b[0]
82 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
84 mul z0.
b, z1.h
, z2.h
[0]
85 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid element width
86 // CHECK-NEXT
: mul z0.
b, z1.h
, z2.h
[0]
87 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
89 mul z0.h
, z1.s
, z2.s
[0]
90 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid element width
91 // CHECK-NEXT
: mul z0.h
, z1.s
, z2.s
[0]
92 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
94 mul z0.s
, z1.d
, z2.d
[0]
95 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid element width
96 // CHECK-NEXT
: mul z0.s
, z1.d
, z2.d
[0]
97 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
99 mul z0.d
, z1.
b, z2.
b[0]
100 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid element width
101 // CHECK-NEXT
: mul z0.d
, z1.
b, z2.
b[0]
102 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
104 // --------------------------------------------------------------------------//
105 // Negative tests for instructions that are incompatible with movprfx
107 movprfx z0.d
, p0
/z
, z7.d
108 mul z0.d
, z1.d
, z31.d
109 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: instruction is unpredictable when following
a movprfx
, suggest replacing movprfx with mov
110 // CHECK-NEXT
: mul z0.d
, z1.d
, z31.d
111 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
114 mul z0.d
, z1.d
, z31.d
115 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: instruction is unpredictable when following
a movprfx
, suggest replacing movprfx with mov
116 // CHECK-NEXT
: mul z0.d
, z1.d
, z31.d
117 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
119 movprfx z31.d
, p0
/z
, z6.d
120 mul z31.d
, z31.d
, z15.d
[1]
121 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: instruction is unpredictable when following
a movprfx
, suggest replacing movprfx with mov
122 // CHECK-NEXT
: mul z31.d
, z31.d
, z15.d
[1]
123 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
126 mul z31.d
, z31.d
, z15.d
[1]
127 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: instruction is unpredictable when following
a movprfx
, suggest replacing movprfx with mov
128 // CHECK-NEXT
: mul z31.d
, z31.d
, z15.d
[1]
129 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}: