• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2019 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 #include <gtest/gtest.h>
7 
8 #include <xnnpack/common.h>
9 #include <xnnpack/isa-checks.h>
10 
11 #include <xnnpack/zip.h>
12 #include "zip-microkernel-tester.h"
13 
14 
15 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(X32_ZIP_X2__NEON,n_eq_4)16   TEST(X32_ZIP_X2__NEON, n_eq_4) {
17     TEST_REQUIRES_ARM_NEON;
18     ZipMicrokernelTester()
19       .n(4)
20       .g(2)
21       .Test(xnn_x32_zip_x2_ukernel__neon);
22   }
23 
TEST(X32_ZIP_X2__NEON,n_div_4)24   TEST(X32_ZIP_X2__NEON, n_div_4) {
25     TEST_REQUIRES_ARM_NEON;
26     for (size_t n = 4; n < 64; n += 4) {
27       ZipMicrokernelTester()
28         .n(n)
29         .g(2)
30         .Test(xnn_x32_zip_x2_ukernel__neon);
31     }
32   }
33 
TEST(X32_ZIP_X2__NEON,n_gt_4)34   TEST(X32_ZIP_X2__NEON, n_gt_4) {
35     TEST_REQUIRES_ARM_NEON;
36     for (size_t n = 5; n < 8; n++) {
37       ZipMicrokernelTester()
38         .n(n)
39         .g(2)
40         .Test(xnn_x32_zip_x2_ukernel__neon);
41     }
42   }
43 
TEST(X32_ZIP_X2__NEON,n_lt_4)44   TEST(X32_ZIP_X2__NEON, n_lt_4) {
45     TEST_REQUIRES_ARM_NEON;
46     for (size_t n = 1; n < 4; n++) {
47       ZipMicrokernelTester()
48         .n(n)
49         .g(2)
50         .Test(xnn_x32_zip_x2_ukernel__neon);
51     }
52   }
53 
TEST(X32_ZIP_X3__NEON,n_eq_4)54   TEST(X32_ZIP_X3__NEON, n_eq_4) {
55     TEST_REQUIRES_ARM_NEON;
56     ZipMicrokernelTester()
57       .n(4)
58       .g(3)
59       .Test(xnn_x32_zip_x3_ukernel__neon);
60   }
61 
TEST(X32_ZIP_X3__NEON,n_div_4)62   TEST(X32_ZIP_X3__NEON, n_div_4) {
63     TEST_REQUIRES_ARM_NEON;
64     for (size_t n = 4; n < 64; n += 4) {
65       ZipMicrokernelTester()
66         .n(n)
67         .g(3)
68         .Test(xnn_x32_zip_x3_ukernel__neon);
69     }
70   }
71 
TEST(X32_ZIP_X3__NEON,n_gt_4)72   TEST(X32_ZIP_X3__NEON, n_gt_4) {
73     TEST_REQUIRES_ARM_NEON;
74     for (size_t n = 5; n < 8; n++) {
75       ZipMicrokernelTester()
76         .n(n)
77         .g(3)
78         .Test(xnn_x32_zip_x3_ukernel__neon);
79     }
80   }
81 
TEST(X32_ZIP_X3__NEON,n_lt_4)82   TEST(X32_ZIP_X3__NEON, n_lt_4) {
83     TEST_REQUIRES_ARM_NEON;
84     for (size_t n = 1; n < 4; n++) {
85       ZipMicrokernelTester()
86         .n(n)
87         .g(3)
88         .Test(xnn_x32_zip_x3_ukernel__neon);
89     }
90   }
91 
TEST(X32_ZIP_X4__NEON,n_eq_4)92   TEST(X32_ZIP_X4__NEON, n_eq_4) {
93     TEST_REQUIRES_ARM_NEON;
94     ZipMicrokernelTester()
95       .n(4)
96       .g(4)
97       .Test(xnn_x32_zip_x4_ukernel__neon);
98   }
99 
TEST(X32_ZIP_X4__NEON,n_div_4)100   TEST(X32_ZIP_X4__NEON, n_div_4) {
101     TEST_REQUIRES_ARM_NEON;
102     for (size_t n = 4; n < 64; n += 4) {
103       ZipMicrokernelTester()
104         .n(n)
105         .g(4)
106         .Test(xnn_x32_zip_x4_ukernel__neon);
107     }
108   }
109 
TEST(X32_ZIP_X4__NEON,n_gt_4)110   TEST(X32_ZIP_X4__NEON, n_gt_4) {
111     TEST_REQUIRES_ARM_NEON;
112     for (size_t n = 5; n < 8; n++) {
113       ZipMicrokernelTester()
114         .n(n)
115         .g(4)
116         .Test(xnn_x32_zip_x4_ukernel__neon);
117     }
118   }
119 
TEST(X32_ZIP_X4__NEON,n_lt_4)120   TEST(X32_ZIP_X4__NEON, n_lt_4) {
121     TEST_REQUIRES_ARM_NEON;
122     for (size_t n = 1; n < 4; n++) {
123       ZipMicrokernelTester()
124         .n(n)
125         .g(4)
126         .Test(xnn_x32_zip_x4_ukernel__neon);
127     }
128   }
129 
TEST(X32_ZIP_XM__NEON,n_eq_4_m_eq_4)130   TEST(X32_ZIP_XM__NEON, n_eq_4_m_eq_4) {
131     TEST_REQUIRES_ARM_NEON;
132     ZipMicrokernelTester()
133       .n(4)
134       .g(4)
135       .Test(xnn_x32_zip_xm_ukernel__neon);
136   }
137 
TEST(X32_ZIP_XM__NEON,n_eq_4_m_div_4)138   TEST(X32_ZIP_XM__NEON, n_eq_4_m_div_4) {
139     TEST_REQUIRES_ARM_NEON;
140     for (size_t g = 4; g < 32; g += 4) {
141       ZipMicrokernelTester()
142         .n(4)
143         .g(g)
144         .Test(xnn_x32_zip_xm_ukernel__neon);
145     }
146   }
147 
TEST(X32_ZIP_XM__NEON,n_eq_4_m_gt_4)148   TEST(X32_ZIP_XM__NEON, n_eq_4_m_gt_4) {
149     TEST_REQUIRES_ARM_NEON;
150     for (size_t g = 5; g < 8; g++) {
151       ZipMicrokernelTester()
152         .n(4)
153         .g(g)
154         .Test(xnn_x32_zip_xm_ukernel__neon);
155     }
156   }
157 
TEST(X32_ZIP_XM__NEON,n_div_4_m_eq_4)158   TEST(X32_ZIP_XM__NEON, n_div_4_m_eq_4) {
159     TEST_REQUIRES_ARM_NEON;
160     for (size_t n = 4; n < 64; n += 4) {
161       ZipMicrokernelTester()
162         .n(n)
163         .g(4)
164         .Test(xnn_x32_zip_xm_ukernel__neon);
165     }
166   }
167 
TEST(X32_ZIP_XM__NEON,n_div_4_m_div_4)168   TEST(X32_ZIP_XM__NEON, n_div_4_m_div_4) {
169     TEST_REQUIRES_ARM_NEON;
170     for (size_t n = 4; n < 64; n += 4) {
171       for (size_t g = 4; g < 32; g += 4) {
172         ZipMicrokernelTester()
173           .n(n)
174           .g(g)
175           .Test(xnn_x32_zip_xm_ukernel__neon);
176       }
177     }
178   }
179 
TEST(X32_ZIP_XM__NEON,n_div_4_m_gt_4)180   TEST(X32_ZIP_XM__NEON, n_div_4_m_gt_4) {
181     TEST_REQUIRES_ARM_NEON;
182     for (size_t n = 4; n < 64; n += 4) {
183       for (size_t g = 5; g < 8; g++) {
184         ZipMicrokernelTester()
185           .n(n)
186           .g(g)
187           .Test(xnn_x32_zip_xm_ukernel__neon);
188       }
189     }
190   }
191 
TEST(X32_ZIP_XM__NEON,n_gt_4_m_eq_4)192   TEST(X32_ZIP_XM__NEON, n_gt_4_m_eq_4) {
193     TEST_REQUIRES_ARM_NEON;
194     for (size_t n = 5; n < 8; n++) {
195       ZipMicrokernelTester()
196         .n(n)
197         .g(4)
198         .Test(xnn_x32_zip_xm_ukernel__neon);
199     }
200   }
201 
TEST(X32_ZIP_XM__NEON,n_gt_4_m_div_4)202   TEST(X32_ZIP_XM__NEON, n_gt_4_m_div_4) {
203     TEST_REQUIRES_ARM_NEON;
204     for (size_t n = 5; n < 8; n++) {
205       for (size_t g = 4; g < 32; g += 4) {
206         ZipMicrokernelTester()
207           .n(n)
208           .g(g)
209           .Test(xnn_x32_zip_xm_ukernel__neon);
210       }
211     }
212   }
213 
TEST(X32_ZIP_XM__NEON,n_gt_4_m_gt_4)214   TEST(X32_ZIP_XM__NEON, n_gt_4_m_gt_4) {
215     TEST_REQUIRES_ARM_NEON;
216     for (size_t n = 5; n < 8; n++) {
217       for (size_t g = 5; g < 8; g++) {
218         ZipMicrokernelTester()
219           .n(n)
220           .g(g)
221           .Test(xnn_x32_zip_xm_ukernel__neon);
222       }
223     }
224   }
225 
TEST(X32_ZIP_XM__NEON,n_lt_4_m_eq_4)226   TEST(X32_ZIP_XM__NEON, n_lt_4_m_eq_4) {
227     TEST_REQUIRES_ARM_NEON;
228     for (size_t n = 1; n < 4; n++) {
229       ZipMicrokernelTester()
230         .n(n)
231         .g(4)
232         .Test(xnn_x32_zip_xm_ukernel__neon);
233     }
234   }
235 
TEST(X32_ZIP_XM__NEON,n_lt_4_m_div_4)236   TEST(X32_ZIP_XM__NEON, n_lt_4_m_div_4) {
237     TEST_REQUIRES_ARM_NEON;
238     for (size_t n = 1; n < 4; n++) {
239       for (size_t g = 4; g < 32; g += 4) {
240         ZipMicrokernelTester()
241           .n(n)
242           .g(g)
243           .Test(xnn_x32_zip_xm_ukernel__neon);
244       }
245     }
246   }
247 
TEST(X32_ZIP_XM__NEON,n_lt_4_m_gt_4)248   TEST(X32_ZIP_XM__NEON, n_lt_4_m_gt_4) {
249     TEST_REQUIRES_ARM_NEON;
250     for (size_t n = 1; n < 4; n++) {
251       for (size_t g = 5; g < 8; g++) {
252         ZipMicrokernelTester()
253           .n(n)
254           .g(g)
255           .Test(xnn_x32_zip_xm_ukernel__neon);
256       }
257     }
258   }
259 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
260 
261 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(X32_ZIP_X2__SSE2,n_eq_4)262   TEST(X32_ZIP_X2__SSE2, n_eq_4) {
263     TEST_REQUIRES_X86_SSE2;
264     ZipMicrokernelTester()
265       .n(4)
266       .g(2)
267       .Test(xnn_x32_zip_x2_ukernel__sse2);
268   }
269 
TEST(X32_ZIP_X2__SSE2,n_div_4)270   TEST(X32_ZIP_X2__SSE2, n_div_4) {
271     TEST_REQUIRES_X86_SSE2;
272     for (size_t n = 4; n < 64; n += 4) {
273       ZipMicrokernelTester()
274         .n(n)
275         .g(2)
276         .Test(xnn_x32_zip_x2_ukernel__sse2);
277     }
278   }
279 
TEST(X32_ZIP_X2__SSE2,n_gt_4)280   TEST(X32_ZIP_X2__SSE2, n_gt_4) {
281     TEST_REQUIRES_X86_SSE2;
282     for (size_t n = 5; n < 8; n++) {
283       ZipMicrokernelTester()
284         .n(n)
285         .g(2)
286         .Test(xnn_x32_zip_x2_ukernel__sse2);
287     }
288   }
289 
TEST(X32_ZIP_X2__SSE2,n_lt_4)290   TEST(X32_ZIP_X2__SSE2, n_lt_4) {
291     TEST_REQUIRES_X86_SSE2;
292     for (size_t n = 1; n < 4; n++) {
293       ZipMicrokernelTester()
294         .n(n)
295         .g(2)
296         .Test(xnn_x32_zip_x2_ukernel__sse2);
297     }
298   }
299 
TEST(X32_ZIP_X3__SSE2,n_eq_4)300   TEST(X32_ZIP_X3__SSE2, n_eq_4) {
301     TEST_REQUIRES_X86_SSE2;
302     ZipMicrokernelTester()
303       .n(4)
304       .g(3)
305       .Test(xnn_x32_zip_x3_ukernel__sse2);
306   }
307 
TEST(X32_ZIP_X3__SSE2,n_div_4)308   TEST(X32_ZIP_X3__SSE2, n_div_4) {
309     TEST_REQUIRES_X86_SSE2;
310     for (size_t n = 4; n < 64; n += 4) {
311       ZipMicrokernelTester()
312         .n(n)
313         .g(3)
314         .Test(xnn_x32_zip_x3_ukernel__sse2);
315     }
316   }
317 
TEST(X32_ZIP_X3__SSE2,n_gt_4)318   TEST(X32_ZIP_X3__SSE2, n_gt_4) {
319     TEST_REQUIRES_X86_SSE2;
320     for (size_t n = 5; n < 8; n++) {
321       ZipMicrokernelTester()
322         .n(n)
323         .g(3)
324         .Test(xnn_x32_zip_x3_ukernel__sse2);
325     }
326   }
327 
TEST(X32_ZIP_X3__SSE2,n_lt_4)328   TEST(X32_ZIP_X3__SSE2, n_lt_4) {
329     TEST_REQUIRES_X86_SSE2;
330     for (size_t n = 1; n < 4; n++) {
331       ZipMicrokernelTester()
332         .n(n)
333         .g(3)
334         .Test(xnn_x32_zip_x3_ukernel__sse2);
335     }
336   }
337 
TEST(X32_ZIP_X4__SSE2,n_eq_4)338   TEST(X32_ZIP_X4__SSE2, n_eq_4) {
339     TEST_REQUIRES_X86_SSE2;
340     ZipMicrokernelTester()
341       .n(4)
342       .g(4)
343       .Test(xnn_x32_zip_x4_ukernel__sse2);
344   }
345 
TEST(X32_ZIP_X4__SSE2,n_div_4)346   TEST(X32_ZIP_X4__SSE2, n_div_4) {
347     TEST_REQUIRES_X86_SSE2;
348     for (size_t n = 4; n < 64; n += 4) {
349       ZipMicrokernelTester()
350         .n(n)
351         .g(4)
352         .Test(xnn_x32_zip_x4_ukernel__sse2);
353     }
354   }
355 
TEST(X32_ZIP_X4__SSE2,n_gt_4)356   TEST(X32_ZIP_X4__SSE2, n_gt_4) {
357     TEST_REQUIRES_X86_SSE2;
358     for (size_t n = 5; n < 8; n++) {
359       ZipMicrokernelTester()
360         .n(n)
361         .g(4)
362         .Test(xnn_x32_zip_x4_ukernel__sse2);
363     }
364   }
365 
TEST(X32_ZIP_X4__SSE2,n_lt_4)366   TEST(X32_ZIP_X4__SSE2, n_lt_4) {
367     TEST_REQUIRES_X86_SSE2;
368     for (size_t n = 1; n < 4; n++) {
369       ZipMicrokernelTester()
370         .n(n)
371         .g(4)
372         .Test(xnn_x32_zip_x4_ukernel__sse2);
373     }
374   }
375 
TEST(X32_ZIP_XM__SSE2,n_eq_4_m_eq_4)376   TEST(X32_ZIP_XM__SSE2, n_eq_4_m_eq_4) {
377     TEST_REQUIRES_X86_SSE2;
378     ZipMicrokernelTester()
379       .n(4)
380       .g(4)
381       .Test(xnn_x32_zip_xm_ukernel__sse2);
382   }
383 
TEST(X32_ZIP_XM__SSE2,n_eq_4_m_div_4)384   TEST(X32_ZIP_XM__SSE2, n_eq_4_m_div_4) {
385     TEST_REQUIRES_X86_SSE2;
386     for (size_t g = 4; g < 32; g += 4) {
387       ZipMicrokernelTester()
388         .n(4)
389         .g(g)
390         .Test(xnn_x32_zip_xm_ukernel__sse2);
391     }
392   }
393 
TEST(X32_ZIP_XM__SSE2,n_eq_4_m_gt_4)394   TEST(X32_ZIP_XM__SSE2, n_eq_4_m_gt_4) {
395     TEST_REQUIRES_X86_SSE2;
396     for (size_t g = 5; g < 8; g++) {
397       ZipMicrokernelTester()
398         .n(4)
399         .g(g)
400         .Test(xnn_x32_zip_xm_ukernel__sse2);
401     }
402   }
403 
TEST(X32_ZIP_XM__SSE2,n_div_4_m_eq_4)404   TEST(X32_ZIP_XM__SSE2, n_div_4_m_eq_4) {
405     TEST_REQUIRES_X86_SSE2;
406     for (size_t n = 4; n < 64; n += 4) {
407       ZipMicrokernelTester()
408         .n(n)
409         .g(4)
410         .Test(xnn_x32_zip_xm_ukernel__sse2);
411     }
412   }
413 
TEST(X32_ZIP_XM__SSE2,n_div_4_m_div_4)414   TEST(X32_ZIP_XM__SSE2, n_div_4_m_div_4) {
415     TEST_REQUIRES_X86_SSE2;
416     for (size_t n = 4; n < 64; n += 4) {
417       for (size_t g = 4; g < 32; g += 4) {
418         ZipMicrokernelTester()
419           .n(n)
420           .g(g)
421           .Test(xnn_x32_zip_xm_ukernel__sse2);
422       }
423     }
424   }
425 
TEST(X32_ZIP_XM__SSE2,n_div_4_m_gt_4)426   TEST(X32_ZIP_XM__SSE2, n_div_4_m_gt_4) {
427     TEST_REQUIRES_X86_SSE2;
428     for (size_t n = 4; n < 64; n += 4) {
429       for (size_t g = 5; g < 8; g++) {
430         ZipMicrokernelTester()
431           .n(n)
432           .g(g)
433           .Test(xnn_x32_zip_xm_ukernel__sse2);
434       }
435     }
436   }
437 
TEST(X32_ZIP_XM__SSE2,n_gt_4_m_eq_4)438   TEST(X32_ZIP_XM__SSE2, n_gt_4_m_eq_4) {
439     TEST_REQUIRES_X86_SSE2;
440     for (size_t n = 5; n < 8; n++) {
441       ZipMicrokernelTester()
442         .n(n)
443         .g(4)
444         .Test(xnn_x32_zip_xm_ukernel__sse2);
445     }
446   }
447 
TEST(X32_ZIP_XM__SSE2,n_gt_4_m_div_4)448   TEST(X32_ZIP_XM__SSE2, n_gt_4_m_div_4) {
449     TEST_REQUIRES_X86_SSE2;
450     for (size_t n = 5; n < 8; n++) {
451       for (size_t g = 4; g < 32; g += 4) {
452         ZipMicrokernelTester()
453           .n(n)
454           .g(g)
455           .Test(xnn_x32_zip_xm_ukernel__sse2);
456       }
457     }
458   }
459 
TEST(X32_ZIP_XM__SSE2,n_gt_4_m_gt_4)460   TEST(X32_ZIP_XM__SSE2, n_gt_4_m_gt_4) {
461     TEST_REQUIRES_X86_SSE2;
462     for (size_t n = 5; n < 8; n++) {
463       for (size_t g = 5; g < 8; g++) {
464         ZipMicrokernelTester()
465           .n(n)
466           .g(g)
467           .Test(xnn_x32_zip_xm_ukernel__sse2);
468       }
469     }
470   }
471 
TEST(X32_ZIP_XM__SSE2,n_lt_4_m_eq_4)472   TEST(X32_ZIP_XM__SSE2, n_lt_4_m_eq_4) {
473     TEST_REQUIRES_X86_SSE2;
474     for (size_t n = 1; n < 4; n++) {
475       ZipMicrokernelTester()
476         .n(n)
477         .g(4)
478         .Test(xnn_x32_zip_xm_ukernel__sse2);
479     }
480   }
481 
TEST(X32_ZIP_XM__SSE2,n_lt_4_m_div_4)482   TEST(X32_ZIP_XM__SSE2, n_lt_4_m_div_4) {
483     TEST_REQUIRES_X86_SSE2;
484     for (size_t n = 1; n < 4; n++) {
485       for (size_t g = 4; g < 32; g += 4) {
486         ZipMicrokernelTester()
487           .n(n)
488           .g(g)
489           .Test(xnn_x32_zip_xm_ukernel__sse2);
490       }
491     }
492   }
493 
TEST(X32_ZIP_XM__SSE2,n_lt_4_m_gt_4)494   TEST(X32_ZIP_XM__SSE2, n_lt_4_m_gt_4) {
495     TEST_REQUIRES_X86_SSE2;
496     for (size_t n = 1; n < 4; n++) {
497       for (size_t g = 5; g < 8; g++) {
498         ZipMicrokernelTester()
499           .n(n)
500           .g(g)
501           .Test(xnn_x32_zip_xm_ukernel__sse2);
502       }
503     }
504   }
505 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
506 
507 #if !XNN_ARCH_WASM && !XNN_ARCH_ASMJS
TEST(X32_ZIP_X2__PSIMD,n_eq_4)508   TEST(X32_ZIP_X2__PSIMD, n_eq_4) {
509     TEST_REQUIRES_PSIMD;
510     ZipMicrokernelTester()
511       .n(4)
512       .g(2)
513       .Test(xnn_x32_zip_x2_ukernel__psimd);
514   }
515 
TEST(X32_ZIP_X2__PSIMD,n_div_4)516   TEST(X32_ZIP_X2__PSIMD, n_div_4) {
517     TEST_REQUIRES_PSIMD;
518     for (size_t n = 4; n < 64; n += 4) {
519       ZipMicrokernelTester()
520         .n(n)
521         .g(2)
522         .Test(xnn_x32_zip_x2_ukernel__psimd);
523     }
524   }
525 
TEST(X32_ZIP_X2__PSIMD,n_gt_4)526   TEST(X32_ZIP_X2__PSIMD, n_gt_4) {
527     TEST_REQUIRES_PSIMD;
528     for (size_t n = 5; n < 8; n++) {
529       ZipMicrokernelTester()
530         .n(n)
531         .g(2)
532         .Test(xnn_x32_zip_x2_ukernel__psimd);
533     }
534   }
535 
TEST(X32_ZIP_X2__PSIMD,n_lt_4)536   TEST(X32_ZIP_X2__PSIMD, n_lt_4) {
537     TEST_REQUIRES_PSIMD;
538     for (size_t n = 1; n < 4; n++) {
539       ZipMicrokernelTester()
540         .n(n)
541         .g(2)
542         .Test(xnn_x32_zip_x2_ukernel__psimd);
543     }
544   }
545 
TEST(X32_ZIP_X3__PSIMD,n_eq_4)546   TEST(X32_ZIP_X3__PSIMD, n_eq_4) {
547     TEST_REQUIRES_PSIMD;
548     ZipMicrokernelTester()
549       .n(4)
550       .g(3)
551       .Test(xnn_x32_zip_x3_ukernel__psimd);
552   }
553 
TEST(X32_ZIP_X3__PSIMD,n_div_4)554   TEST(X32_ZIP_X3__PSIMD, n_div_4) {
555     TEST_REQUIRES_PSIMD;
556     for (size_t n = 4; n < 64; n += 4) {
557       ZipMicrokernelTester()
558         .n(n)
559         .g(3)
560         .Test(xnn_x32_zip_x3_ukernel__psimd);
561     }
562   }
563 
TEST(X32_ZIP_X3__PSIMD,n_gt_4)564   TEST(X32_ZIP_X3__PSIMD, n_gt_4) {
565     TEST_REQUIRES_PSIMD;
566     for (size_t n = 5; n < 8; n++) {
567       ZipMicrokernelTester()
568         .n(n)
569         .g(3)
570         .Test(xnn_x32_zip_x3_ukernel__psimd);
571     }
572   }
573 
TEST(X32_ZIP_X3__PSIMD,n_lt_4)574   TEST(X32_ZIP_X3__PSIMD, n_lt_4) {
575     TEST_REQUIRES_PSIMD;
576     for (size_t n = 1; n < 4; n++) {
577       ZipMicrokernelTester()
578         .n(n)
579         .g(3)
580         .Test(xnn_x32_zip_x3_ukernel__psimd);
581     }
582   }
583 
TEST(X32_ZIP_X4__PSIMD,n_eq_4)584   TEST(X32_ZIP_X4__PSIMD, n_eq_4) {
585     TEST_REQUIRES_PSIMD;
586     ZipMicrokernelTester()
587       .n(4)
588       .g(4)
589       .Test(xnn_x32_zip_x4_ukernel__psimd);
590   }
591 
TEST(X32_ZIP_X4__PSIMD,n_div_4)592   TEST(X32_ZIP_X4__PSIMD, n_div_4) {
593     TEST_REQUIRES_PSIMD;
594     for (size_t n = 4; n < 64; n += 4) {
595       ZipMicrokernelTester()
596         .n(n)
597         .g(4)
598         .Test(xnn_x32_zip_x4_ukernel__psimd);
599     }
600   }
601 
TEST(X32_ZIP_X4__PSIMD,n_gt_4)602   TEST(X32_ZIP_X4__PSIMD, n_gt_4) {
603     TEST_REQUIRES_PSIMD;
604     for (size_t n = 5; n < 8; n++) {
605       ZipMicrokernelTester()
606         .n(n)
607         .g(4)
608         .Test(xnn_x32_zip_x4_ukernel__psimd);
609     }
610   }
611 
TEST(X32_ZIP_X4__PSIMD,n_lt_4)612   TEST(X32_ZIP_X4__PSIMD, n_lt_4) {
613     TEST_REQUIRES_PSIMD;
614     for (size_t n = 1; n < 4; n++) {
615       ZipMicrokernelTester()
616         .n(n)
617         .g(4)
618         .Test(xnn_x32_zip_x4_ukernel__psimd);
619     }
620   }
621 
TEST(X32_ZIP_XM__PSIMD,n_eq_4_m_eq_4)622   TEST(X32_ZIP_XM__PSIMD, n_eq_4_m_eq_4) {
623     TEST_REQUIRES_PSIMD;
624     ZipMicrokernelTester()
625       .n(4)
626       .g(4)
627       .Test(xnn_x32_zip_xm_ukernel__psimd);
628   }
629 
TEST(X32_ZIP_XM__PSIMD,n_eq_4_m_div_4)630   TEST(X32_ZIP_XM__PSIMD, n_eq_4_m_div_4) {
631     TEST_REQUIRES_PSIMD;
632     for (size_t g = 4; g < 32; g += 4) {
633       ZipMicrokernelTester()
634         .n(4)
635         .g(g)
636         .Test(xnn_x32_zip_xm_ukernel__psimd);
637     }
638   }
639 
TEST(X32_ZIP_XM__PSIMD,n_eq_4_m_gt_4)640   TEST(X32_ZIP_XM__PSIMD, n_eq_4_m_gt_4) {
641     TEST_REQUIRES_PSIMD;
642     for (size_t g = 5; g < 8; g++) {
643       ZipMicrokernelTester()
644         .n(4)
645         .g(g)
646         .Test(xnn_x32_zip_xm_ukernel__psimd);
647     }
648   }
649 
TEST(X32_ZIP_XM__PSIMD,n_div_4_m_eq_4)650   TEST(X32_ZIP_XM__PSIMD, n_div_4_m_eq_4) {
651     TEST_REQUIRES_PSIMD;
652     for (size_t n = 4; n < 64; n += 4) {
653       ZipMicrokernelTester()
654         .n(n)
655         .g(4)
656         .Test(xnn_x32_zip_xm_ukernel__psimd);
657     }
658   }
659 
TEST(X32_ZIP_XM__PSIMD,n_div_4_m_div_4)660   TEST(X32_ZIP_XM__PSIMD, n_div_4_m_div_4) {
661     TEST_REQUIRES_PSIMD;
662     for (size_t n = 4; n < 64; n += 4) {
663       for (size_t g = 4; g < 32; g += 4) {
664         ZipMicrokernelTester()
665           .n(n)
666           .g(g)
667           .Test(xnn_x32_zip_xm_ukernel__psimd);
668       }
669     }
670   }
671 
TEST(X32_ZIP_XM__PSIMD,n_div_4_m_gt_4)672   TEST(X32_ZIP_XM__PSIMD, n_div_4_m_gt_4) {
673     TEST_REQUIRES_PSIMD;
674     for (size_t n = 4; n < 64; n += 4) {
675       for (size_t g = 5; g < 8; g++) {
676         ZipMicrokernelTester()
677           .n(n)
678           .g(g)
679           .Test(xnn_x32_zip_xm_ukernel__psimd);
680       }
681     }
682   }
683 
TEST(X32_ZIP_XM__PSIMD,n_gt_4_m_eq_4)684   TEST(X32_ZIP_XM__PSIMD, n_gt_4_m_eq_4) {
685     TEST_REQUIRES_PSIMD;
686     for (size_t n = 5; n < 8; n++) {
687       ZipMicrokernelTester()
688         .n(n)
689         .g(4)
690         .Test(xnn_x32_zip_xm_ukernel__psimd);
691     }
692   }
693 
TEST(X32_ZIP_XM__PSIMD,n_gt_4_m_div_4)694   TEST(X32_ZIP_XM__PSIMD, n_gt_4_m_div_4) {
695     TEST_REQUIRES_PSIMD;
696     for (size_t n = 5; n < 8; n++) {
697       for (size_t g = 4; g < 32; g += 4) {
698         ZipMicrokernelTester()
699           .n(n)
700           .g(g)
701           .Test(xnn_x32_zip_xm_ukernel__psimd);
702       }
703     }
704   }
705 
TEST(X32_ZIP_XM__PSIMD,n_gt_4_m_gt_4)706   TEST(X32_ZIP_XM__PSIMD, n_gt_4_m_gt_4) {
707     TEST_REQUIRES_PSIMD;
708     for (size_t n = 5; n < 8; n++) {
709       for (size_t g = 5; g < 8; g++) {
710         ZipMicrokernelTester()
711           .n(n)
712           .g(g)
713           .Test(xnn_x32_zip_xm_ukernel__psimd);
714       }
715     }
716   }
717 
TEST(X32_ZIP_XM__PSIMD,n_lt_4_m_eq_4)718   TEST(X32_ZIP_XM__PSIMD, n_lt_4_m_eq_4) {
719     TEST_REQUIRES_PSIMD;
720     for (size_t n = 1; n < 4; n++) {
721       ZipMicrokernelTester()
722         .n(n)
723         .g(4)
724         .Test(xnn_x32_zip_xm_ukernel__psimd);
725     }
726   }
727 
TEST(X32_ZIP_XM__PSIMD,n_lt_4_m_div_4)728   TEST(X32_ZIP_XM__PSIMD, n_lt_4_m_div_4) {
729     TEST_REQUIRES_PSIMD;
730     for (size_t n = 1; n < 4; n++) {
731       for (size_t g = 4; g < 32; g += 4) {
732         ZipMicrokernelTester()
733           .n(n)
734           .g(g)
735           .Test(xnn_x32_zip_xm_ukernel__psimd);
736       }
737     }
738   }
739 
TEST(X32_ZIP_XM__PSIMD,n_lt_4_m_gt_4)740   TEST(X32_ZIP_XM__PSIMD, n_lt_4_m_gt_4) {
741     TEST_REQUIRES_PSIMD;
742     for (size_t n = 1; n < 4; n++) {
743       for (size_t g = 5; g < 8; g++) {
744         ZipMicrokernelTester()
745           .n(n)
746           .g(g)
747           .Test(xnn_x32_zip_xm_ukernel__psimd);
748       }
749     }
750   }
751 #endif  // !XNN_ARCH_WASM && !XNN_ARCH_ASMJS
752 
TEST(X32_ZIP_X2__SCALAR,n_eq_1)753 TEST(X32_ZIP_X2__SCALAR, n_eq_1) {
754   ZipMicrokernelTester()
755     .n(1)
756     .g(2)
757     .Test(xnn_x32_zip_x2_ukernel__scalar);
758 }
759 
TEST(X32_ZIP_X2__SCALAR,n_gt_1)760 TEST(X32_ZIP_X2__SCALAR, n_gt_1) {
761   for (size_t n = 2; n < 8; n++) {
762     ZipMicrokernelTester()
763       .n(n)
764       .g(2)
765       .Test(xnn_x32_zip_x2_ukernel__scalar);
766   }
767 }
768 
TEST(X32_ZIP_X3__SCALAR,n_eq_1)769 TEST(X32_ZIP_X3__SCALAR, n_eq_1) {
770   ZipMicrokernelTester()
771     .n(9)
772     .g(3)
773     .Test(xnn_x32_zip_x3_ukernel__scalar);
774 }
775 
TEST(X32_ZIP_X3__SCALAR,n_gt_1)776 TEST(X32_ZIP_X3__SCALAR, n_gt_1) {
777   for (size_t n = 2; n < 8; n++) {
778     ZipMicrokernelTester()
779       .n(n)
780       .g(3)
781       .Test(xnn_x32_zip_x3_ukernel__scalar);
782   }
783 }
784 
TEST(X32_ZIP_X4__SCALAR,n_eq_1)785 TEST(X32_ZIP_X4__SCALAR, n_eq_1) {
786   ZipMicrokernelTester()
787     .n(1)
788     .g(4)
789     .Test(xnn_x32_zip_x4_ukernel__scalar);
790 }
791 
TEST(X32_ZIP_X4__SCALAR,n_gt_1)792 TEST(X32_ZIP_X4__SCALAR, n_gt_1) {
793   for (size_t n = 2; n < 8; n++) {
794     ZipMicrokernelTester()
795       .n(n)
796       .g(4)
797       .Test(xnn_x32_zip_x4_ukernel__scalar);
798   }
799 }
800 
TEST(X32_ZIP_XM__SCALAR,n_eq_1_m_eq_4)801 TEST(X32_ZIP_XM__SCALAR, n_eq_1_m_eq_4) {
802   ZipMicrokernelTester()
803     .n(1)
804     .g(4)
805     .Test(xnn_x32_zip_xm_ukernel__scalar);
806 }
807 
TEST(X32_ZIP_XM__SCALAR,n_eq_1_m_div_4)808 TEST(X32_ZIP_XM__SCALAR, n_eq_1_m_div_4) {
809   for (size_t g = 4; g < 32; g += 4) {
810     ZipMicrokernelTester()
811       .n(1)
812       .g(g)
813       .Test(xnn_x32_zip_xm_ukernel__scalar);
814   }
815 }
816 
TEST(X32_ZIP_XM__SCALAR,n_eq_1_m_gt_4)817 TEST(X32_ZIP_XM__SCALAR, n_eq_1_m_gt_4) {
818   for (size_t g = 5; g < 8; g++) {
819     ZipMicrokernelTester()
820       .n(1)
821       .g(g)
822       .Test(xnn_x32_zip_xm_ukernel__scalar);
823   }
824 }
825 
TEST(X32_ZIP_XM__SCALAR,n_gt_1_m_eq_4)826 TEST(X32_ZIP_XM__SCALAR, n_gt_1_m_eq_4) {
827   for (size_t n = 2; n < 8; n++) {
828     ZipMicrokernelTester()
829       .n(n)
830       .g(4)
831       .Test(xnn_x32_zip_xm_ukernel__scalar);
832   }
833 }
834 
TEST(X32_ZIP_XM__SCALAR,n_gt_1_m_div_4)835 TEST(X32_ZIP_XM__SCALAR, n_gt_1_m_div_4) {
836   for (size_t n = 2; n < 8; n++) {
837     for (size_t g = 4; g < 32; g += 4) {
838       ZipMicrokernelTester()
839         .n(n)
840         .g(g)
841         .Test(xnn_x32_zip_xm_ukernel__scalar);
842     }
843   }
844 }
845 
TEST(X32_ZIP_XM__SCALAR,n_gt_1_m_gt_4)846 TEST(X32_ZIP_XM__SCALAR, n_gt_1_m_gt_4) {
847   for (size_t n = 2; n < 8; n++) {
848     for (size_t g = 5; g < 8; g++) {
849       ZipMicrokernelTester()
850         .n(n)
851         .g(g)
852         .Test(xnn_x32_zip_xm_ukernel__scalar);
853     }
854   }
855 }
856