xref: /aosp_15_r20/external/XNNPACK/test/f32-f16-vcvt.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1 // Copyright 2021 Google LLC
2 //
3 // This source code is licensed under the BSD-style license found in the
4 // LICENSE file in the root directory of this source tree.
5 //
6 // Auto-generated file. Do not edit!
7 //   Specification: test/f32-f16-vcvt.yaml
8 //   Generator: tools/generate-vcvt-test.py
9 
10 
11 #include <gtest/gtest.h>
12 
13 #include <xnnpack/common.h>
14 #include <xnnpack/isa-checks.h>
15 
16 #include <xnnpack/vcvt.h>
17 #include "vcvt-microkernel-tester.h"
18 
19 
20 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_F16_VCVT__NEON_X8,batch_eq_8)21   TEST(F32_F16_VCVT__NEON_X8, batch_eq_8) {
22     TEST_REQUIRES_ARM_NEON;
23     VCvtMicrokernelTester()
24       .batch_size(8)
25       .Test(xnn_f32_f16_vcvt_ukernel__neon_x8, xnn_init_f32_f16_cvt_neon_params);
26   }
27 
TEST(F32_F16_VCVT__NEON_X8,batch_div_8)28   TEST(F32_F16_VCVT__NEON_X8, batch_div_8) {
29     TEST_REQUIRES_ARM_NEON;
30     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
31       VCvtMicrokernelTester()
32         .batch_size(batch_size)
33         .Test(xnn_f32_f16_vcvt_ukernel__neon_x8, xnn_init_f32_f16_cvt_neon_params);
34     }
35   }
36 
TEST(F32_F16_VCVT__NEON_X8,batch_lt_8)37   TEST(F32_F16_VCVT__NEON_X8, batch_lt_8) {
38     TEST_REQUIRES_ARM_NEON;
39     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
40       VCvtMicrokernelTester()
41         .batch_size(batch_size)
42         .Test(xnn_f32_f16_vcvt_ukernel__neon_x8, xnn_init_f32_f16_cvt_neon_params);
43     }
44   }
45 
TEST(F32_F16_VCVT__NEON_X8,batch_gt_8)46   TEST(F32_F16_VCVT__NEON_X8, batch_gt_8) {
47     TEST_REQUIRES_ARM_NEON;
48     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
49       VCvtMicrokernelTester()
50         .batch_size(batch_size)
51         .Test(xnn_f32_f16_vcvt_ukernel__neon_x8, xnn_init_f32_f16_cvt_neon_params);
52     }
53   }
54 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
55 
56 
57 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_F16_VCVT__NEON_X16,batch_eq_16)58   TEST(F32_F16_VCVT__NEON_X16, batch_eq_16) {
59     TEST_REQUIRES_ARM_NEON;
60     VCvtMicrokernelTester()
61       .batch_size(16)
62       .Test(xnn_f32_f16_vcvt_ukernel__neon_x16, xnn_init_f32_f16_cvt_neon_params);
63   }
64 
TEST(F32_F16_VCVT__NEON_X16,batch_div_16)65   TEST(F32_F16_VCVT__NEON_X16, batch_div_16) {
66     TEST_REQUIRES_ARM_NEON;
67     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
68       VCvtMicrokernelTester()
69         .batch_size(batch_size)
70         .Test(xnn_f32_f16_vcvt_ukernel__neon_x16, xnn_init_f32_f16_cvt_neon_params);
71     }
72   }
73 
TEST(F32_F16_VCVT__NEON_X16,batch_lt_16)74   TEST(F32_F16_VCVT__NEON_X16, batch_lt_16) {
75     TEST_REQUIRES_ARM_NEON;
76     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
77       VCvtMicrokernelTester()
78         .batch_size(batch_size)
79         .Test(xnn_f32_f16_vcvt_ukernel__neon_x16, xnn_init_f32_f16_cvt_neon_params);
80     }
81   }
82 
TEST(F32_F16_VCVT__NEON_X16,batch_gt_16)83   TEST(F32_F16_VCVT__NEON_X16, batch_gt_16) {
84     TEST_REQUIRES_ARM_NEON;
85     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
86       VCvtMicrokernelTester()
87         .batch_size(batch_size)
88         .Test(xnn_f32_f16_vcvt_ukernel__neon_x16, xnn_init_f32_f16_cvt_neon_params);
89     }
90   }
91 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
92 
93 
94 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_F16_VCVT__NEON_X24,batch_eq_24)95   TEST(F32_F16_VCVT__NEON_X24, batch_eq_24) {
96     TEST_REQUIRES_ARM_NEON;
97     VCvtMicrokernelTester()
98       .batch_size(24)
99       .Test(xnn_f32_f16_vcvt_ukernel__neon_x24, xnn_init_f32_f16_cvt_neon_params);
100   }
101 
TEST(F32_F16_VCVT__NEON_X24,batch_div_24)102   TEST(F32_F16_VCVT__NEON_X24, batch_div_24) {
103     TEST_REQUIRES_ARM_NEON;
104     for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
105       VCvtMicrokernelTester()
106         .batch_size(batch_size)
107         .Test(xnn_f32_f16_vcvt_ukernel__neon_x24, xnn_init_f32_f16_cvt_neon_params);
108     }
109   }
110 
TEST(F32_F16_VCVT__NEON_X24,batch_lt_24)111   TEST(F32_F16_VCVT__NEON_X24, batch_lt_24) {
112     TEST_REQUIRES_ARM_NEON;
113     for (size_t batch_size = 1; batch_size < 24; batch_size++) {
114       VCvtMicrokernelTester()
115         .batch_size(batch_size)
116         .Test(xnn_f32_f16_vcvt_ukernel__neon_x24, xnn_init_f32_f16_cvt_neon_params);
117     }
118   }
119 
TEST(F32_F16_VCVT__NEON_X24,batch_gt_24)120   TEST(F32_F16_VCVT__NEON_X24, batch_gt_24) {
121     TEST_REQUIRES_ARM_NEON;
122     for (size_t batch_size = 25; batch_size < 48; batch_size++) {
123       VCvtMicrokernelTester()
124         .batch_size(batch_size)
125         .Test(xnn_f32_f16_vcvt_ukernel__neon_x24, xnn_init_f32_f16_cvt_neon_params);
126     }
127   }
128 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
129 
130 
131 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_F16_VCVT__NEON_X32,batch_eq_32)132   TEST(F32_F16_VCVT__NEON_X32, batch_eq_32) {
133     TEST_REQUIRES_ARM_NEON;
134     VCvtMicrokernelTester()
135       .batch_size(32)
136       .Test(xnn_f32_f16_vcvt_ukernel__neon_x32, xnn_init_f32_f16_cvt_neon_params);
137   }
138 
TEST(F32_F16_VCVT__NEON_X32,batch_div_32)139   TEST(F32_F16_VCVT__NEON_X32, batch_div_32) {
140     TEST_REQUIRES_ARM_NEON;
141     for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
142       VCvtMicrokernelTester()
143         .batch_size(batch_size)
144         .Test(xnn_f32_f16_vcvt_ukernel__neon_x32, xnn_init_f32_f16_cvt_neon_params);
145     }
146   }
147 
TEST(F32_F16_VCVT__NEON_X32,batch_lt_32)148   TEST(F32_F16_VCVT__NEON_X32, batch_lt_32) {
149     TEST_REQUIRES_ARM_NEON;
150     for (size_t batch_size = 1; batch_size < 32; batch_size++) {
151       VCvtMicrokernelTester()
152         .batch_size(batch_size)
153         .Test(xnn_f32_f16_vcvt_ukernel__neon_x32, xnn_init_f32_f16_cvt_neon_params);
154     }
155   }
156 
TEST(F32_F16_VCVT__NEON_X32,batch_gt_32)157   TEST(F32_F16_VCVT__NEON_X32, batch_gt_32) {
158     TEST_REQUIRES_ARM_NEON;
159     for (size_t batch_size = 33; batch_size < 64; batch_size++) {
160       VCvtMicrokernelTester()
161         .batch_size(batch_size)
162         .Test(xnn_f32_f16_vcvt_ukernel__neon_x32, xnn_init_f32_f16_cvt_neon_params);
163     }
164   }
165 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
166 
167 
168 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_F16_VCVT__NEONFP16_X8,batch_eq_8)169   TEST(F32_F16_VCVT__NEONFP16_X8, batch_eq_8) {
170     TEST_REQUIRES_ARM_NEON_FP16;
171     VCvtMicrokernelTester()
172       .batch_size(8)
173       .Test(xnn_f32_f16_vcvt_ukernel__neonfp16_x8);
174   }
175 
TEST(F32_F16_VCVT__NEONFP16_X8,batch_div_8)176   TEST(F32_F16_VCVT__NEONFP16_X8, batch_div_8) {
177     TEST_REQUIRES_ARM_NEON_FP16;
178     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
179       VCvtMicrokernelTester()
180         .batch_size(batch_size)
181         .Test(xnn_f32_f16_vcvt_ukernel__neonfp16_x8);
182     }
183   }
184 
TEST(F32_F16_VCVT__NEONFP16_X8,batch_lt_8)185   TEST(F32_F16_VCVT__NEONFP16_X8, batch_lt_8) {
186     TEST_REQUIRES_ARM_NEON_FP16;
187     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
188       VCvtMicrokernelTester()
189         .batch_size(batch_size)
190         .Test(xnn_f32_f16_vcvt_ukernel__neonfp16_x8);
191     }
192   }
193 
TEST(F32_F16_VCVT__NEONFP16_X8,batch_gt_8)194   TEST(F32_F16_VCVT__NEONFP16_X8, batch_gt_8) {
195     TEST_REQUIRES_ARM_NEON_FP16;
196     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
197       VCvtMicrokernelTester()
198         .batch_size(batch_size)
199         .Test(xnn_f32_f16_vcvt_ukernel__neonfp16_x8);
200     }
201   }
202 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
203 
204 
205 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_F16_VCVT__NEONFP16_X16,batch_eq_16)206   TEST(F32_F16_VCVT__NEONFP16_X16, batch_eq_16) {
207     TEST_REQUIRES_ARM_NEON_FP16;
208     VCvtMicrokernelTester()
209       .batch_size(16)
210       .Test(xnn_f32_f16_vcvt_ukernel__neonfp16_x16);
211   }
212 
TEST(F32_F16_VCVT__NEONFP16_X16,batch_div_16)213   TEST(F32_F16_VCVT__NEONFP16_X16, batch_div_16) {
214     TEST_REQUIRES_ARM_NEON_FP16;
215     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
216       VCvtMicrokernelTester()
217         .batch_size(batch_size)
218         .Test(xnn_f32_f16_vcvt_ukernel__neonfp16_x16);
219     }
220   }
221 
TEST(F32_F16_VCVT__NEONFP16_X16,batch_lt_16)222   TEST(F32_F16_VCVT__NEONFP16_X16, batch_lt_16) {
223     TEST_REQUIRES_ARM_NEON_FP16;
224     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
225       VCvtMicrokernelTester()
226         .batch_size(batch_size)
227         .Test(xnn_f32_f16_vcvt_ukernel__neonfp16_x16);
228     }
229   }
230 
TEST(F32_F16_VCVT__NEONFP16_X16,batch_gt_16)231   TEST(F32_F16_VCVT__NEONFP16_X16, batch_gt_16) {
232     TEST_REQUIRES_ARM_NEON_FP16;
233     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
234       VCvtMicrokernelTester()
235         .batch_size(batch_size)
236         .Test(xnn_f32_f16_vcvt_ukernel__neonfp16_x16);
237     }
238   }
239 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
240 
241 
242 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__SSE2_X8,batch_eq_8)243   TEST(F32_F16_VCVT__SSE2_X8, batch_eq_8) {
244     TEST_REQUIRES_X86_SSE2;
245     VCvtMicrokernelTester()
246       .batch_size(8)
247       .Test(xnn_f32_f16_vcvt_ukernel__sse2_x8, xnn_init_f32_f16_cvt_sse2_params);
248   }
249 
TEST(F32_F16_VCVT__SSE2_X8,batch_div_8)250   TEST(F32_F16_VCVT__SSE2_X8, batch_div_8) {
251     TEST_REQUIRES_X86_SSE2;
252     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
253       VCvtMicrokernelTester()
254         .batch_size(batch_size)
255         .Test(xnn_f32_f16_vcvt_ukernel__sse2_x8, xnn_init_f32_f16_cvt_sse2_params);
256     }
257   }
258 
TEST(F32_F16_VCVT__SSE2_X8,batch_lt_8)259   TEST(F32_F16_VCVT__SSE2_X8, batch_lt_8) {
260     TEST_REQUIRES_X86_SSE2;
261     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
262       VCvtMicrokernelTester()
263         .batch_size(batch_size)
264         .Test(xnn_f32_f16_vcvt_ukernel__sse2_x8, xnn_init_f32_f16_cvt_sse2_params);
265     }
266   }
267 
TEST(F32_F16_VCVT__SSE2_X8,batch_gt_8)268   TEST(F32_F16_VCVT__SSE2_X8, batch_gt_8) {
269     TEST_REQUIRES_X86_SSE2;
270     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
271       VCvtMicrokernelTester()
272         .batch_size(batch_size)
273         .Test(xnn_f32_f16_vcvt_ukernel__sse2_x8, xnn_init_f32_f16_cvt_sse2_params);
274     }
275   }
276 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
277 
278 
279 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__SSE2_X16,batch_eq_16)280   TEST(F32_F16_VCVT__SSE2_X16, batch_eq_16) {
281     TEST_REQUIRES_X86_SSE2;
282     VCvtMicrokernelTester()
283       .batch_size(16)
284       .Test(xnn_f32_f16_vcvt_ukernel__sse2_x16, xnn_init_f32_f16_cvt_sse2_params);
285   }
286 
TEST(F32_F16_VCVT__SSE2_X16,batch_div_16)287   TEST(F32_F16_VCVT__SSE2_X16, batch_div_16) {
288     TEST_REQUIRES_X86_SSE2;
289     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
290       VCvtMicrokernelTester()
291         .batch_size(batch_size)
292         .Test(xnn_f32_f16_vcvt_ukernel__sse2_x16, xnn_init_f32_f16_cvt_sse2_params);
293     }
294   }
295 
TEST(F32_F16_VCVT__SSE2_X16,batch_lt_16)296   TEST(F32_F16_VCVT__SSE2_X16, batch_lt_16) {
297     TEST_REQUIRES_X86_SSE2;
298     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
299       VCvtMicrokernelTester()
300         .batch_size(batch_size)
301         .Test(xnn_f32_f16_vcvt_ukernel__sse2_x16, xnn_init_f32_f16_cvt_sse2_params);
302     }
303   }
304 
TEST(F32_F16_VCVT__SSE2_X16,batch_gt_16)305   TEST(F32_F16_VCVT__SSE2_X16, batch_gt_16) {
306     TEST_REQUIRES_X86_SSE2;
307     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
308       VCvtMicrokernelTester()
309         .batch_size(batch_size)
310         .Test(xnn_f32_f16_vcvt_ukernel__sse2_x16, xnn_init_f32_f16_cvt_sse2_params);
311     }
312   }
313 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
314 
315 
316 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__SSE2_X24,batch_eq_24)317   TEST(F32_F16_VCVT__SSE2_X24, batch_eq_24) {
318     TEST_REQUIRES_X86_SSE2;
319     VCvtMicrokernelTester()
320       .batch_size(24)
321       .Test(xnn_f32_f16_vcvt_ukernel__sse2_x24, xnn_init_f32_f16_cvt_sse2_params);
322   }
323 
TEST(F32_F16_VCVT__SSE2_X24,batch_div_24)324   TEST(F32_F16_VCVT__SSE2_X24, batch_div_24) {
325     TEST_REQUIRES_X86_SSE2;
326     for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
327       VCvtMicrokernelTester()
328         .batch_size(batch_size)
329         .Test(xnn_f32_f16_vcvt_ukernel__sse2_x24, xnn_init_f32_f16_cvt_sse2_params);
330     }
331   }
332 
TEST(F32_F16_VCVT__SSE2_X24,batch_lt_24)333   TEST(F32_F16_VCVT__SSE2_X24, batch_lt_24) {
334     TEST_REQUIRES_X86_SSE2;
335     for (size_t batch_size = 1; batch_size < 24; batch_size++) {
336       VCvtMicrokernelTester()
337         .batch_size(batch_size)
338         .Test(xnn_f32_f16_vcvt_ukernel__sse2_x24, xnn_init_f32_f16_cvt_sse2_params);
339     }
340   }
341 
TEST(F32_F16_VCVT__SSE2_X24,batch_gt_24)342   TEST(F32_F16_VCVT__SSE2_X24, batch_gt_24) {
343     TEST_REQUIRES_X86_SSE2;
344     for (size_t batch_size = 25; batch_size < 48; batch_size++) {
345       VCvtMicrokernelTester()
346         .batch_size(batch_size)
347         .Test(xnn_f32_f16_vcvt_ukernel__sse2_x24, xnn_init_f32_f16_cvt_sse2_params);
348     }
349   }
350 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
351 
352 
353 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__SSE2_X32,batch_eq_32)354   TEST(F32_F16_VCVT__SSE2_X32, batch_eq_32) {
355     TEST_REQUIRES_X86_SSE2;
356     VCvtMicrokernelTester()
357       .batch_size(32)
358       .Test(xnn_f32_f16_vcvt_ukernel__sse2_x32, xnn_init_f32_f16_cvt_sse2_params);
359   }
360 
TEST(F32_F16_VCVT__SSE2_X32,batch_div_32)361   TEST(F32_F16_VCVT__SSE2_X32, batch_div_32) {
362     TEST_REQUIRES_X86_SSE2;
363     for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
364       VCvtMicrokernelTester()
365         .batch_size(batch_size)
366         .Test(xnn_f32_f16_vcvt_ukernel__sse2_x32, xnn_init_f32_f16_cvt_sse2_params);
367     }
368   }
369 
TEST(F32_F16_VCVT__SSE2_X32,batch_lt_32)370   TEST(F32_F16_VCVT__SSE2_X32, batch_lt_32) {
371     TEST_REQUIRES_X86_SSE2;
372     for (size_t batch_size = 1; batch_size < 32; batch_size++) {
373       VCvtMicrokernelTester()
374         .batch_size(batch_size)
375         .Test(xnn_f32_f16_vcvt_ukernel__sse2_x32, xnn_init_f32_f16_cvt_sse2_params);
376     }
377   }
378 
TEST(F32_F16_VCVT__SSE2_X32,batch_gt_32)379   TEST(F32_F16_VCVT__SSE2_X32, batch_gt_32) {
380     TEST_REQUIRES_X86_SSE2;
381     for (size_t batch_size = 33; batch_size < 64; batch_size++) {
382       VCvtMicrokernelTester()
383         .batch_size(batch_size)
384         .Test(xnn_f32_f16_vcvt_ukernel__sse2_x32, xnn_init_f32_f16_cvt_sse2_params);
385     }
386   }
387 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
388 
389 
390 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__SSE41_X8,batch_eq_8)391   TEST(F32_F16_VCVT__SSE41_X8, batch_eq_8) {
392     TEST_REQUIRES_X86_SSE41;
393     VCvtMicrokernelTester()
394       .batch_size(8)
395       .Test(xnn_f32_f16_vcvt_ukernel__sse41_x8, xnn_init_f32_f16_cvt_sse2_params);
396   }
397 
TEST(F32_F16_VCVT__SSE41_X8,batch_div_8)398   TEST(F32_F16_VCVT__SSE41_X8, batch_div_8) {
399     TEST_REQUIRES_X86_SSE41;
400     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
401       VCvtMicrokernelTester()
402         .batch_size(batch_size)
403         .Test(xnn_f32_f16_vcvt_ukernel__sse41_x8, xnn_init_f32_f16_cvt_sse2_params);
404     }
405   }
406 
TEST(F32_F16_VCVT__SSE41_X8,batch_lt_8)407   TEST(F32_F16_VCVT__SSE41_X8, batch_lt_8) {
408     TEST_REQUIRES_X86_SSE41;
409     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
410       VCvtMicrokernelTester()
411         .batch_size(batch_size)
412         .Test(xnn_f32_f16_vcvt_ukernel__sse41_x8, xnn_init_f32_f16_cvt_sse2_params);
413     }
414   }
415 
TEST(F32_F16_VCVT__SSE41_X8,batch_gt_8)416   TEST(F32_F16_VCVT__SSE41_X8, batch_gt_8) {
417     TEST_REQUIRES_X86_SSE41;
418     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
419       VCvtMicrokernelTester()
420         .batch_size(batch_size)
421         .Test(xnn_f32_f16_vcvt_ukernel__sse41_x8, xnn_init_f32_f16_cvt_sse2_params);
422     }
423   }
424 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
425 
426 
427 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__SSE41_X16,batch_eq_16)428   TEST(F32_F16_VCVT__SSE41_X16, batch_eq_16) {
429     TEST_REQUIRES_X86_SSE41;
430     VCvtMicrokernelTester()
431       .batch_size(16)
432       .Test(xnn_f32_f16_vcvt_ukernel__sse41_x16, xnn_init_f32_f16_cvt_sse2_params);
433   }
434 
TEST(F32_F16_VCVT__SSE41_X16,batch_div_16)435   TEST(F32_F16_VCVT__SSE41_X16, batch_div_16) {
436     TEST_REQUIRES_X86_SSE41;
437     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
438       VCvtMicrokernelTester()
439         .batch_size(batch_size)
440         .Test(xnn_f32_f16_vcvt_ukernel__sse41_x16, xnn_init_f32_f16_cvt_sse2_params);
441     }
442   }
443 
TEST(F32_F16_VCVT__SSE41_X16,batch_lt_16)444   TEST(F32_F16_VCVT__SSE41_X16, batch_lt_16) {
445     TEST_REQUIRES_X86_SSE41;
446     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
447       VCvtMicrokernelTester()
448         .batch_size(batch_size)
449         .Test(xnn_f32_f16_vcvt_ukernel__sse41_x16, xnn_init_f32_f16_cvt_sse2_params);
450     }
451   }
452 
TEST(F32_F16_VCVT__SSE41_X16,batch_gt_16)453   TEST(F32_F16_VCVT__SSE41_X16, batch_gt_16) {
454     TEST_REQUIRES_X86_SSE41;
455     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
456       VCvtMicrokernelTester()
457         .batch_size(batch_size)
458         .Test(xnn_f32_f16_vcvt_ukernel__sse41_x16, xnn_init_f32_f16_cvt_sse2_params);
459     }
460   }
461 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
462 
463 
464 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__SSE41_X24,batch_eq_24)465   TEST(F32_F16_VCVT__SSE41_X24, batch_eq_24) {
466     TEST_REQUIRES_X86_SSE41;
467     VCvtMicrokernelTester()
468       .batch_size(24)
469       .Test(xnn_f32_f16_vcvt_ukernel__sse41_x24, xnn_init_f32_f16_cvt_sse2_params);
470   }
471 
TEST(F32_F16_VCVT__SSE41_X24,batch_div_24)472   TEST(F32_F16_VCVT__SSE41_X24, batch_div_24) {
473     TEST_REQUIRES_X86_SSE41;
474     for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
475       VCvtMicrokernelTester()
476         .batch_size(batch_size)
477         .Test(xnn_f32_f16_vcvt_ukernel__sse41_x24, xnn_init_f32_f16_cvt_sse2_params);
478     }
479   }
480 
TEST(F32_F16_VCVT__SSE41_X24,batch_lt_24)481   TEST(F32_F16_VCVT__SSE41_X24, batch_lt_24) {
482     TEST_REQUIRES_X86_SSE41;
483     for (size_t batch_size = 1; batch_size < 24; batch_size++) {
484       VCvtMicrokernelTester()
485         .batch_size(batch_size)
486         .Test(xnn_f32_f16_vcvt_ukernel__sse41_x24, xnn_init_f32_f16_cvt_sse2_params);
487     }
488   }
489 
TEST(F32_F16_VCVT__SSE41_X24,batch_gt_24)490   TEST(F32_F16_VCVT__SSE41_X24, batch_gt_24) {
491     TEST_REQUIRES_X86_SSE41;
492     for (size_t batch_size = 25; batch_size < 48; batch_size++) {
493       VCvtMicrokernelTester()
494         .batch_size(batch_size)
495         .Test(xnn_f32_f16_vcvt_ukernel__sse41_x24, xnn_init_f32_f16_cvt_sse2_params);
496     }
497   }
498 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
499 
500 
501 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__SSE41_X32,batch_eq_32)502   TEST(F32_F16_VCVT__SSE41_X32, batch_eq_32) {
503     TEST_REQUIRES_X86_SSE41;
504     VCvtMicrokernelTester()
505       .batch_size(32)
506       .Test(xnn_f32_f16_vcvt_ukernel__sse41_x32, xnn_init_f32_f16_cvt_sse2_params);
507   }
508 
TEST(F32_F16_VCVT__SSE41_X32,batch_div_32)509   TEST(F32_F16_VCVT__SSE41_X32, batch_div_32) {
510     TEST_REQUIRES_X86_SSE41;
511     for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
512       VCvtMicrokernelTester()
513         .batch_size(batch_size)
514         .Test(xnn_f32_f16_vcvt_ukernel__sse41_x32, xnn_init_f32_f16_cvt_sse2_params);
515     }
516   }
517 
TEST(F32_F16_VCVT__SSE41_X32,batch_lt_32)518   TEST(F32_F16_VCVT__SSE41_X32, batch_lt_32) {
519     TEST_REQUIRES_X86_SSE41;
520     for (size_t batch_size = 1; batch_size < 32; batch_size++) {
521       VCvtMicrokernelTester()
522         .batch_size(batch_size)
523         .Test(xnn_f32_f16_vcvt_ukernel__sse41_x32, xnn_init_f32_f16_cvt_sse2_params);
524     }
525   }
526 
TEST(F32_F16_VCVT__SSE41_X32,batch_gt_32)527   TEST(F32_F16_VCVT__SSE41_X32, batch_gt_32) {
528     TEST_REQUIRES_X86_SSE41;
529     for (size_t batch_size = 33; batch_size < 64; batch_size++) {
530       VCvtMicrokernelTester()
531         .batch_size(batch_size)
532         .Test(xnn_f32_f16_vcvt_ukernel__sse41_x32, xnn_init_f32_f16_cvt_sse2_params);
533     }
534   }
535 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
536 
537 
538 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__AVX_X8,batch_eq_8)539   TEST(F32_F16_VCVT__AVX_X8, batch_eq_8) {
540     TEST_REQUIRES_X86_AVX;
541     VCvtMicrokernelTester()
542       .batch_size(8)
543       .Test(xnn_f32_f16_vcvt_ukernel__avx_x8, xnn_init_f32_f16_cvt_sse2_params);
544   }
545 
TEST(F32_F16_VCVT__AVX_X8,batch_div_8)546   TEST(F32_F16_VCVT__AVX_X8, batch_div_8) {
547     TEST_REQUIRES_X86_AVX;
548     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
549       VCvtMicrokernelTester()
550         .batch_size(batch_size)
551         .Test(xnn_f32_f16_vcvt_ukernel__avx_x8, xnn_init_f32_f16_cvt_sse2_params);
552     }
553   }
554 
TEST(F32_F16_VCVT__AVX_X8,batch_lt_8)555   TEST(F32_F16_VCVT__AVX_X8, batch_lt_8) {
556     TEST_REQUIRES_X86_AVX;
557     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
558       VCvtMicrokernelTester()
559         .batch_size(batch_size)
560         .Test(xnn_f32_f16_vcvt_ukernel__avx_x8, xnn_init_f32_f16_cvt_sse2_params);
561     }
562   }
563 
TEST(F32_F16_VCVT__AVX_X8,batch_gt_8)564   TEST(F32_F16_VCVT__AVX_X8, batch_gt_8) {
565     TEST_REQUIRES_X86_AVX;
566     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
567       VCvtMicrokernelTester()
568         .batch_size(batch_size)
569         .Test(xnn_f32_f16_vcvt_ukernel__avx_x8, xnn_init_f32_f16_cvt_sse2_params);
570     }
571   }
572 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
573 
574 
575 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__AVX_X16,batch_eq_16)576   TEST(F32_F16_VCVT__AVX_X16, batch_eq_16) {
577     TEST_REQUIRES_X86_AVX;
578     VCvtMicrokernelTester()
579       .batch_size(16)
580       .Test(xnn_f32_f16_vcvt_ukernel__avx_x16, xnn_init_f32_f16_cvt_sse2_params);
581   }
582 
TEST(F32_F16_VCVT__AVX_X16,batch_div_16)583   TEST(F32_F16_VCVT__AVX_X16, batch_div_16) {
584     TEST_REQUIRES_X86_AVX;
585     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
586       VCvtMicrokernelTester()
587         .batch_size(batch_size)
588         .Test(xnn_f32_f16_vcvt_ukernel__avx_x16, xnn_init_f32_f16_cvt_sse2_params);
589     }
590   }
591 
TEST(F32_F16_VCVT__AVX_X16,batch_lt_16)592   TEST(F32_F16_VCVT__AVX_X16, batch_lt_16) {
593     TEST_REQUIRES_X86_AVX;
594     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
595       VCvtMicrokernelTester()
596         .batch_size(batch_size)
597         .Test(xnn_f32_f16_vcvt_ukernel__avx_x16, xnn_init_f32_f16_cvt_sse2_params);
598     }
599   }
600 
TEST(F32_F16_VCVT__AVX_X16,batch_gt_16)601   TEST(F32_F16_VCVT__AVX_X16, batch_gt_16) {
602     TEST_REQUIRES_X86_AVX;
603     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
604       VCvtMicrokernelTester()
605         .batch_size(batch_size)
606         .Test(xnn_f32_f16_vcvt_ukernel__avx_x16, xnn_init_f32_f16_cvt_sse2_params);
607     }
608   }
609 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
610 
611 
612 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__AVX_X24,batch_eq_24)613   TEST(F32_F16_VCVT__AVX_X24, batch_eq_24) {
614     TEST_REQUIRES_X86_AVX;
615     VCvtMicrokernelTester()
616       .batch_size(24)
617       .Test(xnn_f32_f16_vcvt_ukernel__avx_x24, xnn_init_f32_f16_cvt_sse2_params);
618   }
619 
TEST(F32_F16_VCVT__AVX_X24,batch_div_24)620   TEST(F32_F16_VCVT__AVX_X24, batch_div_24) {
621     TEST_REQUIRES_X86_AVX;
622     for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
623       VCvtMicrokernelTester()
624         .batch_size(batch_size)
625         .Test(xnn_f32_f16_vcvt_ukernel__avx_x24, xnn_init_f32_f16_cvt_sse2_params);
626     }
627   }
628 
TEST(F32_F16_VCVT__AVX_X24,batch_lt_24)629   TEST(F32_F16_VCVT__AVX_X24, batch_lt_24) {
630     TEST_REQUIRES_X86_AVX;
631     for (size_t batch_size = 1; batch_size < 24; batch_size++) {
632       VCvtMicrokernelTester()
633         .batch_size(batch_size)
634         .Test(xnn_f32_f16_vcvt_ukernel__avx_x24, xnn_init_f32_f16_cvt_sse2_params);
635     }
636   }
637 
TEST(F32_F16_VCVT__AVX_X24,batch_gt_24)638   TEST(F32_F16_VCVT__AVX_X24, batch_gt_24) {
639     TEST_REQUIRES_X86_AVX;
640     for (size_t batch_size = 25; batch_size < 48; batch_size++) {
641       VCvtMicrokernelTester()
642         .batch_size(batch_size)
643         .Test(xnn_f32_f16_vcvt_ukernel__avx_x24, xnn_init_f32_f16_cvt_sse2_params);
644     }
645   }
646 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
647 
648 
649 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__AVX_X32,batch_eq_32)650   TEST(F32_F16_VCVT__AVX_X32, batch_eq_32) {
651     TEST_REQUIRES_X86_AVX;
652     VCvtMicrokernelTester()
653       .batch_size(32)
654       .Test(xnn_f32_f16_vcvt_ukernel__avx_x32, xnn_init_f32_f16_cvt_sse2_params);
655   }
656 
TEST(F32_F16_VCVT__AVX_X32,batch_div_32)657   TEST(F32_F16_VCVT__AVX_X32, batch_div_32) {
658     TEST_REQUIRES_X86_AVX;
659     for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
660       VCvtMicrokernelTester()
661         .batch_size(batch_size)
662         .Test(xnn_f32_f16_vcvt_ukernel__avx_x32, xnn_init_f32_f16_cvt_sse2_params);
663     }
664   }
665 
TEST(F32_F16_VCVT__AVX_X32,batch_lt_32)666   TEST(F32_F16_VCVT__AVX_X32, batch_lt_32) {
667     TEST_REQUIRES_X86_AVX;
668     for (size_t batch_size = 1; batch_size < 32; batch_size++) {
669       VCvtMicrokernelTester()
670         .batch_size(batch_size)
671         .Test(xnn_f32_f16_vcvt_ukernel__avx_x32, xnn_init_f32_f16_cvt_sse2_params);
672     }
673   }
674 
TEST(F32_F16_VCVT__AVX_X32,batch_gt_32)675   TEST(F32_F16_VCVT__AVX_X32, batch_gt_32) {
676     TEST_REQUIRES_X86_AVX;
677     for (size_t batch_size = 33; batch_size < 64; batch_size++) {
678       VCvtMicrokernelTester()
679         .batch_size(batch_size)
680         .Test(xnn_f32_f16_vcvt_ukernel__avx_x32, xnn_init_f32_f16_cvt_sse2_params);
681     }
682   }
683 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
684 
685 
686 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__F16C_X8,batch_eq_8)687   TEST(F32_F16_VCVT__F16C_X8, batch_eq_8) {
688     TEST_REQUIRES_X86_F16C;
689     VCvtMicrokernelTester()
690       .batch_size(8)
691       .Test(xnn_f32_f16_vcvt_ukernel__f16c_x8, xnn_init_f32_f16_cvt_f16c_params);
692   }
693 
TEST(F32_F16_VCVT__F16C_X8,batch_div_8)694   TEST(F32_F16_VCVT__F16C_X8, batch_div_8) {
695     TEST_REQUIRES_X86_F16C;
696     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
697       VCvtMicrokernelTester()
698         .batch_size(batch_size)
699         .Test(xnn_f32_f16_vcvt_ukernel__f16c_x8, xnn_init_f32_f16_cvt_f16c_params);
700     }
701   }
702 
TEST(F32_F16_VCVT__F16C_X8,batch_lt_8)703   TEST(F32_F16_VCVT__F16C_X8, batch_lt_8) {
704     TEST_REQUIRES_X86_F16C;
705     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
706       VCvtMicrokernelTester()
707         .batch_size(batch_size)
708         .Test(xnn_f32_f16_vcvt_ukernel__f16c_x8, xnn_init_f32_f16_cvt_f16c_params);
709     }
710   }
711 
TEST(F32_F16_VCVT__F16C_X8,batch_gt_8)712   TEST(F32_F16_VCVT__F16C_X8, batch_gt_8) {
713     TEST_REQUIRES_X86_F16C;
714     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
715       VCvtMicrokernelTester()
716         .batch_size(batch_size)
717         .Test(xnn_f32_f16_vcvt_ukernel__f16c_x8, xnn_init_f32_f16_cvt_f16c_params);
718     }
719   }
720 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
721 
722 
723 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__F16C_X16,batch_eq_16)724   TEST(F32_F16_VCVT__F16C_X16, batch_eq_16) {
725     TEST_REQUIRES_X86_F16C;
726     VCvtMicrokernelTester()
727       .batch_size(16)
728       .Test(xnn_f32_f16_vcvt_ukernel__f16c_x16, xnn_init_f32_f16_cvt_f16c_params);
729   }
730 
TEST(F32_F16_VCVT__F16C_X16,batch_div_16)731   TEST(F32_F16_VCVT__F16C_X16, batch_div_16) {
732     TEST_REQUIRES_X86_F16C;
733     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
734       VCvtMicrokernelTester()
735         .batch_size(batch_size)
736         .Test(xnn_f32_f16_vcvt_ukernel__f16c_x16, xnn_init_f32_f16_cvt_f16c_params);
737     }
738   }
739 
TEST(F32_F16_VCVT__F16C_X16,batch_lt_16)740   TEST(F32_F16_VCVT__F16C_X16, batch_lt_16) {
741     TEST_REQUIRES_X86_F16C;
742     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
743       VCvtMicrokernelTester()
744         .batch_size(batch_size)
745         .Test(xnn_f32_f16_vcvt_ukernel__f16c_x16, xnn_init_f32_f16_cvt_f16c_params);
746     }
747   }
748 
TEST(F32_F16_VCVT__F16C_X16,batch_gt_16)749   TEST(F32_F16_VCVT__F16C_X16, batch_gt_16) {
750     TEST_REQUIRES_X86_F16C;
751     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
752       VCvtMicrokernelTester()
753         .batch_size(batch_size)
754         .Test(xnn_f32_f16_vcvt_ukernel__f16c_x16, xnn_init_f32_f16_cvt_f16c_params);
755     }
756   }
757 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
758 
759 
760 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__AVX512SKX_X16,batch_eq_16)761   TEST(F32_F16_VCVT__AVX512SKX_X16, batch_eq_16) {
762     TEST_REQUIRES_X86_AVX512SKX;
763     VCvtMicrokernelTester()
764       .batch_size(16)
765       .Test(xnn_f32_f16_vcvt_ukernel__avx512skx_x16);
766   }
767 
TEST(F32_F16_VCVT__AVX512SKX_X16,batch_div_16)768   TEST(F32_F16_VCVT__AVX512SKX_X16, batch_div_16) {
769     TEST_REQUIRES_X86_AVX512SKX;
770     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
771       VCvtMicrokernelTester()
772         .batch_size(batch_size)
773         .Test(xnn_f32_f16_vcvt_ukernel__avx512skx_x16);
774     }
775   }
776 
TEST(F32_F16_VCVT__AVX512SKX_X16,batch_lt_16)777   TEST(F32_F16_VCVT__AVX512SKX_X16, batch_lt_16) {
778     TEST_REQUIRES_X86_AVX512SKX;
779     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
780       VCvtMicrokernelTester()
781         .batch_size(batch_size)
782         .Test(xnn_f32_f16_vcvt_ukernel__avx512skx_x16);
783     }
784   }
785 
TEST(F32_F16_VCVT__AVX512SKX_X16,batch_gt_16)786   TEST(F32_F16_VCVT__AVX512SKX_X16, batch_gt_16) {
787     TEST_REQUIRES_X86_AVX512SKX;
788     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
789       VCvtMicrokernelTester()
790         .batch_size(batch_size)
791         .Test(xnn_f32_f16_vcvt_ukernel__avx512skx_x16);
792     }
793   }
794 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
795 
796 
797 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_F16_VCVT__AVX512SKX_X32,batch_eq_32)798   TEST(F32_F16_VCVT__AVX512SKX_X32, batch_eq_32) {
799     TEST_REQUIRES_X86_AVX512SKX;
800     VCvtMicrokernelTester()
801       .batch_size(32)
802       .Test(xnn_f32_f16_vcvt_ukernel__avx512skx_x32);
803   }
804 
TEST(F32_F16_VCVT__AVX512SKX_X32,batch_div_32)805   TEST(F32_F16_VCVT__AVX512SKX_X32, batch_div_32) {
806     TEST_REQUIRES_X86_AVX512SKX;
807     for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
808       VCvtMicrokernelTester()
809         .batch_size(batch_size)
810         .Test(xnn_f32_f16_vcvt_ukernel__avx512skx_x32);
811     }
812   }
813 
TEST(F32_F16_VCVT__AVX512SKX_X32,batch_lt_32)814   TEST(F32_F16_VCVT__AVX512SKX_X32, batch_lt_32) {
815     TEST_REQUIRES_X86_AVX512SKX;
816     for (size_t batch_size = 1; batch_size < 32; batch_size++) {
817       VCvtMicrokernelTester()
818         .batch_size(batch_size)
819         .Test(xnn_f32_f16_vcvt_ukernel__avx512skx_x32);
820     }
821   }
822 
TEST(F32_F16_VCVT__AVX512SKX_X32,batch_gt_32)823   TEST(F32_F16_VCVT__AVX512SKX_X32, batch_gt_32) {
824     TEST_REQUIRES_X86_AVX512SKX;
825     for (size_t batch_size = 33; batch_size < 64; batch_size++) {
826       VCvtMicrokernelTester()
827         .batch_size(batch_size)
828         .Test(xnn_f32_f16_vcvt_ukernel__avx512skx_x32);
829     }
830   }
831 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
832 
833 
834 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_F16_VCVT__WASMSIMD_X8,batch_eq_8)835   TEST(F32_F16_VCVT__WASMSIMD_X8, batch_eq_8) {
836     VCvtMicrokernelTester()
837       .batch_size(8)
838       .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x8, xnn_init_f32_f16_cvt_wasmsimd_params);
839   }
840 
TEST(F32_F16_VCVT__WASMSIMD_X8,batch_div_8)841   TEST(F32_F16_VCVT__WASMSIMD_X8, batch_div_8) {
842     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
843       VCvtMicrokernelTester()
844         .batch_size(batch_size)
845         .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x8, xnn_init_f32_f16_cvt_wasmsimd_params);
846     }
847   }
848 
TEST(F32_F16_VCVT__WASMSIMD_X8,batch_lt_8)849   TEST(F32_F16_VCVT__WASMSIMD_X8, batch_lt_8) {
850     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
851       VCvtMicrokernelTester()
852         .batch_size(batch_size)
853         .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x8, xnn_init_f32_f16_cvt_wasmsimd_params);
854     }
855   }
856 
TEST(F32_F16_VCVT__WASMSIMD_X8,batch_gt_8)857   TEST(F32_F16_VCVT__WASMSIMD_X8, batch_gt_8) {
858     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
859       VCvtMicrokernelTester()
860         .batch_size(batch_size)
861         .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x8, xnn_init_f32_f16_cvt_wasmsimd_params);
862     }
863   }
864 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
865 
866 
867 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_F16_VCVT__WASMSIMD_X16,batch_eq_16)868   TEST(F32_F16_VCVT__WASMSIMD_X16, batch_eq_16) {
869     VCvtMicrokernelTester()
870       .batch_size(16)
871       .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x16, xnn_init_f32_f16_cvt_wasmsimd_params);
872   }
873 
TEST(F32_F16_VCVT__WASMSIMD_X16,batch_div_16)874   TEST(F32_F16_VCVT__WASMSIMD_X16, batch_div_16) {
875     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
876       VCvtMicrokernelTester()
877         .batch_size(batch_size)
878         .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x16, xnn_init_f32_f16_cvt_wasmsimd_params);
879     }
880   }
881 
TEST(F32_F16_VCVT__WASMSIMD_X16,batch_lt_16)882   TEST(F32_F16_VCVT__WASMSIMD_X16, batch_lt_16) {
883     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
884       VCvtMicrokernelTester()
885         .batch_size(batch_size)
886         .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x16, xnn_init_f32_f16_cvt_wasmsimd_params);
887     }
888   }
889 
TEST(F32_F16_VCVT__WASMSIMD_X16,batch_gt_16)890   TEST(F32_F16_VCVT__WASMSIMD_X16, batch_gt_16) {
891     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
892       VCvtMicrokernelTester()
893         .batch_size(batch_size)
894         .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x16, xnn_init_f32_f16_cvt_wasmsimd_params);
895     }
896   }
897 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
898 
899 
900 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_F16_VCVT__WASMSIMD_X24,batch_eq_24)901   TEST(F32_F16_VCVT__WASMSIMD_X24, batch_eq_24) {
902     VCvtMicrokernelTester()
903       .batch_size(24)
904       .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x24, xnn_init_f32_f16_cvt_wasmsimd_params);
905   }
906 
TEST(F32_F16_VCVT__WASMSIMD_X24,batch_div_24)907   TEST(F32_F16_VCVT__WASMSIMD_X24, batch_div_24) {
908     for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
909       VCvtMicrokernelTester()
910         .batch_size(batch_size)
911         .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x24, xnn_init_f32_f16_cvt_wasmsimd_params);
912     }
913   }
914 
TEST(F32_F16_VCVT__WASMSIMD_X24,batch_lt_24)915   TEST(F32_F16_VCVT__WASMSIMD_X24, batch_lt_24) {
916     for (size_t batch_size = 1; batch_size < 24; batch_size++) {
917       VCvtMicrokernelTester()
918         .batch_size(batch_size)
919         .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x24, xnn_init_f32_f16_cvt_wasmsimd_params);
920     }
921   }
922 
TEST(F32_F16_VCVT__WASMSIMD_X24,batch_gt_24)923   TEST(F32_F16_VCVT__WASMSIMD_X24, batch_gt_24) {
924     for (size_t batch_size = 25; batch_size < 48; batch_size++) {
925       VCvtMicrokernelTester()
926         .batch_size(batch_size)
927         .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x24, xnn_init_f32_f16_cvt_wasmsimd_params);
928     }
929   }
930 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
931 
932 
933 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_F16_VCVT__WASMSIMD_X32,batch_eq_32)934   TEST(F32_F16_VCVT__WASMSIMD_X32, batch_eq_32) {
935     VCvtMicrokernelTester()
936       .batch_size(32)
937       .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x32, xnn_init_f32_f16_cvt_wasmsimd_params);
938   }
939 
TEST(F32_F16_VCVT__WASMSIMD_X32,batch_div_32)940   TEST(F32_F16_VCVT__WASMSIMD_X32, batch_div_32) {
941     for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
942       VCvtMicrokernelTester()
943         .batch_size(batch_size)
944         .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x32, xnn_init_f32_f16_cvt_wasmsimd_params);
945     }
946   }
947 
TEST(F32_F16_VCVT__WASMSIMD_X32,batch_lt_32)948   TEST(F32_F16_VCVT__WASMSIMD_X32, batch_lt_32) {
949     for (size_t batch_size = 1; batch_size < 32; batch_size++) {
950       VCvtMicrokernelTester()
951         .batch_size(batch_size)
952         .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x32, xnn_init_f32_f16_cvt_wasmsimd_params);
953     }
954   }
955 
TEST(F32_F16_VCVT__WASMSIMD_X32,batch_gt_32)956   TEST(F32_F16_VCVT__WASMSIMD_X32, batch_gt_32) {
957     for (size_t batch_size = 33; batch_size < 64; batch_size++) {
958       VCvtMicrokernelTester()
959         .batch_size(batch_size)
960         .Test(xnn_f32_f16_vcvt_ukernel__wasmsimd_x32, xnn_init_f32_f16_cvt_wasmsimd_params);
961     }
962   }
963 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
964 
965 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X1,batch_eq_1)966 TEST(F32_F16_VCVT__SCALAR_BITCAST_X1, batch_eq_1) {
967   VCvtMicrokernelTester()
968     .batch_size(1)
969     .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x1, xnn_init_f32_f16_cvt_scalar_bitcast_params);
970 }
971 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X1,batch_gt_1)972 TEST(F32_F16_VCVT__SCALAR_BITCAST_X1, batch_gt_1) {
973   for (size_t batch_size = 2; batch_size < 10; batch_size++) {
974     VCvtMicrokernelTester()
975       .batch_size(batch_size)
976       .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x1, xnn_init_f32_f16_cvt_scalar_bitcast_params);
977   }
978 }
979 
980 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X2,batch_eq_2)981 TEST(F32_F16_VCVT__SCALAR_BITCAST_X2, batch_eq_2) {
982   VCvtMicrokernelTester()
983     .batch_size(2)
984     .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x2, xnn_init_f32_f16_cvt_scalar_bitcast_params);
985 }
986 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X2,batch_div_2)987 TEST(F32_F16_VCVT__SCALAR_BITCAST_X2, batch_div_2) {
988   for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
989     VCvtMicrokernelTester()
990       .batch_size(batch_size)
991       .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x2, xnn_init_f32_f16_cvt_scalar_bitcast_params);
992   }
993 }
994 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X2,batch_lt_2)995 TEST(F32_F16_VCVT__SCALAR_BITCAST_X2, batch_lt_2) {
996   for (size_t batch_size = 1; batch_size < 2; batch_size++) {
997     VCvtMicrokernelTester()
998       .batch_size(batch_size)
999       .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x2, xnn_init_f32_f16_cvt_scalar_bitcast_params);
1000   }
1001 }
1002 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X2,batch_gt_2)1003 TEST(F32_F16_VCVT__SCALAR_BITCAST_X2, batch_gt_2) {
1004   for (size_t batch_size = 3; batch_size < 4; batch_size++) {
1005     VCvtMicrokernelTester()
1006       .batch_size(batch_size)
1007       .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x2, xnn_init_f32_f16_cvt_scalar_bitcast_params);
1008   }
1009 }
1010 
1011 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X3,batch_eq_3)1012 TEST(F32_F16_VCVT__SCALAR_BITCAST_X3, batch_eq_3) {
1013   VCvtMicrokernelTester()
1014     .batch_size(3)
1015     .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x3, xnn_init_f32_f16_cvt_scalar_bitcast_params);
1016 }
1017 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X3,batch_div_3)1018 TEST(F32_F16_VCVT__SCALAR_BITCAST_X3, batch_div_3) {
1019   for (size_t batch_size = 6; batch_size < 30; batch_size += 3) {
1020     VCvtMicrokernelTester()
1021       .batch_size(batch_size)
1022       .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x3, xnn_init_f32_f16_cvt_scalar_bitcast_params);
1023   }
1024 }
1025 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X3,batch_lt_3)1026 TEST(F32_F16_VCVT__SCALAR_BITCAST_X3, batch_lt_3) {
1027   for (size_t batch_size = 1; batch_size < 3; batch_size++) {
1028     VCvtMicrokernelTester()
1029       .batch_size(batch_size)
1030       .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x3, xnn_init_f32_f16_cvt_scalar_bitcast_params);
1031   }
1032 }
1033 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X3,batch_gt_3)1034 TEST(F32_F16_VCVT__SCALAR_BITCAST_X3, batch_gt_3) {
1035   for (size_t batch_size = 4; batch_size < 6; batch_size++) {
1036     VCvtMicrokernelTester()
1037       .batch_size(batch_size)
1038       .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x3, xnn_init_f32_f16_cvt_scalar_bitcast_params);
1039   }
1040 }
1041 
1042 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X4,batch_eq_4)1043 TEST(F32_F16_VCVT__SCALAR_BITCAST_X4, batch_eq_4) {
1044   VCvtMicrokernelTester()
1045     .batch_size(4)
1046     .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x4, xnn_init_f32_f16_cvt_scalar_bitcast_params);
1047 }
1048 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X4,batch_div_4)1049 TEST(F32_F16_VCVT__SCALAR_BITCAST_X4, batch_div_4) {
1050   for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
1051     VCvtMicrokernelTester()
1052       .batch_size(batch_size)
1053       .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x4, xnn_init_f32_f16_cvt_scalar_bitcast_params);
1054   }
1055 }
1056 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X4,batch_lt_4)1057 TEST(F32_F16_VCVT__SCALAR_BITCAST_X4, batch_lt_4) {
1058   for (size_t batch_size = 1; batch_size < 4; batch_size++) {
1059     VCvtMicrokernelTester()
1060       .batch_size(batch_size)
1061       .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x4, xnn_init_f32_f16_cvt_scalar_bitcast_params);
1062   }
1063 }
1064 
TEST(F32_F16_VCVT__SCALAR_BITCAST_X4,batch_gt_4)1065 TEST(F32_F16_VCVT__SCALAR_BITCAST_X4, batch_gt_4) {
1066   for (size_t batch_size = 5; batch_size < 8; batch_size++) {
1067     VCvtMicrokernelTester()
1068       .batch_size(batch_size)
1069       .Test(xnn_f32_f16_vcvt_ukernel__scalar_bitcast_x4, xnn_init_f32_f16_cvt_scalar_bitcast_params);
1070   }
1071 }
1072 
1073 
TEST(F32_F16_VCVT__SCALAR_FABSF_X1,batch_eq_1)1074 TEST(F32_F16_VCVT__SCALAR_FABSF_X1, batch_eq_1) {
1075   VCvtMicrokernelTester()
1076     .batch_size(1)
1077     .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x1, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1078 }
1079 
TEST(F32_F16_VCVT__SCALAR_FABSF_X1,batch_gt_1)1080 TEST(F32_F16_VCVT__SCALAR_FABSF_X1, batch_gt_1) {
1081   for (size_t batch_size = 2; batch_size < 10; batch_size++) {
1082     VCvtMicrokernelTester()
1083       .batch_size(batch_size)
1084       .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x1, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1085   }
1086 }
1087 
1088 
TEST(F32_F16_VCVT__SCALAR_FABSF_X2,batch_eq_2)1089 TEST(F32_F16_VCVT__SCALAR_FABSF_X2, batch_eq_2) {
1090   VCvtMicrokernelTester()
1091     .batch_size(2)
1092     .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x2, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1093 }
1094 
TEST(F32_F16_VCVT__SCALAR_FABSF_X2,batch_div_2)1095 TEST(F32_F16_VCVT__SCALAR_FABSF_X2, batch_div_2) {
1096   for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
1097     VCvtMicrokernelTester()
1098       .batch_size(batch_size)
1099       .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x2, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1100   }
1101 }
1102 
TEST(F32_F16_VCVT__SCALAR_FABSF_X2,batch_lt_2)1103 TEST(F32_F16_VCVT__SCALAR_FABSF_X2, batch_lt_2) {
1104   for (size_t batch_size = 1; batch_size < 2; batch_size++) {
1105     VCvtMicrokernelTester()
1106       .batch_size(batch_size)
1107       .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x2, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1108   }
1109 }
1110 
TEST(F32_F16_VCVT__SCALAR_FABSF_X2,batch_gt_2)1111 TEST(F32_F16_VCVT__SCALAR_FABSF_X2, batch_gt_2) {
1112   for (size_t batch_size = 3; batch_size < 4; batch_size++) {
1113     VCvtMicrokernelTester()
1114       .batch_size(batch_size)
1115       .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x2, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1116   }
1117 }
1118 
1119 
TEST(F32_F16_VCVT__SCALAR_FABSF_X3,batch_eq_3)1120 TEST(F32_F16_VCVT__SCALAR_FABSF_X3, batch_eq_3) {
1121   VCvtMicrokernelTester()
1122     .batch_size(3)
1123     .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x3, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1124 }
1125 
TEST(F32_F16_VCVT__SCALAR_FABSF_X3,batch_div_3)1126 TEST(F32_F16_VCVT__SCALAR_FABSF_X3, batch_div_3) {
1127   for (size_t batch_size = 6; batch_size < 30; batch_size += 3) {
1128     VCvtMicrokernelTester()
1129       .batch_size(batch_size)
1130       .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x3, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1131   }
1132 }
1133 
TEST(F32_F16_VCVT__SCALAR_FABSF_X3,batch_lt_3)1134 TEST(F32_F16_VCVT__SCALAR_FABSF_X3, batch_lt_3) {
1135   for (size_t batch_size = 1; batch_size < 3; batch_size++) {
1136     VCvtMicrokernelTester()
1137       .batch_size(batch_size)
1138       .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x3, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1139   }
1140 }
1141 
TEST(F32_F16_VCVT__SCALAR_FABSF_X3,batch_gt_3)1142 TEST(F32_F16_VCVT__SCALAR_FABSF_X3, batch_gt_3) {
1143   for (size_t batch_size = 4; batch_size < 6; batch_size++) {
1144     VCvtMicrokernelTester()
1145       .batch_size(batch_size)
1146       .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x3, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1147   }
1148 }
1149 
1150 
TEST(F32_F16_VCVT__SCALAR_FABSF_X4,batch_eq_4)1151 TEST(F32_F16_VCVT__SCALAR_FABSF_X4, batch_eq_4) {
1152   VCvtMicrokernelTester()
1153     .batch_size(4)
1154     .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x4, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1155 }
1156 
TEST(F32_F16_VCVT__SCALAR_FABSF_X4,batch_div_4)1157 TEST(F32_F16_VCVT__SCALAR_FABSF_X4, batch_div_4) {
1158   for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
1159     VCvtMicrokernelTester()
1160       .batch_size(batch_size)
1161       .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x4, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1162   }
1163 }
1164 
TEST(F32_F16_VCVT__SCALAR_FABSF_X4,batch_lt_4)1165 TEST(F32_F16_VCVT__SCALAR_FABSF_X4, batch_lt_4) {
1166   for (size_t batch_size = 1; batch_size < 4; batch_size++) {
1167     VCvtMicrokernelTester()
1168       .batch_size(batch_size)
1169       .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x4, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1170   }
1171 }
1172 
TEST(F32_F16_VCVT__SCALAR_FABSF_X4,batch_gt_4)1173 TEST(F32_F16_VCVT__SCALAR_FABSF_X4, batch_gt_4) {
1174   for (size_t batch_size = 5; batch_size < 8; batch_size++) {
1175     VCvtMicrokernelTester()
1176       .batch_size(batch_size)
1177       .Test(xnn_f32_f16_vcvt_ukernel__scalar_fabsf_x4, xnn_init_f32_f16_cvt_scalar_fabsf_params);
1178   }
1179 }
1180