1// RUN: not llvm-mc -o - -triple arm -mattr=+v8.6a -show-encoding %s 2>&1 | FileCheck %s
2vfmat.bf16 d0, d0, d0
3vfmat.bf16 d0, d0, q0
4vfmat.bf16 d0, q0, d0
5vfmat.bf16 q0, d0, d0
6vfmat.bf16 q0, q0, d0
7vfmat.bf16 q0, d0, q0
8vfmat.bf16 d0, q0, q0
9vfmat.bf16 q0, q0, q0[3]
10vfmat.bf16 q0, q0, q0[3]
11vfmat.bf16 q0, d0, d0[0]
12vfmat.bf16 d0, q0, d0[0]
13vfmat.bf16 q0, d0, d0[9]
14
15vfmab.bf16 d0, d0, d0
16vfmab.bf16 d0, d0, q0
17vfmab.bf16 d0, q0, d0
18vfmab.bf16 q0, d0, d0
19vfmab.bf16 q0, q0, d0
20vfmab.bf16 q0, d0, q0
21vfmab.bf16 d0, q0, q0
22vfmab.bf16 q0, q0, q0[3]
23vfmab.bf16 q0, q0, q0[3]
24vfmab.bf16 q0, d0, d0[0]
25vfmab.bf16 d0, q0, d0[0]
26vfmab.bf16 q0, d0, d0[9]
27
28//CHECK:error: invalid instruction
29//CHECK-NEXT:vfmat.bf16 d0, d0, d0
30//CHECK-NEXT:^
31//CHECK-NEXT:error: invalid instruction
32//CHECK-NEXT:vfmat.bf16 d0, d0, q0
33//CHECK-NEXT:^
34//CHECK-NEXT:error: invalid instruction
35//CHECK-NEXT:vfmat.bf16 d0, q0, d0
36//CHECK-NEXT:^
37//CHECK-NEXT:error: invalid instruction
38//CHECK-NEXT:vfmat.bf16 q0, d0, d0
39//CHECK-NEXT:^
40//CHECK-NEXT:error: invalid instruction, any one of the following would fix this:
41//CHECK-NEXT:vfmat.bf16 q0, q0, d0
42//CHECK-NEXT:^
43//CHECK-NEXT:note: too few operands for instruction
44//CHECK-NEXT:vfmat.bf16 q0, q0, d0
45//CHECK-NEXT:                      ^
46//CHECK-NEXT:note: operand must be a register in range [q0, q15]
47//CHECK-NEXT:vfmat.bf16 q0, q0, d0
48//CHECK-NEXT:                    ^
49//CHECK-NEXT:error: operand must be a register in range [q0, q15]
50//CHECK-NEXT:vfmat.bf16 q0, d0, q0
51//CHECK-NEXT:                ^
52//CHECK-NEXT:error: operand must be a register in range [q0, q15]
53//CHECK-NEXT:vfmat.bf16 d0, q0, q0
54//CHECK-NEXT:            ^
55//CHECK-NEXT:error: invalid instruction, any one of the following would fix this:
56//CHECK-NEXT:vfmat.bf16 q0, q0, q0[3]
57//CHECK-NEXT:^
58//CHECK-NEXT:note: operand must be a register in range [d0, d7]
59//CHECK-NEXT:vfmat.bf16 q0, q0, q0[3]
60//CHECK-NEXT:                    ^
61//CHECK-NEXT:note: too many operands for instruction
62//CHECK-NEXT:vfmat.bf16 q0, q0, q0[3]
63//CHECK-NEXT:                      ^
64//CHECK-NEXT:error: invalid instruction, any one of the following would fix this:
65//CHECK-NEXT:vfmat.bf16 q0, q0, q0[3]
66//CHECK-NEXT:^
67//CHECK-NEXT:note: operand must be a register in range [d0, d7]
68//CHECK-NEXT:vfmat.bf16 q0, q0, q0[3]
69//CHECK-NEXT:                    ^
70//CHECK-NEXT:note: too many operands for instruction
71//CHECK-NEXT:vfmat.bf16 q0, q0, q0[3]
72//CHECK-NEXT:                      ^
73//CHECK-NEXT:error: operand must be a register in range [q0, q15]
74//CHECK-NEXT:vfmat.bf16 q0, d0, d0[0]
75//CHECK-NEXT:                ^
76//CHECK-NEXT:error: operand must be a register in range [q0, q15]
77//CHECK-NEXT:vfmat.bf16 d0, q0, d0[0]
78//CHECK-NEXT:            ^
79//CHECK-NEXT:error: invalid instruction
80//CHECK-NEXT:vfmat.bf16 q0, d0, d0[9]
81//CHECK-NEXT:^
82//CHECK-NEXT:error: invalid instruction
83//CHECK-NEXT:vfmab.bf16 d0, d0, d0
84//CHECK-NEXT:^
85//CHECK-NEXT:error: invalid instruction
86//CHECK-NEXT:vfmab.bf16 d0, d0, q0
87//CHECK-NEXT:^
88//CHECK-NEXT:error: invalid instruction
89//CHECK-NEXT:vfmab.bf16 d0, q0, d0
90//CHECK-NEXT:^
91//CHECK-NEXT:error: invalid instruction
92//CHECK-NEXT:vfmab.bf16 q0, d0, d0
93//CHECK-NEXT:^
94//CHECK-NEXT:error: invalid instruction, any one of the following would fix this:
95//CHECK-NEXT:vfmab.bf16 q0, q0, d0
96//CHECK-NEXT:^
97//CHECK-NEXT:note: too few operands for instruction
98//CHECK-NEXT:vfmab.bf16 q0, q0, d0
99//CHECK-NEXT:                      ^
100//CHECK-NEXT:note: operand must be a register in range [q0, q15]
101//CHECK-NEXT:vfmab.bf16 q0, q0, d0
102//CHECK-NEXT:                    ^
103//CHECK-NEXT:error: operand must be a register in range [q0, q15]
104//CHECK-NEXT:vfmab.bf16 q0, d0, q0
105//CHECK-NEXT:                ^
106//CHECK-NEXT:error: operand must be a register in range [q0, q15]
107//CHECK-NEXT:vfmab.bf16 d0, q0, q0
108//CHECK-NEXT:            ^
109//CHECK-NEXT:error: invalid instruction, any one of the following would fix this:
110//CHECK-NEXT:vfmab.bf16 q0, q0, q0[3]
111//CHECK-NEXT:^
112//CHECK-NEXT:note: operand must be a register in range [d0, d7]
113//CHECK-NEXT:vfmab.bf16 q0, q0, q0[3]
114//CHECK-NEXT:                    ^
115//CHECK-NEXT:note: too many operands for instruction
116//CHECK-NEXT:vfmab.bf16 q0, q0, q0[3]
117//CHECK-NEXT:                      ^
118//CHECK-NEXT:error: invalid instruction, any one of the following would fix this:
119//CHECK-NEXT:vfmab.bf16 q0, q0, q0[3]
120//CHECK-NEXT:^
121//CHECK-NEXT:note: operand must be a register in range [d0, d7]
122//CHECK-NEXT:vfmab.bf16 q0, q0, q0[3]
123//CHECK-NEXT:                    ^
124//CHECK-NEXT:note: too many operands for instruction
125//CHECK-NEXT:vfmab.bf16 q0, q0, q0[3]
126//CHECK-NEXT:                      ^
127//CHECK-NEXT:error: operand must be a register in range [q0, q15]
128//CHECK-NEXT:vfmab.bf16 q0, d0, d0[0]
129//CHECK-NEXT:                ^
130//CHECK-NEXT:error: operand must be a register in range [q0, q15]
131//CHECK-NEXT:vfmab.bf16 d0, q0, d0[0]
132//CHECK-NEXT:            ^
133//CHECK-NEXT:error: invalid instruction
134//CHECK-NEXT:vfmab.bf16 q0, d0, d0[9]
135