1 /* { dg-do run } */
2 /* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
3 /* { dg-add-options arm_v8_2a_fp16_neon } */
4 /* { dg-skip-if "" { arm*-*-* } } */
5 
6 #include <arm_neon.h>
7 #include "arm-neon-ref.h"
8 #include "compute-ref-data.h"
9 
10 #define FP16_C(a) ((__fp16) a)
11 #define A0 FP16_C (123.4)
12 #define A1 FP16_C (-5.8)
13 #define A2 FP16_C (-0.0)
14 #define A3 FP16_C (10)
15 #define A4 FP16_C (123412.43)
16 #define A5 FP16_C (-5.8)
17 #define A6 FP16_C (90.8)
18 #define A7 FP16_C (24)
19 
20 #define B0 FP16_C (23.4)
21 #define B1 FP16_C (-5.8)
22 #define B2 FP16_C (8.9)
23 #define B3 FP16_C (4.0)
24 #define B4 FP16_C (3.4)
25 #define B5 FP16_C (-550.8)
26 #define B6 FP16_C (-31.8)
27 #define B7 FP16_C (20000.0)
28 
29 /* Expected results for vfma_n.  */
30 VECT_VAR_DECL (expected_fma0_static, hfloat, 16, 4) []
31   = { 0x613E /* A0 + B0 * B0.  */,
32       0xD86D /* A1 + B1 * B0.  */,
33       0x5A82 /* A2 + B2 * B0.  */,
34       0x567A /* A3 + B3 * B0.  */ };
35 
36 VECT_VAR_DECL (expected_fma1_static, hfloat, 16, 4) []
37   = { 0xCA33 /* A0 + B0 * B1.  */,
38       0x4EF6 /* A1 + B1 * B1.  */,
39       0xD274 /* A2 + B2 * B1.  */,
40       0xCA9A /* A3 + B3 * B1.  */ };
41 
42 VECT_VAR_DECL (expected_fma2_static, hfloat, 16, 4) []
43   = { 0x5D2F /* A0 + B0 * B2.  */,
44       0xD32D /* A1 + B1 * B2.  */,
45       0x54F3 /* A2 + B2 * B2.  */,
46       0x51B3 /* A3 + B3 * B2.  */ };
47 
48 VECT_VAR_DECL (expected_fma3_static, hfloat, 16, 4) []
49   = { 0x5AC8 /* A0 + B0 * B3.  */,
50       0xCF40 /* A1 + B1 * B3.  */,
51       0x5073 /* A2 + B2 * B3.  */,
52       0x4E80 /* A3 + B3 * B3.  */ };
53 
54 VECT_VAR_DECL (expected_fma0_static, hfloat, 16, 8) []
55   = { 0x613E /* A0 + B0 * B0.  */,
56       0xD86D /* A1 + B1 * B0.  */,
57       0x5A82 /* A2 + B2 * B0.  */,
58       0x567A /* A3 + B3 * B0.  */,
59       0x7C00 /* A4 + B4 * B0.  */,
60       0xF24D /* A5 + B5 * B0.  */,
61       0xE11B /* A6 + B6 * B0.  */,
62       0x7C00 /* A7 + B7 * B0.  */ };
63 
64 VECT_VAR_DECL (expected_fma1_static, hfloat, 16, 8) []
65   = { 0xCA33 /* A0 + B0 * B1.  */,
66       0x4EF6 /* A1 + B1 * B1.  */,
67       0xD274 /* A2 + B2 * B1.  */,
68       0xCA9A /* A3 + B3 * B1.  */,
69       0x7C00 /* A4 + B4 * B1.  */,
70       0x6A3B /* A5 + B5 * B1.  */,
71       0x5C4D /* A6 + B6 * B1.  */,
72       0xFC00 /* A7 + B7 * B1.  */ };
73 
74 VECT_VAR_DECL (expected_fma2_static, hfloat, 16, 8) []
75   = { 0x5D2F /* A0 + B0 * B2.  */,
76       0xD32D /* A1 + B1 * B2.  */,
77       0x54F3 /* A2 + B2 * B2.  */,
78       0x51B3 /* A3 + B3 * B2.  */,
79       0x7C00 /* A4 + B4 * B2.  */,
80       0xECCB /* A5 + B5 * B2.  */,
81       0xDA01 /* A6 + B6 * B2.  */,
82       0x7C00 /* A7 + B7 * B2.  */ };
83 
84 VECT_VAR_DECL (expected_fma3_static, hfloat, 16, 8) []
85   = { 0x5AC8 /* A0 + B0 * B3.  */,
86       0xCF40 /* A1 + B1 * B3.  */,
87       0x5073 /* A2 + B2 * B3.  */,
88       0x4E80 /* A3 + B3 * B3.  */,
89       0x7C00 /* A4 + B4 * B3.  */,
90       0xE851 /* A5 + B5 * B3.  */,
91       0xD08C /* A6 + B6 * B3.  */,
92       0x7C00 /* A7 + B7 * B3.  */ };
93 
94 VECT_VAR_DECL (expected_fma4_static, hfloat, 16, 8) []
95   = { 0x5A58 /* A0 + B0 * B4.  */,
96       0xCE62 /* A1 + B1 * B4.  */,
97       0x4F91 /* A2 + B2 * B4.  */,
98       0x4DE6 /* A3 + B3 * B4.  */,
99       0x7C00 /* A4 + B4 * B4.  */,
100       0xE757 /* A5 + B5 * B4.  */,
101       0xCC54 /* A6 + B6 * B4.  */,
102       0x7C00 /* A7 + B7 * B4.  */ };
103 
104 VECT_VAR_DECL (expected_fma5_static, hfloat, 16, 8) []
105   = { 0xF23D /* A0 + B0 * B5.  */,
106       0x6A3B /* A1 + B1 * B5.  */,
107       0xECCA /* A2 + B2 * B5.  */,
108       0xE849 /* A3 + B3 * B5.  */,
109       0x7C00 /* A4 + B4 * B5.  */,
110       0x7C00 /* A5 + B5 * B5.  */,
111       0x744D /* A6 + B6 * B5.  */,
112       0xFC00 /* A7 + B7 * B5.  */ };
113 
114 VECT_VAR_DECL (expected_fma6_static, hfloat, 16, 8) []
115   = { 0xE0DA /* A0 + B0 * B6.  */,
116       0x5995 /* A1 + B1 * B6.  */,
117       0xDC6C /* A2 + B2 * B6.  */,
118       0xD753 /* A3 + B3 * B6.  */,
119       0x7C00 /* A4 + B4 * B6.  */,
120       0x7447 /* A5 + B5 * B6.  */,
121       0x644E /* A6 + B6 * B6.  */,
122       0xFC00 /* A7 + B7 * B6.  */ };
123 
124 VECT_VAR_DECL (expected_fma7_static, hfloat, 16, 8) []
125   = { 0x7C00 /* A0 + B0 * B7.  */,
126       0xFC00 /* A1 + B1 * B7.  */,
127       0x7C00 /* A2 + B2 * B7.  */,
128       0x7C00 /* A3 + B3 * B7.  */,
129       0x7C00 /* A4 + B4 * B7.  */,
130       0xFC00 /* A5 + B5 * B7.  */,
131       0xFC00 /* A6 + B6 * B7.  */,
132       0x7C00 /* A7 + B7 * B7.  */ };
133 
134 /* Expected results for vfms_n.  */
135 VECT_VAR_DECL (expected_fms0_static, hfloat, 16, 4) []
136   = { 0xDEA2 /* A0 + (-B0) * B0.  */,
137       0x5810 /* A1 + (-B1) * B0.  */,
138       0xDA82 /* A2 + (-B2) * B0.  */,
139       0xD53A /* A3 + (-B3) * B0.  */ };
140 
141 VECT_VAR_DECL (expected_fms1_static, hfloat, 16, 4) []
142   = { 0x5C0D /* A0 + (-B0) * B1.  */,
143       0xD0EE /* A1 + (-B1) * B1.  */,
144       0x5274 /* A2 + (-B2) * B1.  */,
145       0x5026 /* A3 + (-B3) * B1.  */ };
146 
147 VECT_VAR_DECL (expected_fms2_static, hfloat, 16, 4) []
148   = { 0xD54E /* A0 + (-B0) * B2.  */,
149       0x51BA /* A1 + (-B1) * B2.  */,
150       0xD4F3 /* A2 + (-B2) * B2.  */,
151       0xCE66 /* A3 + (-B3) * B2.  */ };
152 
153 VECT_VAR_DECL (expected_fms3_static, hfloat, 16, 4) []
154   = { 0x4F70 /* A0 + (-B0) * B3.  */,
155       0x4C5A /* A1 + (-B1) * B3.  */,
156       0xD073 /* A2 + (-B2) * B3.  */,
157       0xC600 /* A3 + (-B3) * B3.  */ };
158 
159 VECT_VAR_DECL (expected_fms0_static, hfloat, 16, 8) []
160   = { 0xDEA2 /* A0 + (-B0) * B0.  */,
161       0x5810 /* A1 + (-B1) * B0.  */,
162       0xDA82 /* A2 + (-B2) * B0.  */,
163       0xD53A /* A3 + (-B3) * B0.  */,
164       0x7C00 /* A4 + (-B4) * B0.  */,
165       0x724B /* A5 + (-B5) * B0.  */,
166       0x6286 /* A6 + (-B6) * B0.  */,
167       0xFC00 /* A7 + (-B7) * B0.  */ };
168 
169 VECT_VAR_DECL (expected_fms1_static, hfloat, 16, 8) []
170   = { 0x5C0D /* A0 + (-B0) * B1.  */,
171       0xD0EE /* A1 + (-B1) * B1.  */,
172       0x5274 /* A2 + (-B2) * B1.  */,
173       0x5026 /* A3 + (-B3) * B1.  */,
174       0x7C00 /* A4 + (-B4) * B1.  */,
175       0xEA41 /* A5 + (-B5) * B1.  */,
176       0xD5DA /* A6 + (-B6) * B1.  */,
177       0x7C00 /* A7 + (-B7) * B1.  */ };
178 
179 VECT_VAR_DECL (expected_fms2_static, hfloat, 16, 8) []
180   = { 0xD54E /* A0 + (-B0) * B2.  */,
181       0x51BA /* A1 + (-B1) * B2.  */,
182       0xD4F3 /* A2 + (-B2) * B2.  */,
183       0xCE66 /* A3 + (-B3) * B2.  */,
184       0x7C00 /* A4 + (-B4) * B2.  */,
185       0x6CC8 /* A5 + (-B5) * B2.  */,
186       0x5DD7 /* A6 + (-B6) * B2.  */,
187       0xFC00 /* A7 + (-B7) * B2.  */ };
188 
189 VECT_VAR_DECL (expected_fms3_static, hfloat, 16, 8) []
190   = { 0x4F70 /* A0 + (-B0) * B3.  */,
191       0x4C5A /* A1 + (-B1) * B3.  */,
192       0xD073 /* A2 + (-B2) * B3.  */,
193       0xC600 /* A3 + (-B3) * B3.  */,
194       0x7C00 /* A4 + (-B4) * B3.  */,
195       0x684B /* A5 + (-B5) * B3.  */,
196       0x5AD0 /* A6 + (-B6) * B3.  */,
197       0xFC00 /* A7 + (-B7) * B3.  */ };
198 
199 VECT_VAR_DECL (expected_fms4_static, hfloat, 16, 8) []
200   = { 0x5179 /* A0 + (-B0) * B4.  */,
201       0x4AF6 /* A1 + (-B1) * B4.  */,
202       0xCF91 /* A2 + (-B2) * B4.  */,
203       0xC334 /* A3 + (-B3) * B4.  */,
204       0x7C00 /* A4 + (-B4) * B4.  */,
205       0x674C /* A5 + (-B5) * B4.  */,
206       0x5A37 /* A6 + (-B6) * B4.  */,
207       0xFC00 /* A7 + (-B7) * B4.  */ };
208 
209 VECT_VAR_DECL (expected_fms5_static, hfloat, 16, 8) []
210   = { 0x725C /* A0 + (-B0) * B5.  */,
211       0xEA41 /* A1 + (-B1) * B5.  */,
212       0x6CCA /* A2 + (-B2) * B5.  */,
213       0x6853 /* A3 + (-B3) * B5.  */,
214       0x7C00 /* A4 + (-B4) * B5.  */,
215       0xFC00 /* A5 + (-B5) * B5.  */,
216       0xF441 /* A6 + (-B6) * B5.  */,
217       0x7C00 /* A7 + (-B7) * B5.  */ };
218 
219 VECT_VAR_DECL (expected_fms6_static, hfloat, 16, 8) []
220   = { 0x62C7 /* A0 + (-B0) * B6.  */,
221       0xD9F2 /* A1 + (-B1) * B6.  */,
222       0x5C6C /* A2 + (-B2) * B6.  */,
223       0x584A /* A3 + (-B3) * B6.  */,
224       0x7C00 /* A4 + (-B4) * B6.  */,
225       0xF447 /* A5 + (-B5) * B6.  */,
226       0xE330 /* A6 + (-B6) * B6.  */,
227       0x7C00 /* A7 + (-B7) * B6.  */ };
228 
229 VECT_VAR_DECL (expected_fms7_static, hfloat, 16, 8) []
230   = { 0xFC00 /* A0 + (-B0) * B7.  */,
231       0x7C00 /* A1 + (-B1) * B7.  */,
232       0xFC00 /* A2 + (-B2) * B7.  */,
233       0xFC00 /* A3 + (-B3) * B7.  */,
234       0x7C00 /* A4 + (-B4) * B7.  */,
235       0x7C00 /* A5 + (-B5) * B7.  */,
236       0x7C00 /* A6 + (-B6) * B7.  */,
237       0xFC00 /* A7 + (-B7) * B7.  */ };
238 
exec_vfmas_n_f16(void)239 void exec_vfmas_n_f16 (void)
240 {
241 #undef TEST_MSG
242 #define TEST_MSG "VFMA_N (FP16)"
243   clean_results ();
244 
245   DECL_VARIABLE(vsrc_1, float, 16, 4);
246   DECL_VARIABLE(vsrc_2, float, 16, 4);
247   VECT_VAR_DECL (buf_src_1, float, 16, 4) [] = {A0, A1, A2, A3};
248   VECT_VAR_DECL (buf_src_2, float, 16, 4) [] = {B0, B1, B2, B3};
249   VLOAD (vsrc_1, buf_src_1, , float, f, 16, 4);
250   VLOAD (vsrc_2, buf_src_2, , float, f, 16, 4);
251   DECL_VARIABLE (vector_res, float, 16, 4)
252     = vfma_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
253 		  VECT_VAR (vsrc_2, float, 16, 4), B0);
254 
255   vst1_f16 (VECT_VAR (result, float, 16, 4),
256 	    VECT_VAR (vector_res, float, 16, 4));
257 
258   CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fma0_static, "");
259 
260   VECT_VAR (vector_res, float, 16, 4)
261     = vfma_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
262 		  VECT_VAR (vsrc_2, float, 16, 4), B1);
263   vst1_f16 (VECT_VAR (result, float, 16, 4),
264 	    VECT_VAR (vector_res, float, 16, 4));
265 
266   CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fma1_static, "");
267 
268   VECT_VAR (vector_res, float, 16, 4)
269     = vfma_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
270 		  VECT_VAR (vsrc_2, float, 16, 4), B2);
271   vst1_f16 (VECT_VAR (result, float, 16, 4),
272 	    VECT_VAR (vector_res, float, 16, 4));
273 
274   CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fma2_static, "");
275 
276   VECT_VAR (vector_res, float, 16, 4)
277     = vfma_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
278 		  VECT_VAR (vsrc_2, float, 16, 4), B3);
279   vst1_f16 (VECT_VAR (result, float, 16, 4),
280 	    VECT_VAR (vector_res, float, 16, 4));
281 
282   CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fma3_static, "");
283 
284 #undef TEST_MSG
285 #define TEST_MSG "VFMAQ_N (FP16)"
286   clean_results ();
287 
288   DECL_VARIABLE(vsrc_1, float, 16, 8);
289   DECL_VARIABLE(vsrc_2, float, 16, 8);
290   VECT_VAR_DECL (buf_src_1, float, 16, 8) [] = {A0, A1, A2, A3, A4, A5, A6, A7};
291   VECT_VAR_DECL (buf_src_2, float, 16, 8) [] = {B0, B1, B2, B3, B4, B5, B6, B7};
292   VLOAD (vsrc_1, buf_src_1, q, float, f, 16, 8);
293   VLOAD (vsrc_2, buf_src_2, q, float, f, 16, 8);
294   DECL_VARIABLE (vector_res, float, 16, 8)
295     = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
296 		   VECT_VAR (vsrc_2, float, 16, 8), B0);
297   vst1q_f16 (VECT_VAR (result, float, 16, 8),
298 	     VECT_VAR (vector_res, float, 16, 8));
299 
300   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma0_static, "");
301 
302   VECT_VAR (vector_res, float, 16, 8)
303     = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
304 		   VECT_VAR (vsrc_2, float, 16, 8), B1);
305   vst1q_f16 (VECT_VAR (result, float, 16, 8),
306 	     VECT_VAR (vector_res, float, 16, 8));
307 
308   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma1_static, "");
309 
310   VECT_VAR (vector_res, float, 16, 8)
311     = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
312 		   VECT_VAR (vsrc_2, float, 16, 8), B2);
313   vst1q_f16 (VECT_VAR (result, float, 16, 8),
314 	     VECT_VAR (vector_res, float, 16, 8));
315 
316   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma2_static, "");
317 
318   VECT_VAR (vector_res, float, 16, 8)
319     = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
320 		   VECT_VAR (vsrc_2, float, 16, 8), B3);
321   vst1q_f16 (VECT_VAR (result, float, 16, 8),
322 	     VECT_VAR (vector_res, float, 16, 8));
323 
324   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma3_static, "");
325 
326   VECT_VAR (vector_res, float, 16, 8)
327     = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
328 		   VECT_VAR (vsrc_2, float, 16, 8), B4);
329   vst1q_f16 (VECT_VAR (result, float, 16, 8),
330 	     VECT_VAR (vector_res, float, 16, 8));
331 
332   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma4_static, "");
333 
334   VECT_VAR (vector_res, float, 16, 8)
335     = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
336 		   VECT_VAR (vsrc_2, float, 16, 8), B5);
337   vst1q_f16 (VECT_VAR (result, float, 16, 8),
338 	     VECT_VAR (vector_res, float, 16, 8));
339 
340   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma5_static, "");
341 
342   VECT_VAR (vector_res, float, 16, 8)
343     = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
344 		   VECT_VAR (vsrc_2, float, 16, 8), B6);
345   vst1q_f16 (VECT_VAR (result, float, 16, 8),
346 	     VECT_VAR (vector_res, float, 16, 8));
347 
348   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma6_static, "");
349 
350   VECT_VAR (vector_res, float, 16, 8)
351     = vfmaq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
352 		   VECT_VAR (vsrc_2, float, 16, 8), B7);
353   vst1q_f16 (VECT_VAR (result, float, 16, 8),
354 	     VECT_VAR (vector_res, float, 16, 8));
355 
356   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fma7_static, "");
357 
358 #undef TEST_MSG
359 #define TEST_MSG "VFMA_N (FP16)"
360   clean_results ();
361 
362   VECT_VAR (vector_res, float, 16, 4)
363     = vfms_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
364 		  VECT_VAR (vsrc_2, float, 16, 4), B0);
365 
366   vst1_f16 (VECT_VAR (result, float, 16, 4),
367 	    VECT_VAR (vector_res, float, 16, 4));
368 
369   CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fms0_static, "");
370 
371   VECT_VAR (vector_res, float, 16, 4)
372     = vfms_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
373 		  VECT_VAR (vsrc_2, float, 16, 4), B1);
374   vst1_f16 (VECT_VAR (result, float, 16, 4),
375 	    VECT_VAR (vector_res, float, 16, 4));
376 
377   CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fms1_static, "");
378 
379   VECT_VAR (vector_res, float, 16, 4)
380     = vfms_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
381 		  VECT_VAR (vsrc_2, float, 16, 4), B2);
382   vst1_f16 (VECT_VAR (result, float, 16, 4),
383 	    VECT_VAR (vector_res, float, 16, 4));
384 
385   CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fms2_static, "");
386 
387   VECT_VAR (vector_res, float, 16, 4)
388     = vfms_n_f16 (VECT_VAR (vsrc_1, float, 16, 4),
389 		  VECT_VAR (vsrc_2, float, 16, 4), B3);
390   vst1_f16 (VECT_VAR (result, float, 16, 4),
391 	    VECT_VAR (vector_res, float, 16, 4));
392 
393   CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_fms3_static, "");
394 
395 #undef TEST_MSG
396 #define TEST_MSG "VFMAQ_N (FP16)"
397   clean_results ();
398 
399   VECT_VAR (vector_res, float, 16, 8)
400     = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
401 		   VECT_VAR (vsrc_2, float, 16, 8), B0);
402   vst1q_f16 (VECT_VAR (result, float, 16, 8),
403 	     VECT_VAR (vector_res, float, 16, 8));
404 
405   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms0_static, "");
406 
407   VECT_VAR (vector_res, float, 16, 8)
408     = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
409 		   VECT_VAR (vsrc_2, float, 16, 8), B1);
410   vst1q_f16 (VECT_VAR (result, float, 16, 8),
411 	     VECT_VAR (vector_res, float, 16, 8));
412 
413   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms1_static, "");
414 
415   VECT_VAR (vector_res, float, 16, 8)
416     = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
417 		   VECT_VAR (vsrc_2, float, 16, 8), B2);
418   vst1q_f16 (VECT_VAR (result, float, 16, 8),
419 	     VECT_VAR (vector_res, float, 16, 8));
420 
421   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms2_static, "");
422 
423   VECT_VAR (vector_res, float, 16, 8)
424     = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
425 		   VECT_VAR (vsrc_2, float, 16, 8), B3);
426   vst1q_f16 (VECT_VAR (result, float, 16, 8),
427 	     VECT_VAR (vector_res, float, 16, 8));
428 
429   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms3_static, "");
430 
431   VECT_VAR (vector_res, float, 16, 8)
432     = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
433 		   VECT_VAR (vsrc_2, float, 16, 8), B4);
434   vst1q_f16 (VECT_VAR (result, float, 16, 8),
435 	     VECT_VAR (vector_res, float, 16, 8));
436 
437   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms4_static, "");
438 
439   VECT_VAR (vector_res, float, 16, 8)
440     = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
441 		   VECT_VAR (vsrc_2, float, 16, 8), B5);
442   vst1q_f16 (VECT_VAR (result, float, 16, 8),
443 	     VECT_VAR (vector_res, float, 16, 8));
444 
445   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms5_static, "");
446 
447   VECT_VAR (vector_res, float, 16, 8)
448     = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
449 		   VECT_VAR (vsrc_2, float, 16, 8), B6);
450   vst1q_f16 (VECT_VAR (result, float, 16, 8),
451 	     VECT_VAR (vector_res, float, 16, 8));
452 
453   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms6_static, "");
454 
455   VECT_VAR (vector_res, float, 16, 8)
456     = vfmsq_n_f16 (VECT_VAR (vsrc_1, float, 16, 8),
457 		   VECT_VAR (vsrc_2, float, 16, 8), B7);
458   vst1q_f16 (VECT_VAR (result, float, 16, 8),
459 	     VECT_VAR (vector_res, float, 16, 8));
460 
461   CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_fms7_static, "");
462 }
463 
464 int
main(void)465 main (void)
466 {
467   exec_vfmas_n_f16 ();
468   return 0;
469 }
470