1 // RUN
: not llvm-mc
-triple
=aarch64
-show-encoding
-mattr
=+sme-f8f16
,+sme-f8f32
2>&1 < %s | FileCheck
%s
3 // --------------------------------------------------------------------------//
4 // Invalid vector select register
6 fdot za.h
[w8
, 0, vgx2
], {z0.h-z1.h
}, z0.
b
7 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
8 // CHECK-NEXT
: fdot za.h
[w8
, 0, vgx2
], {z0.h-z1.h
}, z0.
b
9 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
11 fdot za.h
[w11
, 7], {z31.b-z2.
b}, z15
12 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand
13 // CHECK-NEXT
: fdot za.h
[w11
, 7], {z31.b-z2.
b}, z15
14 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
16 fdot za.h
[w11
, 7, vgx2
], {z28.b-z31.
b}, {z0.b-z3.
b}
17 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
18 // CHECK-NEXT
: fdot za.h
[w11
, 7, vgx2
], {z28.b-z31.
b}, {z0.b-z3.
b}
19 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
21 fdot za.s
[w11
, 7], {z29.b-z30.
b}, {z30.b-z31.
b}
22 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
23 // CHECK-NEXT
: fdot za.s
[w11
, 7], {z29.b-z30.
b}, {z30.b-z31.
b}
24 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
26 fdot za.h
[w11
, 7], {z30.b-z0.
b}, z15.
b
27 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
28 // CHECK-NEXT
: fdot za.h
[w11
, 7], {z30.b-z0.
b}, z15.
29 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
32 // --------------------------------------------------------------------------//
33 // Invalid vector select offset
35 fvdott za.s
[w11
, -1, vgx4
], {z30.b-z31.
b}, z15.
b[3]
36 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: immediate must
be an integer in range
[0, 7].
37 // CHECK-NEXT
: fvdott za.s
[w11
, -1, vgx4
], {z30.b-z31.
b}, z15.
b[3]
38 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
40 fvdott za.s
[w8
, -1, vgx4
], {z0.b-z1.
b}, z0.
b[0]
41 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: immediate must
be an integer in range
[0, 7].
42 // CHECK-NEXT
: fvdott za.s
[w8
, -1, vgx4
], {z0.b-z1.
b}, z0.
b[0]
43 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
45 fvdot za.h
[w11
, -1], {z30.b-z31.
b}, z15.
b[7]
46 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: immediate must
be an integer in range
[0, 7].
47 // CHECK-NEXT
: fvdot za.h
[w11
, -1], {z30.b-z31.
b}, z15.
b[7]
48 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
50 fdot za.s
[w11
, -1], {z28.b-z31.
b}, z15.
b[3]
51 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: immediate must
be an integer in range
[0, 7].
52 // CHECK-NEXT
: fdot za.s
[w11
, -1], {z28.b-z31.
b}, z15.
b[3]
53 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
55 fvdott za.s
[w11
, 8, vgx4
], {z30.b-z31.
b}, z15.
b[3]
56 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: immediate must
be an integer in range
[0, 7].
57 // CHECK-NEXT
: fvdott za.s
[w11
, 8, vgx4
], {z30.b-z31.
b}, z15.
b[3]
58 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
60 fvdott za.s
[w8
, 8, vgx4
], {z0.b-z1.
b}, z0.
b[0]
61 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: immediate must
be an integer in range
[0, 7].
62 // CHECK-NEXT
: fvdott za.s
[w8
, 8, vgx4
], {z0.b-z1.
b}, z0.
b[0]
63 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
65 fvdot za.h
[w11
, 8], {z30.b-z31.
b}, z15.
b[7]
66 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: immediate must
be an integer in range
[0, 7].
67 // CHECK-NEXT
: fvdot za.h
[w11
, 8], {z30.b-z31.
b}, z15.
b[7]
68 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
70 fdot za.s
[w11
, 8], {z28.b-z31.
b}, z15.
b[3]
71 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: immediate must
be an integer in range
[0, 7].
72 // CHECK-NEXT
: fdot za.s
[w11
, 8], {z28.b-z31.
b}, z15.
b[3]
73 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
75 // --------------------------------------------------------------------------//
76 // Invalid vector list
78 fdot za.s
[w11
, 7, vgx4
], {z29.b-z1.
b}, {z29.b-z1.
b}
79 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid number of vectors
80 // CHECK-NEXT
: fdot za.s
[w11
, 7, vgx4
], {z29.b-z1.
b}, {z29.b-z1.
b}
81 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
83 fdot za.h
[w11
, 7], {z30.b-z2.
b}, {z0.b-z3.
b}
84 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid number of vectors
85 // CHECK-NEXT
: fdot za.h
[w11
, 7], {z30.b-z2.
b}, {z0.b-z3.
b}
86 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
88 fdot za.s
[w8
, 0], {z31.b-z3.
b}, {z31.b-z3.
b}
89 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid number of vectors
90 // CHECK-NEXT
: fdot za.s
[w8
, 0], {z31.b-z3.
b}, {z31.b-z3.
b}
91 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
93 fdot za.s
[w11
, 7, vgx2
], {z30.b-z31.
b}, {z0.b-z4.
b}
94 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid number of vectors
95 // CHECK-NEXT
: fdot za.s
[w11
, 7, vgx2
], {z30.b-z31.
b}, {z0.b-z4.
b}
96 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
98 // --------------------------------------------------------------------------//
99 // Invalid Register Suffix
100 fdot za.d
[w11
, 7, vgx4
], {z31.b-z2.
b}, z15.
b
101 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid matrix operand
, expected suffix
.s
102 // CHECK-NEXT
: fdot za.d
[w11
, 7, vgx4
], {z31.b-z2.
b}, z15.
b
103 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
105 fdot za
[w11
, 7], {z28.b-z31.
b}, {z28.b-z31.
b}
106 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid matrix operand
, expected suffix
.s
107 // CHECK-NEXT
: fdot za
[w11
, 7], {z28.b-z31.
b}, {z28.b-z31.
b}
108 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
110 fdot za.
b[w11
, 7], {z31.b-z0.
b}, z15.
b
111 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid matrix operand
, expected suffix
.s
112 // CHECK-NEXT
: fdot za.
b[w11
, 7], {z31.b-z0.
b}, z15.
b
113 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
115 fdot za.
b[w11
, 7, vgx2
], {z30.h-z31.h
}, {z30.h-z31.h
}
116 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid matrix operand
, expected suffix
.s
117 // CHECK-NEXT
: fdot za.
b[w11
, 7, vgx2
], {z30.h-z31.h
}, {z30.h-z31.h
}
118 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
120 fdot za
[w11
, 7, vgx4
], {z31.b-z2.
b}, z15.
b
121 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid matrix operand
, expected suffix
.s
122 // CHECK-NEXT
: fdot za
[w11
, 7, vgx4
], {z31.b-z2.
b}, z15.
b
123 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
125 fdot za.d
[w11
, 7], {z28.b-z31.
b}, {z28.b-z31.
b}
126 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid matrix operand
, expected suffix
.s
127 // CHECK-NEXT
: fdot za.d
[w11
, 7], {z28.b-z31.
b}, {z28.b-z31.
b}
128 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
130 // --------------------------------------------------------------------------//
131 // Invalid vector select register
133 fdot za.h
[w7
, 7, vgx4
], {z31.b-z2.
b}, z15.
b
134 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: operand must
be a register in range
[w8
, w11
]
135 // CHECK-NEXT
: fdot za.h
[w7
, 7, vgx4
], {z31.b-z2.
b}, z15.
b
136 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
138 fdot za.h
[w
, 0, vgx2
], {z0.b-z1.
b}, z0.
b[0]
139 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: operand must
be a register in range
[w8
, w11
]
140 // CHECK-NEXT
: fdot za.h
[w
, 0, vgx2
], {z0.b-z1.
b}, z0.
b[0]
141 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
143 fdot za.s
[w12
, 0], {z0.b-z3.
b}, {z0.b-z3.
b}
144 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: operand must
be a register in range
[w8
, w11
]
145 // CHECK-NEXT
: fdot za.s
[w12
, 0], {z0.b-z3.
b}, {z0.b-z3.
b}
146 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
148 // --------------------------------------------------------------------------//
149 // Invalid indexed-vector
or single-vector register
151 fdot za.h
[w8
, 0], {z0.b-z1.
b}, z16.
b[0]
152 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: Invalid restricted vector register
, expected z0.b.
.z15.b
153 // CHECK-NEXT
: fdot za.h
[w8
, 0], {z0.b-z1.
b}, z16.
b[0]
154 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
156 fdot za.s
[w8
, 0], {z0.b-z1.
b}, z16.
b[0]
157 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: Invalid restricted vector register
, expected z0.b.
.z15.b
158 // CHECK-NEXT
: fdot za.s
[w8
, 0], {z0.b-z1.
b}, z16.
b[0]
159 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
161 // --------------------------------------------------------------------------//
162 // Invalid vector grouping
164 fdot za.h
[w11
, 7], {z28.b-z31.
b}, {z0.b-z2.
b}
165 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
166 // CHECK-NEXT
: fdot za.h
[w11
, 7], {z28.b-z31.
b}, {z0.b-z2.
b}
167 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
169 fdot za.h
[w11
, 7, vgx4
], {z31.b-z0.
b}, z15.
b
170 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
171 // CHECK-NEXT
: fdot za.h
[w11
, 7, vgx4
], {z31.b-z0.
b}, z15.
b
172 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
174 // --------------------------------------------------------------------------//
175 // Invalid lane index
177 fdot za.h
[w8
, 0, vgx2
], {z0.b-z1.
b}, z0.
b[-1]
178 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 7].
179 // CHECK-NEXT
: fdot za.h
[w8
, 0, vgx2
], {z0.b-z1.
b}, z0.
b[-1]
180 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
182 fdot za.h
[w11
, 7], {z30.b-z31.
b}, z15.
b[8]
183 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 7].
184 // CHECK-NEXT
: fdot za.h
[w11
, 7], {z30.b-z31.
b}, z15.
b[8]
185 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
187 fdot za.s
[w8
, 0], {z0.b-z1.
b}, z0.
b[-1]
188 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 3].
189 // CHECK-NEXT
: fdot za.s
[w8
, 0], {z0.b-z1.
b}, z0.
b[-1]
190 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
192 fdot za.s
[w11
, 7], {z30.b-z31.
b}, z15.
b[4]
193 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 3].
194 // CHECK-NEXT
: fdot za.s
[w11
, 7], {z30.b-z31.
b}, z15.
b[4]
195 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
197 fvdot za.h
[w8
, 0, vgx2
], {z0.b-z1.
b}, z0.
b[-1]
198 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 7].
199 // CHECK-NEXT
: fvdot za.h
[w8
, 0, vgx2
], {z0.b-z1.
b}, z0.
b[-1]
200 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
202 fvdot za.h
[w11
, 7], {z30.b-z31.
b}, z15.
b[8]
203 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 7].
204 // CHECK-NEXT
: fvdot za.h
[w11
, 7], {z30.b-z31.
b}, z15.
b[8]
205 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
207 fvdotb za.s
[w8
, 0, vgx4
], {z0.b-z1.
b}, z0.
b[-1]
208 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 3].
209 // CHECK-NEXT
: fvdotb za.s
[w8
, 0, vgx4
], {z0.b-z1.
b}, z0.
b[-1]
210 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
212 fvdott za.s
[w11
, 7, vgx4
], {z30.b-z31.
b}, z15.
b[4]
213 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 3].
214 // CHECK-NEXT
: fvdott za.s
[w11
, 7, vgx4
], {z30.b-z31.
b}, z15.
b[4]
215 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}: