1 // RUN
: not llvm-mc
-triple thumb-none-linux-gnu
-mattr
=+v8.3
a,+neon
,+fullfp16
-show-encoding
< %s
2>%t | FileCheck
%s
--check-prefix
=THUMB
--check-prefix
=FP16-THUMB
2 // RUN
: FileCheck
--check-prefix
=STDERR
--check-prefix
=NEON-STDERR
<%t %s
3 // RUN
: not llvm-mc
-triple arm-none-linux-gnu
-mattr
=+v8.3
a,+neon
,+fullfp16
-show-encoding
< %s
2>%t | FileCheck
%s
--check-prefix
=ARM
--check-prefix
=FP16-ARM
4 // RUN
: FileCheck
--check-prefix
=STDERR
--check-prefix
=NEON-STDERR
<%t %s
6 // RUN
: not llvm-mc
-triple thumb-none-linux-gnu
-mattr
=+v8.3
a,+neon
,-fullfp16
-show-encoding
< %s
2>%t | FileCheck
%s
--check-prefix
=THUMB
7 // RUN
: FileCheck
--check-prefix
=STDERR
--check-prefix
=NO-FP16-STDERR
--check-prefix
=NEON-STDERR
<%t %s
8 // RUN
: not llvm-mc
-triple arm-none-linux-gnu
-mattr
=+v8.3
a,+neon
,-fullfp16
-show-encoding
< %s
2>%t | FileCheck
%s
--check-prefix
=ARM
9 // RUN
: FileCheck
--check-prefix
=STDERR
--check-prefix
=NO-FP16-STDERR
--check-prefix
=NEON-STDERR
<%t %s
11 // RUN
: not llvm-mc
-triple thumb-none-linux-gnu
-mattr
=+v8.3
a,-neon
,+fullfp16
-show-encoding
< %s
2>%t
12 // RUN
: FileCheck
--check-prefix
=STDERR
--check-prefix
=NO-NEON-STDERR
<%t %s
13 // RUN
: not llvm-mc
-triple arm-none-linux-gnu
-mattr
=+v8.3
a,-neon
,+fullfp16
-show-encoding
< %s
2>%t
14 // RUN
: FileCheck
--check-prefix
=STDERR
--check-prefix
=NO-NEON-STDERR
<%t %s
16 // RUN
: not llvm-mc
-triple thumb-none-linux-gnu
-mattr
=+v8.2
a,+neon
,+fullfp16
-show-encoding
< %s
2>&1 | FileCheck
%s
--check-prefix
=V82A
17 // RUN
: not llvm-mc
-triple arm-none-linux-gnu
-mattr
=+v8.2
a,+neon
,+fullfp16
-show-encoding
< %s
2>&1 | FileCheck
%s
--check-prefix
=V82A
19 /* ==== VCMLA vector ==== */
22 vcmla.
f16 d0
, d1
, d2
, #0
23 // FP16-ARM
: vcmla.
f16 d0
, d1
, d2
, #0 @ encoding: [0x02,0x08,0x21,0xfc]
24 // FP16-THUMB
: vcmla.
f16 d0
, d1
, d2
, #0 @ encoding: [0x21,0xfc,0x02,0x08]
25 // NO-FP16-STDERR
: :[[@LINE-
3]]:{{[0-9]*}}: note
: instruction requires
: full half-float
26 // V82A
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
27 // NO-NEON_STDERR
: :[[@LINE-
5]]:{{[0-9]*}}: error
: instruction requires
: NEON
28 vcmla.
f16 q0
, q1
, q2
, #0
29 // FP16-ARM
: vcmla.
f16 q0
, q1
, q2
, #0 @ encoding: [0x44,0x08,0x22,0xfc]
30 // FP16-THUMB
: vcmla.
f16 q0
, q1
, q2
, #0 @ encoding: [0x22,0xfc,0x44,0x08]
31 // NO-FP16-STDERR
: :[[@LINE-
3]]:{{[0-9]*}}: note
: instruction requires
: full half-float
32 // V82A
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
33 // NO-NEON_STDERR
: :[[@LINE-
5]]:{{[0-9]*}}: error
: instruction requires
: NEON
34 vcmla.f32 d0
, d1
, d2
, #0
35 // ARM
: vcmla.f32 d0
, d1
, d2
, #0 @ encoding: [0x02,0x08,0x31,0xfc]
36 // THUMB
: vcmla.f32 d0
, d1
, d2
, #0 @ encoding: [0x31,0xfc,0x02,0x08]
37 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
38 // NO-NEON_STDERR
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: NEON
39 vcmla.f32 q0
, q1
, q2
, #0
40 // ARM
: vcmla.f32 q0
, q1
, q2
, #0 @ encoding: [0x44,0x08,0x32,0xfc]
41 // THUMB
: vcmla.f32 q0
, q1
, q2
, #0 @ encoding: [0x32,0xfc,0x44,0x08]
42 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
43 // NO-NEON_STDERR
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: NEON
46 vcmla.f32 d0
, d1
, d2
, #90
47 // ARM
: vcmla.f32 d0
, d1
, d2
, #90 @ encoding: [0x02,0x08,0xb1,0xfc]
48 // THUMB
: vcmla.f32 d0
, d1
, d2
, #90 @ encoding: [0xb1,0xfc,0x02,0x08]
49 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
50 // NO-NEON_STDERR
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: NEON
51 vcmla.f32 d0
, d1
, d2
, #180
52 // ARM
: vcmla.f32 d0
, d1
, d2
, #180 @ encoding: [0x02,0x08,0x31,0xfd]
53 // THUMB
: vcmla.f32 d0
, d1
, d2
, #180 @ encoding: [0x31,0xfd,0x02,0x08]
54 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
55 // NO-NEON_STDERR
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: NEON
56 vcmla.f32 d0
, d1
, d2
, #270
57 // ARM
: vcmla.f32 d0
, d1
, d2
, #270 @ encoding: [0x02,0x08,0xb1,0xfd]
58 // THUMB
: vcmla.f32 d0
, d1
, d2
, #270 @ encoding: [0xb1,0xfd,0x02,0x08]
59 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
60 // NO-NEON_STDERR
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: NEON
63 vcmla.f32 d0
, d1
, d2
, #-90
64 // NEON-STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
: complex rotation must
be 0, 90, 180 or 270
65 // NO-NEON-STDERR
: :[[@LINE-
2]]:{{[0-9]*}}: error
: invalid instruction
66 vcmla.f32 d0
, d1
, d2
, #1
67 // NEON-STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
: complex rotation must
be 0, 90, 180 or 270
68 // NO-NEON-STDERR
: :[[@LINE-
2]]:{{[0-9]*}}: error
: invalid instruction
69 vcmla.f32 d0
, d1
, d2
, #360
70 // NEON-STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
: complex rotation must
be 0, 90, 180 or 270
71 // NO-NEON-STDERR
: :[[@LINE-
2]]:{{[0-9]*}}: error
: invalid instruction
73 /* ==== VCADD vector ==== */
76 vcadd.
f16 d0
, d1
, d2
, #90
77 // FP16-ARM
: vcadd.
f16 d0
, d1
, d2
, #90 @ encoding: [0x02,0x08,0x81,0xfc]
78 // FP16-THUMB
: vcadd.
f16 d0
, d1
, d2
, #90 @ encoding: [0x81,0xfc,0x02,0x08]
79 // NO-FP16-STDERR
: :[[@LINE-
3]]:{{[0-9]*}}: note
: instruction requires
: full half-float
80 // V82A
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
81 // NO-NEON_STDERR
: :[[@LINE-
5]]:{{[0-9]*}}: error
: instruction requires
: NEON
82 vcadd.
f16 q0
, q1
, q2
, #90
83 // FP16-ARM
: vcadd.
f16 q0
, q1
, q2
, #90 @ encoding: [0x44,0x08,0x82,0xfc]
84 // FP16-THUMB
: vcadd.
f16 q0
, q1
, q2
, #90 @ encoding: [0x82,0xfc,0x44,0x08]
85 // NO-FP16-STDERR
: :[[@LINE-
3]]:{{[0-9]*}}: note
: instruction requires
: full half-float
86 // V82A
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
87 // NO-NEON_STDERR
: :[[@LINE-
5]]:{{[0-9]*}}: error
: instruction requires
: NEON
88 vcadd.f32 d0
, d1
, d2
, #90
89 // ARM
: vcadd.f32 d0
, d1
, d2
, #90 @ encoding: [0x02,0x08,0x91,0xfc]
90 // THUMB
: vcadd.f32 d0
, d1
, d2
, #90 @ encoding: [0x91,0xfc,0x02,0x08]
91 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
92 // NO-NEON_STDERR
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: NEON
93 vcadd.f32 q0
, q1
, q2
, #90
94 // ARM
: vcadd.f32 q0
, q1
, q2
, #90 @ encoding: [0x44,0x08,0x92,0xfc]
95 // THUMB
: vcadd.f32 q0
, q1
, q2
, #90 @ encoding: [0x92,0xfc,0x44,0x08]
96 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
97 // NO-NEON_STDERR
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: NEON
100 vcadd.f32 d0
, d1
, d2
, #270
101 // ARM
: vcadd.f32 d0
, d1
, d2
, #270 @ encoding: [0x02,0x08,0x91,0xfd]
102 // THUMB
: vcadd.f32 d0
, d1
, d2
, #270 @ encoding: [0x91,0xfd,0x02,0x08]
103 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
104 // NO-NEON_STDERR
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: NEON
107 vcadd.f32 d0
, d1
, d2
, #0
108 // NEON-STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
: complex rotation must
be 90 or 270
109 // NO-NEON-STDERR
: :[[@LINE-
2]]:{{[0-9]*}}: error
: invalid instruction
110 vcadd.f32 d0
, d1
, d2
, #180
111 // NEON-STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
: complex rotation must
be 90 or 270
112 // NO-NEON-STDERR
: :[[@LINE-
2]]:{{[0-9]*}}: error
: invalid instruction
113 vcadd.f32 d0
, d1
, d2
, #-90
114 // NEON-STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
: complex rotation must
be 90 or 270
115 // NO-NEON-STDERR
: :[[@LINE-
2]]:{{[0-9]*}}: error
: invalid instruction
116 vcadd.f32 d0
, d1
, d2
, #1
117 // NEON-STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
: complex rotation must
be 90 or 270
118 // NO-NEON-STDERR
: :[[@LINE-
2]]:{{[0-9]*}}: error
: invalid instruction
119 vcadd.f32 d0
, d1
, d2
, #360
120 // NEON-STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
: complex rotation must
be 90 or 270
121 // NO-NEON-STDERR
: :[[@LINE-
2]]:{{[0-9]*}}: error
: invalid instruction
124 /* ==== VCMLA indexed ==== */
127 vcmla.
f16 d0
, d1
, d2
[0], #0
128 // FP16-ARM
: vcmla.
f16 d0
, d1
, d2
[0], #0 @ encoding: [0x02,0x08,0x01,0xfe]
129 // FP16-THUMB
: vcmla.
f16 d0
, d1
, d2
[0], #0 @ encoding: [0x01,0xfe,0x02,0x08]
130 // NO-FP16-STDERR
: :[[@LINE-
3]]:{{[0-9]*}}: note
: instruction requires
: full half-float
131 // V82A
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
132 // NO-NEON_STDERR
: :[[@LINE-
5]]:{{[0-9]*}}: error
: instruction requires
: NEON
133 vcmla.
f16 q0
, q1
, d2
[0], #0
134 // FP16-ARM
: vcmla.
f16 q0
, q1
, d2
[0], #0 @ encoding: [0x42,0x08,0x02,0xfe]
135 // FP16-THUMB
: vcmla.
f16 q0
, q1
, d2
[0], #0 @ encoding: [0x02,0xfe,0x42,0x08]
136 // NO-FP16-STDERR
: :[[@LINE-
3]]:{{[0-9]*}}: note
: instruction requires
: full half-float
137 // V82A
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
138 // NO-NEON_STDERR
: :[[@LINE-
5]]:{{[0-9]*}}: error
: instruction requires
: NEON
139 vcmla.f32 d0
, d1
, d2
[0], #0
140 // ARM
: vcmla.f32 d0
, d1
, d2
[0], #0 @ encoding: [0x02,0x08,0x81,0xfe]
141 // THUMB
: vcmla.f32 d0
, d1
, d2
[0], #0 @ encoding: [0x81,0xfe,0x02,0x08]
142 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
143 // NO-NEON_STDERR
: :[[@LINE-
5]]:{{[0-9]*}}: error
: instruction requires
: NEON
144 vcmla.f32 q0
, q1
, d2
[0], #0
145 // ARM
: vcmla.f32 q0
, q1
, d2
[0], #0 @ encoding: [0x42,0x08,0x82,0xfe]
146 // THUMB
: vcmla.f32 q0
, q1
, d2
[0], #0 @ encoding: [0x82,0xfe,0x42,0x08]
147 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
148 // NO-NEON_STDERR
: :[[@LINE-
5]]:{{[0-9]*}}: error
: instruction requires
: NEON
151 vcmla.f32 d0
, d1
, d2
[0], #90
152 // ARM
: vcmla.f32 d0
, d1
, d2
[0], #90 @ encoding: [0x02,0x08,0x91,0xfe]
153 // THUMB
: vcmla.f32 d0
, d1
, d2
[0], #90 @ encoding: [0x91,0xfe,0x02,0x08]
154 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
155 // NO-NEON_STDERR
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: NEON
156 vcmla.f32 d0
, d1
, d2
[0], #180
157 // ARM
: vcmla.f32 d0
, d1
, d2
[0], #180 @ encoding: [0x02,0x08,0xa1,0xfe]
158 // THUMB
: vcmla.f32 d0
, d1
, d2
[0], #180 @ encoding: [0xa1,0xfe,0x02,0x08]
159 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
160 // NO-NEON_STDERR
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: NEON
161 vcmla.f32 d0
, d1
, d2
[0], #270
162 // ARM
: vcmla.f32 d0
, d1
, d2
[0], #270 @ encoding: [0x02,0x08,0xb1,0xfe]
163 // THUMB
: vcmla.f32 d0
, d1
, d2
[0], #270 @ encoding: [0xb1,0xfe,0x02,0x08]
164 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
165 // NO-NEON_STDERR
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: NEON
168 vcmla.f32 d0
, d1
, d2
[0], #-90
169 // NEON-STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
: complex rotation must
be 0, 90, 180 or 270
170 // NO-NEON-STDERR
: :[[@LINE-
2]]:{{[0-9]*}}: error
: invalid instruction
171 vcmla.f32 d0
, d1
, d2
[0], #1
172 // NEON-STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
: complex rotation must
be 0, 90, 180 or 270
173 // NO-NEON-STDERR
: :[[@LINE-
2]]:{{[0-9]*}}: error
: invalid instruction
174 vcmla.f32 d0
, d1
, d2
[0], #360
175 // NEON-STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
: complex rotation must
be 0, 90, 180 or 270
176 // NO-NEON-STDERR
: :[[@LINE-
2]]:{{[0-9]*}}: error
: invalid instruction
179 vcmla.
f16 d0
, d1
, d2
[1], #0
180 // FP16-ARM
: vcmla.
f16 d0
, d1
, d2
[1], #0 @ encoding: [0x22,0x08,0x01,0xfe]
181 // FP16-THUMB
: vcmla.
f16 d0
, d1
, d2
[1], #0 @ encoding: [0x01,0xfe,0x22,0x08]
182 // V82A
: :[[@LINE-
3]]:{{[0-9]*}}: error
: instruction requires
: armv8.3
a
183 // NO-NEON_STDERR
: :[[@LINE-
4]]:{{[0-9]*}}: error
: instruction requires
: NEON
186 // The text of these errors vary depending on whether fullfp16 is present.
187 vcmla.
f16 d0
, d1
, d2
[2], #0
188 // STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
:
189 vcmla.f32 d0
, d1
, d2
[1], #0
190 // STDERR
: :[[@LINE-
1]]:{{[0-9]*}}: error
: