xref: /aosp_15_r20/external/XNNPACK/test/f32-dwconv2d-chw.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1 // Copyright 2020 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-dwconv2d-chw.yaml
8 //   Generator: tools/generate-dwconv2d-chw-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/dwconv.h>
17 #include "dwconv2d-microkernel-tester.h"
18 
19 
20 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4,output_width_eq_4)21   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4, output_width_eq_4) {
22     TEST_REQUIRES_ARM_NEON;
23     DWConv2DMicrokernelTester()
24       .input_width(4)
25       .input_height(1)
26       .kernel_height(3)
27       .kernel_width(3)
28       .subsampling(1)
29       .padding_left(1)
30       .padding_right(1)
31       .padding_top(1)
32       .padding_bottom(1)
33       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4);
34   }
35 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4,output_width_div_4)36   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4, output_width_div_4) {
37     TEST_REQUIRES_ARM_NEON;
38     for (size_t input_width = 8; input_width < 32; input_width += 4) {
39       DWConv2DMicrokernelTester()
40         .input_width(input_width)
41         .input_height(1)
42         .kernel_height(3)
43         .kernel_width(3)
44         .subsampling(1)
45         .padding_left(1)
46         .padding_right(1)
47         .padding_top(1)
48         .padding_bottom(1)
49         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4);
50     }
51   }
52 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4,output_width_lt_4)53   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4, output_width_lt_4) {
54     TEST_REQUIRES_ARM_NEON;
55     for (size_t input_width = 1; input_width < 4; input_width++) {
56       DWConv2DMicrokernelTester()
57         .input_width(4)
58         .input_height(1)
59         .kernel_height(3)
60         .kernel_width(3)
61         .subsampling(1)
62         .padding_left(1)
63         .padding_right(1)
64         .padding_top(1)
65         .padding_bottom(1)
66         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4);
67     }
68   }
69 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4,output_width_gt_4)70   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4, output_width_gt_4) {
71     TEST_REQUIRES_ARM_NEON;
72     for (size_t input_width = 5; input_width < 9; input_width++) {
73       DWConv2DMicrokernelTester()
74         .input_width(input_width)
75         .input_height(1)
76         .kernel_height(3)
77         .kernel_width(3)
78         .subsampling(1)
79         .padding_left(1)
80         .padding_right(1)
81         .padding_top(1)
82         .padding_bottom(1)
83         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4);
84     }
85   }
86 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4,output_height_gt_1)87   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4, output_height_gt_1) {
88     TEST_REQUIRES_ARM_NEON;
89     for (size_t input_height = 2; input_height < 3; input_height++) {
90       for (size_t input_width = 1; input_width < 21; input_width += 3) {
91         DWConv2DMicrokernelTester()
92           .input_width(input_width)
93           .input_height(input_height)
94           .kernel_height(3)
95           .kernel_width(3)
96           .subsampling(1)
97           .padding_left(1)
98           .padding_right(1)
99           .padding_top(1)
100           .padding_bottom(1)
101           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4);
102       }
103     }
104   }
105 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
106 
107 
108 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC2,output_width_eq_4)109   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC2, output_width_eq_4) {
110     TEST_REQUIRES_ARM_NEON;
111     DWConv2DMicrokernelTester()
112       .input_width(4)
113       .input_height(1)
114       .kernel_height(3)
115       .kernel_width(3)
116       .subsampling(1)
117       .padding_left(1)
118       .padding_right(1)
119       .padding_top(1)
120       .padding_bottom(1)
121       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc2);
122   }
123 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC2,output_width_div_4)124   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC2, output_width_div_4) {
125     TEST_REQUIRES_ARM_NEON;
126     for (size_t input_width = 8; input_width < 32; input_width += 4) {
127       DWConv2DMicrokernelTester()
128         .input_width(input_width)
129         .input_height(1)
130         .kernel_height(3)
131         .kernel_width(3)
132         .subsampling(1)
133         .padding_left(1)
134         .padding_right(1)
135         .padding_top(1)
136         .padding_bottom(1)
137         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc2);
138     }
139   }
140 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC2,output_width_lt_4)141   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC2, output_width_lt_4) {
142     TEST_REQUIRES_ARM_NEON;
143     for (size_t input_width = 1; input_width < 4; input_width++) {
144       DWConv2DMicrokernelTester()
145         .input_width(4)
146         .input_height(1)
147         .kernel_height(3)
148         .kernel_width(3)
149         .subsampling(1)
150         .padding_left(1)
151         .padding_right(1)
152         .padding_top(1)
153         .padding_bottom(1)
154         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc2);
155     }
156   }
157 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC2,output_width_gt_4)158   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC2, output_width_gt_4) {
159     TEST_REQUIRES_ARM_NEON;
160     for (size_t input_width = 5; input_width < 9; input_width++) {
161       DWConv2DMicrokernelTester()
162         .input_width(input_width)
163         .input_height(1)
164         .kernel_height(3)
165         .kernel_width(3)
166         .subsampling(1)
167         .padding_left(1)
168         .padding_right(1)
169         .padding_top(1)
170         .padding_bottom(1)
171         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc2);
172     }
173   }
174 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC2,output_height_gt_1)175   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC2, output_height_gt_1) {
176     TEST_REQUIRES_ARM_NEON;
177     for (size_t input_height = 2; input_height < 3; input_height++) {
178       for (size_t input_width = 1; input_width < 21; input_width += 3) {
179         DWConv2DMicrokernelTester()
180           .input_width(input_width)
181           .input_height(input_height)
182           .kernel_height(3)
183           .kernel_width(3)
184           .subsampling(1)
185           .padding_left(1)
186           .padding_right(1)
187           .padding_top(1)
188           .padding_bottom(1)
189           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc2);
190       }
191     }
192   }
193 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
194 
195 
196 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC3,output_width_eq_4)197   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC3, output_width_eq_4) {
198     TEST_REQUIRES_ARM_NEON;
199     DWConv2DMicrokernelTester()
200       .input_width(4)
201       .input_height(1)
202       .kernel_height(3)
203       .kernel_width(3)
204       .subsampling(1)
205       .padding_left(1)
206       .padding_right(1)
207       .padding_top(1)
208       .padding_bottom(1)
209       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc3);
210   }
211 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC3,output_width_div_4)212   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC3, output_width_div_4) {
213     TEST_REQUIRES_ARM_NEON;
214     for (size_t input_width = 8; input_width < 32; input_width += 4) {
215       DWConv2DMicrokernelTester()
216         .input_width(input_width)
217         .input_height(1)
218         .kernel_height(3)
219         .kernel_width(3)
220         .subsampling(1)
221         .padding_left(1)
222         .padding_right(1)
223         .padding_top(1)
224         .padding_bottom(1)
225         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc3);
226     }
227   }
228 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC3,output_width_lt_4)229   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC3, output_width_lt_4) {
230     TEST_REQUIRES_ARM_NEON;
231     for (size_t input_width = 1; input_width < 4; input_width++) {
232       DWConv2DMicrokernelTester()
233         .input_width(4)
234         .input_height(1)
235         .kernel_height(3)
236         .kernel_width(3)
237         .subsampling(1)
238         .padding_left(1)
239         .padding_right(1)
240         .padding_top(1)
241         .padding_bottom(1)
242         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc3);
243     }
244   }
245 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC3,output_width_gt_4)246   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC3, output_width_gt_4) {
247     TEST_REQUIRES_ARM_NEON;
248     for (size_t input_width = 5; input_width < 9; input_width++) {
249       DWConv2DMicrokernelTester()
250         .input_width(input_width)
251         .input_height(1)
252         .kernel_height(3)
253         .kernel_width(3)
254         .subsampling(1)
255         .padding_left(1)
256         .padding_right(1)
257         .padding_top(1)
258         .padding_bottom(1)
259         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc3);
260     }
261   }
262 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC3,output_height_gt_1)263   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC3, output_height_gt_1) {
264     TEST_REQUIRES_ARM_NEON;
265     for (size_t input_height = 2; input_height < 3; input_height++) {
266       for (size_t input_width = 1; input_width < 21; input_width += 3) {
267         DWConv2DMicrokernelTester()
268           .input_width(input_width)
269           .input_height(input_height)
270           .kernel_height(3)
271           .kernel_width(3)
272           .subsampling(1)
273           .padding_left(1)
274           .padding_right(1)
275           .padding_top(1)
276           .padding_bottom(1)
277           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc3);
278       }
279     }
280   }
281 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
282 
283 
284 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC4,output_width_eq_4)285   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC4, output_width_eq_4) {
286     TEST_REQUIRES_ARM_NEON;
287     DWConv2DMicrokernelTester()
288       .input_width(4)
289       .input_height(1)
290       .kernel_height(3)
291       .kernel_width(3)
292       .subsampling(1)
293       .padding_left(1)
294       .padding_right(1)
295       .padding_top(1)
296       .padding_bottom(1)
297       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc4);
298   }
299 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC4,output_width_div_4)300   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC4, output_width_div_4) {
301     TEST_REQUIRES_ARM_NEON;
302     for (size_t input_width = 8; input_width < 32; input_width += 4) {
303       DWConv2DMicrokernelTester()
304         .input_width(input_width)
305         .input_height(1)
306         .kernel_height(3)
307         .kernel_width(3)
308         .subsampling(1)
309         .padding_left(1)
310         .padding_right(1)
311         .padding_top(1)
312         .padding_bottom(1)
313         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc4);
314     }
315   }
316 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC4,output_width_lt_4)317   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC4, output_width_lt_4) {
318     TEST_REQUIRES_ARM_NEON;
319     for (size_t input_width = 1; input_width < 4; input_width++) {
320       DWConv2DMicrokernelTester()
321         .input_width(4)
322         .input_height(1)
323         .kernel_height(3)
324         .kernel_width(3)
325         .subsampling(1)
326         .padding_left(1)
327         .padding_right(1)
328         .padding_top(1)
329         .padding_bottom(1)
330         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc4);
331     }
332   }
333 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC4,output_width_gt_4)334   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC4, output_width_gt_4) {
335     TEST_REQUIRES_ARM_NEON;
336     for (size_t input_width = 5; input_width < 9; input_width++) {
337       DWConv2DMicrokernelTester()
338         .input_width(input_width)
339         .input_height(1)
340         .kernel_height(3)
341         .kernel_width(3)
342         .subsampling(1)
343         .padding_left(1)
344         .padding_right(1)
345         .padding_top(1)
346         .padding_bottom(1)
347         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc4);
348     }
349   }
350 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC4,output_height_gt_1)351   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_1X4_ACC4, output_height_gt_1) {
352     TEST_REQUIRES_ARM_NEON;
353     for (size_t input_height = 2; input_height < 3; input_height++) {
354       for (size_t input_width = 1; input_width < 21; input_width += 3) {
355         DWConv2DMicrokernelTester()
356           .input_width(input_width)
357           .input_height(input_height)
358           .kernel_height(3)
359           .kernel_width(3)
360           .subsampling(1)
361           .padding_left(1)
362           .padding_right(1)
363           .padding_top(1)
364           .padding_bottom(1)
365           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_1x4_acc4);
366       }
367     }
368   }
369 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
370 
371 
372 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4,output_width_eq_4)373   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4, output_width_eq_4) {
374     TEST_REQUIRES_ARM_NEON;
375     DWConv2DMicrokernelTester()
376       .input_width(4)
377       .input_height(2)
378       .kernel_height(3)
379       .kernel_width(3)
380       .subsampling(1)
381       .padding_left(1)
382       .padding_right(1)
383       .padding_top(1)
384       .padding_bottom(1)
385       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4);
386   }
387 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4,output_width_div_4)388   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4, output_width_div_4) {
389     TEST_REQUIRES_ARM_NEON;
390     for (size_t input_width = 8; input_width < 32; input_width += 4) {
391       DWConv2DMicrokernelTester()
392         .input_width(input_width)
393         .input_height(2)
394         .kernel_height(3)
395         .kernel_width(3)
396         .subsampling(1)
397         .padding_left(1)
398         .padding_right(1)
399         .padding_top(1)
400         .padding_bottom(1)
401         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4);
402     }
403   }
404 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4,output_width_lt_4)405   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4, output_width_lt_4) {
406     TEST_REQUIRES_ARM_NEON;
407     for (size_t input_width = 1; input_width < 4; input_width++) {
408       DWConv2DMicrokernelTester()
409         .input_width(4)
410         .input_height(2)
411         .kernel_height(3)
412         .kernel_width(3)
413         .subsampling(1)
414         .padding_left(1)
415         .padding_right(1)
416         .padding_top(1)
417         .padding_bottom(1)
418         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4);
419     }
420   }
421 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4,output_width_gt_4)422   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4, output_width_gt_4) {
423     TEST_REQUIRES_ARM_NEON;
424     for (size_t input_width = 5; input_width < 9; input_width++) {
425       DWConv2DMicrokernelTester()
426         .input_width(input_width)
427         .input_height(2)
428         .kernel_height(3)
429         .kernel_width(3)
430         .subsampling(1)
431         .padding_left(1)
432         .padding_right(1)
433         .padding_top(1)
434         .padding_bottom(1)
435         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4);
436     }
437   }
438 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4,output_height_div_2)439   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4, output_height_div_2) {
440     TEST_REQUIRES_ARM_NEON;
441     for (size_t input_height = 4; input_height < 16; input_height += 2) {
442       for (size_t input_width = 1; input_width < 21; input_width += 3) {
443         DWConv2DMicrokernelTester()
444           .input_width(input_width)
445           .input_height(input_height)
446           .kernel_height(3)
447           .kernel_width(3)
448           .subsampling(1)
449           .padding_left(1)
450           .padding_right(1)
451           .padding_top(1)
452           .padding_bottom(1)
453           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4);
454       }
455     }
456   }
457 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4,output_height_lt_2)458   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4, output_height_lt_2) {
459     TEST_REQUIRES_ARM_NEON;
460     for (size_t input_height = 1; input_height < 2; input_height++) {
461       for (size_t input_width = 1; input_width < 21; input_width += 3) {
462         DWConv2DMicrokernelTester()
463           .input_width(input_width)
464           .input_height(input_height)
465           .kernel_height(3)
466           .kernel_width(3)
467           .subsampling(1)
468           .padding_left(1)
469           .padding_right(1)
470           .padding_top(1)
471           .padding_bottom(1)
472           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4);
473       }
474     }
475   }
476 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4,output_height_gt_2)477   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4, output_height_gt_2) {
478     TEST_REQUIRES_ARM_NEON;
479     for (size_t input_height = 3; input_height < 5; input_height++) {
480       for (size_t input_width = 1; input_width < 21; input_width += 3) {
481         DWConv2DMicrokernelTester()
482           .input_width(input_width)
483           .input_height(input_height)
484           .kernel_height(3)
485           .kernel_width(3)
486           .subsampling(1)
487           .padding_left(1)
488           .padding_right(1)
489           .padding_top(1)
490           .padding_bottom(1)
491           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4);
492       }
493     }
494   }
495 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
496 
497 
498 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2,output_width_eq_4)499   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2, output_width_eq_4) {
500     TEST_REQUIRES_ARM_NEON;
501     DWConv2DMicrokernelTester()
502       .input_width(4)
503       .input_height(2)
504       .kernel_height(3)
505       .kernel_width(3)
506       .subsampling(1)
507       .padding_left(1)
508       .padding_right(1)
509       .padding_top(1)
510       .padding_bottom(1)
511       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4_acc2);
512   }
513 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2,output_width_div_4)514   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2, output_width_div_4) {
515     TEST_REQUIRES_ARM_NEON;
516     for (size_t input_width = 8; input_width < 32; input_width += 4) {
517       DWConv2DMicrokernelTester()
518         .input_width(input_width)
519         .input_height(2)
520         .kernel_height(3)
521         .kernel_width(3)
522         .subsampling(1)
523         .padding_left(1)
524         .padding_right(1)
525         .padding_top(1)
526         .padding_bottom(1)
527         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4_acc2);
528     }
529   }
530 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2,output_width_lt_4)531   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2, output_width_lt_4) {
532     TEST_REQUIRES_ARM_NEON;
533     for (size_t input_width = 1; input_width < 4; input_width++) {
534       DWConv2DMicrokernelTester()
535         .input_width(4)
536         .input_height(2)
537         .kernel_height(3)
538         .kernel_width(3)
539         .subsampling(1)
540         .padding_left(1)
541         .padding_right(1)
542         .padding_top(1)
543         .padding_bottom(1)
544         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4_acc2);
545     }
546   }
547 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2,output_width_gt_4)548   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2, output_width_gt_4) {
549     TEST_REQUIRES_ARM_NEON;
550     for (size_t input_width = 5; input_width < 9; input_width++) {
551       DWConv2DMicrokernelTester()
552         .input_width(input_width)
553         .input_height(2)
554         .kernel_height(3)
555         .kernel_width(3)
556         .subsampling(1)
557         .padding_left(1)
558         .padding_right(1)
559         .padding_top(1)
560         .padding_bottom(1)
561         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4_acc2);
562     }
563   }
564 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2,output_height_div_2)565   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2, output_height_div_2) {
566     TEST_REQUIRES_ARM_NEON;
567     for (size_t input_height = 4; input_height < 16; input_height += 2) {
568       for (size_t input_width = 1; input_width < 21; input_width += 3) {
569         DWConv2DMicrokernelTester()
570           .input_width(input_width)
571           .input_height(input_height)
572           .kernel_height(3)
573           .kernel_width(3)
574           .subsampling(1)
575           .padding_left(1)
576           .padding_right(1)
577           .padding_top(1)
578           .padding_bottom(1)
579           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4_acc2);
580       }
581     }
582   }
583 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2,output_height_lt_2)584   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2, output_height_lt_2) {
585     TEST_REQUIRES_ARM_NEON;
586     for (size_t input_height = 1; input_height < 2; input_height++) {
587       for (size_t input_width = 1; input_width < 21; input_width += 3) {
588         DWConv2DMicrokernelTester()
589           .input_width(input_width)
590           .input_height(input_height)
591           .kernel_height(3)
592           .kernel_width(3)
593           .subsampling(1)
594           .padding_left(1)
595           .padding_right(1)
596           .padding_top(1)
597           .padding_bottom(1)
598           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4_acc2);
599       }
600     }
601   }
602 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2,output_height_gt_2)603   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_2X4_ACC2, output_height_gt_2) {
604     TEST_REQUIRES_ARM_NEON;
605     for (size_t input_height = 3; input_height < 5; input_height++) {
606       for (size_t input_width = 1; input_width < 21; input_width += 3) {
607         DWConv2DMicrokernelTester()
608           .input_width(input_width)
609           .input_height(input_height)
610           .kernel_height(3)
611           .kernel_width(3)
612           .subsampling(1)
613           .padding_left(1)
614           .padding_right(1)
615           .padding_top(1)
616           .padding_bottom(1)
617           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_2x4_acc2);
618       }
619     }
620   }
621 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
622 
623 
624 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4,output_width_eq_4)625   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4, output_width_eq_4) {
626     TEST_REQUIRES_ARM_NEON;
627     DWConv2DMicrokernelTester()
628       .input_width(4)
629       .input_height(3)
630       .kernel_height(3)
631       .kernel_width(3)
632       .subsampling(1)
633       .padding_left(1)
634       .padding_right(1)
635       .padding_top(1)
636       .padding_bottom(1)
637       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_3x4);
638   }
639 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4,output_width_div_4)640   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4, output_width_div_4) {
641     TEST_REQUIRES_ARM_NEON;
642     for (size_t input_width = 8; input_width < 32; input_width += 4) {
643       DWConv2DMicrokernelTester()
644         .input_width(input_width)
645         .input_height(3)
646         .kernel_height(3)
647         .kernel_width(3)
648         .subsampling(1)
649         .padding_left(1)
650         .padding_right(1)
651         .padding_top(1)
652         .padding_bottom(1)
653         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_3x4);
654     }
655   }
656 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4,output_width_lt_4)657   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4, output_width_lt_4) {
658     TEST_REQUIRES_ARM_NEON;
659     for (size_t input_width = 1; input_width < 4; input_width++) {
660       DWConv2DMicrokernelTester()
661         .input_width(4)
662         .input_height(3)
663         .kernel_height(3)
664         .kernel_width(3)
665         .subsampling(1)
666         .padding_left(1)
667         .padding_right(1)
668         .padding_top(1)
669         .padding_bottom(1)
670         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_3x4);
671     }
672   }
673 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4,output_width_gt_4)674   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4, output_width_gt_4) {
675     TEST_REQUIRES_ARM_NEON;
676     for (size_t input_width = 5; input_width < 9; input_width++) {
677       DWConv2DMicrokernelTester()
678         .input_width(input_width)
679         .input_height(3)
680         .kernel_height(3)
681         .kernel_width(3)
682         .subsampling(1)
683         .padding_left(1)
684         .padding_right(1)
685         .padding_top(1)
686         .padding_bottom(1)
687         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_3x4);
688     }
689   }
690 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4,output_height_div_3)691   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4, output_height_div_3) {
692     TEST_REQUIRES_ARM_NEON;
693     for (size_t input_height = 6; input_height < 24; input_height += 3) {
694       for (size_t input_width = 1; input_width < 21; input_width += 3) {
695         DWConv2DMicrokernelTester()
696           .input_width(input_width)
697           .input_height(input_height)
698           .kernel_height(3)
699           .kernel_width(3)
700           .subsampling(1)
701           .padding_left(1)
702           .padding_right(1)
703           .padding_top(1)
704           .padding_bottom(1)
705           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_3x4);
706       }
707     }
708   }
709 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4,output_height_lt_3)710   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4, output_height_lt_3) {
711     TEST_REQUIRES_ARM_NEON;
712     for (size_t input_height = 1; input_height < 3; input_height++) {
713       for (size_t input_width = 1; input_width < 21; input_width += 3) {
714         DWConv2DMicrokernelTester()
715           .input_width(input_width)
716           .input_height(input_height)
717           .kernel_height(3)
718           .kernel_width(3)
719           .subsampling(1)
720           .padding_left(1)
721           .padding_right(1)
722           .padding_top(1)
723           .padding_bottom(1)
724           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_3x4);
725       }
726     }
727   }
728 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4,output_height_gt_3)729   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_3X4, output_height_gt_3) {
730     TEST_REQUIRES_ARM_NEON;
731     for (size_t input_height = 4; input_height < 7; input_height++) {
732       for (size_t input_width = 1; input_width < 21; input_width += 3) {
733         DWConv2DMicrokernelTester()
734           .input_width(input_width)
735           .input_height(input_height)
736           .kernel_height(3)
737           .kernel_width(3)
738           .subsampling(1)
739           .padding_left(1)
740           .padding_right(1)
741           .padding_top(1)
742           .padding_bottom(1)
743           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_3x4);
744       }
745     }
746   }
747 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
748 
749 
750 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4,output_width_eq_4)751   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4, output_width_eq_4) {
752     TEST_REQUIRES_ARM_NEON;
753     DWConv2DMicrokernelTester()
754       .input_width(4)
755       .input_height(4)
756       .kernel_height(3)
757       .kernel_width(3)
758       .subsampling(1)
759       .padding_left(1)
760       .padding_right(1)
761       .padding_top(1)
762       .padding_bottom(1)
763       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_4x4);
764   }
765 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4,output_width_div_4)766   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4, output_width_div_4) {
767     TEST_REQUIRES_ARM_NEON;
768     for (size_t input_width = 8; input_width < 32; input_width += 4) {
769       DWConv2DMicrokernelTester()
770         .input_width(input_width)
771         .input_height(4)
772         .kernel_height(3)
773         .kernel_width(3)
774         .subsampling(1)
775         .padding_left(1)
776         .padding_right(1)
777         .padding_top(1)
778         .padding_bottom(1)
779         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_4x4);
780     }
781   }
782 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4,output_width_lt_4)783   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4, output_width_lt_4) {
784     TEST_REQUIRES_ARM_NEON;
785     for (size_t input_width = 1; input_width < 4; input_width++) {
786       DWConv2DMicrokernelTester()
787         .input_width(4)
788         .input_height(4)
789         .kernel_height(3)
790         .kernel_width(3)
791         .subsampling(1)
792         .padding_left(1)
793         .padding_right(1)
794         .padding_top(1)
795         .padding_bottom(1)
796         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_4x4);
797     }
798   }
799 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4,output_width_gt_4)800   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4, output_width_gt_4) {
801     TEST_REQUIRES_ARM_NEON;
802     for (size_t input_width = 5; input_width < 9; input_width++) {
803       DWConv2DMicrokernelTester()
804         .input_width(input_width)
805         .input_height(4)
806         .kernel_height(3)
807         .kernel_width(3)
808         .subsampling(1)
809         .padding_left(1)
810         .padding_right(1)
811         .padding_top(1)
812         .padding_bottom(1)
813         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_4x4);
814     }
815   }
816 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4,output_height_div_4)817   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4, output_height_div_4) {
818     TEST_REQUIRES_ARM_NEON;
819     for (size_t input_height = 8; input_height < 32; input_height += 4) {
820       for (size_t input_width = 1; input_width < 21; input_width += 3) {
821         DWConv2DMicrokernelTester()
822           .input_width(input_width)
823           .input_height(input_height)
824           .kernel_height(3)
825           .kernel_width(3)
826           .subsampling(1)
827           .padding_left(1)
828           .padding_right(1)
829           .padding_top(1)
830           .padding_bottom(1)
831           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_4x4);
832       }
833     }
834   }
835 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4,output_height_lt_4)836   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4, output_height_lt_4) {
837     TEST_REQUIRES_ARM_NEON;
838     for (size_t input_height = 1; input_height < 4; input_height++) {
839       for (size_t input_width = 1; input_width < 21; input_width += 3) {
840         DWConv2DMicrokernelTester()
841           .input_width(input_width)
842           .input_height(input_height)
843           .kernel_height(3)
844           .kernel_width(3)
845           .subsampling(1)
846           .padding_left(1)
847           .padding_right(1)
848           .padding_top(1)
849           .padding_bottom(1)
850           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_4x4);
851       }
852     }
853   }
854 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4,output_height_gt_4)855   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_4X4, output_height_gt_4) {
856     TEST_REQUIRES_ARM_NEON;
857     for (size_t input_height = 5; input_height < 9; input_height++) {
858       for (size_t input_width = 1; input_width < 21; input_width += 3) {
859         DWConv2DMicrokernelTester()
860           .input_width(input_width)
861           .input_height(input_height)
862           .kernel_height(3)
863           .kernel_width(3)
864           .subsampling(1)
865           .padding_left(1)
866           .padding_right(1)
867           .padding_top(1)
868           .padding_bottom(1)
869           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_4x4);
870       }
871     }
872   }
873 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
874 
875 
876 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4,output_width_eq_4)877   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4, output_width_eq_4) {
878     TEST_REQUIRES_ARM_NEON;
879     DWConv2DMicrokernelTester()
880       .input_width(4)
881       .input_height(5)
882       .kernel_height(3)
883       .kernel_width(3)
884       .subsampling(1)
885       .padding_left(1)
886       .padding_right(1)
887       .padding_top(1)
888       .padding_bottom(1)
889       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_5x4);
890   }
891 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4,output_width_div_4)892   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4, output_width_div_4) {
893     TEST_REQUIRES_ARM_NEON;
894     for (size_t input_width = 8; input_width < 32; input_width += 4) {
895       DWConv2DMicrokernelTester()
896         .input_width(input_width)
897         .input_height(5)
898         .kernel_height(3)
899         .kernel_width(3)
900         .subsampling(1)
901         .padding_left(1)
902         .padding_right(1)
903         .padding_top(1)
904         .padding_bottom(1)
905         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_5x4);
906     }
907   }
908 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4,output_width_lt_4)909   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4, output_width_lt_4) {
910     TEST_REQUIRES_ARM_NEON;
911     for (size_t input_width = 1; input_width < 4; input_width++) {
912       DWConv2DMicrokernelTester()
913         .input_width(4)
914         .input_height(5)
915         .kernel_height(3)
916         .kernel_width(3)
917         .subsampling(1)
918         .padding_left(1)
919         .padding_right(1)
920         .padding_top(1)
921         .padding_bottom(1)
922         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_5x4);
923     }
924   }
925 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4,output_width_gt_4)926   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4, output_width_gt_4) {
927     TEST_REQUIRES_ARM_NEON;
928     for (size_t input_width = 5; input_width < 9; input_width++) {
929       DWConv2DMicrokernelTester()
930         .input_width(input_width)
931         .input_height(5)
932         .kernel_height(3)
933         .kernel_width(3)
934         .subsampling(1)
935         .padding_left(1)
936         .padding_right(1)
937         .padding_top(1)
938         .padding_bottom(1)
939         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_5x4);
940     }
941   }
942 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4,output_height_div_5)943   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4, output_height_div_5) {
944     TEST_REQUIRES_ARM_NEON;
945     for (size_t input_height = 10; input_height < 40; input_height += 5) {
946       for (size_t input_width = 1; input_width < 21; input_width += 3) {
947         DWConv2DMicrokernelTester()
948           .input_width(input_width)
949           .input_height(input_height)
950           .kernel_height(3)
951           .kernel_width(3)
952           .subsampling(1)
953           .padding_left(1)
954           .padding_right(1)
955           .padding_top(1)
956           .padding_bottom(1)
957           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_5x4);
958       }
959     }
960   }
961 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4,output_height_lt_5)962   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4, output_height_lt_5) {
963     TEST_REQUIRES_ARM_NEON;
964     for (size_t input_height = 1; input_height < 5; input_height++) {
965       for (size_t input_width = 1; input_width < 21; input_width += 3) {
966         DWConv2DMicrokernelTester()
967           .input_width(input_width)
968           .input_height(input_height)
969           .kernel_height(3)
970           .kernel_width(3)
971           .subsampling(1)
972           .padding_left(1)
973           .padding_right(1)
974           .padding_top(1)
975           .padding_bottom(1)
976           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_5x4);
977       }
978     }
979   }
980 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4,output_height_gt_5)981   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_5X4, output_height_gt_5) {
982     TEST_REQUIRES_ARM_NEON;
983     for (size_t input_height = 6; input_height < 11; input_height++) {
984       for (size_t input_width = 1; input_width < 21; input_width += 3) {
985         DWConv2DMicrokernelTester()
986           .input_width(input_width)
987           .input_height(input_height)
988           .kernel_height(3)
989           .kernel_width(3)
990           .subsampling(1)
991           .padding_left(1)
992           .padding_right(1)
993           .padding_top(1)
994           .padding_bottom(1)
995           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_5x4);
996       }
997     }
998   }
999 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
1000 
1001 
1002 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4,output_width_eq_4)1003   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4, output_width_eq_4) {
1004     TEST_REQUIRES_ARM_NEON;
1005     DWConv2DMicrokernelTester()
1006       .input_width(4)
1007       .input_height(6)
1008       .kernel_height(3)
1009       .kernel_width(3)
1010       .subsampling(1)
1011       .padding_left(1)
1012       .padding_right(1)
1013       .padding_top(1)
1014       .padding_bottom(1)
1015       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_6x4);
1016   }
1017 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4,output_width_div_4)1018   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4, output_width_div_4) {
1019     TEST_REQUIRES_ARM_NEON;
1020     for (size_t input_width = 8; input_width < 32; input_width += 4) {
1021       DWConv2DMicrokernelTester()
1022         .input_width(input_width)
1023         .input_height(6)
1024         .kernel_height(3)
1025         .kernel_width(3)
1026         .subsampling(1)
1027         .padding_left(1)
1028         .padding_right(1)
1029         .padding_top(1)
1030         .padding_bottom(1)
1031         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_6x4);
1032     }
1033   }
1034 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4,output_width_lt_4)1035   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4, output_width_lt_4) {
1036     TEST_REQUIRES_ARM_NEON;
1037     for (size_t input_width = 1; input_width < 4; input_width++) {
1038       DWConv2DMicrokernelTester()
1039         .input_width(4)
1040         .input_height(6)
1041         .kernel_height(3)
1042         .kernel_width(3)
1043         .subsampling(1)
1044         .padding_left(1)
1045         .padding_right(1)
1046         .padding_top(1)
1047         .padding_bottom(1)
1048         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_6x4);
1049     }
1050   }
1051 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4,output_width_gt_4)1052   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4, output_width_gt_4) {
1053     TEST_REQUIRES_ARM_NEON;
1054     for (size_t input_width = 5; input_width < 9; input_width++) {
1055       DWConv2DMicrokernelTester()
1056         .input_width(input_width)
1057         .input_height(6)
1058         .kernel_height(3)
1059         .kernel_width(3)
1060         .subsampling(1)
1061         .padding_left(1)
1062         .padding_right(1)
1063         .padding_top(1)
1064         .padding_bottom(1)
1065         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_6x4);
1066     }
1067   }
1068 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4,output_height_div_6)1069   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4, output_height_div_6) {
1070     TEST_REQUIRES_ARM_NEON;
1071     for (size_t input_height = 12; input_height < 48; input_height += 6) {
1072       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1073         DWConv2DMicrokernelTester()
1074           .input_width(input_width)
1075           .input_height(input_height)
1076           .kernel_height(3)
1077           .kernel_width(3)
1078           .subsampling(1)
1079           .padding_left(1)
1080           .padding_right(1)
1081           .padding_top(1)
1082           .padding_bottom(1)
1083           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_6x4);
1084       }
1085     }
1086   }
1087 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4,output_height_lt_6)1088   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4, output_height_lt_6) {
1089     TEST_REQUIRES_ARM_NEON;
1090     for (size_t input_height = 1; input_height < 6; input_height++) {
1091       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1092         DWConv2DMicrokernelTester()
1093           .input_width(input_width)
1094           .input_height(input_height)
1095           .kernel_height(3)
1096           .kernel_width(3)
1097           .subsampling(1)
1098           .padding_left(1)
1099           .padding_right(1)
1100           .padding_top(1)
1101           .padding_bottom(1)
1102           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_6x4);
1103       }
1104     }
1105   }
1106 
TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4,output_height_gt_6)1107   TEST(F32_DWCONV2D_CHW_3X3P1__NEON_6X4, output_height_gt_6) {
1108     TEST_REQUIRES_ARM_NEON;
1109     for (size_t input_height = 7; input_height < 13; input_height++) {
1110       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1111         DWConv2DMicrokernelTester()
1112           .input_width(input_width)
1113           .input_height(input_height)
1114           .kernel_height(3)
1115           .kernel_width(3)
1116           .subsampling(1)
1117           .padding_left(1)
1118           .padding_right(1)
1119           .padding_top(1)
1120           .padding_bottom(1)
1121           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neon_6x4);
1122       }
1123     }
1124   }
1125 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
1126 
1127 
1128 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4,output_width_eq_4)1129   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4, output_width_eq_4) {
1130     TEST_REQUIRES_ARM_NEON_FMA;
1131     DWConv2DMicrokernelTester()
1132       .input_width(4)
1133       .input_height(1)
1134       .kernel_height(3)
1135       .kernel_width(3)
1136       .subsampling(1)
1137       .padding_left(1)
1138       .padding_right(1)
1139       .padding_top(1)
1140       .padding_bottom(1)
1141       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4);
1142   }
1143 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4,output_width_div_4)1144   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4, output_width_div_4) {
1145     TEST_REQUIRES_ARM_NEON_FMA;
1146     for (size_t input_width = 8; input_width < 32; input_width += 4) {
1147       DWConv2DMicrokernelTester()
1148         .input_width(input_width)
1149         .input_height(1)
1150         .kernel_height(3)
1151         .kernel_width(3)
1152         .subsampling(1)
1153         .padding_left(1)
1154         .padding_right(1)
1155         .padding_top(1)
1156         .padding_bottom(1)
1157         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4);
1158     }
1159   }
1160 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4,output_width_lt_4)1161   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4, output_width_lt_4) {
1162     TEST_REQUIRES_ARM_NEON_FMA;
1163     for (size_t input_width = 1; input_width < 4; input_width++) {
1164       DWConv2DMicrokernelTester()
1165         .input_width(4)
1166         .input_height(1)
1167         .kernel_height(3)
1168         .kernel_width(3)
1169         .subsampling(1)
1170         .padding_left(1)
1171         .padding_right(1)
1172         .padding_top(1)
1173         .padding_bottom(1)
1174         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4);
1175     }
1176   }
1177 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4,output_width_gt_4)1178   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4, output_width_gt_4) {
1179     TEST_REQUIRES_ARM_NEON_FMA;
1180     for (size_t input_width = 5; input_width < 9; input_width++) {
1181       DWConv2DMicrokernelTester()
1182         .input_width(input_width)
1183         .input_height(1)
1184         .kernel_height(3)
1185         .kernel_width(3)
1186         .subsampling(1)
1187         .padding_left(1)
1188         .padding_right(1)
1189         .padding_top(1)
1190         .padding_bottom(1)
1191         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4);
1192     }
1193   }
1194 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4,output_height_gt_1)1195   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4, output_height_gt_1) {
1196     TEST_REQUIRES_ARM_NEON_FMA;
1197     for (size_t input_height = 2; input_height < 3; input_height++) {
1198       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1199         DWConv2DMicrokernelTester()
1200           .input_width(input_width)
1201           .input_height(input_height)
1202           .kernel_height(3)
1203           .kernel_width(3)
1204           .subsampling(1)
1205           .padding_left(1)
1206           .padding_right(1)
1207           .padding_top(1)
1208           .padding_bottom(1)
1209           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4);
1210       }
1211     }
1212   }
1213 #endif  // XNN_ARCH_ARM64
1214 
1215 
1216 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC2,output_width_eq_4)1217   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC2, output_width_eq_4) {
1218     TEST_REQUIRES_ARM_NEON_FMA;
1219     DWConv2DMicrokernelTester()
1220       .input_width(4)
1221       .input_height(1)
1222       .kernel_height(3)
1223       .kernel_width(3)
1224       .subsampling(1)
1225       .padding_left(1)
1226       .padding_right(1)
1227       .padding_top(1)
1228       .padding_bottom(1)
1229       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc2);
1230   }
1231 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC2,output_width_div_4)1232   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC2, output_width_div_4) {
1233     TEST_REQUIRES_ARM_NEON_FMA;
1234     for (size_t input_width = 8; input_width < 32; input_width += 4) {
1235       DWConv2DMicrokernelTester()
1236         .input_width(input_width)
1237         .input_height(1)
1238         .kernel_height(3)
1239         .kernel_width(3)
1240         .subsampling(1)
1241         .padding_left(1)
1242         .padding_right(1)
1243         .padding_top(1)
1244         .padding_bottom(1)
1245         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc2);
1246     }
1247   }
1248 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC2,output_width_lt_4)1249   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC2, output_width_lt_4) {
1250     TEST_REQUIRES_ARM_NEON_FMA;
1251     for (size_t input_width = 1; input_width < 4; input_width++) {
1252       DWConv2DMicrokernelTester()
1253         .input_width(4)
1254         .input_height(1)
1255         .kernel_height(3)
1256         .kernel_width(3)
1257         .subsampling(1)
1258         .padding_left(1)
1259         .padding_right(1)
1260         .padding_top(1)
1261         .padding_bottom(1)
1262         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc2);
1263     }
1264   }
1265 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC2,output_width_gt_4)1266   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC2, output_width_gt_4) {
1267     TEST_REQUIRES_ARM_NEON_FMA;
1268     for (size_t input_width = 5; input_width < 9; input_width++) {
1269       DWConv2DMicrokernelTester()
1270         .input_width(input_width)
1271         .input_height(1)
1272         .kernel_height(3)
1273         .kernel_width(3)
1274         .subsampling(1)
1275         .padding_left(1)
1276         .padding_right(1)
1277         .padding_top(1)
1278         .padding_bottom(1)
1279         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc2);
1280     }
1281   }
1282 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC2,output_height_gt_1)1283   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC2, output_height_gt_1) {
1284     TEST_REQUIRES_ARM_NEON_FMA;
1285     for (size_t input_height = 2; input_height < 3; input_height++) {
1286       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1287         DWConv2DMicrokernelTester()
1288           .input_width(input_width)
1289           .input_height(input_height)
1290           .kernel_height(3)
1291           .kernel_width(3)
1292           .subsampling(1)
1293           .padding_left(1)
1294           .padding_right(1)
1295           .padding_top(1)
1296           .padding_bottom(1)
1297           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc2);
1298       }
1299     }
1300   }
1301 #endif  // XNN_ARCH_ARM64
1302 
1303 
1304 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC3,output_width_eq_4)1305   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC3, output_width_eq_4) {
1306     TEST_REQUIRES_ARM_NEON_FMA;
1307     DWConv2DMicrokernelTester()
1308       .input_width(4)
1309       .input_height(1)
1310       .kernel_height(3)
1311       .kernel_width(3)
1312       .subsampling(1)
1313       .padding_left(1)
1314       .padding_right(1)
1315       .padding_top(1)
1316       .padding_bottom(1)
1317       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc3);
1318   }
1319 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC3,output_width_div_4)1320   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC3, output_width_div_4) {
1321     TEST_REQUIRES_ARM_NEON_FMA;
1322     for (size_t input_width = 8; input_width < 32; input_width += 4) {
1323       DWConv2DMicrokernelTester()
1324         .input_width(input_width)
1325         .input_height(1)
1326         .kernel_height(3)
1327         .kernel_width(3)
1328         .subsampling(1)
1329         .padding_left(1)
1330         .padding_right(1)
1331         .padding_top(1)
1332         .padding_bottom(1)
1333         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc3);
1334     }
1335   }
1336 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC3,output_width_lt_4)1337   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC3, output_width_lt_4) {
1338     TEST_REQUIRES_ARM_NEON_FMA;
1339     for (size_t input_width = 1; input_width < 4; input_width++) {
1340       DWConv2DMicrokernelTester()
1341         .input_width(4)
1342         .input_height(1)
1343         .kernel_height(3)
1344         .kernel_width(3)
1345         .subsampling(1)
1346         .padding_left(1)
1347         .padding_right(1)
1348         .padding_top(1)
1349         .padding_bottom(1)
1350         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc3);
1351     }
1352   }
1353 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC3,output_width_gt_4)1354   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC3, output_width_gt_4) {
1355     TEST_REQUIRES_ARM_NEON_FMA;
1356     for (size_t input_width = 5; input_width < 9; input_width++) {
1357       DWConv2DMicrokernelTester()
1358         .input_width(input_width)
1359         .input_height(1)
1360         .kernel_height(3)
1361         .kernel_width(3)
1362         .subsampling(1)
1363         .padding_left(1)
1364         .padding_right(1)
1365         .padding_top(1)
1366         .padding_bottom(1)
1367         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc3);
1368     }
1369   }
1370 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC3,output_height_gt_1)1371   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC3, output_height_gt_1) {
1372     TEST_REQUIRES_ARM_NEON_FMA;
1373     for (size_t input_height = 2; input_height < 3; input_height++) {
1374       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1375         DWConv2DMicrokernelTester()
1376           .input_width(input_width)
1377           .input_height(input_height)
1378           .kernel_height(3)
1379           .kernel_width(3)
1380           .subsampling(1)
1381           .padding_left(1)
1382           .padding_right(1)
1383           .padding_top(1)
1384           .padding_bottom(1)
1385           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc3);
1386       }
1387     }
1388   }
1389 #endif  // XNN_ARCH_ARM64
1390 
1391 
1392 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC4,output_width_eq_4)1393   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC4, output_width_eq_4) {
1394     TEST_REQUIRES_ARM_NEON_FMA;
1395     DWConv2DMicrokernelTester()
1396       .input_width(4)
1397       .input_height(1)
1398       .kernel_height(3)
1399       .kernel_width(3)
1400       .subsampling(1)
1401       .padding_left(1)
1402       .padding_right(1)
1403       .padding_top(1)
1404       .padding_bottom(1)
1405       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc4);
1406   }
1407 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC4,output_width_div_4)1408   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC4, output_width_div_4) {
1409     TEST_REQUIRES_ARM_NEON_FMA;
1410     for (size_t input_width = 8; input_width < 32; input_width += 4) {
1411       DWConv2DMicrokernelTester()
1412         .input_width(input_width)
1413         .input_height(1)
1414         .kernel_height(3)
1415         .kernel_width(3)
1416         .subsampling(1)
1417         .padding_left(1)
1418         .padding_right(1)
1419         .padding_top(1)
1420         .padding_bottom(1)
1421         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc4);
1422     }
1423   }
1424 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC4,output_width_lt_4)1425   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC4, output_width_lt_4) {
1426     TEST_REQUIRES_ARM_NEON_FMA;
1427     for (size_t input_width = 1; input_width < 4; input_width++) {
1428       DWConv2DMicrokernelTester()
1429         .input_width(4)
1430         .input_height(1)
1431         .kernel_height(3)
1432         .kernel_width(3)
1433         .subsampling(1)
1434         .padding_left(1)
1435         .padding_right(1)
1436         .padding_top(1)
1437         .padding_bottom(1)
1438         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc4);
1439     }
1440   }
1441 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC4,output_width_gt_4)1442   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC4, output_width_gt_4) {
1443     TEST_REQUIRES_ARM_NEON_FMA;
1444     for (size_t input_width = 5; input_width < 9; input_width++) {
1445       DWConv2DMicrokernelTester()
1446         .input_width(input_width)
1447         .input_height(1)
1448         .kernel_height(3)
1449         .kernel_width(3)
1450         .subsampling(1)
1451         .padding_left(1)
1452         .padding_right(1)
1453         .padding_top(1)
1454         .padding_bottom(1)
1455         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc4);
1456     }
1457   }
1458 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC4,output_height_gt_1)1459   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_1X4_ACC4, output_height_gt_1) {
1460     TEST_REQUIRES_ARM_NEON_FMA;
1461     for (size_t input_height = 2; input_height < 3; input_height++) {
1462       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1463         DWConv2DMicrokernelTester()
1464           .input_width(input_width)
1465           .input_height(input_height)
1466           .kernel_height(3)
1467           .kernel_width(3)
1468           .subsampling(1)
1469           .padding_left(1)
1470           .padding_right(1)
1471           .padding_top(1)
1472           .padding_bottom(1)
1473           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_1x4_acc4);
1474       }
1475     }
1476   }
1477 #endif  // XNN_ARCH_ARM64
1478 
1479 
1480 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4,output_width_eq_4)1481   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4, output_width_eq_4) {
1482     TEST_REQUIRES_ARM_NEON_FMA;
1483     DWConv2DMicrokernelTester()
1484       .input_width(4)
1485       .input_height(2)
1486       .kernel_height(3)
1487       .kernel_width(3)
1488       .subsampling(1)
1489       .padding_left(1)
1490       .padding_right(1)
1491       .padding_top(1)
1492       .padding_bottom(1)
1493       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4);
1494   }
1495 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4,output_width_div_4)1496   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4, output_width_div_4) {
1497     TEST_REQUIRES_ARM_NEON_FMA;
1498     for (size_t input_width = 8; input_width < 32; input_width += 4) {
1499       DWConv2DMicrokernelTester()
1500         .input_width(input_width)
1501         .input_height(2)
1502         .kernel_height(3)
1503         .kernel_width(3)
1504         .subsampling(1)
1505         .padding_left(1)
1506         .padding_right(1)
1507         .padding_top(1)
1508         .padding_bottom(1)
1509         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4);
1510     }
1511   }
1512 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4,output_width_lt_4)1513   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4, output_width_lt_4) {
1514     TEST_REQUIRES_ARM_NEON_FMA;
1515     for (size_t input_width = 1; input_width < 4; input_width++) {
1516       DWConv2DMicrokernelTester()
1517         .input_width(4)
1518         .input_height(2)
1519         .kernel_height(3)
1520         .kernel_width(3)
1521         .subsampling(1)
1522         .padding_left(1)
1523         .padding_right(1)
1524         .padding_top(1)
1525         .padding_bottom(1)
1526         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4);
1527     }
1528   }
1529 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4,output_width_gt_4)1530   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4, output_width_gt_4) {
1531     TEST_REQUIRES_ARM_NEON_FMA;
1532     for (size_t input_width = 5; input_width < 9; input_width++) {
1533       DWConv2DMicrokernelTester()
1534         .input_width(input_width)
1535         .input_height(2)
1536         .kernel_height(3)
1537         .kernel_width(3)
1538         .subsampling(1)
1539         .padding_left(1)
1540         .padding_right(1)
1541         .padding_top(1)
1542         .padding_bottom(1)
1543         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4);
1544     }
1545   }
1546 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4,output_height_div_2)1547   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4, output_height_div_2) {
1548     TEST_REQUIRES_ARM_NEON_FMA;
1549     for (size_t input_height = 4; input_height < 16; input_height += 2) {
1550       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1551         DWConv2DMicrokernelTester()
1552           .input_width(input_width)
1553           .input_height(input_height)
1554           .kernel_height(3)
1555           .kernel_width(3)
1556           .subsampling(1)
1557           .padding_left(1)
1558           .padding_right(1)
1559           .padding_top(1)
1560           .padding_bottom(1)
1561           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4);
1562       }
1563     }
1564   }
1565 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4,output_height_lt_2)1566   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4, output_height_lt_2) {
1567     TEST_REQUIRES_ARM_NEON_FMA;
1568     for (size_t input_height = 1; input_height < 2; input_height++) {
1569       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1570         DWConv2DMicrokernelTester()
1571           .input_width(input_width)
1572           .input_height(input_height)
1573           .kernel_height(3)
1574           .kernel_width(3)
1575           .subsampling(1)
1576           .padding_left(1)
1577           .padding_right(1)
1578           .padding_top(1)
1579           .padding_bottom(1)
1580           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4);
1581       }
1582     }
1583   }
1584 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4,output_height_gt_2)1585   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4, output_height_gt_2) {
1586     TEST_REQUIRES_ARM_NEON_FMA;
1587     for (size_t input_height = 3; input_height < 5; input_height++) {
1588       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1589         DWConv2DMicrokernelTester()
1590           .input_width(input_width)
1591           .input_height(input_height)
1592           .kernel_height(3)
1593           .kernel_width(3)
1594           .subsampling(1)
1595           .padding_left(1)
1596           .padding_right(1)
1597           .padding_top(1)
1598           .padding_bottom(1)
1599           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4);
1600       }
1601     }
1602   }
1603 #endif  // XNN_ARCH_ARM64
1604 
1605 
1606 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2,output_width_eq_4)1607   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2, output_width_eq_4) {
1608     TEST_REQUIRES_ARM_NEON_FMA;
1609     DWConv2DMicrokernelTester()
1610       .input_width(4)
1611       .input_height(2)
1612       .kernel_height(3)
1613       .kernel_width(3)
1614       .subsampling(1)
1615       .padding_left(1)
1616       .padding_right(1)
1617       .padding_top(1)
1618       .padding_bottom(1)
1619       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4_acc2);
1620   }
1621 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2,output_width_div_4)1622   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2, output_width_div_4) {
1623     TEST_REQUIRES_ARM_NEON_FMA;
1624     for (size_t input_width = 8; input_width < 32; input_width += 4) {
1625       DWConv2DMicrokernelTester()
1626         .input_width(input_width)
1627         .input_height(2)
1628         .kernel_height(3)
1629         .kernel_width(3)
1630         .subsampling(1)
1631         .padding_left(1)
1632         .padding_right(1)
1633         .padding_top(1)
1634         .padding_bottom(1)
1635         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4_acc2);
1636     }
1637   }
1638 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2,output_width_lt_4)1639   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2, output_width_lt_4) {
1640     TEST_REQUIRES_ARM_NEON_FMA;
1641     for (size_t input_width = 1; input_width < 4; input_width++) {
1642       DWConv2DMicrokernelTester()
1643         .input_width(4)
1644         .input_height(2)
1645         .kernel_height(3)
1646         .kernel_width(3)
1647         .subsampling(1)
1648         .padding_left(1)
1649         .padding_right(1)
1650         .padding_top(1)
1651         .padding_bottom(1)
1652         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4_acc2);
1653     }
1654   }
1655 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2,output_width_gt_4)1656   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2, output_width_gt_4) {
1657     TEST_REQUIRES_ARM_NEON_FMA;
1658     for (size_t input_width = 5; input_width < 9; input_width++) {
1659       DWConv2DMicrokernelTester()
1660         .input_width(input_width)
1661         .input_height(2)
1662         .kernel_height(3)
1663         .kernel_width(3)
1664         .subsampling(1)
1665         .padding_left(1)
1666         .padding_right(1)
1667         .padding_top(1)
1668         .padding_bottom(1)
1669         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4_acc2);
1670     }
1671   }
1672 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2,output_height_div_2)1673   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2, output_height_div_2) {
1674     TEST_REQUIRES_ARM_NEON_FMA;
1675     for (size_t input_height = 4; input_height < 16; input_height += 2) {
1676       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1677         DWConv2DMicrokernelTester()
1678           .input_width(input_width)
1679           .input_height(input_height)
1680           .kernel_height(3)
1681           .kernel_width(3)
1682           .subsampling(1)
1683           .padding_left(1)
1684           .padding_right(1)
1685           .padding_top(1)
1686           .padding_bottom(1)
1687           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4_acc2);
1688       }
1689     }
1690   }
1691 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2,output_height_lt_2)1692   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2, output_height_lt_2) {
1693     TEST_REQUIRES_ARM_NEON_FMA;
1694     for (size_t input_height = 1; input_height < 2; input_height++) {
1695       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1696         DWConv2DMicrokernelTester()
1697           .input_width(input_width)
1698           .input_height(input_height)
1699           .kernel_height(3)
1700           .kernel_width(3)
1701           .subsampling(1)
1702           .padding_left(1)
1703           .padding_right(1)
1704           .padding_top(1)
1705           .padding_bottom(1)
1706           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4_acc2);
1707       }
1708     }
1709   }
1710 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2,output_height_gt_2)1711   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_2X4_ACC2, output_height_gt_2) {
1712     TEST_REQUIRES_ARM_NEON_FMA;
1713     for (size_t input_height = 3; input_height < 5; input_height++) {
1714       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1715         DWConv2DMicrokernelTester()
1716           .input_width(input_width)
1717           .input_height(input_height)
1718           .kernel_height(3)
1719           .kernel_width(3)
1720           .subsampling(1)
1721           .padding_left(1)
1722           .padding_right(1)
1723           .padding_top(1)
1724           .padding_bottom(1)
1725           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_2x4_acc2);
1726       }
1727     }
1728   }
1729 #endif  // XNN_ARCH_ARM64
1730 
1731 
1732 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4,output_width_eq_4)1733   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4, output_width_eq_4) {
1734     TEST_REQUIRES_ARM_NEON_FMA;
1735     DWConv2DMicrokernelTester()
1736       .input_width(4)
1737       .input_height(3)
1738       .kernel_height(3)
1739       .kernel_width(3)
1740       .subsampling(1)
1741       .padding_left(1)
1742       .padding_right(1)
1743       .padding_top(1)
1744       .padding_bottom(1)
1745       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_3x4);
1746   }
1747 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4,output_width_div_4)1748   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4, output_width_div_4) {
1749     TEST_REQUIRES_ARM_NEON_FMA;
1750     for (size_t input_width = 8; input_width < 32; input_width += 4) {
1751       DWConv2DMicrokernelTester()
1752         .input_width(input_width)
1753         .input_height(3)
1754         .kernel_height(3)
1755         .kernel_width(3)
1756         .subsampling(1)
1757         .padding_left(1)
1758         .padding_right(1)
1759         .padding_top(1)
1760         .padding_bottom(1)
1761         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_3x4);
1762     }
1763   }
1764 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4,output_width_lt_4)1765   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4, output_width_lt_4) {
1766     TEST_REQUIRES_ARM_NEON_FMA;
1767     for (size_t input_width = 1; input_width < 4; input_width++) {
1768       DWConv2DMicrokernelTester()
1769         .input_width(4)
1770         .input_height(3)
1771         .kernel_height(3)
1772         .kernel_width(3)
1773         .subsampling(1)
1774         .padding_left(1)
1775         .padding_right(1)
1776         .padding_top(1)
1777         .padding_bottom(1)
1778         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_3x4);
1779     }
1780   }
1781 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4,output_width_gt_4)1782   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4, output_width_gt_4) {
1783     TEST_REQUIRES_ARM_NEON_FMA;
1784     for (size_t input_width = 5; input_width < 9; input_width++) {
1785       DWConv2DMicrokernelTester()
1786         .input_width(input_width)
1787         .input_height(3)
1788         .kernel_height(3)
1789         .kernel_width(3)
1790         .subsampling(1)
1791         .padding_left(1)
1792         .padding_right(1)
1793         .padding_top(1)
1794         .padding_bottom(1)
1795         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_3x4);
1796     }
1797   }
1798 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4,output_height_div_3)1799   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4, output_height_div_3) {
1800     TEST_REQUIRES_ARM_NEON_FMA;
1801     for (size_t input_height = 6; input_height < 24; input_height += 3) {
1802       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1803         DWConv2DMicrokernelTester()
1804           .input_width(input_width)
1805           .input_height(input_height)
1806           .kernel_height(3)
1807           .kernel_width(3)
1808           .subsampling(1)
1809           .padding_left(1)
1810           .padding_right(1)
1811           .padding_top(1)
1812           .padding_bottom(1)
1813           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_3x4);
1814       }
1815     }
1816   }
1817 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4,output_height_lt_3)1818   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4, output_height_lt_3) {
1819     TEST_REQUIRES_ARM_NEON_FMA;
1820     for (size_t input_height = 1; input_height < 3; input_height++) {
1821       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1822         DWConv2DMicrokernelTester()
1823           .input_width(input_width)
1824           .input_height(input_height)
1825           .kernel_height(3)
1826           .kernel_width(3)
1827           .subsampling(1)
1828           .padding_left(1)
1829           .padding_right(1)
1830           .padding_top(1)
1831           .padding_bottom(1)
1832           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_3x4);
1833       }
1834     }
1835   }
1836 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4,output_height_gt_3)1837   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_3X4, output_height_gt_3) {
1838     TEST_REQUIRES_ARM_NEON_FMA;
1839     for (size_t input_height = 4; input_height < 7; input_height++) {
1840       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1841         DWConv2DMicrokernelTester()
1842           .input_width(input_width)
1843           .input_height(input_height)
1844           .kernel_height(3)
1845           .kernel_width(3)
1846           .subsampling(1)
1847           .padding_left(1)
1848           .padding_right(1)
1849           .padding_top(1)
1850           .padding_bottom(1)
1851           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_3x4);
1852       }
1853     }
1854   }
1855 #endif  // XNN_ARCH_ARM64
1856 
1857 
1858 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4,output_width_eq_4)1859   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4, output_width_eq_4) {
1860     TEST_REQUIRES_ARM_NEON_FMA;
1861     DWConv2DMicrokernelTester()
1862       .input_width(4)
1863       .input_height(4)
1864       .kernel_height(3)
1865       .kernel_width(3)
1866       .subsampling(1)
1867       .padding_left(1)
1868       .padding_right(1)
1869       .padding_top(1)
1870       .padding_bottom(1)
1871       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_4x4);
1872   }
1873 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4,output_width_div_4)1874   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4, output_width_div_4) {
1875     TEST_REQUIRES_ARM_NEON_FMA;
1876     for (size_t input_width = 8; input_width < 32; input_width += 4) {
1877       DWConv2DMicrokernelTester()
1878         .input_width(input_width)
1879         .input_height(4)
1880         .kernel_height(3)
1881         .kernel_width(3)
1882         .subsampling(1)
1883         .padding_left(1)
1884         .padding_right(1)
1885         .padding_top(1)
1886         .padding_bottom(1)
1887         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_4x4);
1888     }
1889   }
1890 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4,output_width_lt_4)1891   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4, output_width_lt_4) {
1892     TEST_REQUIRES_ARM_NEON_FMA;
1893     for (size_t input_width = 1; input_width < 4; input_width++) {
1894       DWConv2DMicrokernelTester()
1895         .input_width(4)
1896         .input_height(4)
1897         .kernel_height(3)
1898         .kernel_width(3)
1899         .subsampling(1)
1900         .padding_left(1)
1901         .padding_right(1)
1902         .padding_top(1)
1903         .padding_bottom(1)
1904         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_4x4);
1905     }
1906   }
1907 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4,output_width_gt_4)1908   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4, output_width_gt_4) {
1909     TEST_REQUIRES_ARM_NEON_FMA;
1910     for (size_t input_width = 5; input_width < 9; input_width++) {
1911       DWConv2DMicrokernelTester()
1912         .input_width(input_width)
1913         .input_height(4)
1914         .kernel_height(3)
1915         .kernel_width(3)
1916         .subsampling(1)
1917         .padding_left(1)
1918         .padding_right(1)
1919         .padding_top(1)
1920         .padding_bottom(1)
1921         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_4x4);
1922     }
1923   }
1924 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4,output_height_div_4)1925   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4, output_height_div_4) {
1926     TEST_REQUIRES_ARM_NEON_FMA;
1927     for (size_t input_height = 8; input_height < 32; input_height += 4) {
1928       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1929         DWConv2DMicrokernelTester()
1930           .input_width(input_width)
1931           .input_height(input_height)
1932           .kernel_height(3)
1933           .kernel_width(3)
1934           .subsampling(1)
1935           .padding_left(1)
1936           .padding_right(1)
1937           .padding_top(1)
1938           .padding_bottom(1)
1939           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_4x4);
1940       }
1941     }
1942   }
1943 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4,output_height_lt_4)1944   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4, output_height_lt_4) {
1945     TEST_REQUIRES_ARM_NEON_FMA;
1946     for (size_t input_height = 1; input_height < 4; input_height++) {
1947       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1948         DWConv2DMicrokernelTester()
1949           .input_width(input_width)
1950           .input_height(input_height)
1951           .kernel_height(3)
1952           .kernel_width(3)
1953           .subsampling(1)
1954           .padding_left(1)
1955           .padding_right(1)
1956           .padding_top(1)
1957           .padding_bottom(1)
1958           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_4x4);
1959       }
1960     }
1961   }
1962 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4,output_height_gt_4)1963   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_4X4, output_height_gt_4) {
1964     TEST_REQUIRES_ARM_NEON_FMA;
1965     for (size_t input_height = 5; input_height < 9; input_height++) {
1966       for (size_t input_width = 1; input_width < 21; input_width += 3) {
1967         DWConv2DMicrokernelTester()
1968           .input_width(input_width)
1969           .input_height(input_height)
1970           .kernel_height(3)
1971           .kernel_width(3)
1972           .subsampling(1)
1973           .padding_left(1)
1974           .padding_right(1)
1975           .padding_top(1)
1976           .padding_bottom(1)
1977           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_4x4);
1978       }
1979     }
1980   }
1981 #endif  // XNN_ARCH_ARM64
1982 
1983 
1984 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4,output_width_eq_4)1985   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4, output_width_eq_4) {
1986     TEST_REQUIRES_ARM_NEON_FMA;
1987     DWConv2DMicrokernelTester()
1988       .input_width(4)
1989       .input_height(5)
1990       .kernel_height(3)
1991       .kernel_width(3)
1992       .subsampling(1)
1993       .padding_left(1)
1994       .padding_right(1)
1995       .padding_top(1)
1996       .padding_bottom(1)
1997       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_5x4);
1998   }
1999 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4,output_width_div_4)2000   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4, output_width_div_4) {
2001     TEST_REQUIRES_ARM_NEON_FMA;
2002     for (size_t input_width = 8; input_width < 32; input_width += 4) {
2003       DWConv2DMicrokernelTester()
2004         .input_width(input_width)
2005         .input_height(5)
2006         .kernel_height(3)
2007         .kernel_width(3)
2008         .subsampling(1)
2009         .padding_left(1)
2010         .padding_right(1)
2011         .padding_top(1)
2012         .padding_bottom(1)
2013         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_5x4);
2014     }
2015   }
2016 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4,output_width_lt_4)2017   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4, output_width_lt_4) {
2018     TEST_REQUIRES_ARM_NEON_FMA;
2019     for (size_t input_width = 1; input_width < 4; input_width++) {
2020       DWConv2DMicrokernelTester()
2021         .input_width(4)
2022         .input_height(5)
2023         .kernel_height(3)
2024         .kernel_width(3)
2025         .subsampling(1)
2026         .padding_left(1)
2027         .padding_right(1)
2028         .padding_top(1)
2029         .padding_bottom(1)
2030         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_5x4);
2031     }
2032   }
2033 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4,output_width_gt_4)2034   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4, output_width_gt_4) {
2035     TEST_REQUIRES_ARM_NEON_FMA;
2036     for (size_t input_width = 5; input_width < 9; input_width++) {
2037       DWConv2DMicrokernelTester()
2038         .input_width(input_width)
2039         .input_height(5)
2040         .kernel_height(3)
2041         .kernel_width(3)
2042         .subsampling(1)
2043         .padding_left(1)
2044         .padding_right(1)
2045         .padding_top(1)
2046         .padding_bottom(1)
2047         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_5x4);
2048     }
2049   }
2050 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4,output_height_div_5)2051   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4, output_height_div_5) {
2052     TEST_REQUIRES_ARM_NEON_FMA;
2053     for (size_t input_height = 10; input_height < 40; input_height += 5) {
2054       for (size_t input_width = 1; input_width < 21; input_width += 3) {
2055         DWConv2DMicrokernelTester()
2056           .input_width(input_width)
2057           .input_height(input_height)
2058           .kernel_height(3)
2059           .kernel_width(3)
2060           .subsampling(1)
2061           .padding_left(1)
2062           .padding_right(1)
2063           .padding_top(1)
2064           .padding_bottom(1)
2065           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_5x4);
2066       }
2067     }
2068   }
2069 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4,output_height_lt_5)2070   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4, output_height_lt_5) {
2071     TEST_REQUIRES_ARM_NEON_FMA;
2072     for (size_t input_height = 1; input_height < 5; input_height++) {
2073       for (size_t input_width = 1; input_width < 21; input_width += 3) {
2074         DWConv2DMicrokernelTester()
2075           .input_width(input_width)
2076           .input_height(input_height)
2077           .kernel_height(3)
2078           .kernel_width(3)
2079           .subsampling(1)
2080           .padding_left(1)
2081           .padding_right(1)
2082           .padding_top(1)
2083           .padding_bottom(1)
2084           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_5x4);
2085       }
2086     }
2087   }
2088 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4,output_height_gt_5)2089   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_5X4, output_height_gt_5) {
2090     TEST_REQUIRES_ARM_NEON_FMA;
2091     for (size_t input_height = 6; input_height < 11; input_height++) {
2092       for (size_t input_width = 1; input_width < 21; input_width += 3) {
2093         DWConv2DMicrokernelTester()
2094           .input_width(input_width)
2095           .input_height(input_height)
2096           .kernel_height(3)
2097           .kernel_width(3)
2098           .subsampling(1)
2099           .padding_left(1)
2100           .padding_right(1)
2101           .padding_top(1)
2102           .padding_bottom(1)
2103           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_5x4);
2104       }
2105     }
2106   }
2107 #endif  // XNN_ARCH_ARM64
2108 
2109 
2110 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4,output_width_eq_4)2111   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4, output_width_eq_4) {
2112     TEST_REQUIRES_ARM_NEON_FMA;
2113     DWConv2DMicrokernelTester()
2114       .input_width(4)
2115       .input_height(6)
2116       .kernel_height(3)
2117       .kernel_width(3)
2118       .subsampling(1)
2119       .padding_left(1)
2120       .padding_right(1)
2121       .padding_top(1)
2122       .padding_bottom(1)
2123       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_6x4);
2124   }
2125 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4,output_width_div_4)2126   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4, output_width_div_4) {
2127     TEST_REQUIRES_ARM_NEON_FMA;
2128     for (size_t input_width = 8; input_width < 32; input_width += 4) {
2129       DWConv2DMicrokernelTester()
2130         .input_width(input_width)
2131         .input_height(6)
2132         .kernel_height(3)
2133         .kernel_width(3)
2134         .subsampling(1)
2135         .padding_left(1)
2136         .padding_right(1)
2137         .padding_top(1)
2138         .padding_bottom(1)
2139         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_6x4);
2140     }
2141   }
2142 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4,output_width_lt_4)2143   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4, output_width_lt_4) {
2144     TEST_REQUIRES_ARM_NEON_FMA;
2145     for (size_t input_width = 1; input_width < 4; input_width++) {
2146       DWConv2DMicrokernelTester()
2147         .input_width(4)
2148         .input_height(6)
2149         .kernel_height(3)
2150         .kernel_width(3)
2151         .subsampling(1)
2152         .padding_left(1)
2153         .padding_right(1)
2154         .padding_top(1)
2155         .padding_bottom(1)
2156         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_6x4);
2157     }
2158   }
2159 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4,output_width_gt_4)2160   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4, output_width_gt_4) {
2161     TEST_REQUIRES_ARM_NEON_FMA;
2162     for (size_t input_width = 5; input_width < 9; input_width++) {
2163       DWConv2DMicrokernelTester()
2164         .input_width(input_width)
2165         .input_height(6)
2166         .kernel_height(3)
2167         .kernel_width(3)
2168         .subsampling(1)
2169         .padding_left(1)
2170         .padding_right(1)
2171         .padding_top(1)
2172         .padding_bottom(1)
2173         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_6x4);
2174     }
2175   }
2176 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4,output_height_div_6)2177   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4, output_height_div_6) {
2178     TEST_REQUIRES_ARM_NEON_FMA;
2179     for (size_t input_height = 12; input_height < 48; input_height += 6) {
2180       for (size_t input_width = 1; input_width < 21; input_width += 3) {
2181         DWConv2DMicrokernelTester()
2182           .input_width(input_width)
2183           .input_height(input_height)
2184           .kernel_height(3)
2185           .kernel_width(3)
2186           .subsampling(1)
2187           .padding_left(1)
2188           .padding_right(1)
2189           .padding_top(1)
2190           .padding_bottom(1)
2191           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_6x4);
2192       }
2193     }
2194   }
2195 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4,output_height_lt_6)2196   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4, output_height_lt_6) {
2197     TEST_REQUIRES_ARM_NEON_FMA;
2198     for (size_t input_height = 1; input_height < 6; input_height++) {
2199       for (size_t input_width = 1; input_width < 21; input_width += 3) {
2200         DWConv2DMicrokernelTester()
2201           .input_width(input_width)
2202           .input_height(input_height)
2203           .kernel_height(3)
2204           .kernel_width(3)
2205           .subsampling(1)
2206           .padding_left(1)
2207           .padding_right(1)
2208           .padding_top(1)
2209           .padding_bottom(1)
2210           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_6x4);
2211       }
2212     }
2213   }
2214 
TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4,output_height_gt_6)2215   TEST(F32_DWCONV2D_CHW_3X3P1__NEONFMA_6X4, output_height_gt_6) {
2216     TEST_REQUIRES_ARM_NEON_FMA;
2217     for (size_t input_height = 7; input_height < 13; input_height++) {
2218       for (size_t input_width = 1; input_width < 21; input_width += 3) {
2219         DWConv2DMicrokernelTester()
2220           .input_width(input_width)
2221           .input_height(input_height)
2222           .kernel_height(3)
2223           .kernel_width(3)
2224           .subsampling(1)
2225           .padding_left(1)
2226           .padding_right(1)
2227           .padding_top(1)
2228           .padding_bottom(1)
2229           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__neonfma_6x4);
2230       }
2231     }
2232   }
2233 #endif  // XNN_ARCH_ARM64
2234 
2235 
2236 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4,output_width_eq_4)2237   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4, output_width_eq_4) {
2238     TEST_REQUIRES_ARM_NEON;
2239     for (size_t input_width = 7; input_width < 9; input_width++) {
2240       DWConv2DMicrokernelTester()
2241         .input_width(input_width)
2242         .input_height(2)
2243         .kernel_height(3)
2244         .kernel_width(3)
2245         .subsampling(2)
2246         .padding_left(1)
2247         .padding_right(1)
2248         .padding_top(1)
2249         .padding_bottom(1)
2250         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4);
2251     }
2252   }
2253 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4,output_width_div_4)2254   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4, output_width_div_4) {
2255     TEST_REQUIRES_ARM_NEON;
2256     for (size_t input_width = 16; input_width < 64; input_width += 8) {
2257       DWConv2DMicrokernelTester()
2258         .input_width(input_width)
2259         .input_height(2)
2260         .kernel_height(3)
2261         .kernel_width(3)
2262         .subsampling(2)
2263         .padding_left(1)
2264         .padding_right(1)
2265         .padding_top(1)
2266         .padding_bottom(1)
2267         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4);
2268     }
2269   }
2270 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4,output_width_lt_4)2271   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4, output_width_lt_4) {
2272     TEST_REQUIRES_ARM_NEON;
2273     for (size_t input_width = 1; input_width < 7; input_width++) {
2274       DWConv2DMicrokernelTester()
2275         .input_width(8)
2276         .input_height(2)
2277         .kernel_height(3)
2278         .kernel_width(3)
2279         .subsampling(2)
2280         .padding_left(1)
2281         .padding_right(1)
2282         .padding_top(1)
2283         .padding_bottom(1)
2284         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4);
2285     }
2286   }
2287 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4,output_width_gt_4)2288   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4, output_width_gt_4) {
2289     TEST_REQUIRES_ARM_NEON;
2290     for (size_t input_width = 9; input_width < 17; input_width++) {
2291       DWConv2DMicrokernelTester()
2292         .input_width(input_width)
2293         .input_height(2)
2294         .kernel_height(3)
2295         .kernel_width(3)
2296         .subsampling(2)
2297         .padding_left(1)
2298         .padding_right(1)
2299         .padding_top(1)
2300         .padding_bottom(1)
2301         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4);
2302     }
2303   }
2304 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4,output_height_eq_1)2305   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4, output_height_eq_1) {
2306     TEST_REQUIRES_ARM_NEON;
2307     for (size_t input_height = 1; input_height < 3; input_height++) {
2308       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2309         DWConv2DMicrokernelTester()
2310           .input_width(input_width)
2311           .input_height(input_height)
2312           .kernel_height(3)
2313           .kernel_width(3)
2314           .subsampling(2)
2315           .padding_left(1)
2316           .padding_right(1)
2317           .padding_top(1)
2318           .padding_bottom(1)
2319           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4);
2320       }
2321     }
2322   }
2323 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4,output_height_gt_1)2324   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4, output_height_gt_1) {
2325     TEST_REQUIRES_ARM_NEON;
2326     for (size_t input_height = 3; input_height < 5; input_height++) {
2327       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2328         DWConv2DMicrokernelTester()
2329           .input_width(input_width)
2330           .input_height(input_height)
2331           .kernel_height(3)
2332           .kernel_width(3)
2333           .subsampling(2)
2334           .padding_left(1)
2335           .padding_right(1)
2336           .padding_top(1)
2337           .padding_bottom(1)
2338           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4);
2339       }
2340     }
2341   }
2342 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4,padding_top_eq_1)2343   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4, padding_top_eq_1) {
2344     TEST_REQUIRES_ARM_NEON;
2345     for (size_t input_height = 2; input_height < 8; input_height++) {
2346       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2347         DWConv2DMicrokernelTester()
2348           .input_width(input_width)
2349           .input_height(input_height)
2350           .kernel_height(3)
2351           .kernel_width(3)
2352           .subsampling(2)
2353           .padding_left(1)
2354           .padding_right(1)
2355           .padding_top(0)
2356           .padding_bottom(1)
2357           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4);
2358       }
2359     }
2360   }
2361 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2362 
2363 
2364 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2,output_width_eq_4)2365   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2, output_width_eq_4) {
2366     TEST_REQUIRES_ARM_NEON;
2367     for (size_t input_width = 7; input_width < 9; input_width++) {
2368       DWConv2DMicrokernelTester()
2369         .input_width(input_width)
2370         .input_height(2)
2371         .kernel_height(3)
2372         .kernel_width(3)
2373         .subsampling(2)
2374         .padding_left(1)
2375         .padding_right(1)
2376         .padding_top(1)
2377         .padding_bottom(1)
2378         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc2);
2379     }
2380   }
2381 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2,output_width_div_4)2382   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2, output_width_div_4) {
2383     TEST_REQUIRES_ARM_NEON;
2384     for (size_t input_width = 16; input_width < 64; input_width += 8) {
2385       DWConv2DMicrokernelTester()
2386         .input_width(input_width)
2387         .input_height(2)
2388         .kernel_height(3)
2389         .kernel_width(3)
2390         .subsampling(2)
2391         .padding_left(1)
2392         .padding_right(1)
2393         .padding_top(1)
2394         .padding_bottom(1)
2395         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc2);
2396     }
2397   }
2398 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2,output_width_lt_4)2399   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2, output_width_lt_4) {
2400     TEST_REQUIRES_ARM_NEON;
2401     for (size_t input_width = 1; input_width < 7; input_width++) {
2402       DWConv2DMicrokernelTester()
2403         .input_width(8)
2404         .input_height(2)
2405         .kernel_height(3)
2406         .kernel_width(3)
2407         .subsampling(2)
2408         .padding_left(1)
2409         .padding_right(1)
2410         .padding_top(1)
2411         .padding_bottom(1)
2412         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc2);
2413     }
2414   }
2415 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2,output_width_gt_4)2416   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2, output_width_gt_4) {
2417     TEST_REQUIRES_ARM_NEON;
2418     for (size_t input_width = 9; input_width < 17; input_width++) {
2419       DWConv2DMicrokernelTester()
2420         .input_width(input_width)
2421         .input_height(2)
2422         .kernel_height(3)
2423         .kernel_width(3)
2424         .subsampling(2)
2425         .padding_left(1)
2426         .padding_right(1)
2427         .padding_top(1)
2428         .padding_bottom(1)
2429         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc2);
2430     }
2431   }
2432 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2,output_height_eq_1)2433   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2, output_height_eq_1) {
2434     TEST_REQUIRES_ARM_NEON;
2435     for (size_t input_height = 1; input_height < 3; input_height++) {
2436       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2437         DWConv2DMicrokernelTester()
2438           .input_width(input_width)
2439           .input_height(input_height)
2440           .kernel_height(3)
2441           .kernel_width(3)
2442           .subsampling(2)
2443           .padding_left(1)
2444           .padding_right(1)
2445           .padding_top(1)
2446           .padding_bottom(1)
2447           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc2);
2448       }
2449     }
2450   }
2451 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2,output_height_gt_1)2452   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2, output_height_gt_1) {
2453     TEST_REQUIRES_ARM_NEON;
2454     for (size_t input_height = 3; input_height < 5; input_height++) {
2455       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2456         DWConv2DMicrokernelTester()
2457           .input_width(input_width)
2458           .input_height(input_height)
2459           .kernel_height(3)
2460           .kernel_width(3)
2461           .subsampling(2)
2462           .padding_left(1)
2463           .padding_right(1)
2464           .padding_top(1)
2465           .padding_bottom(1)
2466           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc2);
2467       }
2468     }
2469   }
2470 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2,padding_top_eq_1)2471   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC2, padding_top_eq_1) {
2472     TEST_REQUIRES_ARM_NEON;
2473     for (size_t input_height = 2; input_height < 8; input_height++) {
2474       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2475         DWConv2DMicrokernelTester()
2476           .input_width(input_width)
2477           .input_height(input_height)
2478           .kernel_height(3)
2479           .kernel_width(3)
2480           .subsampling(2)
2481           .padding_left(1)
2482           .padding_right(1)
2483           .padding_top(0)
2484           .padding_bottom(1)
2485           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc2);
2486       }
2487     }
2488   }
2489 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2490 
2491 
2492 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3,output_width_eq_4)2493   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3, output_width_eq_4) {
2494     TEST_REQUIRES_ARM_NEON;
2495     for (size_t input_width = 7; input_width < 9; input_width++) {
2496       DWConv2DMicrokernelTester()
2497         .input_width(input_width)
2498         .input_height(2)
2499         .kernel_height(3)
2500         .kernel_width(3)
2501         .subsampling(2)
2502         .padding_left(1)
2503         .padding_right(1)
2504         .padding_top(1)
2505         .padding_bottom(1)
2506         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc3);
2507     }
2508   }
2509 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3,output_width_div_4)2510   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3, output_width_div_4) {
2511     TEST_REQUIRES_ARM_NEON;
2512     for (size_t input_width = 16; input_width < 64; input_width += 8) {
2513       DWConv2DMicrokernelTester()
2514         .input_width(input_width)
2515         .input_height(2)
2516         .kernel_height(3)
2517         .kernel_width(3)
2518         .subsampling(2)
2519         .padding_left(1)
2520         .padding_right(1)
2521         .padding_top(1)
2522         .padding_bottom(1)
2523         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc3);
2524     }
2525   }
2526 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3,output_width_lt_4)2527   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3, output_width_lt_4) {
2528     TEST_REQUIRES_ARM_NEON;
2529     for (size_t input_width = 1; input_width < 7; input_width++) {
2530       DWConv2DMicrokernelTester()
2531         .input_width(8)
2532         .input_height(2)
2533         .kernel_height(3)
2534         .kernel_width(3)
2535         .subsampling(2)
2536         .padding_left(1)
2537         .padding_right(1)
2538         .padding_top(1)
2539         .padding_bottom(1)
2540         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc3);
2541     }
2542   }
2543 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3,output_width_gt_4)2544   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3, output_width_gt_4) {
2545     TEST_REQUIRES_ARM_NEON;
2546     for (size_t input_width = 9; input_width < 17; input_width++) {
2547       DWConv2DMicrokernelTester()
2548         .input_width(input_width)
2549         .input_height(2)
2550         .kernel_height(3)
2551         .kernel_width(3)
2552         .subsampling(2)
2553         .padding_left(1)
2554         .padding_right(1)
2555         .padding_top(1)
2556         .padding_bottom(1)
2557         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc3);
2558     }
2559   }
2560 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3,output_height_eq_1)2561   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3, output_height_eq_1) {
2562     TEST_REQUIRES_ARM_NEON;
2563     for (size_t input_height = 1; input_height < 3; input_height++) {
2564       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2565         DWConv2DMicrokernelTester()
2566           .input_width(input_width)
2567           .input_height(input_height)
2568           .kernel_height(3)
2569           .kernel_width(3)
2570           .subsampling(2)
2571           .padding_left(1)
2572           .padding_right(1)
2573           .padding_top(1)
2574           .padding_bottom(1)
2575           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc3);
2576       }
2577     }
2578   }
2579 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3,output_height_gt_1)2580   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3, output_height_gt_1) {
2581     TEST_REQUIRES_ARM_NEON;
2582     for (size_t input_height = 3; input_height < 5; input_height++) {
2583       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2584         DWConv2DMicrokernelTester()
2585           .input_width(input_width)
2586           .input_height(input_height)
2587           .kernel_height(3)
2588           .kernel_width(3)
2589           .subsampling(2)
2590           .padding_left(1)
2591           .padding_right(1)
2592           .padding_top(1)
2593           .padding_bottom(1)
2594           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc3);
2595       }
2596     }
2597   }
2598 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3,padding_top_eq_1)2599   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC3, padding_top_eq_1) {
2600     TEST_REQUIRES_ARM_NEON;
2601     for (size_t input_height = 2; input_height < 8; input_height++) {
2602       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2603         DWConv2DMicrokernelTester()
2604           .input_width(input_width)
2605           .input_height(input_height)
2606           .kernel_height(3)
2607           .kernel_width(3)
2608           .subsampling(2)
2609           .padding_left(1)
2610           .padding_right(1)
2611           .padding_top(0)
2612           .padding_bottom(1)
2613           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc3);
2614       }
2615     }
2616   }
2617 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2618 
2619 
2620 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4,output_width_eq_4)2621   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4, output_width_eq_4) {
2622     TEST_REQUIRES_ARM_NEON;
2623     for (size_t input_width = 7; input_width < 9; input_width++) {
2624       DWConv2DMicrokernelTester()
2625         .input_width(input_width)
2626         .input_height(2)
2627         .kernel_height(3)
2628         .kernel_width(3)
2629         .subsampling(2)
2630         .padding_left(1)
2631         .padding_right(1)
2632         .padding_top(1)
2633         .padding_bottom(1)
2634         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc4);
2635     }
2636   }
2637 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4,output_width_div_4)2638   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4, output_width_div_4) {
2639     TEST_REQUIRES_ARM_NEON;
2640     for (size_t input_width = 16; input_width < 64; input_width += 8) {
2641       DWConv2DMicrokernelTester()
2642         .input_width(input_width)
2643         .input_height(2)
2644         .kernel_height(3)
2645         .kernel_width(3)
2646         .subsampling(2)
2647         .padding_left(1)
2648         .padding_right(1)
2649         .padding_top(1)
2650         .padding_bottom(1)
2651         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc4);
2652     }
2653   }
2654 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4,output_width_lt_4)2655   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4, output_width_lt_4) {
2656     TEST_REQUIRES_ARM_NEON;
2657     for (size_t input_width = 1; input_width < 7; input_width++) {
2658       DWConv2DMicrokernelTester()
2659         .input_width(8)
2660         .input_height(2)
2661         .kernel_height(3)
2662         .kernel_width(3)
2663         .subsampling(2)
2664         .padding_left(1)
2665         .padding_right(1)
2666         .padding_top(1)
2667         .padding_bottom(1)
2668         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc4);
2669     }
2670   }
2671 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4,output_width_gt_4)2672   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4, output_width_gt_4) {
2673     TEST_REQUIRES_ARM_NEON;
2674     for (size_t input_width = 9; input_width < 17; input_width++) {
2675       DWConv2DMicrokernelTester()
2676         .input_width(input_width)
2677         .input_height(2)
2678         .kernel_height(3)
2679         .kernel_width(3)
2680         .subsampling(2)
2681         .padding_left(1)
2682         .padding_right(1)
2683         .padding_top(1)
2684         .padding_bottom(1)
2685         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc4);
2686     }
2687   }
2688 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4,output_height_eq_1)2689   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4, output_height_eq_1) {
2690     TEST_REQUIRES_ARM_NEON;
2691     for (size_t input_height = 1; input_height < 3; input_height++) {
2692       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2693         DWConv2DMicrokernelTester()
2694           .input_width(input_width)
2695           .input_height(input_height)
2696           .kernel_height(3)
2697           .kernel_width(3)
2698           .subsampling(2)
2699           .padding_left(1)
2700           .padding_right(1)
2701           .padding_top(1)
2702           .padding_bottom(1)
2703           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc4);
2704       }
2705     }
2706   }
2707 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4,output_height_gt_1)2708   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4, output_height_gt_1) {
2709     TEST_REQUIRES_ARM_NEON;
2710     for (size_t input_height = 3; input_height < 5; input_height++) {
2711       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2712         DWConv2DMicrokernelTester()
2713           .input_width(input_width)
2714           .input_height(input_height)
2715           .kernel_height(3)
2716           .kernel_width(3)
2717           .subsampling(2)
2718           .padding_left(1)
2719           .padding_right(1)
2720           .padding_top(1)
2721           .padding_bottom(1)
2722           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc4);
2723       }
2724     }
2725   }
2726 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4,padding_top_eq_1)2727   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_1X4_ACC4, padding_top_eq_1) {
2728     TEST_REQUIRES_ARM_NEON;
2729     for (size_t input_height = 2; input_height < 8; input_height++) {
2730       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2731         DWConv2DMicrokernelTester()
2732           .input_width(input_width)
2733           .input_height(input_height)
2734           .kernel_height(3)
2735           .kernel_width(3)
2736           .subsampling(2)
2737           .padding_left(1)
2738           .padding_right(1)
2739           .padding_top(0)
2740           .padding_bottom(1)
2741           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_1x4_acc4);
2742       }
2743     }
2744   }
2745 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2746 
2747 
2748 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4,output_width_eq_4)2749   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4, output_width_eq_4) {
2750     TEST_REQUIRES_ARM_NEON;
2751     for (size_t input_width = 7; input_width < 9; input_width++) {
2752       DWConv2DMicrokernelTester()
2753         .input_width(input_width)
2754         .input_height(4)
2755         .kernel_height(3)
2756         .kernel_width(3)
2757         .subsampling(2)
2758         .padding_left(1)
2759         .padding_right(1)
2760         .padding_top(1)
2761         .padding_bottom(1)
2762         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4);
2763     }
2764   }
2765 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4,output_width_div_4)2766   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4, output_width_div_4) {
2767     TEST_REQUIRES_ARM_NEON;
2768     for (size_t input_width = 16; input_width < 64; input_width += 8) {
2769       DWConv2DMicrokernelTester()
2770         .input_width(input_width)
2771         .input_height(4)
2772         .kernel_height(3)
2773         .kernel_width(3)
2774         .subsampling(2)
2775         .padding_left(1)
2776         .padding_right(1)
2777         .padding_top(1)
2778         .padding_bottom(1)
2779         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4);
2780     }
2781   }
2782 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4,output_width_lt_4)2783   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4, output_width_lt_4) {
2784     TEST_REQUIRES_ARM_NEON;
2785     for (size_t input_width = 1; input_width < 7; input_width++) {
2786       DWConv2DMicrokernelTester()
2787         .input_width(8)
2788         .input_height(4)
2789         .kernel_height(3)
2790         .kernel_width(3)
2791         .subsampling(2)
2792         .padding_left(1)
2793         .padding_right(1)
2794         .padding_top(1)
2795         .padding_bottom(1)
2796         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4);
2797     }
2798   }
2799 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4,output_width_gt_4)2800   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4, output_width_gt_4) {
2801     TEST_REQUIRES_ARM_NEON;
2802     for (size_t input_width = 9; input_width < 17; input_width++) {
2803       DWConv2DMicrokernelTester()
2804         .input_width(input_width)
2805         .input_height(4)
2806         .kernel_height(3)
2807         .kernel_width(3)
2808         .subsampling(2)
2809         .padding_left(1)
2810         .padding_right(1)
2811         .padding_top(1)
2812         .padding_bottom(1)
2813         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4);
2814     }
2815   }
2816 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4,output_height_eq_2)2817   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4, output_height_eq_2) {
2818     TEST_REQUIRES_ARM_NEON;
2819     for (size_t input_height = 3; input_height < 5; input_height++) {
2820       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2821         DWConv2DMicrokernelTester()
2822           .input_width(input_width)
2823           .input_height(input_height)
2824           .kernel_height(3)
2825           .kernel_width(3)
2826           .subsampling(2)
2827           .padding_left(1)
2828           .padding_right(1)
2829           .padding_top(1)
2830           .padding_bottom(1)
2831           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4);
2832       }
2833     }
2834   }
2835 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4,output_height_div_2)2836   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4, output_height_div_2) {
2837     TEST_REQUIRES_ARM_NEON;
2838     for (size_t input_height = 8; input_height < 32; input_height += 4) {
2839       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2840         DWConv2DMicrokernelTester()
2841           .input_width(input_width)
2842           .input_height(input_height)
2843           .kernel_height(3)
2844           .kernel_width(3)
2845           .subsampling(2)
2846           .padding_left(1)
2847           .padding_right(1)
2848           .padding_top(1)
2849           .padding_bottom(1)
2850           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4);
2851       }
2852     }
2853   }
2854 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4,output_height_lt_2)2855   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4, output_height_lt_2) {
2856     TEST_REQUIRES_ARM_NEON;
2857     for (size_t input_height = 1; input_height < 3; input_height++) {
2858       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2859         DWConv2DMicrokernelTester()
2860           .input_width(input_width)
2861           .input_height(input_height)
2862           .kernel_height(3)
2863           .kernel_width(3)
2864           .subsampling(2)
2865           .padding_left(1)
2866           .padding_right(1)
2867           .padding_top(1)
2868           .padding_bottom(1)
2869           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4);
2870       }
2871     }
2872   }
2873 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4,output_height_gt_2)2874   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4, output_height_gt_2) {
2875     TEST_REQUIRES_ARM_NEON;
2876     for (size_t input_height = 5; input_height < 9; input_height++) {
2877       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2878         DWConv2DMicrokernelTester()
2879           .input_width(input_width)
2880           .input_height(input_height)
2881           .kernel_height(3)
2882           .kernel_width(3)
2883           .subsampling(2)
2884           .padding_left(1)
2885           .padding_right(1)
2886           .padding_top(1)
2887           .padding_bottom(1)
2888           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4);
2889       }
2890     }
2891   }
2892 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4,padding_top_eq_1)2893   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4, padding_top_eq_1) {
2894     TEST_REQUIRES_ARM_NEON;
2895     for (size_t input_height = 2; input_height < 14; input_height++) {
2896       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2897         DWConv2DMicrokernelTester()
2898           .input_width(input_width)
2899           .input_height(input_height)
2900           .kernel_height(3)
2901           .kernel_width(3)
2902           .subsampling(2)
2903           .padding_left(1)
2904           .padding_right(1)
2905           .padding_top(0)
2906           .padding_bottom(1)
2907           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4);
2908       }
2909     }
2910   }
2911 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2912 
2913 
2914 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2,output_width_eq_4)2915   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2, output_width_eq_4) {
2916     TEST_REQUIRES_ARM_NEON;
2917     for (size_t input_width = 7; input_width < 9; input_width++) {
2918       DWConv2DMicrokernelTester()
2919         .input_width(input_width)
2920         .input_height(4)
2921         .kernel_height(3)
2922         .kernel_width(3)
2923         .subsampling(2)
2924         .padding_left(1)
2925         .padding_right(1)
2926         .padding_top(1)
2927         .padding_bottom(1)
2928         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4_acc2);
2929     }
2930   }
2931 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2,output_width_div_4)2932   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2, output_width_div_4) {
2933     TEST_REQUIRES_ARM_NEON;
2934     for (size_t input_width = 16; input_width < 64; input_width += 8) {
2935       DWConv2DMicrokernelTester()
2936         .input_width(input_width)
2937         .input_height(4)
2938         .kernel_height(3)
2939         .kernel_width(3)
2940         .subsampling(2)
2941         .padding_left(1)
2942         .padding_right(1)
2943         .padding_top(1)
2944         .padding_bottom(1)
2945         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4_acc2);
2946     }
2947   }
2948 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2,output_width_lt_4)2949   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2, output_width_lt_4) {
2950     TEST_REQUIRES_ARM_NEON;
2951     for (size_t input_width = 1; input_width < 7; input_width++) {
2952       DWConv2DMicrokernelTester()
2953         .input_width(8)
2954         .input_height(4)
2955         .kernel_height(3)
2956         .kernel_width(3)
2957         .subsampling(2)
2958         .padding_left(1)
2959         .padding_right(1)
2960         .padding_top(1)
2961         .padding_bottom(1)
2962         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4_acc2);
2963     }
2964   }
2965 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2,output_width_gt_4)2966   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2, output_width_gt_4) {
2967     TEST_REQUIRES_ARM_NEON;
2968     for (size_t input_width = 9; input_width < 17; input_width++) {
2969       DWConv2DMicrokernelTester()
2970         .input_width(input_width)
2971         .input_height(4)
2972         .kernel_height(3)
2973         .kernel_width(3)
2974         .subsampling(2)
2975         .padding_left(1)
2976         .padding_right(1)
2977         .padding_top(1)
2978         .padding_bottom(1)
2979         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4_acc2);
2980     }
2981   }
2982 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2,output_height_eq_2)2983   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2, output_height_eq_2) {
2984     TEST_REQUIRES_ARM_NEON;
2985     for (size_t input_height = 3; input_height < 5; input_height++) {
2986       for (size_t input_width = 1; input_width < 41; input_width += 7) {
2987         DWConv2DMicrokernelTester()
2988           .input_width(input_width)
2989           .input_height(input_height)
2990           .kernel_height(3)
2991           .kernel_width(3)
2992           .subsampling(2)
2993           .padding_left(1)
2994           .padding_right(1)
2995           .padding_top(1)
2996           .padding_bottom(1)
2997           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4_acc2);
2998       }
2999     }
3000   }
3001 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2,output_height_div_2)3002   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2, output_height_div_2) {
3003     TEST_REQUIRES_ARM_NEON;
3004     for (size_t input_height = 8; input_height < 32; input_height += 4) {
3005       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3006         DWConv2DMicrokernelTester()
3007           .input_width(input_width)
3008           .input_height(input_height)
3009           .kernel_height(3)
3010           .kernel_width(3)
3011           .subsampling(2)
3012           .padding_left(1)
3013           .padding_right(1)
3014           .padding_top(1)
3015           .padding_bottom(1)
3016           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4_acc2);
3017       }
3018     }
3019   }
3020 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2,output_height_lt_2)3021   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2, output_height_lt_2) {
3022     TEST_REQUIRES_ARM_NEON;
3023     for (size_t input_height = 1; input_height < 3; input_height++) {
3024       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3025         DWConv2DMicrokernelTester()
3026           .input_width(input_width)
3027           .input_height(input_height)
3028           .kernel_height(3)
3029           .kernel_width(3)
3030           .subsampling(2)
3031           .padding_left(1)
3032           .padding_right(1)
3033           .padding_top(1)
3034           .padding_bottom(1)
3035           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4_acc2);
3036       }
3037     }
3038   }
3039 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2,output_height_gt_2)3040   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2, output_height_gt_2) {
3041     TEST_REQUIRES_ARM_NEON;
3042     for (size_t input_height = 5; input_height < 9; input_height++) {
3043       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3044         DWConv2DMicrokernelTester()
3045           .input_width(input_width)
3046           .input_height(input_height)
3047           .kernel_height(3)
3048           .kernel_width(3)
3049           .subsampling(2)
3050           .padding_left(1)
3051           .padding_right(1)
3052           .padding_top(1)
3053           .padding_bottom(1)
3054           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4_acc2);
3055       }
3056     }
3057   }
3058 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2,padding_top_eq_1)3059   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_2X4_ACC2, padding_top_eq_1) {
3060     TEST_REQUIRES_ARM_NEON;
3061     for (size_t input_height = 2; input_height < 14; input_height++) {
3062       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3063         DWConv2DMicrokernelTester()
3064           .input_width(input_width)
3065           .input_height(input_height)
3066           .kernel_height(3)
3067           .kernel_width(3)
3068           .subsampling(2)
3069           .padding_left(1)
3070           .padding_right(1)
3071           .padding_top(0)
3072           .padding_bottom(1)
3073           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_2x4_acc2);
3074       }
3075     }
3076   }
3077 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
3078 
3079 
3080 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4,output_width_eq_4)3081   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4, output_width_eq_4) {
3082     TEST_REQUIRES_ARM_NEON;
3083     for (size_t input_width = 7; input_width < 9; input_width++) {
3084       DWConv2DMicrokernelTester()
3085         .input_width(input_width)
3086         .input_height(6)
3087         .kernel_height(3)
3088         .kernel_width(3)
3089         .subsampling(2)
3090         .padding_left(1)
3091         .padding_right(1)
3092         .padding_top(1)
3093         .padding_bottom(1)
3094         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_3x4);
3095     }
3096   }
3097 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4,output_width_div_4)3098   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4, output_width_div_4) {
3099     TEST_REQUIRES_ARM_NEON;
3100     for (size_t input_width = 16; input_width < 64; input_width += 8) {
3101       DWConv2DMicrokernelTester()
3102         .input_width(input_width)
3103         .input_height(6)
3104         .kernel_height(3)
3105         .kernel_width(3)
3106         .subsampling(2)
3107         .padding_left(1)
3108         .padding_right(1)
3109         .padding_top(1)
3110         .padding_bottom(1)
3111         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_3x4);
3112     }
3113   }
3114 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4,output_width_lt_4)3115   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4, output_width_lt_4) {
3116     TEST_REQUIRES_ARM_NEON;
3117     for (size_t input_width = 1; input_width < 7; input_width++) {
3118       DWConv2DMicrokernelTester()
3119         .input_width(8)
3120         .input_height(6)
3121         .kernel_height(3)
3122         .kernel_width(3)
3123         .subsampling(2)
3124         .padding_left(1)
3125         .padding_right(1)
3126         .padding_top(1)
3127         .padding_bottom(1)
3128         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_3x4);
3129     }
3130   }
3131 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4,output_width_gt_4)3132   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4, output_width_gt_4) {
3133     TEST_REQUIRES_ARM_NEON;
3134     for (size_t input_width = 9; input_width < 17; input_width++) {
3135       DWConv2DMicrokernelTester()
3136         .input_width(input_width)
3137         .input_height(6)
3138         .kernel_height(3)
3139         .kernel_width(3)
3140         .subsampling(2)
3141         .padding_left(1)
3142         .padding_right(1)
3143         .padding_top(1)
3144         .padding_bottom(1)
3145         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_3x4);
3146     }
3147   }
3148 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4,output_height_eq_3)3149   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4, output_height_eq_3) {
3150     TEST_REQUIRES_ARM_NEON;
3151     for (size_t input_height = 5; input_height < 7; input_height++) {
3152       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3153         DWConv2DMicrokernelTester()
3154           .input_width(input_width)
3155           .input_height(input_height)
3156           .kernel_height(3)
3157           .kernel_width(3)
3158           .subsampling(2)
3159           .padding_left(1)
3160           .padding_right(1)
3161           .padding_top(1)
3162           .padding_bottom(1)
3163           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_3x4);
3164       }
3165     }
3166   }
3167 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4,output_height_div_3)3168   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4, output_height_div_3) {
3169     TEST_REQUIRES_ARM_NEON;
3170     for (size_t input_height = 12; input_height < 48; input_height += 6) {
3171       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3172         DWConv2DMicrokernelTester()
3173           .input_width(input_width)
3174           .input_height(input_height)
3175           .kernel_height(3)
3176           .kernel_width(3)
3177           .subsampling(2)
3178           .padding_left(1)
3179           .padding_right(1)
3180           .padding_top(1)
3181           .padding_bottom(1)
3182           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_3x4);
3183       }
3184     }
3185   }
3186 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4,output_height_lt_3)3187   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4, output_height_lt_3) {
3188     TEST_REQUIRES_ARM_NEON;
3189     for (size_t input_height = 1; input_height < 5; input_height++) {
3190       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3191         DWConv2DMicrokernelTester()
3192           .input_width(input_width)
3193           .input_height(input_height)
3194           .kernel_height(3)
3195           .kernel_width(3)
3196           .subsampling(2)
3197           .padding_left(1)
3198           .padding_right(1)
3199           .padding_top(1)
3200           .padding_bottom(1)
3201           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_3x4);
3202       }
3203     }
3204   }
3205 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4,output_height_gt_3)3206   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4, output_height_gt_3) {
3207     TEST_REQUIRES_ARM_NEON;
3208     for (size_t input_height = 7; input_height < 13; input_height++) {
3209       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3210         DWConv2DMicrokernelTester()
3211           .input_width(input_width)
3212           .input_height(input_height)
3213           .kernel_height(3)
3214           .kernel_width(3)
3215           .subsampling(2)
3216           .padding_left(1)
3217           .padding_right(1)
3218           .padding_top(1)
3219           .padding_bottom(1)
3220           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_3x4);
3221       }
3222     }
3223   }
3224 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4,padding_top_eq_1)3225   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_3X4, padding_top_eq_1) {
3226     TEST_REQUIRES_ARM_NEON;
3227     for (size_t input_height = 2; input_height < 20; input_height++) {
3228       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3229         DWConv2DMicrokernelTester()
3230           .input_width(input_width)
3231           .input_height(input_height)
3232           .kernel_height(3)
3233           .kernel_width(3)
3234           .subsampling(2)
3235           .padding_left(1)
3236           .padding_right(1)
3237           .padding_top(0)
3238           .padding_bottom(1)
3239           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_3x4);
3240       }
3241     }
3242   }
3243 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
3244 
3245 
3246 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4,output_width_eq_4)3247   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4, output_width_eq_4) {
3248     TEST_REQUIRES_ARM_NEON;
3249     for (size_t input_width = 7; input_width < 9; input_width++) {
3250       DWConv2DMicrokernelTester()
3251         .input_width(input_width)
3252         .input_height(8)
3253         .kernel_height(3)
3254         .kernel_width(3)
3255         .subsampling(2)
3256         .padding_left(1)
3257         .padding_right(1)
3258         .padding_top(1)
3259         .padding_bottom(1)
3260         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_4x4);
3261     }
3262   }
3263 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4,output_width_div_4)3264   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4, output_width_div_4) {
3265     TEST_REQUIRES_ARM_NEON;
3266     for (size_t input_width = 16; input_width < 64; input_width += 8) {
3267       DWConv2DMicrokernelTester()
3268         .input_width(input_width)
3269         .input_height(8)
3270         .kernel_height(3)
3271         .kernel_width(3)
3272         .subsampling(2)
3273         .padding_left(1)
3274         .padding_right(1)
3275         .padding_top(1)
3276         .padding_bottom(1)
3277         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_4x4);
3278     }
3279   }
3280 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4,output_width_lt_4)3281   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4, output_width_lt_4) {
3282     TEST_REQUIRES_ARM_NEON;
3283     for (size_t input_width = 1; input_width < 7; input_width++) {
3284       DWConv2DMicrokernelTester()
3285         .input_width(8)
3286         .input_height(8)
3287         .kernel_height(3)
3288         .kernel_width(3)
3289         .subsampling(2)
3290         .padding_left(1)
3291         .padding_right(1)
3292         .padding_top(1)
3293         .padding_bottom(1)
3294         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_4x4);
3295     }
3296   }
3297 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4,output_width_gt_4)3298   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4, output_width_gt_4) {
3299     TEST_REQUIRES_ARM_NEON;
3300     for (size_t input_width = 9; input_width < 17; input_width++) {
3301       DWConv2DMicrokernelTester()
3302         .input_width(input_width)
3303         .input_height(8)
3304         .kernel_height(3)
3305         .kernel_width(3)
3306         .subsampling(2)
3307         .padding_left(1)
3308         .padding_right(1)
3309         .padding_top(1)
3310         .padding_bottom(1)
3311         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_4x4);
3312     }
3313   }
3314 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4,output_height_eq_4)3315   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4, output_height_eq_4) {
3316     TEST_REQUIRES_ARM_NEON;
3317     for (size_t input_height = 7; input_height < 9; input_height++) {
3318       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3319         DWConv2DMicrokernelTester()
3320           .input_width(input_width)
3321           .input_height(input_height)
3322           .kernel_height(3)
3323           .kernel_width(3)
3324           .subsampling(2)
3325           .padding_left(1)
3326           .padding_right(1)
3327           .padding_top(1)
3328           .padding_bottom(1)
3329           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_4x4);
3330       }
3331     }
3332   }
3333 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4,output_height_div_4)3334   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4, output_height_div_4) {
3335     TEST_REQUIRES_ARM_NEON;
3336     for (size_t input_height = 16; input_height < 64; input_height += 8) {
3337       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3338         DWConv2DMicrokernelTester()
3339           .input_width(input_width)
3340           .input_height(input_height)
3341           .kernel_height(3)
3342           .kernel_width(3)
3343           .subsampling(2)
3344           .padding_left(1)
3345           .padding_right(1)
3346           .padding_top(1)
3347           .padding_bottom(1)
3348           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_4x4);
3349       }
3350     }
3351   }
3352 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4,output_height_lt_4)3353   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4, output_height_lt_4) {
3354     TEST_REQUIRES_ARM_NEON;
3355     for (size_t input_height = 1; input_height < 7; input_height++) {
3356       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3357         DWConv2DMicrokernelTester()
3358           .input_width(input_width)
3359           .input_height(input_height)
3360           .kernel_height(3)
3361           .kernel_width(3)
3362           .subsampling(2)
3363           .padding_left(1)
3364           .padding_right(1)
3365           .padding_top(1)
3366           .padding_bottom(1)
3367           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_4x4);
3368       }
3369     }
3370   }
3371 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4,output_height_gt_4)3372   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4, output_height_gt_4) {
3373     TEST_REQUIRES_ARM_NEON;
3374     for (size_t input_height = 9; input_height < 17; input_height++) {
3375       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3376         DWConv2DMicrokernelTester()
3377           .input_width(input_width)
3378           .input_height(input_height)
3379           .kernel_height(3)
3380           .kernel_width(3)
3381           .subsampling(2)
3382           .padding_left(1)
3383           .padding_right(1)
3384           .padding_top(1)
3385           .padding_bottom(1)
3386           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_4x4);
3387       }
3388     }
3389   }
3390 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4,padding_top_eq_1)3391   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEON_4X4, padding_top_eq_1) {
3392     TEST_REQUIRES_ARM_NEON;
3393     for (size_t input_height = 2; input_height < 26; input_height++) {
3394       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3395         DWConv2DMicrokernelTester()
3396           .input_width(input_width)
3397           .input_height(input_height)
3398           .kernel_height(3)
3399           .kernel_width(3)
3400           .subsampling(2)
3401           .padding_left(1)
3402           .padding_right(1)
3403           .padding_top(0)
3404           .padding_bottom(1)
3405           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neon_4x4);
3406       }
3407     }
3408   }
3409 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
3410 
3411 
3412 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4,output_width_eq_4)3413   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4, output_width_eq_4) {
3414     TEST_REQUIRES_ARM_NEON_FMA;
3415     for (size_t input_width = 7; input_width < 9; input_width++) {
3416       DWConv2DMicrokernelTester()
3417         .input_width(input_width)
3418         .input_height(2)
3419         .kernel_height(3)
3420         .kernel_width(3)
3421         .subsampling(2)
3422         .padding_left(1)
3423         .padding_right(1)
3424         .padding_top(1)
3425         .padding_bottom(1)
3426         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4);
3427     }
3428   }
3429 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4,output_width_div_4)3430   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4, output_width_div_4) {
3431     TEST_REQUIRES_ARM_NEON_FMA;
3432     for (size_t input_width = 16; input_width < 64; input_width += 8) {
3433       DWConv2DMicrokernelTester()
3434         .input_width(input_width)
3435         .input_height(2)
3436         .kernel_height(3)
3437         .kernel_width(3)
3438         .subsampling(2)
3439         .padding_left(1)
3440         .padding_right(1)
3441         .padding_top(1)
3442         .padding_bottom(1)
3443         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4);
3444     }
3445   }
3446 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4,output_width_lt_4)3447   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4, output_width_lt_4) {
3448     TEST_REQUIRES_ARM_NEON_FMA;
3449     for (size_t input_width = 1; input_width < 7; input_width++) {
3450       DWConv2DMicrokernelTester()
3451         .input_width(8)
3452         .input_height(2)
3453         .kernel_height(3)
3454         .kernel_width(3)
3455         .subsampling(2)
3456         .padding_left(1)
3457         .padding_right(1)
3458         .padding_top(1)
3459         .padding_bottom(1)
3460         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4);
3461     }
3462   }
3463 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4,output_width_gt_4)3464   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4, output_width_gt_4) {
3465     TEST_REQUIRES_ARM_NEON_FMA;
3466     for (size_t input_width = 9; input_width < 17; input_width++) {
3467       DWConv2DMicrokernelTester()
3468         .input_width(input_width)
3469         .input_height(2)
3470         .kernel_height(3)
3471         .kernel_width(3)
3472         .subsampling(2)
3473         .padding_left(1)
3474         .padding_right(1)
3475         .padding_top(1)
3476         .padding_bottom(1)
3477         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4);
3478     }
3479   }
3480 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4,output_height_eq_1)3481   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4, output_height_eq_1) {
3482     TEST_REQUIRES_ARM_NEON_FMA;
3483     for (size_t input_height = 1; input_height < 3; input_height++) {
3484       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3485         DWConv2DMicrokernelTester()
3486           .input_width(input_width)
3487           .input_height(input_height)
3488           .kernel_height(3)
3489           .kernel_width(3)
3490           .subsampling(2)
3491           .padding_left(1)
3492           .padding_right(1)
3493           .padding_top(1)
3494           .padding_bottom(1)
3495           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4);
3496       }
3497     }
3498   }
3499 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4,output_height_gt_1)3500   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4, output_height_gt_1) {
3501     TEST_REQUIRES_ARM_NEON_FMA;
3502     for (size_t input_height = 3; input_height < 5; input_height++) {
3503       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3504         DWConv2DMicrokernelTester()
3505           .input_width(input_width)
3506           .input_height(input_height)
3507           .kernel_height(3)
3508           .kernel_width(3)
3509           .subsampling(2)
3510           .padding_left(1)
3511           .padding_right(1)
3512           .padding_top(1)
3513           .padding_bottom(1)
3514           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4);
3515       }
3516     }
3517   }
3518 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4,padding_top_eq_1)3519   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4, padding_top_eq_1) {
3520     TEST_REQUIRES_ARM_NEON_FMA;
3521     for (size_t input_height = 2; input_height < 8; input_height++) {
3522       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3523         DWConv2DMicrokernelTester()
3524           .input_width(input_width)
3525           .input_height(input_height)
3526           .kernel_height(3)
3527           .kernel_width(3)
3528           .subsampling(2)
3529           .padding_left(1)
3530           .padding_right(1)
3531           .padding_top(0)
3532           .padding_bottom(1)
3533           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4);
3534       }
3535     }
3536   }
3537 #endif  // XNN_ARCH_ARM64
3538 
3539 
3540 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2,output_width_eq_4)3541   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2, output_width_eq_4) {
3542     TEST_REQUIRES_ARM_NEON_FMA;
3543     for (size_t input_width = 7; input_width < 9; input_width++) {
3544       DWConv2DMicrokernelTester()
3545         .input_width(input_width)
3546         .input_height(2)
3547         .kernel_height(3)
3548         .kernel_width(3)
3549         .subsampling(2)
3550         .padding_left(1)
3551         .padding_right(1)
3552         .padding_top(1)
3553         .padding_bottom(1)
3554         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc2);
3555     }
3556   }
3557 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2,output_width_div_4)3558   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2, output_width_div_4) {
3559     TEST_REQUIRES_ARM_NEON_FMA;
3560     for (size_t input_width = 16; input_width < 64; input_width += 8) {
3561       DWConv2DMicrokernelTester()
3562         .input_width(input_width)
3563         .input_height(2)
3564         .kernel_height(3)
3565         .kernel_width(3)
3566         .subsampling(2)
3567         .padding_left(1)
3568         .padding_right(1)
3569         .padding_top(1)
3570         .padding_bottom(1)
3571         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc2);
3572     }
3573   }
3574 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2,output_width_lt_4)3575   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2, output_width_lt_4) {
3576     TEST_REQUIRES_ARM_NEON_FMA;
3577     for (size_t input_width = 1; input_width < 7; input_width++) {
3578       DWConv2DMicrokernelTester()
3579         .input_width(8)
3580         .input_height(2)
3581         .kernel_height(3)
3582         .kernel_width(3)
3583         .subsampling(2)
3584         .padding_left(1)
3585         .padding_right(1)
3586         .padding_top(1)
3587         .padding_bottom(1)
3588         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc2);
3589     }
3590   }
3591 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2,output_width_gt_4)3592   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2, output_width_gt_4) {
3593     TEST_REQUIRES_ARM_NEON_FMA;
3594     for (size_t input_width = 9; input_width < 17; input_width++) {
3595       DWConv2DMicrokernelTester()
3596         .input_width(input_width)
3597         .input_height(2)
3598         .kernel_height(3)
3599         .kernel_width(3)
3600         .subsampling(2)
3601         .padding_left(1)
3602         .padding_right(1)
3603         .padding_top(1)
3604         .padding_bottom(1)
3605         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc2);
3606     }
3607   }
3608 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2,output_height_eq_1)3609   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2, output_height_eq_1) {
3610     TEST_REQUIRES_ARM_NEON_FMA;
3611     for (size_t input_height = 1; input_height < 3; input_height++) {
3612       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3613         DWConv2DMicrokernelTester()
3614           .input_width(input_width)
3615           .input_height(input_height)
3616           .kernel_height(3)
3617           .kernel_width(3)
3618           .subsampling(2)
3619           .padding_left(1)
3620           .padding_right(1)
3621           .padding_top(1)
3622           .padding_bottom(1)
3623           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc2);
3624       }
3625     }
3626   }
3627 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2,output_height_gt_1)3628   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2, output_height_gt_1) {
3629     TEST_REQUIRES_ARM_NEON_FMA;
3630     for (size_t input_height = 3; input_height < 5; input_height++) {
3631       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3632         DWConv2DMicrokernelTester()
3633           .input_width(input_width)
3634           .input_height(input_height)
3635           .kernel_height(3)
3636           .kernel_width(3)
3637           .subsampling(2)
3638           .padding_left(1)
3639           .padding_right(1)
3640           .padding_top(1)
3641           .padding_bottom(1)
3642           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc2);
3643       }
3644     }
3645   }
3646 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2,padding_top_eq_1)3647   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC2, padding_top_eq_1) {
3648     TEST_REQUIRES_ARM_NEON_FMA;
3649     for (size_t input_height = 2; input_height < 8; input_height++) {
3650       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3651         DWConv2DMicrokernelTester()
3652           .input_width(input_width)
3653           .input_height(input_height)
3654           .kernel_height(3)
3655           .kernel_width(3)
3656           .subsampling(2)
3657           .padding_left(1)
3658           .padding_right(1)
3659           .padding_top(0)
3660           .padding_bottom(1)
3661           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc2);
3662       }
3663     }
3664   }
3665 #endif  // XNN_ARCH_ARM64
3666 
3667 
3668 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3,output_width_eq_4)3669   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3, output_width_eq_4) {
3670     TEST_REQUIRES_ARM_NEON_FMA;
3671     for (size_t input_width = 7; input_width < 9; input_width++) {
3672       DWConv2DMicrokernelTester()
3673         .input_width(input_width)
3674         .input_height(2)
3675         .kernel_height(3)
3676         .kernel_width(3)
3677         .subsampling(2)
3678         .padding_left(1)
3679         .padding_right(1)
3680         .padding_top(1)
3681         .padding_bottom(1)
3682         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc3);
3683     }
3684   }
3685 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3,output_width_div_4)3686   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3, output_width_div_4) {
3687     TEST_REQUIRES_ARM_NEON_FMA;
3688     for (size_t input_width = 16; input_width < 64; input_width += 8) {
3689       DWConv2DMicrokernelTester()
3690         .input_width(input_width)
3691         .input_height(2)
3692         .kernel_height(3)
3693         .kernel_width(3)
3694         .subsampling(2)
3695         .padding_left(1)
3696         .padding_right(1)
3697         .padding_top(1)
3698         .padding_bottom(1)
3699         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc3);
3700     }
3701   }
3702 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3,output_width_lt_4)3703   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3, output_width_lt_4) {
3704     TEST_REQUIRES_ARM_NEON_FMA;
3705     for (size_t input_width = 1; input_width < 7; input_width++) {
3706       DWConv2DMicrokernelTester()
3707         .input_width(8)
3708         .input_height(2)
3709         .kernel_height(3)
3710         .kernel_width(3)
3711         .subsampling(2)
3712         .padding_left(1)
3713         .padding_right(1)
3714         .padding_top(1)
3715         .padding_bottom(1)
3716         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc3);
3717     }
3718   }
3719 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3,output_width_gt_4)3720   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3, output_width_gt_4) {
3721     TEST_REQUIRES_ARM_NEON_FMA;
3722     for (size_t input_width = 9; input_width < 17; input_width++) {
3723       DWConv2DMicrokernelTester()
3724         .input_width(input_width)
3725         .input_height(2)
3726         .kernel_height(3)
3727         .kernel_width(3)
3728         .subsampling(2)
3729         .padding_left(1)
3730         .padding_right(1)
3731         .padding_top(1)
3732         .padding_bottom(1)
3733         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc3);
3734     }
3735   }
3736 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3,output_height_eq_1)3737   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3, output_height_eq_1) {
3738     TEST_REQUIRES_ARM_NEON_FMA;
3739     for (size_t input_height = 1; input_height < 3; input_height++) {
3740       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3741         DWConv2DMicrokernelTester()
3742           .input_width(input_width)
3743           .input_height(input_height)
3744           .kernel_height(3)
3745           .kernel_width(3)
3746           .subsampling(2)
3747           .padding_left(1)
3748           .padding_right(1)
3749           .padding_top(1)
3750           .padding_bottom(1)
3751           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc3);
3752       }
3753     }
3754   }
3755 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3,output_height_gt_1)3756   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3, output_height_gt_1) {
3757     TEST_REQUIRES_ARM_NEON_FMA;
3758     for (size_t input_height = 3; input_height < 5; input_height++) {
3759       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3760         DWConv2DMicrokernelTester()
3761           .input_width(input_width)
3762           .input_height(input_height)
3763           .kernel_height(3)
3764           .kernel_width(3)
3765           .subsampling(2)
3766           .padding_left(1)
3767           .padding_right(1)
3768           .padding_top(1)
3769           .padding_bottom(1)
3770           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc3);
3771       }
3772     }
3773   }
3774 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3,padding_top_eq_1)3775   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC3, padding_top_eq_1) {
3776     TEST_REQUIRES_ARM_NEON_FMA;
3777     for (size_t input_height = 2; input_height < 8; input_height++) {
3778       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3779         DWConv2DMicrokernelTester()
3780           .input_width(input_width)
3781           .input_height(input_height)
3782           .kernel_height(3)
3783           .kernel_width(3)
3784           .subsampling(2)
3785           .padding_left(1)
3786           .padding_right(1)
3787           .padding_top(0)
3788           .padding_bottom(1)
3789           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc3);
3790       }
3791     }
3792   }
3793 #endif  // XNN_ARCH_ARM64
3794 
3795 
3796 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4,output_width_eq_4)3797   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4, output_width_eq_4) {
3798     TEST_REQUIRES_ARM_NEON_FMA;
3799     for (size_t input_width = 7; input_width < 9; input_width++) {
3800       DWConv2DMicrokernelTester()
3801         .input_width(input_width)
3802         .input_height(2)
3803         .kernel_height(3)
3804         .kernel_width(3)
3805         .subsampling(2)
3806         .padding_left(1)
3807         .padding_right(1)
3808         .padding_top(1)
3809         .padding_bottom(1)
3810         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc4);
3811     }
3812   }
3813 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4,output_width_div_4)3814   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4, output_width_div_4) {
3815     TEST_REQUIRES_ARM_NEON_FMA;
3816     for (size_t input_width = 16; input_width < 64; input_width += 8) {
3817       DWConv2DMicrokernelTester()
3818         .input_width(input_width)
3819         .input_height(2)
3820         .kernel_height(3)
3821         .kernel_width(3)
3822         .subsampling(2)
3823         .padding_left(1)
3824         .padding_right(1)
3825         .padding_top(1)
3826         .padding_bottom(1)
3827         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc4);
3828     }
3829   }
3830 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4,output_width_lt_4)3831   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4, output_width_lt_4) {
3832     TEST_REQUIRES_ARM_NEON_FMA;
3833     for (size_t input_width = 1; input_width < 7; input_width++) {
3834       DWConv2DMicrokernelTester()
3835         .input_width(8)
3836         .input_height(2)
3837         .kernel_height(3)
3838         .kernel_width(3)
3839         .subsampling(2)
3840         .padding_left(1)
3841         .padding_right(1)
3842         .padding_top(1)
3843         .padding_bottom(1)
3844         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc4);
3845     }
3846   }
3847 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4,output_width_gt_4)3848   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4, output_width_gt_4) {
3849     TEST_REQUIRES_ARM_NEON_FMA;
3850     for (size_t input_width = 9; input_width < 17; input_width++) {
3851       DWConv2DMicrokernelTester()
3852         .input_width(input_width)
3853         .input_height(2)
3854         .kernel_height(3)
3855         .kernel_width(3)
3856         .subsampling(2)
3857         .padding_left(1)
3858         .padding_right(1)
3859         .padding_top(1)
3860         .padding_bottom(1)
3861         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc4);
3862     }
3863   }
3864 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4,output_height_eq_1)3865   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4, output_height_eq_1) {
3866     TEST_REQUIRES_ARM_NEON_FMA;
3867     for (size_t input_height = 1; input_height < 3; input_height++) {
3868       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3869         DWConv2DMicrokernelTester()
3870           .input_width(input_width)
3871           .input_height(input_height)
3872           .kernel_height(3)
3873           .kernel_width(3)
3874           .subsampling(2)
3875           .padding_left(1)
3876           .padding_right(1)
3877           .padding_top(1)
3878           .padding_bottom(1)
3879           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc4);
3880       }
3881     }
3882   }
3883 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4,output_height_gt_1)3884   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4, output_height_gt_1) {
3885     TEST_REQUIRES_ARM_NEON_FMA;
3886     for (size_t input_height = 3; input_height < 5; input_height++) {
3887       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3888         DWConv2DMicrokernelTester()
3889           .input_width(input_width)
3890           .input_height(input_height)
3891           .kernel_height(3)
3892           .kernel_width(3)
3893           .subsampling(2)
3894           .padding_left(1)
3895           .padding_right(1)
3896           .padding_top(1)
3897           .padding_bottom(1)
3898           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc4);
3899       }
3900     }
3901   }
3902 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4,padding_top_eq_1)3903   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_1X4_ACC4, padding_top_eq_1) {
3904     TEST_REQUIRES_ARM_NEON_FMA;
3905     for (size_t input_height = 2; input_height < 8; input_height++) {
3906       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3907         DWConv2DMicrokernelTester()
3908           .input_width(input_width)
3909           .input_height(input_height)
3910           .kernel_height(3)
3911           .kernel_width(3)
3912           .subsampling(2)
3913           .padding_left(1)
3914           .padding_right(1)
3915           .padding_top(0)
3916           .padding_bottom(1)
3917           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_1x4_acc4);
3918       }
3919     }
3920   }
3921 #endif  // XNN_ARCH_ARM64
3922 
3923 
3924 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4,output_width_eq_4)3925   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4, output_width_eq_4) {
3926     TEST_REQUIRES_ARM_NEON_FMA;
3927     for (size_t input_width = 7; input_width < 9; input_width++) {
3928       DWConv2DMicrokernelTester()
3929         .input_width(input_width)
3930         .input_height(4)
3931         .kernel_height(3)
3932         .kernel_width(3)
3933         .subsampling(2)
3934         .padding_left(1)
3935         .padding_right(1)
3936         .padding_top(1)
3937         .padding_bottom(1)
3938         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4);
3939     }
3940   }
3941 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4,output_width_div_4)3942   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4, output_width_div_4) {
3943     TEST_REQUIRES_ARM_NEON_FMA;
3944     for (size_t input_width = 16; input_width < 64; input_width += 8) {
3945       DWConv2DMicrokernelTester()
3946         .input_width(input_width)
3947         .input_height(4)
3948         .kernel_height(3)
3949         .kernel_width(3)
3950         .subsampling(2)
3951         .padding_left(1)
3952         .padding_right(1)
3953         .padding_top(1)
3954         .padding_bottom(1)
3955         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4);
3956     }
3957   }
3958 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4,output_width_lt_4)3959   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4, output_width_lt_4) {
3960     TEST_REQUIRES_ARM_NEON_FMA;
3961     for (size_t input_width = 1; input_width < 7; input_width++) {
3962       DWConv2DMicrokernelTester()
3963         .input_width(8)
3964         .input_height(4)
3965         .kernel_height(3)
3966         .kernel_width(3)
3967         .subsampling(2)
3968         .padding_left(1)
3969         .padding_right(1)
3970         .padding_top(1)
3971         .padding_bottom(1)
3972         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4);
3973     }
3974   }
3975 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4,output_width_gt_4)3976   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4, output_width_gt_4) {
3977     TEST_REQUIRES_ARM_NEON_FMA;
3978     for (size_t input_width = 9; input_width < 17; input_width++) {
3979       DWConv2DMicrokernelTester()
3980         .input_width(input_width)
3981         .input_height(4)
3982         .kernel_height(3)
3983         .kernel_width(3)
3984         .subsampling(2)
3985         .padding_left(1)
3986         .padding_right(1)
3987         .padding_top(1)
3988         .padding_bottom(1)
3989         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4);
3990     }
3991   }
3992 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4,output_height_eq_2)3993   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4, output_height_eq_2) {
3994     TEST_REQUIRES_ARM_NEON_FMA;
3995     for (size_t input_height = 3; input_height < 5; input_height++) {
3996       for (size_t input_width = 1; input_width < 41; input_width += 7) {
3997         DWConv2DMicrokernelTester()
3998           .input_width(input_width)
3999           .input_height(input_height)
4000           .kernel_height(3)
4001           .kernel_width(3)
4002           .subsampling(2)
4003           .padding_left(1)
4004           .padding_right(1)
4005           .padding_top(1)
4006           .padding_bottom(1)
4007           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4);
4008       }
4009     }
4010   }
4011 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4,output_height_div_2)4012   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4, output_height_div_2) {
4013     TEST_REQUIRES_ARM_NEON_FMA;
4014     for (size_t input_height = 8; input_height < 32; input_height += 4) {
4015       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4016         DWConv2DMicrokernelTester()
4017           .input_width(input_width)
4018           .input_height(input_height)
4019           .kernel_height(3)
4020           .kernel_width(3)
4021           .subsampling(2)
4022           .padding_left(1)
4023           .padding_right(1)
4024           .padding_top(1)
4025           .padding_bottom(1)
4026           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4);
4027       }
4028     }
4029   }
4030 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4,output_height_lt_2)4031   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4, output_height_lt_2) {
4032     TEST_REQUIRES_ARM_NEON_FMA;
4033     for (size_t input_height = 1; input_height < 3; input_height++) {
4034       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4035         DWConv2DMicrokernelTester()
4036           .input_width(input_width)
4037           .input_height(input_height)
4038           .kernel_height(3)
4039           .kernel_width(3)
4040           .subsampling(2)
4041           .padding_left(1)
4042           .padding_right(1)
4043           .padding_top(1)
4044           .padding_bottom(1)
4045           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4);
4046       }
4047     }
4048   }
4049 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4,output_height_gt_2)4050   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4, output_height_gt_2) {
4051     TEST_REQUIRES_ARM_NEON_FMA;
4052     for (size_t input_height = 5; input_height < 9; input_height++) {
4053       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4054         DWConv2DMicrokernelTester()
4055           .input_width(input_width)
4056           .input_height(input_height)
4057           .kernel_height(3)
4058           .kernel_width(3)
4059           .subsampling(2)
4060           .padding_left(1)
4061           .padding_right(1)
4062           .padding_top(1)
4063           .padding_bottom(1)
4064           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4);
4065       }
4066     }
4067   }
4068 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4,padding_top_eq_1)4069   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4, padding_top_eq_1) {
4070     TEST_REQUIRES_ARM_NEON_FMA;
4071     for (size_t input_height = 2; input_height < 14; input_height++) {
4072       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4073         DWConv2DMicrokernelTester()
4074           .input_width(input_width)
4075           .input_height(input_height)
4076           .kernel_height(3)
4077           .kernel_width(3)
4078           .subsampling(2)
4079           .padding_left(1)
4080           .padding_right(1)
4081           .padding_top(0)
4082           .padding_bottom(1)
4083           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4);
4084       }
4085     }
4086   }
4087 #endif  // XNN_ARCH_ARM64
4088 
4089 
4090 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2,output_width_eq_4)4091   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2, output_width_eq_4) {
4092     TEST_REQUIRES_ARM_NEON_FMA;
4093     for (size_t input_width = 7; input_width < 9; input_width++) {
4094       DWConv2DMicrokernelTester()
4095         .input_width(input_width)
4096         .input_height(4)
4097         .kernel_height(3)
4098         .kernel_width(3)
4099         .subsampling(2)
4100         .padding_left(1)
4101         .padding_right(1)
4102         .padding_top(1)
4103         .padding_bottom(1)
4104         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4_acc2);
4105     }
4106   }
4107 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2,output_width_div_4)4108   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2, output_width_div_4) {
4109     TEST_REQUIRES_ARM_NEON_FMA;
4110     for (size_t input_width = 16; input_width < 64; input_width += 8) {
4111       DWConv2DMicrokernelTester()
4112         .input_width(input_width)
4113         .input_height(4)
4114         .kernel_height(3)
4115         .kernel_width(3)
4116         .subsampling(2)
4117         .padding_left(1)
4118         .padding_right(1)
4119         .padding_top(1)
4120         .padding_bottom(1)
4121         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4_acc2);
4122     }
4123   }
4124 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2,output_width_lt_4)4125   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2, output_width_lt_4) {
4126     TEST_REQUIRES_ARM_NEON_FMA;
4127     for (size_t input_width = 1; input_width < 7; input_width++) {
4128       DWConv2DMicrokernelTester()
4129         .input_width(8)
4130         .input_height(4)
4131         .kernel_height(3)
4132         .kernel_width(3)
4133         .subsampling(2)
4134         .padding_left(1)
4135         .padding_right(1)
4136         .padding_top(1)
4137         .padding_bottom(1)
4138         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4_acc2);
4139     }
4140   }
4141 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2,output_width_gt_4)4142   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2, output_width_gt_4) {
4143     TEST_REQUIRES_ARM_NEON_FMA;
4144     for (size_t input_width = 9; input_width < 17; input_width++) {
4145       DWConv2DMicrokernelTester()
4146         .input_width(input_width)
4147         .input_height(4)
4148         .kernel_height(3)
4149         .kernel_width(3)
4150         .subsampling(2)
4151         .padding_left(1)
4152         .padding_right(1)
4153         .padding_top(1)
4154         .padding_bottom(1)
4155         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4_acc2);
4156     }
4157   }
4158 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2,output_height_eq_2)4159   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2, output_height_eq_2) {
4160     TEST_REQUIRES_ARM_NEON_FMA;
4161     for (size_t input_height = 3; input_height < 5; input_height++) {
4162       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4163         DWConv2DMicrokernelTester()
4164           .input_width(input_width)
4165           .input_height(input_height)
4166           .kernel_height(3)
4167           .kernel_width(3)
4168           .subsampling(2)
4169           .padding_left(1)
4170           .padding_right(1)
4171           .padding_top(1)
4172           .padding_bottom(1)
4173           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4_acc2);
4174       }
4175     }
4176   }
4177 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2,output_height_div_2)4178   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2, output_height_div_2) {
4179     TEST_REQUIRES_ARM_NEON_FMA;
4180     for (size_t input_height = 8; input_height < 32; input_height += 4) {
4181       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4182         DWConv2DMicrokernelTester()
4183           .input_width(input_width)
4184           .input_height(input_height)
4185           .kernel_height(3)
4186           .kernel_width(3)
4187           .subsampling(2)
4188           .padding_left(1)
4189           .padding_right(1)
4190           .padding_top(1)
4191           .padding_bottom(1)
4192           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4_acc2);
4193       }
4194     }
4195   }
4196 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2,output_height_lt_2)4197   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2, output_height_lt_2) {
4198     TEST_REQUIRES_ARM_NEON_FMA;
4199     for (size_t input_height = 1; input_height < 3; input_height++) {
4200       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4201         DWConv2DMicrokernelTester()
4202           .input_width(input_width)
4203           .input_height(input_height)
4204           .kernel_height(3)
4205           .kernel_width(3)
4206           .subsampling(2)
4207           .padding_left(1)
4208           .padding_right(1)
4209           .padding_top(1)
4210           .padding_bottom(1)
4211           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4_acc2);
4212       }
4213     }
4214   }
4215 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2,output_height_gt_2)4216   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2, output_height_gt_2) {
4217     TEST_REQUIRES_ARM_NEON_FMA;
4218     for (size_t input_height = 5; input_height < 9; input_height++) {
4219       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4220         DWConv2DMicrokernelTester()
4221           .input_width(input_width)
4222           .input_height(input_height)
4223           .kernel_height(3)
4224           .kernel_width(3)
4225           .subsampling(2)
4226           .padding_left(1)
4227           .padding_right(1)
4228           .padding_top(1)
4229           .padding_bottom(1)
4230           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4_acc2);
4231       }
4232     }
4233   }
4234 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2,padding_top_eq_1)4235   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_2X4_ACC2, padding_top_eq_1) {
4236     TEST_REQUIRES_ARM_NEON_FMA;
4237     for (size_t input_height = 2; input_height < 14; input_height++) {
4238       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4239         DWConv2DMicrokernelTester()
4240           .input_width(input_width)
4241           .input_height(input_height)
4242           .kernel_height(3)
4243           .kernel_width(3)
4244           .subsampling(2)
4245           .padding_left(1)
4246           .padding_right(1)
4247           .padding_top(0)
4248           .padding_bottom(1)
4249           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_2x4_acc2);
4250       }
4251     }
4252   }
4253 #endif  // XNN_ARCH_ARM64
4254 
4255 
4256 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4,output_width_eq_4)4257   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4, output_width_eq_4) {
4258     TEST_REQUIRES_ARM_NEON_FMA;
4259     for (size_t input_width = 7; input_width < 9; input_width++) {
4260       DWConv2DMicrokernelTester()
4261         .input_width(input_width)
4262         .input_height(6)
4263         .kernel_height(3)
4264         .kernel_width(3)
4265         .subsampling(2)
4266         .padding_left(1)
4267         .padding_right(1)
4268         .padding_top(1)
4269         .padding_bottom(1)
4270         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_3x4);
4271     }
4272   }
4273 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4,output_width_div_4)4274   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4, output_width_div_4) {
4275     TEST_REQUIRES_ARM_NEON_FMA;
4276     for (size_t input_width = 16; input_width < 64; input_width += 8) {
4277       DWConv2DMicrokernelTester()
4278         .input_width(input_width)
4279         .input_height(6)
4280         .kernel_height(3)
4281         .kernel_width(3)
4282         .subsampling(2)
4283         .padding_left(1)
4284         .padding_right(1)
4285         .padding_top(1)
4286         .padding_bottom(1)
4287         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_3x4);
4288     }
4289   }
4290 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4,output_width_lt_4)4291   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4, output_width_lt_4) {
4292     TEST_REQUIRES_ARM_NEON_FMA;
4293     for (size_t input_width = 1; input_width < 7; input_width++) {
4294       DWConv2DMicrokernelTester()
4295         .input_width(8)
4296         .input_height(6)
4297         .kernel_height(3)
4298         .kernel_width(3)
4299         .subsampling(2)
4300         .padding_left(1)
4301         .padding_right(1)
4302         .padding_top(1)
4303         .padding_bottom(1)
4304         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_3x4);
4305     }
4306   }
4307 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4,output_width_gt_4)4308   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4, output_width_gt_4) {
4309     TEST_REQUIRES_ARM_NEON_FMA;
4310     for (size_t input_width = 9; input_width < 17; input_width++) {
4311       DWConv2DMicrokernelTester()
4312         .input_width(input_width)
4313         .input_height(6)
4314         .kernel_height(3)
4315         .kernel_width(3)
4316         .subsampling(2)
4317         .padding_left(1)
4318         .padding_right(1)
4319         .padding_top(1)
4320         .padding_bottom(1)
4321         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_3x4);
4322     }
4323   }
4324 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4,output_height_eq_3)4325   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4, output_height_eq_3) {
4326     TEST_REQUIRES_ARM_NEON_FMA;
4327     for (size_t input_height = 5; input_height < 7; input_height++) {
4328       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4329         DWConv2DMicrokernelTester()
4330           .input_width(input_width)
4331           .input_height(input_height)
4332           .kernel_height(3)
4333           .kernel_width(3)
4334           .subsampling(2)
4335           .padding_left(1)
4336           .padding_right(1)
4337           .padding_top(1)
4338           .padding_bottom(1)
4339           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_3x4);
4340       }
4341     }
4342   }
4343 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4,output_height_div_3)4344   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4, output_height_div_3) {
4345     TEST_REQUIRES_ARM_NEON_FMA;
4346     for (size_t input_height = 12; input_height < 48; input_height += 6) {
4347       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4348         DWConv2DMicrokernelTester()
4349           .input_width(input_width)
4350           .input_height(input_height)
4351           .kernel_height(3)
4352           .kernel_width(3)
4353           .subsampling(2)
4354           .padding_left(1)
4355           .padding_right(1)
4356           .padding_top(1)
4357           .padding_bottom(1)
4358           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_3x4);
4359       }
4360     }
4361   }
4362 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4,output_height_lt_3)4363   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4, output_height_lt_3) {
4364     TEST_REQUIRES_ARM_NEON_FMA;
4365     for (size_t input_height = 1; input_height < 5; input_height++) {
4366       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4367         DWConv2DMicrokernelTester()
4368           .input_width(input_width)
4369           .input_height(input_height)
4370           .kernel_height(3)
4371           .kernel_width(3)
4372           .subsampling(2)
4373           .padding_left(1)
4374           .padding_right(1)
4375           .padding_top(1)
4376           .padding_bottom(1)
4377           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_3x4);
4378       }
4379     }
4380   }
4381 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4,output_height_gt_3)4382   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4, output_height_gt_3) {
4383     TEST_REQUIRES_ARM_NEON_FMA;
4384     for (size_t input_height = 7; input_height < 13; input_height++) {
4385       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4386         DWConv2DMicrokernelTester()
4387           .input_width(input_width)
4388           .input_height(input_height)
4389           .kernel_height(3)
4390           .kernel_width(3)
4391           .subsampling(2)
4392           .padding_left(1)
4393           .padding_right(1)
4394           .padding_top(1)
4395           .padding_bottom(1)
4396           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_3x4);
4397       }
4398     }
4399   }
4400 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4,padding_top_eq_1)4401   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_3X4, padding_top_eq_1) {
4402     TEST_REQUIRES_ARM_NEON_FMA;
4403     for (size_t input_height = 2; input_height < 20; input_height++) {
4404       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4405         DWConv2DMicrokernelTester()
4406           .input_width(input_width)
4407           .input_height(input_height)
4408           .kernel_height(3)
4409           .kernel_width(3)
4410           .subsampling(2)
4411           .padding_left(1)
4412           .padding_right(1)
4413           .padding_top(0)
4414           .padding_bottom(1)
4415           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_3x4);
4416       }
4417     }
4418   }
4419 #endif  // XNN_ARCH_ARM64
4420 
4421 
4422 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4,output_width_eq_4)4423   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4, output_width_eq_4) {
4424     TEST_REQUIRES_ARM_NEON_FMA;
4425     for (size_t input_width = 7; input_width < 9; input_width++) {
4426       DWConv2DMicrokernelTester()
4427         .input_width(input_width)
4428         .input_height(8)
4429         .kernel_height(3)
4430         .kernel_width(3)
4431         .subsampling(2)
4432         .padding_left(1)
4433         .padding_right(1)
4434         .padding_top(1)
4435         .padding_bottom(1)
4436         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_4x4);
4437     }
4438   }
4439 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4,output_width_div_4)4440   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4, output_width_div_4) {
4441     TEST_REQUIRES_ARM_NEON_FMA;
4442     for (size_t input_width = 16; input_width < 64; input_width += 8) {
4443       DWConv2DMicrokernelTester()
4444         .input_width(input_width)
4445         .input_height(8)
4446         .kernel_height(3)
4447         .kernel_width(3)
4448         .subsampling(2)
4449         .padding_left(1)
4450         .padding_right(1)
4451         .padding_top(1)
4452         .padding_bottom(1)
4453         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_4x4);
4454     }
4455   }
4456 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4,output_width_lt_4)4457   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4, output_width_lt_4) {
4458     TEST_REQUIRES_ARM_NEON_FMA;
4459     for (size_t input_width = 1; input_width < 7; input_width++) {
4460       DWConv2DMicrokernelTester()
4461         .input_width(8)
4462         .input_height(8)
4463         .kernel_height(3)
4464         .kernel_width(3)
4465         .subsampling(2)
4466         .padding_left(1)
4467         .padding_right(1)
4468         .padding_top(1)
4469         .padding_bottom(1)
4470         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_4x4);
4471     }
4472   }
4473 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4,output_width_gt_4)4474   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4, output_width_gt_4) {
4475     TEST_REQUIRES_ARM_NEON_FMA;
4476     for (size_t input_width = 9; input_width < 17; input_width++) {
4477       DWConv2DMicrokernelTester()
4478         .input_width(input_width)
4479         .input_height(8)
4480         .kernel_height(3)
4481         .kernel_width(3)
4482         .subsampling(2)
4483         .padding_left(1)
4484         .padding_right(1)
4485         .padding_top(1)
4486         .padding_bottom(1)
4487         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_4x4);
4488     }
4489   }
4490 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4,output_height_eq_4)4491   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4, output_height_eq_4) {
4492     TEST_REQUIRES_ARM_NEON_FMA;
4493     for (size_t input_height = 7; input_height < 9; input_height++) {
4494       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4495         DWConv2DMicrokernelTester()
4496           .input_width(input_width)
4497           .input_height(input_height)
4498           .kernel_height(3)
4499           .kernel_width(3)
4500           .subsampling(2)
4501           .padding_left(1)
4502           .padding_right(1)
4503           .padding_top(1)
4504           .padding_bottom(1)
4505           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_4x4);
4506       }
4507     }
4508   }
4509 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4,output_height_div_4)4510   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4, output_height_div_4) {
4511     TEST_REQUIRES_ARM_NEON_FMA;
4512     for (size_t input_height = 16; input_height < 64; input_height += 8) {
4513       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4514         DWConv2DMicrokernelTester()
4515           .input_width(input_width)
4516           .input_height(input_height)
4517           .kernel_height(3)
4518           .kernel_width(3)
4519           .subsampling(2)
4520           .padding_left(1)
4521           .padding_right(1)
4522           .padding_top(1)
4523           .padding_bottom(1)
4524           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_4x4);
4525       }
4526     }
4527   }
4528 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4,output_height_lt_4)4529   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4, output_height_lt_4) {
4530     TEST_REQUIRES_ARM_NEON_FMA;
4531     for (size_t input_height = 1; input_height < 7; input_height++) {
4532       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4533         DWConv2DMicrokernelTester()
4534           .input_width(input_width)
4535           .input_height(input_height)
4536           .kernel_height(3)
4537           .kernel_width(3)
4538           .subsampling(2)
4539           .padding_left(1)
4540           .padding_right(1)
4541           .padding_top(1)
4542           .padding_bottom(1)
4543           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_4x4);
4544       }
4545     }
4546   }
4547 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4,output_height_gt_4)4548   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4, output_height_gt_4) {
4549     TEST_REQUIRES_ARM_NEON_FMA;
4550     for (size_t input_height = 9; input_height < 17; input_height++) {
4551       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4552         DWConv2DMicrokernelTester()
4553           .input_width(input_width)
4554           .input_height(input_height)
4555           .kernel_height(3)
4556           .kernel_width(3)
4557           .subsampling(2)
4558           .padding_left(1)
4559           .padding_right(1)
4560           .padding_top(1)
4561           .padding_bottom(1)
4562           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_4x4);
4563       }
4564     }
4565   }
4566 
TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4,padding_top_eq_1)4567   TEST(F32_DWCONV2D_CHW_3X3S2P1__NEONFMA_4X4, padding_top_eq_1) {
4568     TEST_REQUIRES_ARM_NEON_FMA;
4569     for (size_t input_height = 2; input_height < 26; input_height++) {
4570       for (size_t input_width = 1; input_width < 41; input_width += 7) {
4571         DWConv2DMicrokernelTester()
4572           .input_width(input_width)
4573           .input_height(input_height)
4574           .kernel_height(3)
4575           .kernel_width(3)
4576           .subsampling(2)
4577           .padding_left(1)
4578           .padding_right(1)
4579           .padding_top(0)
4580           .padding_bottom(1)
4581           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__neonfma_4x4);
4582       }
4583     }
4584   }
4585 #endif  // XNN_ARCH_ARM64
4586 
4587 
4588 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4,output_width_eq_4)4589   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4, output_width_eq_4) {
4590     TEST_REQUIRES_ARM_NEON;
4591     DWConv2DMicrokernelTester()
4592       .input_width(4)
4593       .input_height(1)
4594       .kernel_height(5)
4595       .kernel_width(5)
4596       .subsampling(1)
4597       .padding_left(2)
4598       .padding_right(2)
4599       .padding_top(2)
4600       .padding_bottom(2)
4601       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4);
4602   }
4603 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4,output_width_div_4)4604   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4, output_width_div_4) {
4605     TEST_REQUIRES_ARM_NEON;
4606     for (size_t input_width = 8; input_width < 32; input_width += 4) {
4607       DWConv2DMicrokernelTester()
4608         .input_width(input_width)
4609         .input_height(1)
4610         .kernel_height(5)
4611         .kernel_width(5)
4612         .subsampling(1)
4613         .padding_left(2)
4614         .padding_right(2)
4615         .padding_top(2)
4616         .padding_bottom(2)
4617         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4);
4618     }
4619   }
4620 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4,output_width_lt_4)4621   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4, output_width_lt_4) {
4622     TEST_REQUIRES_ARM_NEON;
4623     for (size_t input_width = 1; input_width < 4; input_width++) {
4624       DWConv2DMicrokernelTester()
4625         .input_width(4)
4626         .input_height(1)
4627         .kernel_height(5)
4628         .kernel_width(5)
4629         .subsampling(1)
4630         .padding_left(2)
4631         .padding_right(2)
4632         .padding_top(2)
4633         .padding_bottom(2)
4634         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4);
4635     }
4636   }
4637 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4,output_width_gt_4)4638   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4, output_width_gt_4) {
4639     TEST_REQUIRES_ARM_NEON;
4640     for (size_t input_width = 5; input_width < 9; input_width++) {
4641       DWConv2DMicrokernelTester()
4642         .input_width(input_width)
4643         .input_height(1)
4644         .kernel_height(5)
4645         .kernel_width(5)
4646         .subsampling(1)
4647         .padding_left(2)
4648         .padding_right(2)
4649         .padding_top(2)
4650         .padding_bottom(2)
4651         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4);
4652     }
4653   }
4654 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4,output_height_gt_1)4655   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4, output_height_gt_1) {
4656     TEST_REQUIRES_ARM_NEON;
4657     for (size_t input_height = 2; input_height < 3; input_height++) {
4658       for (size_t input_width = 1; input_width < 21; input_width += 3) {
4659         DWConv2DMicrokernelTester()
4660           .input_width(input_width)
4661           .input_height(input_height)
4662           .kernel_height(5)
4663           .kernel_width(5)
4664           .subsampling(1)
4665           .padding_left(2)
4666           .padding_right(2)
4667           .padding_top(2)
4668           .padding_bottom(2)
4669           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4);
4670       }
4671     }
4672   }
4673 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
4674 
4675 
4676 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC2,output_width_eq_4)4677   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC2, output_width_eq_4) {
4678     TEST_REQUIRES_ARM_NEON;
4679     DWConv2DMicrokernelTester()
4680       .input_width(4)
4681       .input_height(1)
4682       .kernel_height(5)
4683       .kernel_width(5)
4684       .subsampling(1)
4685       .padding_left(2)
4686       .padding_right(2)
4687       .padding_top(2)
4688       .padding_bottom(2)
4689       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc2);
4690   }
4691 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC2,output_width_div_4)4692   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC2, output_width_div_4) {
4693     TEST_REQUIRES_ARM_NEON;
4694     for (size_t input_width = 8; input_width < 32; input_width += 4) {
4695       DWConv2DMicrokernelTester()
4696         .input_width(input_width)
4697         .input_height(1)
4698         .kernel_height(5)
4699         .kernel_width(5)
4700         .subsampling(1)
4701         .padding_left(2)
4702         .padding_right(2)
4703         .padding_top(2)
4704         .padding_bottom(2)
4705         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc2);
4706     }
4707   }
4708 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC2,output_width_lt_4)4709   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC2, output_width_lt_4) {
4710     TEST_REQUIRES_ARM_NEON;
4711     for (size_t input_width = 1; input_width < 4; input_width++) {
4712       DWConv2DMicrokernelTester()
4713         .input_width(4)
4714         .input_height(1)
4715         .kernel_height(5)
4716         .kernel_width(5)
4717         .subsampling(1)
4718         .padding_left(2)
4719         .padding_right(2)
4720         .padding_top(2)
4721         .padding_bottom(2)
4722         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc2);
4723     }
4724   }
4725 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC2,output_width_gt_4)4726   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC2, output_width_gt_4) {
4727     TEST_REQUIRES_ARM_NEON;
4728     for (size_t input_width = 5; input_width < 9; input_width++) {
4729       DWConv2DMicrokernelTester()
4730         .input_width(input_width)
4731         .input_height(1)
4732         .kernel_height(5)
4733         .kernel_width(5)
4734         .subsampling(1)
4735         .padding_left(2)
4736         .padding_right(2)
4737         .padding_top(2)
4738         .padding_bottom(2)
4739         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc2);
4740     }
4741   }
4742 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC2,output_height_gt_1)4743   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC2, output_height_gt_1) {
4744     TEST_REQUIRES_ARM_NEON;
4745     for (size_t input_height = 2; input_height < 3; input_height++) {
4746       for (size_t input_width = 1; input_width < 21; input_width += 3) {
4747         DWConv2DMicrokernelTester()
4748           .input_width(input_width)
4749           .input_height(input_height)
4750           .kernel_height(5)
4751           .kernel_width(5)
4752           .subsampling(1)
4753           .padding_left(2)
4754           .padding_right(2)
4755           .padding_top(2)
4756           .padding_bottom(2)
4757           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc2);
4758       }
4759     }
4760   }
4761 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
4762 
4763 
4764 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC3,output_width_eq_4)4765   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC3, output_width_eq_4) {
4766     TEST_REQUIRES_ARM_NEON;
4767     DWConv2DMicrokernelTester()
4768       .input_width(4)
4769       .input_height(1)
4770       .kernel_height(5)
4771       .kernel_width(5)
4772       .subsampling(1)
4773       .padding_left(2)
4774       .padding_right(2)
4775       .padding_top(2)
4776       .padding_bottom(2)
4777       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc3);
4778   }
4779 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC3,output_width_div_4)4780   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC3, output_width_div_4) {
4781     TEST_REQUIRES_ARM_NEON;
4782     for (size_t input_width = 8; input_width < 32; input_width += 4) {
4783       DWConv2DMicrokernelTester()
4784         .input_width(input_width)
4785         .input_height(1)
4786         .kernel_height(5)
4787         .kernel_width(5)
4788         .subsampling(1)
4789         .padding_left(2)
4790         .padding_right(2)
4791         .padding_top(2)
4792         .padding_bottom(2)
4793         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc3);
4794     }
4795   }
4796 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC3,output_width_lt_4)4797   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC3, output_width_lt_4) {
4798     TEST_REQUIRES_ARM_NEON;
4799     for (size_t input_width = 1; input_width < 4; input_width++) {
4800       DWConv2DMicrokernelTester()
4801         .input_width(4)
4802         .input_height(1)
4803         .kernel_height(5)
4804         .kernel_width(5)
4805         .subsampling(1)
4806         .padding_left(2)
4807         .padding_right(2)
4808         .padding_top(2)
4809         .padding_bottom(2)
4810         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc3);
4811     }
4812   }
4813 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC3,output_width_gt_4)4814   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC3, output_width_gt_4) {
4815     TEST_REQUIRES_ARM_NEON;
4816     for (size_t input_width = 5; input_width < 9; input_width++) {
4817       DWConv2DMicrokernelTester()
4818         .input_width(input_width)
4819         .input_height(1)
4820         .kernel_height(5)
4821         .kernel_width(5)
4822         .subsampling(1)
4823         .padding_left(2)
4824         .padding_right(2)
4825         .padding_top(2)
4826         .padding_bottom(2)
4827         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc3);
4828     }
4829   }
4830 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC3,output_height_gt_1)4831   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC3, output_height_gt_1) {
4832     TEST_REQUIRES_ARM_NEON;
4833     for (size_t input_height = 2; input_height < 3; input_height++) {
4834       for (size_t input_width = 1; input_width < 21; input_width += 3) {
4835         DWConv2DMicrokernelTester()
4836           .input_width(input_width)
4837           .input_height(input_height)
4838           .kernel_height(5)
4839           .kernel_width(5)
4840           .subsampling(1)
4841           .padding_left(2)
4842           .padding_right(2)
4843           .padding_top(2)
4844           .padding_bottom(2)
4845           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc3);
4846       }
4847     }
4848   }
4849 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
4850 
4851 
4852 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC4,output_width_eq_4)4853   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC4, output_width_eq_4) {
4854     TEST_REQUIRES_ARM_NEON;
4855     DWConv2DMicrokernelTester()
4856       .input_width(4)
4857       .input_height(1)
4858       .kernel_height(5)
4859       .kernel_width(5)
4860       .subsampling(1)
4861       .padding_left(2)
4862       .padding_right(2)
4863       .padding_top(2)
4864       .padding_bottom(2)
4865       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc4);
4866   }
4867 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC4,output_width_div_4)4868   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC4, output_width_div_4) {
4869     TEST_REQUIRES_ARM_NEON;
4870     for (size_t input_width = 8; input_width < 32; input_width += 4) {
4871       DWConv2DMicrokernelTester()
4872         .input_width(input_width)
4873         .input_height(1)
4874         .kernel_height(5)
4875         .kernel_width(5)
4876         .subsampling(1)
4877         .padding_left(2)
4878         .padding_right(2)
4879         .padding_top(2)
4880         .padding_bottom(2)
4881         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc4);
4882     }
4883   }
4884 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC4,output_width_lt_4)4885   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC4, output_width_lt_4) {
4886     TEST_REQUIRES_ARM_NEON;
4887     for (size_t input_width = 1; input_width < 4; input_width++) {
4888       DWConv2DMicrokernelTester()
4889         .input_width(4)
4890         .input_height(1)
4891         .kernel_height(5)
4892         .kernel_width(5)
4893         .subsampling(1)
4894         .padding_left(2)
4895         .padding_right(2)
4896         .padding_top(2)
4897         .padding_bottom(2)
4898         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc4);
4899     }
4900   }
4901 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC4,output_width_gt_4)4902   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC4, output_width_gt_4) {
4903     TEST_REQUIRES_ARM_NEON;
4904     for (size_t input_width = 5; input_width < 9; input_width++) {
4905       DWConv2DMicrokernelTester()
4906         .input_width(input_width)
4907         .input_height(1)
4908         .kernel_height(5)
4909         .kernel_width(5)
4910         .subsampling(1)
4911         .padding_left(2)
4912         .padding_right(2)
4913         .padding_top(2)
4914         .padding_bottom(2)
4915         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc4);
4916     }
4917   }
4918 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC4,output_height_gt_1)4919   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC4, output_height_gt_1) {
4920     TEST_REQUIRES_ARM_NEON;
4921     for (size_t input_height = 2; input_height < 3; input_height++) {
4922       for (size_t input_width = 1; input_width < 21; input_width += 3) {
4923         DWConv2DMicrokernelTester()
4924           .input_width(input_width)
4925           .input_height(input_height)
4926           .kernel_height(5)
4927           .kernel_width(5)
4928           .subsampling(1)
4929           .padding_left(2)
4930           .padding_right(2)
4931           .padding_top(2)
4932           .padding_bottom(2)
4933           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc4);
4934       }
4935     }
4936   }
4937 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
4938 
4939 
4940 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC5,output_width_eq_4)4941   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC5, output_width_eq_4) {
4942     TEST_REQUIRES_ARM_NEON;
4943     DWConv2DMicrokernelTester()
4944       .input_width(4)
4945       .input_height(1)
4946       .kernel_height(5)
4947       .kernel_width(5)
4948       .subsampling(1)
4949       .padding_left(2)
4950       .padding_right(2)
4951       .padding_top(2)
4952       .padding_bottom(2)
4953       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc5);
4954   }
4955 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC5,output_width_div_4)4956   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC5, output_width_div_4) {
4957     TEST_REQUIRES_ARM_NEON;
4958     for (size_t input_width = 8; input_width < 32; input_width += 4) {
4959       DWConv2DMicrokernelTester()
4960         .input_width(input_width)
4961         .input_height(1)
4962         .kernel_height(5)
4963         .kernel_width(5)
4964         .subsampling(1)
4965         .padding_left(2)
4966         .padding_right(2)
4967         .padding_top(2)
4968         .padding_bottom(2)
4969         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc5);
4970     }
4971   }
4972 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC5,output_width_lt_4)4973   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC5, output_width_lt_4) {
4974     TEST_REQUIRES_ARM_NEON;
4975     for (size_t input_width = 1; input_width < 4; input_width++) {
4976       DWConv2DMicrokernelTester()
4977         .input_width(4)
4978         .input_height(1)
4979         .kernel_height(5)
4980         .kernel_width(5)
4981         .subsampling(1)
4982         .padding_left(2)
4983         .padding_right(2)
4984         .padding_top(2)
4985         .padding_bottom(2)
4986         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc5);
4987     }
4988   }
4989 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC5,output_width_gt_4)4990   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC5, output_width_gt_4) {
4991     TEST_REQUIRES_ARM_NEON;
4992     for (size_t input_width = 5; input_width < 9; input_width++) {
4993       DWConv2DMicrokernelTester()
4994         .input_width(input_width)
4995         .input_height(1)
4996         .kernel_height(5)
4997         .kernel_width(5)
4998         .subsampling(1)
4999         .padding_left(2)
5000         .padding_right(2)
5001         .padding_top(2)
5002         .padding_bottom(2)
5003         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc5);
5004     }
5005   }
5006 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC5,output_height_gt_1)5007   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_1X4_ACC5, output_height_gt_1) {
5008     TEST_REQUIRES_ARM_NEON;
5009     for (size_t input_height = 2; input_height < 3; input_height++) {
5010       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5011         DWConv2DMicrokernelTester()
5012           .input_width(input_width)
5013           .input_height(input_height)
5014           .kernel_height(5)
5015           .kernel_width(5)
5016           .subsampling(1)
5017           .padding_left(2)
5018           .padding_right(2)
5019           .padding_top(2)
5020           .padding_bottom(2)
5021           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_1x4_acc5);
5022       }
5023     }
5024   }
5025 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5026 
5027 
5028 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4,output_width_eq_4)5029   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4, output_width_eq_4) {
5030     TEST_REQUIRES_ARM_NEON;
5031     DWConv2DMicrokernelTester()
5032       .input_width(4)
5033       .input_height(2)
5034       .kernel_height(5)
5035       .kernel_width(5)
5036       .subsampling(1)
5037       .padding_left(2)
5038       .padding_right(2)
5039       .padding_top(2)
5040       .padding_bottom(2)
5041       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4);
5042   }
5043 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4,output_width_div_4)5044   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4, output_width_div_4) {
5045     TEST_REQUIRES_ARM_NEON;
5046     for (size_t input_width = 8; input_width < 32; input_width += 4) {
5047       DWConv2DMicrokernelTester()
5048         .input_width(input_width)
5049         .input_height(2)
5050         .kernel_height(5)
5051         .kernel_width(5)
5052         .subsampling(1)
5053         .padding_left(2)
5054         .padding_right(2)
5055         .padding_top(2)
5056         .padding_bottom(2)
5057         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4);
5058     }
5059   }
5060 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4,output_width_lt_4)5061   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4, output_width_lt_4) {
5062     TEST_REQUIRES_ARM_NEON;
5063     for (size_t input_width = 1; input_width < 4; input_width++) {
5064       DWConv2DMicrokernelTester()
5065         .input_width(4)
5066         .input_height(2)
5067         .kernel_height(5)
5068         .kernel_width(5)
5069         .subsampling(1)
5070         .padding_left(2)
5071         .padding_right(2)
5072         .padding_top(2)
5073         .padding_bottom(2)
5074         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4);
5075     }
5076   }
5077 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4,output_width_gt_4)5078   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4, output_width_gt_4) {
5079     TEST_REQUIRES_ARM_NEON;
5080     for (size_t input_width = 5; input_width < 9; input_width++) {
5081       DWConv2DMicrokernelTester()
5082         .input_width(input_width)
5083         .input_height(2)
5084         .kernel_height(5)
5085         .kernel_width(5)
5086         .subsampling(1)
5087         .padding_left(2)
5088         .padding_right(2)
5089         .padding_top(2)
5090         .padding_bottom(2)
5091         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4);
5092     }
5093   }
5094 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4,output_height_div_2)5095   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4, output_height_div_2) {
5096     TEST_REQUIRES_ARM_NEON;
5097     for (size_t input_height = 4; input_height < 16; input_height += 2) {
5098       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5099         DWConv2DMicrokernelTester()
5100           .input_width(input_width)
5101           .input_height(input_height)
5102           .kernel_height(5)
5103           .kernel_width(5)
5104           .subsampling(1)
5105           .padding_left(2)
5106           .padding_right(2)
5107           .padding_top(2)
5108           .padding_bottom(2)
5109           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4);
5110       }
5111     }
5112   }
5113 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4,output_height_lt_2)5114   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4, output_height_lt_2) {
5115     TEST_REQUIRES_ARM_NEON;
5116     for (size_t input_height = 1; input_height < 2; input_height++) {
5117       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5118         DWConv2DMicrokernelTester()
5119           .input_width(input_width)
5120           .input_height(input_height)
5121           .kernel_height(5)
5122           .kernel_width(5)
5123           .subsampling(1)
5124           .padding_left(2)
5125           .padding_right(2)
5126           .padding_top(2)
5127           .padding_bottom(2)
5128           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4);
5129       }
5130     }
5131   }
5132 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4,output_height_gt_2)5133   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4, output_height_gt_2) {
5134     TEST_REQUIRES_ARM_NEON;
5135     for (size_t input_height = 3; input_height < 5; input_height++) {
5136       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5137         DWConv2DMicrokernelTester()
5138           .input_width(input_width)
5139           .input_height(input_height)
5140           .kernel_height(5)
5141           .kernel_width(5)
5142           .subsampling(1)
5143           .padding_left(2)
5144           .padding_right(2)
5145           .padding_top(2)
5146           .padding_bottom(2)
5147           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4);
5148       }
5149     }
5150   }
5151 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5152 
5153 
5154 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2,output_width_eq_4)5155   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2, output_width_eq_4) {
5156     TEST_REQUIRES_ARM_NEON;
5157     DWConv2DMicrokernelTester()
5158       .input_width(4)
5159       .input_height(2)
5160       .kernel_height(5)
5161       .kernel_width(5)
5162       .subsampling(1)
5163       .padding_left(2)
5164       .padding_right(2)
5165       .padding_top(2)
5166       .padding_bottom(2)
5167       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc2);
5168   }
5169 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2,output_width_div_4)5170   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2, output_width_div_4) {
5171     TEST_REQUIRES_ARM_NEON;
5172     for (size_t input_width = 8; input_width < 32; input_width += 4) {
5173       DWConv2DMicrokernelTester()
5174         .input_width(input_width)
5175         .input_height(2)
5176         .kernel_height(5)
5177         .kernel_width(5)
5178         .subsampling(1)
5179         .padding_left(2)
5180         .padding_right(2)
5181         .padding_top(2)
5182         .padding_bottom(2)
5183         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc2);
5184     }
5185   }
5186 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2,output_width_lt_4)5187   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2, output_width_lt_4) {
5188     TEST_REQUIRES_ARM_NEON;
5189     for (size_t input_width = 1; input_width < 4; input_width++) {
5190       DWConv2DMicrokernelTester()
5191         .input_width(4)
5192         .input_height(2)
5193         .kernel_height(5)
5194         .kernel_width(5)
5195         .subsampling(1)
5196         .padding_left(2)
5197         .padding_right(2)
5198         .padding_top(2)
5199         .padding_bottom(2)
5200         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc2);
5201     }
5202   }
5203 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2,output_width_gt_4)5204   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2, output_width_gt_4) {
5205     TEST_REQUIRES_ARM_NEON;
5206     for (size_t input_width = 5; input_width < 9; input_width++) {
5207       DWConv2DMicrokernelTester()
5208         .input_width(input_width)
5209         .input_height(2)
5210         .kernel_height(5)
5211         .kernel_width(5)
5212         .subsampling(1)
5213         .padding_left(2)
5214         .padding_right(2)
5215         .padding_top(2)
5216         .padding_bottom(2)
5217         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc2);
5218     }
5219   }
5220 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2,output_height_div_2)5221   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2, output_height_div_2) {
5222     TEST_REQUIRES_ARM_NEON;
5223     for (size_t input_height = 4; input_height < 16; input_height += 2) {
5224       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5225         DWConv2DMicrokernelTester()
5226           .input_width(input_width)
5227           .input_height(input_height)
5228           .kernel_height(5)
5229           .kernel_width(5)
5230           .subsampling(1)
5231           .padding_left(2)
5232           .padding_right(2)
5233           .padding_top(2)
5234           .padding_bottom(2)
5235           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc2);
5236       }
5237     }
5238   }
5239 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2,output_height_lt_2)5240   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2, output_height_lt_2) {
5241     TEST_REQUIRES_ARM_NEON;
5242     for (size_t input_height = 1; input_height < 2; input_height++) {
5243       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5244         DWConv2DMicrokernelTester()
5245           .input_width(input_width)
5246           .input_height(input_height)
5247           .kernel_height(5)
5248           .kernel_width(5)
5249           .subsampling(1)
5250           .padding_left(2)
5251           .padding_right(2)
5252           .padding_top(2)
5253           .padding_bottom(2)
5254           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc2);
5255       }
5256     }
5257   }
5258 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2,output_height_gt_2)5259   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC2, output_height_gt_2) {
5260     TEST_REQUIRES_ARM_NEON;
5261     for (size_t input_height = 3; input_height < 5; input_height++) {
5262       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5263         DWConv2DMicrokernelTester()
5264           .input_width(input_width)
5265           .input_height(input_height)
5266           .kernel_height(5)
5267           .kernel_width(5)
5268           .subsampling(1)
5269           .padding_left(2)
5270           .padding_right(2)
5271           .padding_top(2)
5272           .padding_bottom(2)
5273           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc2);
5274       }
5275     }
5276   }
5277 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5278 
5279 
5280 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3,output_width_eq_4)5281   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3, output_width_eq_4) {
5282     TEST_REQUIRES_ARM_NEON;
5283     DWConv2DMicrokernelTester()
5284       .input_width(4)
5285       .input_height(2)
5286       .kernel_height(5)
5287       .kernel_width(5)
5288       .subsampling(1)
5289       .padding_left(2)
5290       .padding_right(2)
5291       .padding_top(2)
5292       .padding_bottom(2)
5293       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc3);
5294   }
5295 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3,output_width_div_4)5296   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3, output_width_div_4) {
5297     TEST_REQUIRES_ARM_NEON;
5298     for (size_t input_width = 8; input_width < 32; input_width += 4) {
5299       DWConv2DMicrokernelTester()
5300         .input_width(input_width)
5301         .input_height(2)
5302         .kernel_height(5)
5303         .kernel_width(5)
5304         .subsampling(1)
5305         .padding_left(2)
5306         .padding_right(2)
5307         .padding_top(2)
5308         .padding_bottom(2)
5309         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc3);
5310     }
5311   }
5312 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3,output_width_lt_4)5313   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3, output_width_lt_4) {
5314     TEST_REQUIRES_ARM_NEON;
5315     for (size_t input_width = 1; input_width < 4; input_width++) {
5316       DWConv2DMicrokernelTester()
5317         .input_width(4)
5318         .input_height(2)
5319         .kernel_height(5)
5320         .kernel_width(5)
5321         .subsampling(1)
5322         .padding_left(2)
5323         .padding_right(2)
5324         .padding_top(2)
5325         .padding_bottom(2)
5326         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc3);
5327     }
5328   }
5329 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3,output_width_gt_4)5330   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3, output_width_gt_4) {
5331     TEST_REQUIRES_ARM_NEON;
5332     for (size_t input_width = 5; input_width < 9; input_width++) {
5333       DWConv2DMicrokernelTester()
5334         .input_width(input_width)
5335         .input_height(2)
5336         .kernel_height(5)
5337         .kernel_width(5)
5338         .subsampling(1)
5339         .padding_left(2)
5340         .padding_right(2)
5341         .padding_top(2)
5342         .padding_bottom(2)
5343         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc3);
5344     }
5345   }
5346 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3,output_height_div_2)5347   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3, output_height_div_2) {
5348     TEST_REQUIRES_ARM_NEON;
5349     for (size_t input_height = 4; input_height < 16; input_height += 2) {
5350       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5351         DWConv2DMicrokernelTester()
5352           .input_width(input_width)
5353           .input_height(input_height)
5354           .kernel_height(5)
5355           .kernel_width(5)
5356           .subsampling(1)
5357           .padding_left(2)
5358           .padding_right(2)
5359           .padding_top(2)
5360           .padding_bottom(2)
5361           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc3);
5362       }
5363     }
5364   }
5365 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3,output_height_lt_2)5366   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3, output_height_lt_2) {
5367     TEST_REQUIRES_ARM_NEON;
5368     for (size_t input_height = 1; input_height < 2; input_height++) {
5369       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5370         DWConv2DMicrokernelTester()
5371           .input_width(input_width)
5372           .input_height(input_height)
5373           .kernel_height(5)
5374           .kernel_width(5)
5375           .subsampling(1)
5376           .padding_left(2)
5377           .padding_right(2)
5378           .padding_top(2)
5379           .padding_bottom(2)
5380           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc3);
5381       }
5382     }
5383   }
5384 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3,output_height_gt_2)5385   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_2X4_ACC3, output_height_gt_2) {
5386     TEST_REQUIRES_ARM_NEON;
5387     for (size_t input_height = 3; input_height < 5; input_height++) {
5388       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5389         DWConv2DMicrokernelTester()
5390           .input_width(input_width)
5391           .input_height(input_height)
5392           .kernel_height(5)
5393           .kernel_width(5)
5394           .subsampling(1)
5395           .padding_left(2)
5396           .padding_right(2)
5397           .padding_top(2)
5398           .padding_bottom(2)
5399           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_2x4_acc3);
5400       }
5401     }
5402   }
5403 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5404 
5405 
5406 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4,output_width_eq_4)5407   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4, output_width_eq_4) {
5408     TEST_REQUIRES_ARM_NEON;
5409     DWConv2DMicrokernelTester()
5410       .input_width(4)
5411       .input_height(3)
5412       .kernel_height(5)
5413       .kernel_width(5)
5414       .subsampling(1)
5415       .padding_left(2)
5416       .padding_right(2)
5417       .padding_top(2)
5418       .padding_bottom(2)
5419       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4);
5420   }
5421 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4,output_width_div_4)5422   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4, output_width_div_4) {
5423     TEST_REQUIRES_ARM_NEON;
5424     for (size_t input_width = 8; input_width < 32; input_width += 4) {
5425       DWConv2DMicrokernelTester()
5426         .input_width(input_width)
5427         .input_height(3)
5428         .kernel_height(5)
5429         .kernel_width(5)
5430         .subsampling(1)
5431         .padding_left(2)
5432         .padding_right(2)
5433         .padding_top(2)
5434         .padding_bottom(2)
5435         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4);
5436     }
5437   }
5438 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4,output_width_lt_4)5439   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4, output_width_lt_4) {
5440     TEST_REQUIRES_ARM_NEON;
5441     for (size_t input_width = 1; input_width < 4; input_width++) {
5442       DWConv2DMicrokernelTester()
5443         .input_width(4)
5444         .input_height(3)
5445         .kernel_height(5)
5446         .kernel_width(5)
5447         .subsampling(1)
5448         .padding_left(2)
5449         .padding_right(2)
5450         .padding_top(2)
5451         .padding_bottom(2)
5452         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4);
5453     }
5454   }
5455 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4,output_width_gt_4)5456   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4, output_width_gt_4) {
5457     TEST_REQUIRES_ARM_NEON;
5458     for (size_t input_width = 5; input_width < 9; input_width++) {
5459       DWConv2DMicrokernelTester()
5460         .input_width(input_width)
5461         .input_height(3)
5462         .kernel_height(5)
5463         .kernel_width(5)
5464         .subsampling(1)
5465         .padding_left(2)
5466         .padding_right(2)
5467         .padding_top(2)
5468         .padding_bottom(2)
5469         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4);
5470     }
5471   }
5472 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4,output_height_div_3)5473   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4, output_height_div_3) {
5474     TEST_REQUIRES_ARM_NEON;
5475     for (size_t input_height = 6; input_height < 24; input_height += 3) {
5476       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5477         DWConv2DMicrokernelTester()
5478           .input_width(input_width)
5479           .input_height(input_height)
5480           .kernel_height(5)
5481           .kernel_width(5)
5482           .subsampling(1)
5483           .padding_left(2)
5484           .padding_right(2)
5485           .padding_top(2)
5486           .padding_bottom(2)
5487           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4);
5488       }
5489     }
5490   }
5491 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4,output_height_lt_3)5492   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4, output_height_lt_3) {
5493     TEST_REQUIRES_ARM_NEON;
5494     for (size_t input_height = 1; input_height < 3; input_height++) {
5495       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5496         DWConv2DMicrokernelTester()
5497           .input_width(input_width)
5498           .input_height(input_height)
5499           .kernel_height(5)
5500           .kernel_width(5)
5501           .subsampling(1)
5502           .padding_left(2)
5503           .padding_right(2)
5504           .padding_top(2)
5505           .padding_bottom(2)
5506           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4);
5507       }
5508     }
5509   }
5510 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4,output_height_gt_3)5511   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4, output_height_gt_3) {
5512     TEST_REQUIRES_ARM_NEON;
5513     for (size_t input_height = 4; input_height < 7; input_height++) {
5514       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5515         DWConv2DMicrokernelTester()
5516           .input_width(input_width)
5517           .input_height(input_height)
5518           .kernel_height(5)
5519           .kernel_width(5)
5520           .subsampling(1)
5521           .padding_left(2)
5522           .padding_right(2)
5523           .padding_top(2)
5524           .padding_bottom(2)
5525           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4);
5526       }
5527     }
5528   }
5529 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5530 
5531 
5532 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2,output_width_eq_4)5533   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2, output_width_eq_4) {
5534     TEST_REQUIRES_ARM_NEON;
5535     DWConv2DMicrokernelTester()
5536       .input_width(4)
5537       .input_height(3)
5538       .kernel_height(5)
5539       .kernel_width(5)
5540       .subsampling(1)
5541       .padding_left(2)
5542       .padding_right(2)
5543       .padding_top(2)
5544       .padding_bottom(2)
5545       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4_acc2);
5546   }
5547 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2,output_width_div_4)5548   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2, output_width_div_4) {
5549     TEST_REQUIRES_ARM_NEON;
5550     for (size_t input_width = 8; input_width < 32; input_width += 4) {
5551       DWConv2DMicrokernelTester()
5552         .input_width(input_width)
5553         .input_height(3)
5554         .kernel_height(5)
5555         .kernel_width(5)
5556         .subsampling(1)
5557         .padding_left(2)
5558         .padding_right(2)
5559         .padding_top(2)
5560         .padding_bottom(2)
5561         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4_acc2);
5562     }
5563   }
5564 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2,output_width_lt_4)5565   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2, output_width_lt_4) {
5566     TEST_REQUIRES_ARM_NEON;
5567     for (size_t input_width = 1; input_width < 4; input_width++) {
5568       DWConv2DMicrokernelTester()
5569         .input_width(4)
5570         .input_height(3)
5571         .kernel_height(5)
5572         .kernel_width(5)
5573         .subsampling(1)
5574         .padding_left(2)
5575         .padding_right(2)
5576         .padding_top(2)
5577         .padding_bottom(2)
5578         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4_acc2);
5579     }
5580   }
5581 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2,output_width_gt_4)5582   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2, output_width_gt_4) {
5583     TEST_REQUIRES_ARM_NEON;
5584     for (size_t input_width = 5; input_width < 9; input_width++) {
5585       DWConv2DMicrokernelTester()
5586         .input_width(input_width)
5587         .input_height(3)
5588         .kernel_height(5)
5589         .kernel_width(5)
5590         .subsampling(1)
5591         .padding_left(2)
5592         .padding_right(2)
5593         .padding_top(2)
5594         .padding_bottom(2)
5595         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4_acc2);
5596     }
5597   }
5598 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2,output_height_div_3)5599   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2, output_height_div_3) {
5600     TEST_REQUIRES_ARM_NEON;
5601     for (size_t input_height = 6; input_height < 24; input_height += 3) {
5602       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5603         DWConv2DMicrokernelTester()
5604           .input_width(input_width)
5605           .input_height(input_height)
5606           .kernel_height(5)
5607           .kernel_width(5)
5608           .subsampling(1)
5609           .padding_left(2)
5610           .padding_right(2)
5611           .padding_top(2)
5612           .padding_bottom(2)
5613           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4_acc2);
5614       }
5615     }
5616   }
5617 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2,output_height_lt_3)5618   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2, output_height_lt_3) {
5619     TEST_REQUIRES_ARM_NEON;
5620     for (size_t input_height = 1; input_height < 3; input_height++) {
5621       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5622         DWConv2DMicrokernelTester()
5623           .input_width(input_width)
5624           .input_height(input_height)
5625           .kernel_height(5)
5626           .kernel_width(5)
5627           .subsampling(1)
5628           .padding_left(2)
5629           .padding_right(2)
5630           .padding_top(2)
5631           .padding_bottom(2)
5632           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4_acc2);
5633       }
5634     }
5635   }
5636 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2,output_height_gt_3)5637   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_3X4_ACC2, output_height_gt_3) {
5638     TEST_REQUIRES_ARM_NEON;
5639     for (size_t input_height = 4; input_height < 7; input_height++) {
5640       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5641         DWConv2DMicrokernelTester()
5642           .input_width(input_width)
5643           .input_height(input_height)
5644           .kernel_height(5)
5645           .kernel_width(5)
5646           .subsampling(1)
5647           .padding_left(2)
5648           .padding_right(2)
5649           .padding_top(2)
5650           .padding_bottom(2)
5651           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_3x4_acc2);
5652       }
5653     }
5654   }
5655 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5656 
5657 
5658 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4,output_width_eq_4)5659   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4, output_width_eq_4) {
5660     TEST_REQUIRES_ARM_NEON;
5661     DWConv2DMicrokernelTester()
5662       .input_width(4)
5663       .input_height(4)
5664       .kernel_height(5)
5665       .kernel_width(5)
5666       .subsampling(1)
5667       .padding_left(2)
5668       .padding_right(2)
5669       .padding_top(2)
5670       .padding_bottom(2)
5671       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4);
5672   }
5673 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4,output_width_div_4)5674   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4, output_width_div_4) {
5675     TEST_REQUIRES_ARM_NEON;
5676     for (size_t input_width = 8; input_width < 32; input_width += 4) {
5677       DWConv2DMicrokernelTester()
5678         .input_width(input_width)
5679         .input_height(4)
5680         .kernel_height(5)
5681         .kernel_width(5)
5682         .subsampling(1)
5683         .padding_left(2)
5684         .padding_right(2)
5685         .padding_top(2)
5686         .padding_bottom(2)
5687         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4);
5688     }
5689   }
5690 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4,output_width_lt_4)5691   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4, output_width_lt_4) {
5692     TEST_REQUIRES_ARM_NEON;
5693     for (size_t input_width = 1; input_width < 4; input_width++) {
5694       DWConv2DMicrokernelTester()
5695         .input_width(4)
5696         .input_height(4)
5697         .kernel_height(5)
5698         .kernel_width(5)
5699         .subsampling(1)
5700         .padding_left(2)
5701         .padding_right(2)
5702         .padding_top(2)
5703         .padding_bottom(2)
5704         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4);
5705     }
5706   }
5707 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4,output_width_gt_4)5708   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4, output_width_gt_4) {
5709     TEST_REQUIRES_ARM_NEON;
5710     for (size_t input_width = 5; input_width < 9; input_width++) {
5711       DWConv2DMicrokernelTester()
5712         .input_width(input_width)
5713         .input_height(4)
5714         .kernel_height(5)
5715         .kernel_width(5)
5716         .subsampling(1)
5717         .padding_left(2)
5718         .padding_right(2)
5719         .padding_top(2)
5720         .padding_bottom(2)
5721         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4);
5722     }
5723   }
5724 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4,output_height_div_4)5725   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4, output_height_div_4) {
5726     TEST_REQUIRES_ARM_NEON;
5727     for (size_t input_height = 8; input_height < 32; input_height += 4) {
5728       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5729         DWConv2DMicrokernelTester()
5730           .input_width(input_width)
5731           .input_height(input_height)
5732           .kernel_height(5)
5733           .kernel_width(5)
5734           .subsampling(1)
5735           .padding_left(2)
5736           .padding_right(2)
5737           .padding_top(2)
5738           .padding_bottom(2)
5739           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4);
5740       }
5741     }
5742   }
5743 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4,output_height_lt_4)5744   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4, output_height_lt_4) {
5745     TEST_REQUIRES_ARM_NEON;
5746     for (size_t input_height = 1; input_height < 4; input_height++) {
5747       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5748         DWConv2DMicrokernelTester()
5749           .input_width(input_width)
5750           .input_height(input_height)
5751           .kernel_height(5)
5752           .kernel_width(5)
5753           .subsampling(1)
5754           .padding_left(2)
5755           .padding_right(2)
5756           .padding_top(2)
5757           .padding_bottom(2)
5758           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4);
5759       }
5760     }
5761   }
5762 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4,output_height_gt_4)5763   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4, output_height_gt_4) {
5764     TEST_REQUIRES_ARM_NEON;
5765     for (size_t input_height = 5; input_height < 9; input_height++) {
5766       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5767         DWConv2DMicrokernelTester()
5768           .input_width(input_width)
5769           .input_height(input_height)
5770           .kernel_height(5)
5771           .kernel_width(5)
5772           .subsampling(1)
5773           .padding_left(2)
5774           .padding_right(2)
5775           .padding_top(2)
5776           .padding_bottom(2)
5777           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4);
5778       }
5779     }
5780   }
5781 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5782 
5783 
5784 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2,output_width_eq_4)5785   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2, output_width_eq_4) {
5786     TEST_REQUIRES_ARM_NEON;
5787     DWConv2DMicrokernelTester()
5788       .input_width(4)
5789       .input_height(4)
5790       .kernel_height(5)
5791       .kernel_width(5)
5792       .subsampling(1)
5793       .padding_left(2)
5794       .padding_right(2)
5795       .padding_top(2)
5796       .padding_bottom(2)
5797       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4_acc2);
5798   }
5799 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2,output_width_div_4)5800   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2, output_width_div_4) {
5801     TEST_REQUIRES_ARM_NEON;
5802     for (size_t input_width = 8; input_width < 32; input_width += 4) {
5803       DWConv2DMicrokernelTester()
5804         .input_width(input_width)
5805         .input_height(4)
5806         .kernel_height(5)
5807         .kernel_width(5)
5808         .subsampling(1)
5809         .padding_left(2)
5810         .padding_right(2)
5811         .padding_top(2)
5812         .padding_bottom(2)
5813         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4_acc2);
5814     }
5815   }
5816 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2,output_width_lt_4)5817   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2, output_width_lt_4) {
5818     TEST_REQUIRES_ARM_NEON;
5819     for (size_t input_width = 1; input_width < 4; input_width++) {
5820       DWConv2DMicrokernelTester()
5821         .input_width(4)
5822         .input_height(4)
5823         .kernel_height(5)
5824         .kernel_width(5)
5825         .subsampling(1)
5826         .padding_left(2)
5827         .padding_right(2)
5828         .padding_top(2)
5829         .padding_bottom(2)
5830         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4_acc2);
5831     }
5832   }
5833 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2,output_width_gt_4)5834   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2, output_width_gt_4) {
5835     TEST_REQUIRES_ARM_NEON;
5836     for (size_t input_width = 5; input_width < 9; input_width++) {
5837       DWConv2DMicrokernelTester()
5838         .input_width(input_width)
5839         .input_height(4)
5840         .kernel_height(5)
5841         .kernel_width(5)
5842         .subsampling(1)
5843         .padding_left(2)
5844         .padding_right(2)
5845         .padding_top(2)
5846         .padding_bottom(2)
5847         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4_acc2);
5848     }
5849   }
5850 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2,output_height_div_4)5851   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2, output_height_div_4) {
5852     TEST_REQUIRES_ARM_NEON;
5853     for (size_t input_height = 8; input_height < 32; input_height += 4) {
5854       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5855         DWConv2DMicrokernelTester()
5856           .input_width(input_width)
5857           .input_height(input_height)
5858           .kernel_height(5)
5859           .kernel_width(5)
5860           .subsampling(1)
5861           .padding_left(2)
5862           .padding_right(2)
5863           .padding_top(2)
5864           .padding_bottom(2)
5865           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4_acc2);
5866       }
5867     }
5868   }
5869 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2,output_height_lt_4)5870   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2, output_height_lt_4) {
5871     TEST_REQUIRES_ARM_NEON;
5872     for (size_t input_height = 1; input_height < 4; input_height++) {
5873       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5874         DWConv2DMicrokernelTester()
5875           .input_width(input_width)
5876           .input_height(input_height)
5877           .kernel_height(5)
5878           .kernel_width(5)
5879           .subsampling(1)
5880           .padding_left(2)
5881           .padding_right(2)
5882           .padding_top(2)
5883           .padding_bottom(2)
5884           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4_acc2);
5885       }
5886     }
5887   }
5888 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2,output_height_gt_4)5889   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_4X4_ACC2, output_height_gt_4) {
5890     TEST_REQUIRES_ARM_NEON;
5891     for (size_t input_height = 5; input_height < 9; input_height++) {
5892       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5893         DWConv2DMicrokernelTester()
5894           .input_width(input_width)
5895           .input_height(input_height)
5896           .kernel_height(5)
5897           .kernel_width(5)
5898           .subsampling(1)
5899           .padding_left(2)
5900           .padding_right(2)
5901           .padding_top(2)
5902           .padding_bottom(2)
5903           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_4x4_acc2);
5904       }
5905     }
5906   }
5907 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5908 
5909 
5910 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4,output_width_eq_4)5911   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4, output_width_eq_4) {
5912     TEST_REQUIRES_ARM_NEON;
5913     DWConv2DMicrokernelTester()
5914       .input_width(4)
5915       .input_height(5)
5916       .kernel_height(5)
5917       .kernel_width(5)
5918       .subsampling(1)
5919       .padding_left(2)
5920       .padding_right(2)
5921       .padding_top(2)
5922       .padding_bottom(2)
5923       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_5x4);
5924   }
5925 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4,output_width_div_4)5926   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4, output_width_div_4) {
5927     TEST_REQUIRES_ARM_NEON;
5928     for (size_t input_width = 8; input_width < 32; input_width += 4) {
5929       DWConv2DMicrokernelTester()
5930         .input_width(input_width)
5931         .input_height(5)
5932         .kernel_height(5)
5933         .kernel_width(5)
5934         .subsampling(1)
5935         .padding_left(2)
5936         .padding_right(2)
5937         .padding_top(2)
5938         .padding_bottom(2)
5939         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_5x4);
5940     }
5941   }
5942 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4,output_width_lt_4)5943   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4, output_width_lt_4) {
5944     TEST_REQUIRES_ARM_NEON;
5945     for (size_t input_width = 1; input_width < 4; input_width++) {
5946       DWConv2DMicrokernelTester()
5947         .input_width(4)
5948         .input_height(5)
5949         .kernel_height(5)
5950         .kernel_width(5)
5951         .subsampling(1)
5952         .padding_left(2)
5953         .padding_right(2)
5954         .padding_top(2)
5955         .padding_bottom(2)
5956         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_5x4);
5957     }
5958   }
5959 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4,output_width_gt_4)5960   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4, output_width_gt_4) {
5961     TEST_REQUIRES_ARM_NEON;
5962     for (size_t input_width = 5; input_width < 9; input_width++) {
5963       DWConv2DMicrokernelTester()
5964         .input_width(input_width)
5965         .input_height(5)
5966         .kernel_height(5)
5967         .kernel_width(5)
5968         .subsampling(1)
5969         .padding_left(2)
5970         .padding_right(2)
5971         .padding_top(2)
5972         .padding_bottom(2)
5973         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_5x4);
5974     }
5975   }
5976 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4,output_height_div_5)5977   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4, output_height_div_5) {
5978     TEST_REQUIRES_ARM_NEON;
5979     for (size_t input_height = 10; input_height < 40; input_height += 5) {
5980       for (size_t input_width = 1; input_width < 21; input_width += 3) {
5981         DWConv2DMicrokernelTester()
5982           .input_width(input_width)
5983           .input_height(input_height)
5984           .kernel_height(5)
5985           .kernel_width(5)
5986           .subsampling(1)
5987           .padding_left(2)
5988           .padding_right(2)
5989           .padding_top(2)
5990           .padding_bottom(2)
5991           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_5x4);
5992       }
5993     }
5994   }
5995 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4,output_height_lt_5)5996   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4, output_height_lt_5) {
5997     TEST_REQUIRES_ARM_NEON;
5998     for (size_t input_height = 1; input_height < 5; input_height++) {
5999       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6000         DWConv2DMicrokernelTester()
6001           .input_width(input_width)
6002           .input_height(input_height)
6003           .kernel_height(5)
6004           .kernel_width(5)
6005           .subsampling(1)
6006           .padding_left(2)
6007           .padding_right(2)
6008           .padding_top(2)
6009           .padding_bottom(2)
6010           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_5x4);
6011       }
6012     }
6013   }
6014 
TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4,output_height_gt_5)6015   TEST(F32_DWCONV2D_CHW_5X5P2__NEON_5X4, output_height_gt_5) {
6016     TEST_REQUIRES_ARM_NEON;
6017     for (size_t input_height = 6; input_height < 11; input_height++) {
6018       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6019         DWConv2DMicrokernelTester()
6020           .input_width(input_width)
6021           .input_height(input_height)
6022           .kernel_height(5)
6023           .kernel_width(5)
6024           .subsampling(1)
6025           .padding_left(2)
6026           .padding_right(2)
6027           .padding_top(2)
6028           .padding_bottom(2)
6029           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neon_5x4);
6030       }
6031     }
6032   }
6033 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
6034 
6035 
6036 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4,output_width_eq_4)6037   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4, output_width_eq_4) {
6038     TEST_REQUIRES_ARM_NEON_FMA;
6039     DWConv2DMicrokernelTester()
6040       .input_width(4)
6041       .input_height(1)
6042       .kernel_height(5)
6043       .kernel_width(5)
6044       .subsampling(1)
6045       .padding_left(2)
6046       .padding_right(2)
6047       .padding_top(2)
6048       .padding_bottom(2)
6049       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4);
6050   }
6051 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4,output_width_div_4)6052   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4, output_width_div_4) {
6053     TEST_REQUIRES_ARM_NEON_FMA;
6054     for (size_t input_width = 8; input_width < 32; input_width += 4) {
6055       DWConv2DMicrokernelTester()
6056         .input_width(input_width)
6057         .input_height(1)
6058         .kernel_height(5)
6059         .kernel_width(5)
6060         .subsampling(1)
6061         .padding_left(2)
6062         .padding_right(2)
6063         .padding_top(2)
6064         .padding_bottom(2)
6065         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4);
6066     }
6067   }
6068 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4,output_width_lt_4)6069   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4, output_width_lt_4) {
6070     TEST_REQUIRES_ARM_NEON_FMA;
6071     for (size_t input_width = 1; input_width < 4; input_width++) {
6072       DWConv2DMicrokernelTester()
6073         .input_width(4)
6074         .input_height(1)
6075         .kernel_height(5)
6076         .kernel_width(5)
6077         .subsampling(1)
6078         .padding_left(2)
6079         .padding_right(2)
6080         .padding_top(2)
6081         .padding_bottom(2)
6082         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4);
6083     }
6084   }
6085 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4,output_width_gt_4)6086   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4, output_width_gt_4) {
6087     TEST_REQUIRES_ARM_NEON_FMA;
6088     for (size_t input_width = 5; input_width < 9; input_width++) {
6089       DWConv2DMicrokernelTester()
6090         .input_width(input_width)
6091         .input_height(1)
6092         .kernel_height(5)
6093         .kernel_width(5)
6094         .subsampling(1)
6095         .padding_left(2)
6096         .padding_right(2)
6097         .padding_top(2)
6098         .padding_bottom(2)
6099         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4);
6100     }
6101   }
6102 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4,output_height_gt_1)6103   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4, output_height_gt_1) {
6104     TEST_REQUIRES_ARM_NEON_FMA;
6105     for (size_t input_height = 2; input_height < 3; input_height++) {
6106       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6107         DWConv2DMicrokernelTester()
6108           .input_width(input_width)
6109           .input_height(input_height)
6110           .kernel_height(5)
6111           .kernel_width(5)
6112           .subsampling(1)
6113           .padding_left(2)
6114           .padding_right(2)
6115           .padding_top(2)
6116           .padding_bottom(2)
6117           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4);
6118       }
6119     }
6120   }
6121 #endif  // XNN_ARCH_ARM64
6122 
6123 
6124 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC2,output_width_eq_4)6125   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC2, output_width_eq_4) {
6126     TEST_REQUIRES_ARM_NEON_FMA;
6127     DWConv2DMicrokernelTester()
6128       .input_width(4)
6129       .input_height(1)
6130       .kernel_height(5)
6131       .kernel_width(5)
6132       .subsampling(1)
6133       .padding_left(2)
6134       .padding_right(2)
6135       .padding_top(2)
6136       .padding_bottom(2)
6137       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc2);
6138   }
6139 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC2,output_width_div_4)6140   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC2, output_width_div_4) {
6141     TEST_REQUIRES_ARM_NEON_FMA;
6142     for (size_t input_width = 8; input_width < 32; input_width += 4) {
6143       DWConv2DMicrokernelTester()
6144         .input_width(input_width)
6145         .input_height(1)
6146         .kernel_height(5)
6147         .kernel_width(5)
6148         .subsampling(1)
6149         .padding_left(2)
6150         .padding_right(2)
6151         .padding_top(2)
6152         .padding_bottom(2)
6153         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc2);
6154     }
6155   }
6156 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC2,output_width_lt_4)6157   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC2, output_width_lt_4) {
6158     TEST_REQUIRES_ARM_NEON_FMA;
6159     for (size_t input_width = 1; input_width < 4; input_width++) {
6160       DWConv2DMicrokernelTester()
6161         .input_width(4)
6162         .input_height(1)
6163         .kernel_height(5)
6164         .kernel_width(5)
6165         .subsampling(1)
6166         .padding_left(2)
6167         .padding_right(2)
6168         .padding_top(2)
6169         .padding_bottom(2)
6170         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc2);
6171     }
6172   }
6173 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC2,output_width_gt_4)6174   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC2, output_width_gt_4) {
6175     TEST_REQUIRES_ARM_NEON_FMA;
6176     for (size_t input_width = 5; input_width < 9; input_width++) {
6177       DWConv2DMicrokernelTester()
6178         .input_width(input_width)
6179         .input_height(1)
6180         .kernel_height(5)
6181         .kernel_width(5)
6182         .subsampling(1)
6183         .padding_left(2)
6184         .padding_right(2)
6185         .padding_top(2)
6186         .padding_bottom(2)
6187         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc2);
6188     }
6189   }
6190 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC2,output_height_gt_1)6191   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC2, output_height_gt_1) {
6192     TEST_REQUIRES_ARM_NEON_FMA;
6193     for (size_t input_height = 2; input_height < 3; input_height++) {
6194       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6195         DWConv2DMicrokernelTester()
6196           .input_width(input_width)
6197           .input_height(input_height)
6198           .kernel_height(5)
6199           .kernel_width(5)
6200           .subsampling(1)
6201           .padding_left(2)
6202           .padding_right(2)
6203           .padding_top(2)
6204           .padding_bottom(2)
6205           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc2);
6206       }
6207     }
6208   }
6209 #endif  // XNN_ARCH_ARM64
6210 
6211 
6212 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC3,output_width_eq_4)6213   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC3, output_width_eq_4) {
6214     TEST_REQUIRES_ARM_NEON_FMA;
6215     DWConv2DMicrokernelTester()
6216       .input_width(4)
6217       .input_height(1)
6218       .kernel_height(5)
6219       .kernel_width(5)
6220       .subsampling(1)
6221       .padding_left(2)
6222       .padding_right(2)
6223       .padding_top(2)
6224       .padding_bottom(2)
6225       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc3);
6226   }
6227 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC3,output_width_div_4)6228   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC3, output_width_div_4) {
6229     TEST_REQUIRES_ARM_NEON_FMA;
6230     for (size_t input_width = 8; input_width < 32; input_width += 4) {
6231       DWConv2DMicrokernelTester()
6232         .input_width(input_width)
6233         .input_height(1)
6234         .kernel_height(5)
6235         .kernel_width(5)
6236         .subsampling(1)
6237         .padding_left(2)
6238         .padding_right(2)
6239         .padding_top(2)
6240         .padding_bottom(2)
6241         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc3);
6242     }
6243   }
6244 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC3,output_width_lt_4)6245   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC3, output_width_lt_4) {
6246     TEST_REQUIRES_ARM_NEON_FMA;
6247     for (size_t input_width = 1; input_width < 4; input_width++) {
6248       DWConv2DMicrokernelTester()
6249         .input_width(4)
6250         .input_height(1)
6251         .kernel_height(5)
6252         .kernel_width(5)
6253         .subsampling(1)
6254         .padding_left(2)
6255         .padding_right(2)
6256         .padding_top(2)
6257         .padding_bottom(2)
6258         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc3);
6259     }
6260   }
6261 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC3,output_width_gt_4)6262   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC3, output_width_gt_4) {
6263     TEST_REQUIRES_ARM_NEON_FMA;
6264     for (size_t input_width = 5; input_width < 9; input_width++) {
6265       DWConv2DMicrokernelTester()
6266         .input_width(input_width)
6267         .input_height(1)
6268         .kernel_height(5)
6269         .kernel_width(5)
6270         .subsampling(1)
6271         .padding_left(2)
6272         .padding_right(2)
6273         .padding_top(2)
6274         .padding_bottom(2)
6275         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc3);
6276     }
6277   }
6278 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC3,output_height_gt_1)6279   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC3, output_height_gt_1) {
6280     TEST_REQUIRES_ARM_NEON_FMA;
6281     for (size_t input_height = 2; input_height < 3; input_height++) {
6282       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6283         DWConv2DMicrokernelTester()
6284           .input_width(input_width)
6285           .input_height(input_height)
6286           .kernel_height(5)
6287           .kernel_width(5)
6288           .subsampling(1)
6289           .padding_left(2)
6290           .padding_right(2)
6291           .padding_top(2)
6292           .padding_bottom(2)
6293           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc3);
6294       }
6295     }
6296   }
6297 #endif  // XNN_ARCH_ARM64
6298 
6299 
6300 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC4,output_width_eq_4)6301   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC4, output_width_eq_4) {
6302     TEST_REQUIRES_ARM_NEON_FMA;
6303     DWConv2DMicrokernelTester()
6304       .input_width(4)
6305       .input_height(1)
6306       .kernel_height(5)
6307       .kernel_width(5)
6308       .subsampling(1)
6309       .padding_left(2)
6310       .padding_right(2)
6311       .padding_top(2)
6312       .padding_bottom(2)
6313       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc4);
6314   }
6315 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC4,output_width_div_4)6316   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC4, output_width_div_4) {
6317     TEST_REQUIRES_ARM_NEON_FMA;
6318     for (size_t input_width = 8; input_width < 32; input_width += 4) {
6319       DWConv2DMicrokernelTester()
6320         .input_width(input_width)
6321         .input_height(1)
6322         .kernel_height(5)
6323         .kernel_width(5)
6324         .subsampling(1)
6325         .padding_left(2)
6326         .padding_right(2)
6327         .padding_top(2)
6328         .padding_bottom(2)
6329         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc4);
6330     }
6331   }
6332 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC4,output_width_lt_4)6333   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC4, output_width_lt_4) {
6334     TEST_REQUIRES_ARM_NEON_FMA;
6335     for (size_t input_width = 1; input_width < 4; input_width++) {
6336       DWConv2DMicrokernelTester()
6337         .input_width(4)
6338         .input_height(1)
6339         .kernel_height(5)
6340         .kernel_width(5)
6341         .subsampling(1)
6342         .padding_left(2)
6343         .padding_right(2)
6344         .padding_top(2)
6345         .padding_bottom(2)
6346         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc4);
6347     }
6348   }
6349 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC4,output_width_gt_4)6350   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC4, output_width_gt_4) {
6351     TEST_REQUIRES_ARM_NEON_FMA;
6352     for (size_t input_width = 5; input_width < 9; input_width++) {
6353       DWConv2DMicrokernelTester()
6354         .input_width(input_width)
6355         .input_height(1)
6356         .kernel_height(5)
6357         .kernel_width(5)
6358         .subsampling(1)
6359         .padding_left(2)
6360         .padding_right(2)
6361         .padding_top(2)
6362         .padding_bottom(2)
6363         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc4);
6364     }
6365   }
6366 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC4,output_height_gt_1)6367   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC4, output_height_gt_1) {
6368     TEST_REQUIRES_ARM_NEON_FMA;
6369     for (size_t input_height = 2; input_height < 3; input_height++) {
6370       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6371         DWConv2DMicrokernelTester()
6372           .input_width(input_width)
6373           .input_height(input_height)
6374           .kernel_height(5)
6375           .kernel_width(5)
6376           .subsampling(1)
6377           .padding_left(2)
6378           .padding_right(2)
6379           .padding_top(2)
6380           .padding_bottom(2)
6381           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc4);
6382       }
6383     }
6384   }
6385 #endif  // XNN_ARCH_ARM64
6386 
6387 
6388 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC5,output_width_eq_4)6389   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC5, output_width_eq_4) {
6390     TEST_REQUIRES_ARM_NEON_FMA;
6391     DWConv2DMicrokernelTester()
6392       .input_width(4)
6393       .input_height(1)
6394       .kernel_height(5)
6395       .kernel_width(5)
6396       .subsampling(1)
6397       .padding_left(2)
6398       .padding_right(2)
6399       .padding_top(2)
6400       .padding_bottom(2)
6401       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc5);
6402   }
6403 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC5,output_width_div_4)6404   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC5, output_width_div_4) {
6405     TEST_REQUIRES_ARM_NEON_FMA;
6406     for (size_t input_width = 8; input_width < 32; input_width += 4) {
6407       DWConv2DMicrokernelTester()
6408         .input_width(input_width)
6409         .input_height(1)
6410         .kernel_height(5)
6411         .kernel_width(5)
6412         .subsampling(1)
6413         .padding_left(2)
6414         .padding_right(2)
6415         .padding_top(2)
6416         .padding_bottom(2)
6417         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc5);
6418     }
6419   }
6420 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC5,output_width_lt_4)6421   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC5, output_width_lt_4) {
6422     TEST_REQUIRES_ARM_NEON_FMA;
6423     for (size_t input_width = 1; input_width < 4; input_width++) {
6424       DWConv2DMicrokernelTester()
6425         .input_width(4)
6426         .input_height(1)
6427         .kernel_height(5)
6428         .kernel_width(5)
6429         .subsampling(1)
6430         .padding_left(2)
6431         .padding_right(2)
6432         .padding_top(2)
6433         .padding_bottom(2)
6434         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc5);
6435     }
6436   }
6437 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC5,output_width_gt_4)6438   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC5, output_width_gt_4) {
6439     TEST_REQUIRES_ARM_NEON_FMA;
6440     for (size_t input_width = 5; input_width < 9; input_width++) {
6441       DWConv2DMicrokernelTester()
6442         .input_width(input_width)
6443         .input_height(1)
6444         .kernel_height(5)
6445         .kernel_width(5)
6446         .subsampling(1)
6447         .padding_left(2)
6448         .padding_right(2)
6449         .padding_top(2)
6450         .padding_bottom(2)
6451         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc5);
6452     }
6453   }
6454 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC5,output_height_gt_1)6455   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_1X4_ACC5, output_height_gt_1) {
6456     TEST_REQUIRES_ARM_NEON_FMA;
6457     for (size_t input_height = 2; input_height < 3; input_height++) {
6458       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6459         DWConv2DMicrokernelTester()
6460           .input_width(input_width)
6461           .input_height(input_height)
6462           .kernel_height(5)
6463           .kernel_width(5)
6464           .subsampling(1)
6465           .padding_left(2)
6466           .padding_right(2)
6467           .padding_top(2)
6468           .padding_bottom(2)
6469           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_1x4_acc5);
6470       }
6471     }
6472   }
6473 #endif  // XNN_ARCH_ARM64
6474 
6475 
6476 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4,output_width_eq_4)6477   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4, output_width_eq_4) {
6478     TEST_REQUIRES_ARM_NEON_FMA;
6479     DWConv2DMicrokernelTester()
6480       .input_width(4)
6481       .input_height(2)
6482       .kernel_height(5)
6483       .kernel_width(5)
6484       .subsampling(1)
6485       .padding_left(2)
6486       .padding_right(2)
6487       .padding_top(2)
6488       .padding_bottom(2)
6489       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4);
6490   }
6491 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4,output_width_div_4)6492   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4, output_width_div_4) {
6493     TEST_REQUIRES_ARM_NEON_FMA;
6494     for (size_t input_width = 8; input_width < 32; input_width += 4) {
6495       DWConv2DMicrokernelTester()
6496         .input_width(input_width)
6497         .input_height(2)
6498         .kernel_height(5)
6499         .kernel_width(5)
6500         .subsampling(1)
6501         .padding_left(2)
6502         .padding_right(2)
6503         .padding_top(2)
6504         .padding_bottom(2)
6505         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4);
6506     }
6507   }
6508 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4,output_width_lt_4)6509   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4, output_width_lt_4) {
6510     TEST_REQUIRES_ARM_NEON_FMA;
6511     for (size_t input_width = 1; input_width < 4; input_width++) {
6512       DWConv2DMicrokernelTester()
6513         .input_width(4)
6514         .input_height(2)
6515         .kernel_height(5)
6516         .kernel_width(5)
6517         .subsampling(1)
6518         .padding_left(2)
6519         .padding_right(2)
6520         .padding_top(2)
6521         .padding_bottom(2)
6522         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4);
6523     }
6524   }
6525 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4,output_width_gt_4)6526   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4, output_width_gt_4) {
6527     TEST_REQUIRES_ARM_NEON_FMA;
6528     for (size_t input_width = 5; input_width < 9; input_width++) {
6529       DWConv2DMicrokernelTester()
6530         .input_width(input_width)
6531         .input_height(2)
6532         .kernel_height(5)
6533         .kernel_width(5)
6534         .subsampling(1)
6535         .padding_left(2)
6536         .padding_right(2)
6537         .padding_top(2)
6538         .padding_bottom(2)
6539         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4);
6540     }
6541   }
6542 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4,output_height_div_2)6543   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4, output_height_div_2) {
6544     TEST_REQUIRES_ARM_NEON_FMA;
6545     for (size_t input_height = 4; input_height < 16; input_height += 2) {
6546       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6547         DWConv2DMicrokernelTester()
6548           .input_width(input_width)
6549           .input_height(input_height)
6550           .kernel_height(5)
6551           .kernel_width(5)
6552           .subsampling(1)
6553           .padding_left(2)
6554           .padding_right(2)
6555           .padding_top(2)
6556           .padding_bottom(2)
6557           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4);
6558       }
6559     }
6560   }
6561 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4,output_height_lt_2)6562   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4, output_height_lt_2) {
6563     TEST_REQUIRES_ARM_NEON_FMA;
6564     for (size_t input_height = 1; input_height < 2; input_height++) {
6565       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6566         DWConv2DMicrokernelTester()
6567           .input_width(input_width)
6568           .input_height(input_height)
6569           .kernel_height(5)
6570           .kernel_width(5)
6571           .subsampling(1)
6572           .padding_left(2)
6573           .padding_right(2)
6574           .padding_top(2)
6575           .padding_bottom(2)
6576           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4);
6577       }
6578     }
6579   }
6580 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4,output_height_gt_2)6581   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4, output_height_gt_2) {
6582     TEST_REQUIRES_ARM_NEON_FMA;
6583     for (size_t input_height = 3; input_height < 5; input_height++) {
6584       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6585         DWConv2DMicrokernelTester()
6586           .input_width(input_width)
6587           .input_height(input_height)
6588           .kernel_height(5)
6589           .kernel_width(5)
6590           .subsampling(1)
6591           .padding_left(2)
6592           .padding_right(2)
6593           .padding_top(2)
6594           .padding_bottom(2)
6595           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4);
6596       }
6597     }
6598   }
6599 #endif  // XNN_ARCH_ARM64
6600 
6601 
6602 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2,output_width_eq_4)6603   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2, output_width_eq_4) {
6604     TEST_REQUIRES_ARM_NEON_FMA;
6605     DWConv2DMicrokernelTester()
6606       .input_width(4)
6607       .input_height(2)
6608       .kernel_height(5)
6609       .kernel_width(5)
6610       .subsampling(1)
6611       .padding_left(2)
6612       .padding_right(2)
6613       .padding_top(2)
6614       .padding_bottom(2)
6615       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc2);
6616   }
6617 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2,output_width_div_4)6618   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2, output_width_div_4) {
6619     TEST_REQUIRES_ARM_NEON_FMA;
6620     for (size_t input_width = 8; input_width < 32; input_width += 4) {
6621       DWConv2DMicrokernelTester()
6622         .input_width(input_width)
6623         .input_height(2)
6624         .kernel_height(5)
6625         .kernel_width(5)
6626         .subsampling(1)
6627         .padding_left(2)
6628         .padding_right(2)
6629         .padding_top(2)
6630         .padding_bottom(2)
6631         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc2);
6632     }
6633   }
6634 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2,output_width_lt_4)6635   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2, output_width_lt_4) {
6636     TEST_REQUIRES_ARM_NEON_FMA;
6637     for (size_t input_width = 1; input_width < 4; input_width++) {
6638       DWConv2DMicrokernelTester()
6639         .input_width(4)
6640         .input_height(2)
6641         .kernel_height(5)
6642         .kernel_width(5)
6643         .subsampling(1)
6644         .padding_left(2)
6645         .padding_right(2)
6646         .padding_top(2)
6647         .padding_bottom(2)
6648         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc2);
6649     }
6650   }
6651 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2,output_width_gt_4)6652   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2, output_width_gt_4) {
6653     TEST_REQUIRES_ARM_NEON_FMA;
6654     for (size_t input_width = 5; input_width < 9; input_width++) {
6655       DWConv2DMicrokernelTester()
6656         .input_width(input_width)
6657         .input_height(2)
6658         .kernel_height(5)
6659         .kernel_width(5)
6660         .subsampling(1)
6661         .padding_left(2)
6662         .padding_right(2)
6663         .padding_top(2)
6664         .padding_bottom(2)
6665         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc2);
6666     }
6667   }
6668 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2,output_height_div_2)6669   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2, output_height_div_2) {
6670     TEST_REQUIRES_ARM_NEON_FMA;
6671     for (size_t input_height = 4; input_height < 16; input_height += 2) {
6672       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6673         DWConv2DMicrokernelTester()
6674           .input_width(input_width)
6675           .input_height(input_height)
6676           .kernel_height(5)
6677           .kernel_width(5)
6678           .subsampling(1)
6679           .padding_left(2)
6680           .padding_right(2)
6681           .padding_top(2)
6682           .padding_bottom(2)
6683           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc2);
6684       }
6685     }
6686   }
6687 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2,output_height_lt_2)6688   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2, output_height_lt_2) {
6689     TEST_REQUIRES_ARM_NEON_FMA;
6690     for (size_t input_height = 1; input_height < 2; input_height++) {
6691       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6692         DWConv2DMicrokernelTester()
6693           .input_width(input_width)
6694           .input_height(input_height)
6695           .kernel_height(5)
6696           .kernel_width(5)
6697           .subsampling(1)
6698           .padding_left(2)
6699           .padding_right(2)
6700           .padding_top(2)
6701           .padding_bottom(2)
6702           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc2);
6703       }
6704     }
6705   }
6706 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2,output_height_gt_2)6707   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC2, output_height_gt_2) {
6708     TEST_REQUIRES_ARM_NEON_FMA;
6709     for (size_t input_height = 3; input_height < 5; input_height++) {
6710       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6711         DWConv2DMicrokernelTester()
6712           .input_width(input_width)
6713           .input_height(input_height)
6714           .kernel_height(5)
6715           .kernel_width(5)
6716           .subsampling(1)
6717           .padding_left(2)
6718           .padding_right(2)
6719           .padding_top(2)
6720           .padding_bottom(2)
6721           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc2);
6722       }
6723     }
6724   }
6725 #endif  // XNN_ARCH_ARM64
6726 
6727 
6728 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3,output_width_eq_4)6729   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3, output_width_eq_4) {
6730     TEST_REQUIRES_ARM_NEON_FMA;
6731     DWConv2DMicrokernelTester()
6732       .input_width(4)
6733       .input_height(2)
6734       .kernel_height(5)
6735       .kernel_width(5)
6736       .subsampling(1)
6737       .padding_left(2)
6738       .padding_right(2)
6739       .padding_top(2)
6740       .padding_bottom(2)
6741       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc3);
6742   }
6743 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3,output_width_div_4)6744   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3, output_width_div_4) {
6745     TEST_REQUIRES_ARM_NEON_FMA;
6746     for (size_t input_width = 8; input_width < 32; input_width += 4) {
6747       DWConv2DMicrokernelTester()
6748         .input_width(input_width)
6749         .input_height(2)
6750         .kernel_height(5)
6751         .kernel_width(5)
6752         .subsampling(1)
6753         .padding_left(2)
6754         .padding_right(2)
6755         .padding_top(2)
6756         .padding_bottom(2)
6757         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc3);
6758     }
6759   }
6760 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3,output_width_lt_4)6761   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3, output_width_lt_4) {
6762     TEST_REQUIRES_ARM_NEON_FMA;
6763     for (size_t input_width = 1; input_width < 4; input_width++) {
6764       DWConv2DMicrokernelTester()
6765         .input_width(4)
6766         .input_height(2)
6767         .kernel_height(5)
6768         .kernel_width(5)
6769         .subsampling(1)
6770         .padding_left(2)
6771         .padding_right(2)
6772         .padding_top(2)
6773         .padding_bottom(2)
6774         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc3);
6775     }
6776   }
6777 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3,output_width_gt_4)6778   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3, output_width_gt_4) {
6779     TEST_REQUIRES_ARM_NEON_FMA;
6780     for (size_t input_width = 5; input_width < 9; input_width++) {
6781       DWConv2DMicrokernelTester()
6782         .input_width(input_width)
6783         .input_height(2)
6784         .kernel_height(5)
6785         .kernel_width(5)
6786         .subsampling(1)
6787         .padding_left(2)
6788         .padding_right(2)
6789         .padding_top(2)
6790         .padding_bottom(2)
6791         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc3);
6792     }
6793   }
6794 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3,output_height_div_2)6795   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3, output_height_div_2) {
6796     TEST_REQUIRES_ARM_NEON_FMA;
6797     for (size_t input_height = 4; input_height < 16; input_height += 2) {
6798       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6799         DWConv2DMicrokernelTester()
6800           .input_width(input_width)
6801           .input_height(input_height)
6802           .kernel_height(5)
6803           .kernel_width(5)
6804           .subsampling(1)
6805           .padding_left(2)
6806           .padding_right(2)
6807           .padding_top(2)
6808           .padding_bottom(2)
6809           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc3);
6810       }
6811     }
6812   }
6813 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3,output_height_lt_2)6814   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3, output_height_lt_2) {
6815     TEST_REQUIRES_ARM_NEON_FMA;
6816     for (size_t input_height = 1; input_height < 2; input_height++) {
6817       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6818         DWConv2DMicrokernelTester()
6819           .input_width(input_width)
6820           .input_height(input_height)
6821           .kernel_height(5)
6822           .kernel_width(5)
6823           .subsampling(1)
6824           .padding_left(2)
6825           .padding_right(2)
6826           .padding_top(2)
6827           .padding_bottom(2)
6828           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc3);
6829       }
6830     }
6831   }
6832 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3,output_height_gt_2)6833   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_2X4_ACC3, output_height_gt_2) {
6834     TEST_REQUIRES_ARM_NEON_FMA;
6835     for (size_t input_height = 3; input_height < 5; input_height++) {
6836       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6837         DWConv2DMicrokernelTester()
6838           .input_width(input_width)
6839           .input_height(input_height)
6840           .kernel_height(5)
6841           .kernel_width(5)
6842           .subsampling(1)
6843           .padding_left(2)
6844           .padding_right(2)
6845           .padding_top(2)
6846           .padding_bottom(2)
6847           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_2x4_acc3);
6848       }
6849     }
6850   }
6851 #endif  // XNN_ARCH_ARM64
6852 
6853 
6854 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4,output_width_eq_4)6855   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4, output_width_eq_4) {
6856     TEST_REQUIRES_ARM_NEON_FMA;
6857     DWConv2DMicrokernelTester()
6858       .input_width(4)
6859       .input_height(3)
6860       .kernel_height(5)
6861       .kernel_width(5)
6862       .subsampling(1)
6863       .padding_left(2)
6864       .padding_right(2)
6865       .padding_top(2)
6866       .padding_bottom(2)
6867       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4);
6868   }
6869 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4,output_width_div_4)6870   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4, output_width_div_4) {
6871     TEST_REQUIRES_ARM_NEON_FMA;
6872     for (size_t input_width = 8; input_width < 32; input_width += 4) {
6873       DWConv2DMicrokernelTester()
6874         .input_width(input_width)
6875         .input_height(3)
6876         .kernel_height(5)
6877         .kernel_width(5)
6878         .subsampling(1)
6879         .padding_left(2)
6880         .padding_right(2)
6881         .padding_top(2)
6882         .padding_bottom(2)
6883         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4);
6884     }
6885   }
6886 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4,output_width_lt_4)6887   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4, output_width_lt_4) {
6888     TEST_REQUIRES_ARM_NEON_FMA;
6889     for (size_t input_width = 1; input_width < 4; input_width++) {
6890       DWConv2DMicrokernelTester()
6891         .input_width(4)
6892         .input_height(3)
6893         .kernel_height(5)
6894         .kernel_width(5)
6895         .subsampling(1)
6896         .padding_left(2)
6897         .padding_right(2)
6898         .padding_top(2)
6899         .padding_bottom(2)
6900         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4);
6901     }
6902   }
6903 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4,output_width_gt_4)6904   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4, output_width_gt_4) {
6905     TEST_REQUIRES_ARM_NEON_FMA;
6906     for (size_t input_width = 5; input_width < 9; input_width++) {
6907       DWConv2DMicrokernelTester()
6908         .input_width(input_width)
6909         .input_height(3)
6910         .kernel_height(5)
6911         .kernel_width(5)
6912         .subsampling(1)
6913         .padding_left(2)
6914         .padding_right(2)
6915         .padding_top(2)
6916         .padding_bottom(2)
6917         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4);
6918     }
6919   }
6920 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4,output_height_div_3)6921   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4, output_height_div_3) {
6922     TEST_REQUIRES_ARM_NEON_FMA;
6923     for (size_t input_height = 6; input_height < 24; input_height += 3) {
6924       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6925         DWConv2DMicrokernelTester()
6926           .input_width(input_width)
6927           .input_height(input_height)
6928           .kernel_height(5)
6929           .kernel_width(5)
6930           .subsampling(1)
6931           .padding_left(2)
6932           .padding_right(2)
6933           .padding_top(2)
6934           .padding_bottom(2)
6935           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4);
6936       }
6937     }
6938   }
6939 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4,output_height_lt_3)6940   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4, output_height_lt_3) {
6941     TEST_REQUIRES_ARM_NEON_FMA;
6942     for (size_t input_height = 1; input_height < 3; input_height++) {
6943       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6944         DWConv2DMicrokernelTester()
6945           .input_width(input_width)
6946           .input_height(input_height)
6947           .kernel_height(5)
6948           .kernel_width(5)
6949           .subsampling(1)
6950           .padding_left(2)
6951           .padding_right(2)
6952           .padding_top(2)
6953           .padding_bottom(2)
6954           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4);
6955       }
6956     }
6957   }
6958 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4,output_height_gt_3)6959   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4, output_height_gt_3) {
6960     TEST_REQUIRES_ARM_NEON_FMA;
6961     for (size_t input_height = 4; input_height < 7; input_height++) {
6962       for (size_t input_width = 1; input_width < 21; input_width += 3) {
6963         DWConv2DMicrokernelTester()
6964           .input_width(input_width)
6965           .input_height(input_height)
6966           .kernel_height(5)
6967           .kernel_width(5)
6968           .subsampling(1)
6969           .padding_left(2)
6970           .padding_right(2)
6971           .padding_top(2)
6972           .padding_bottom(2)
6973           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4);
6974       }
6975     }
6976   }
6977 #endif  // XNN_ARCH_ARM64
6978 
6979 
6980 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2,output_width_eq_4)6981   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2, output_width_eq_4) {
6982     TEST_REQUIRES_ARM_NEON_FMA;
6983     DWConv2DMicrokernelTester()
6984       .input_width(4)
6985       .input_height(3)
6986       .kernel_height(5)
6987       .kernel_width(5)
6988       .subsampling(1)
6989       .padding_left(2)
6990       .padding_right(2)
6991       .padding_top(2)
6992       .padding_bottom(2)
6993       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4_acc2);
6994   }
6995 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2,output_width_div_4)6996   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2, output_width_div_4) {
6997     TEST_REQUIRES_ARM_NEON_FMA;
6998     for (size_t input_width = 8; input_width < 32; input_width += 4) {
6999       DWConv2DMicrokernelTester()
7000         .input_width(input_width)
7001         .input_height(3)
7002         .kernel_height(5)
7003         .kernel_width(5)
7004         .subsampling(1)
7005         .padding_left(2)
7006         .padding_right(2)
7007         .padding_top(2)
7008         .padding_bottom(2)
7009         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4_acc2);
7010     }
7011   }
7012 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2,output_width_lt_4)7013   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2, output_width_lt_4) {
7014     TEST_REQUIRES_ARM_NEON_FMA;
7015     for (size_t input_width = 1; input_width < 4; input_width++) {
7016       DWConv2DMicrokernelTester()
7017         .input_width(4)
7018         .input_height(3)
7019         .kernel_height(5)
7020         .kernel_width(5)
7021         .subsampling(1)
7022         .padding_left(2)
7023         .padding_right(2)
7024         .padding_top(2)
7025         .padding_bottom(2)
7026         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4_acc2);
7027     }
7028   }
7029 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2,output_width_gt_4)7030   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2, output_width_gt_4) {
7031     TEST_REQUIRES_ARM_NEON_FMA;
7032     for (size_t input_width = 5; input_width < 9; input_width++) {
7033       DWConv2DMicrokernelTester()
7034         .input_width(input_width)
7035         .input_height(3)
7036         .kernel_height(5)
7037         .kernel_width(5)
7038         .subsampling(1)
7039         .padding_left(2)
7040         .padding_right(2)
7041         .padding_top(2)
7042         .padding_bottom(2)
7043         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4_acc2);
7044     }
7045   }
7046 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2,output_height_div_3)7047   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2, output_height_div_3) {
7048     TEST_REQUIRES_ARM_NEON_FMA;
7049     for (size_t input_height = 6; input_height < 24; input_height += 3) {
7050       for (size_t input_width = 1; input_width < 21; input_width += 3) {
7051         DWConv2DMicrokernelTester()
7052           .input_width(input_width)
7053           .input_height(input_height)
7054           .kernel_height(5)
7055           .kernel_width(5)
7056           .subsampling(1)
7057           .padding_left(2)
7058           .padding_right(2)
7059           .padding_top(2)
7060           .padding_bottom(2)
7061           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4_acc2);
7062       }
7063     }
7064   }
7065 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2,output_height_lt_3)7066   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2, output_height_lt_3) {
7067     TEST_REQUIRES_ARM_NEON_FMA;
7068     for (size_t input_height = 1; input_height < 3; input_height++) {
7069       for (size_t input_width = 1; input_width < 21; input_width += 3) {
7070         DWConv2DMicrokernelTester()
7071           .input_width(input_width)
7072           .input_height(input_height)
7073           .kernel_height(5)
7074           .kernel_width(5)
7075           .subsampling(1)
7076           .padding_left(2)
7077           .padding_right(2)
7078           .padding_top(2)
7079           .padding_bottom(2)
7080           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4_acc2);
7081       }
7082     }
7083   }
7084 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2,output_height_gt_3)7085   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_3X4_ACC2, output_height_gt_3) {
7086     TEST_REQUIRES_ARM_NEON_FMA;
7087     for (size_t input_height = 4; input_height < 7; input_height++) {
7088       for (size_t input_width = 1; input_width < 21; input_width += 3) {
7089         DWConv2DMicrokernelTester()
7090           .input_width(input_width)
7091           .input_height(input_height)
7092           .kernel_height(5)
7093           .kernel_width(5)
7094           .subsampling(1)
7095           .padding_left(2)
7096           .padding_right(2)
7097           .padding_top(2)
7098           .padding_bottom(2)
7099           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_3x4_acc2);
7100       }
7101     }
7102   }
7103 #endif  // XNN_ARCH_ARM64
7104 
7105 
7106 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4,output_width_eq_4)7107   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4, output_width_eq_4) {
7108     TEST_REQUIRES_ARM_NEON_FMA;
7109     DWConv2DMicrokernelTester()
7110       .input_width(4)
7111       .input_height(4)
7112       .kernel_height(5)
7113       .kernel_width(5)
7114       .subsampling(1)
7115       .padding_left(2)
7116       .padding_right(2)
7117       .padding_top(2)
7118       .padding_bottom(2)
7119       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4);
7120   }
7121 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4,output_width_div_4)7122   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4, output_width_div_4) {
7123     TEST_REQUIRES_ARM_NEON_FMA;
7124     for (size_t input_width = 8; input_width < 32; input_width += 4) {
7125       DWConv2DMicrokernelTester()
7126         .input_width(input_width)
7127         .input_height(4)
7128         .kernel_height(5)
7129         .kernel_width(5)
7130         .subsampling(1)
7131         .padding_left(2)
7132         .padding_right(2)
7133         .padding_top(2)
7134         .padding_bottom(2)
7135         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4);
7136     }
7137   }
7138 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4,output_width_lt_4)7139   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4, output_width_lt_4) {
7140     TEST_REQUIRES_ARM_NEON_FMA;
7141     for (size_t input_width = 1; input_width < 4; input_width++) {
7142       DWConv2DMicrokernelTester()
7143         .input_width(4)
7144         .input_height(4)
7145         .kernel_height(5)
7146         .kernel_width(5)
7147         .subsampling(1)
7148         .padding_left(2)
7149         .padding_right(2)
7150         .padding_top(2)
7151         .padding_bottom(2)
7152         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4);
7153     }
7154   }
7155 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4,output_width_gt_4)7156   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4, output_width_gt_4) {
7157     TEST_REQUIRES_ARM_NEON_FMA;
7158     for (size_t input_width = 5; input_width < 9; input_width++) {
7159       DWConv2DMicrokernelTester()
7160         .input_width(input_width)
7161         .input_height(4)
7162         .kernel_height(5)
7163         .kernel_width(5)
7164         .subsampling(1)
7165         .padding_left(2)
7166         .padding_right(2)
7167         .padding_top(2)
7168         .padding_bottom(2)
7169         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4);
7170     }
7171   }
7172 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4,output_height_div_4)7173   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4, output_height_div_4) {
7174     TEST_REQUIRES_ARM_NEON_FMA;
7175     for (size_t input_height = 8; input_height < 32; input_height += 4) {
7176       for (size_t input_width = 1; input_width < 21; input_width += 3) {
7177         DWConv2DMicrokernelTester()
7178           .input_width(input_width)
7179           .input_height(input_height)
7180           .kernel_height(5)
7181           .kernel_width(5)
7182           .subsampling(1)
7183           .padding_left(2)
7184           .padding_right(2)
7185           .padding_top(2)
7186           .padding_bottom(2)
7187           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4);
7188       }
7189     }
7190   }
7191 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4,output_height_lt_4)7192   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4, output_height_lt_4) {
7193     TEST_REQUIRES_ARM_NEON_FMA;
7194     for (size_t input_height = 1; input_height < 4; input_height++) {
7195       for (size_t input_width = 1; input_width < 21; input_width += 3) {
7196         DWConv2DMicrokernelTester()
7197           .input_width(input_width)
7198           .input_height(input_height)
7199           .kernel_height(5)
7200           .kernel_width(5)
7201           .subsampling(1)
7202           .padding_left(2)
7203           .padding_right(2)
7204           .padding_top(2)
7205           .padding_bottom(2)
7206           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4);
7207       }
7208     }
7209   }
7210 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4,output_height_gt_4)7211   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4, output_height_gt_4) {
7212     TEST_REQUIRES_ARM_NEON_FMA;
7213     for (size_t input_height = 5; input_height < 9; input_height++) {
7214       for (size_t input_width = 1; input_width < 21; input_width += 3) {
7215         DWConv2DMicrokernelTester()
7216           .input_width(input_width)
7217           .input_height(input_height)
7218           .kernel_height(5)
7219           .kernel_width(5)
7220           .subsampling(1)
7221           .padding_left(2)
7222           .padding_right(2)
7223           .padding_top(2)
7224           .padding_bottom(2)
7225           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4);
7226       }
7227     }
7228   }
7229 #endif  // XNN_ARCH_ARM64
7230 
7231 
7232 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2,output_width_eq_4)7233   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2, output_width_eq_4) {
7234     TEST_REQUIRES_ARM_NEON_FMA;
7235     DWConv2DMicrokernelTester()
7236       .input_width(4)
7237       .input_height(4)
7238       .kernel_height(5)
7239       .kernel_width(5)
7240       .subsampling(1)
7241       .padding_left(2)
7242       .padding_right(2)
7243       .padding_top(2)
7244       .padding_bottom(2)
7245       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4_acc2);
7246   }
7247 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2,output_width_div_4)7248   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2, output_width_div_4) {
7249     TEST_REQUIRES_ARM_NEON_FMA;
7250     for (size_t input_width = 8; input_width < 32; input_width += 4) {
7251       DWConv2DMicrokernelTester()
7252         .input_width(input_width)
7253         .input_height(4)
7254         .kernel_height(5)
7255         .kernel_width(5)
7256         .subsampling(1)
7257         .padding_left(2)
7258         .padding_right(2)
7259         .padding_top(2)
7260         .padding_bottom(2)
7261         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4_acc2);
7262     }
7263   }
7264 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2,output_width_lt_4)7265   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2, output_width_lt_4) {
7266     TEST_REQUIRES_ARM_NEON_FMA;
7267     for (size_t input_width = 1; input_width < 4; input_width++) {
7268       DWConv2DMicrokernelTester()
7269         .input_width(4)
7270         .input_height(4)
7271         .kernel_height(5)
7272         .kernel_width(5)
7273         .subsampling(1)
7274         .padding_left(2)
7275         .padding_right(2)
7276         .padding_top(2)
7277         .padding_bottom(2)
7278         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4_acc2);
7279     }
7280   }
7281 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2,output_width_gt_4)7282   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2, output_width_gt_4) {
7283     TEST_REQUIRES_ARM_NEON_FMA;
7284     for (size_t input_width = 5; input_width < 9; input_width++) {
7285       DWConv2DMicrokernelTester()
7286         .input_width(input_width)
7287         .input_height(4)
7288         .kernel_height(5)
7289         .kernel_width(5)
7290         .subsampling(1)
7291         .padding_left(2)
7292         .padding_right(2)
7293         .padding_top(2)
7294         .padding_bottom(2)
7295         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4_acc2);
7296     }
7297   }
7298 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2,output_height_div_4)7299   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2, output_height_div_4) {
7300     TEST_REQUIRES_ARM_NEON_FMA;
7301     for (size_t input_height = 8; input_height < 32; input_height += 4) {
7302       for (size_t input_width = 1; input_width < 21; input_width += 3) {
7303         DWConv2DMicrokernelTester()
7304           .input_width(input_width)
7305           .input_height(input_height)
7306           .kernel_height(5)
7307           .kernel_width(5)
7308           .subsampling(1)
7309           .padding_left(2)
7310           .padding_right(2)
7311           .padding_top(2)
7312           .padding_bottom(2)
7313           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4_acc2);
7314       }
7315     }
7316   }
7317 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2,output_height_lt_4)7318   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2, output_height_lt_4) {
7319     TEST_REQUIRES_ARM_NEON_FMA;
7320     for (size_t input_height = 1; input_height < 4; input_height++) {
7321       for (size_t input_width = 1; input_width < 21; input_width += 3) {
7322         DWConv2DMicrokernelTester()
7323           .input_width(input_width)
7324           .input_height(input_height)
7325           .kernel_height(5)
7326           .kernel_width(5)
7327           .subsampling(1)
7328           .padding_left(2)
7329           .padding_right(2)
7330           .padding_top(2)
7331           .padding_bottom(2)
7332           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4_acc2);
7333       }
7334     }
7335   }
7336 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2,output_height_gt_4)7337   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_4X4_ACC2, output_height_gt_4) {
7338     TEST_REQUIRES_ARM_NEON_FMA;
7339     for (size_t input_height = 5; input_height < 9; input_height++) {
7340       for (size_t input_width = 1; input_width < 21; input_width += 3) {
7341         DWConv2DMicrokernelTester()
7342           .input_width(input_width)
7343           .input_height(input_height)
7344           .kernel_height(5)
7345           .kernel_width(5)
7346           .subsampling(1)
7347           .padding_left(2)
7348           .padding_right(2)
7349           .padding_top(2)
7350           .padding_bottom(2)
7351           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_4x4_acc2);
7352       }
7353     }
7354   }
7355 #endif  // XNN_ARCH_ARM64
7356 
7357 
7358 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4,output_width_eq_4)7359   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4, output_width_eq_4) {
7360     TEST_REQUIRES_ARM_NEON_FMA;
7361     DWConv2DMicrokernelTester()
7362       .input_width(4)
7363       .input_height(5)
7364       .kernel_height(5)
7365       .kernel_width(5)
7366       .subsampling(1)
7367       .padding_left(2)
7368       .padding_right(2)
7369       .padding_top(2)
7370       .padding_bottom(2)
7371       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_5x4);
7372   }
7373 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4,output_width_div_4)7374   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4, output_width_div_4) {
7375     TEST_REQUIRES_ARM_NEON_FMA;
7376     for (size_t input_width = 8; input_width < 32; input_width += 4) {
7377       DWConv2DMicrokernelTester()
7378         .input_width(input_width)
7379         .input_height(5)
7380         .kernel_height(5)
7381         .kernel_width(5)
7382         .subsampling(1)
7383         .padding_left(2)
7384         .padding_right(2)
7385         .padding_top(2)
7386         .padding_bottom(2)
7387         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_5x4);
7388     }
7389   }
7390 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4,output_width_lt_4)7391   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4, output_width_lt_4) {
7392     TEST_REQUIRES_ARM_NEON_FMA;
7393     for (size_t input_width = 1; input_width < 4; input_width++) {
7394       DWConv2DMicrokernelTester()
7395         .input_width(4)
7396         .input_height(5)
7397         .kernel_height(5)
7398         .kernel_width(5)
7399         .subsampling(1)
7400         .padding_left(2)
7401         .padding_right(2)
7402         .padding_top(2)
7403         .padding_bottom(2)
7404         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_5x4);
7405     }
7406   }
7407 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4,output_width_gt_4)7408   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4, output_width_gt_4) {
7409     TEST_REQUIRES_ARM_NEON_FMA;
7410     for (size_t input_width = 5; input_width < 9; input_width++) {
7411       DWConv2DMicrokernelTester()
7412         .input_width(input_width)
7413         .input_height(5)
7414         .kernel_height(5)
7415         .kernel_width(5)
7416         .subsampling(1)
7417         .padding_left(2)
7418         .padding_right(2)
7419         .padding_top(2)
7420         .padding_bottom(2)
7421         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_5x4);
7422     }
7423   }
7424 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4,output_height_div_5)7425   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4, output_height_div_5) {
7426     TEST_REQUIRES_ARM_NEON_FMA;
7427     for (size_t input_height = 10; input_height < 40; input_height += 5) {
7428       for (size_t input_width = 1; input_width < 21; input_width += 3) {
7429         DWConv2DMicrokernelTester()
7430           .input_width(input_width)
7431           .input_height(input_height)
7432           .kernel_height(5)
7433           .kernel_width(5)
7434           .subsampling(1)
7435           .padding_left(2)
7436           .padding_right(2)
7437           .padding_top(2)
7438           .padding_bottom(2)
7439           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_5x4);
7440       }
7441     }
7442   }
7443 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4,output_height_lt_5)7444   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4, output_height_lt_5) {
7445     TEST_REQUIRES_ARM_NEON_FMA;
7446     for (size_t input_height = 1; input_height < 5; input_height++) {
7447       for (size_t input_width = 1; input_width < 21; input_width += 3) {
7448         DWConv2DMicrokernelTester()
7449           .input_width(input_width)
7450           .input_height(input_height)
7451           .kernel_height(5)
7452           .kernel_width(5)
7453           .subsampling(1)
7454           .padding_left(2)
7455           .padding_right(2)
7456           .padding_top(2)
7457           .padding_bottom(2)
7458           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_5x4);
7459       }
7460     }
7461   }
7462 
TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4,output_height_gt_5)7463   TEST(F32_DWCONV2D_CHW_5X5P2__NEONFMA_5X4, output_height_gt_5) {
7464     TEST_REQUIRES_ARM_NEON_FMA;
7465     for (size_t input_height = 6; input_height < 11; input_height++) {
7466       for (size_t input_width = 1; input_width < 21; input_width += 3) {
7467         DWConv2DMicrokernelTester()
7468           .input_width(input_width)
7469           .input_height(input_height)
7470           .kernel_height(5)
7471           .kernel_width(5)
7472           .subsampling(1)
7473           .padding_left(2)
7474           .padding_right(2)
7475           .padding_top(2)
7476           .padding_bottom(2)
7477           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__neonfma_5x4);
7478       }
7479     }
7480   }
7481 #endif  // XNN_ARCH_ARM64
7482 
7483 
7484 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4,output_width_eq_4)7485   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4, output_width_eq_4) {
7486     TEST_REQUIRES_ARM_NEON;
7487     for (size_t input_width = 7; input_width < 9; input_width++) {
7488       DWConv2DMicrokernelTester()
7489         .input_width(input_width)
7490         .input_height(2)
7491         .kernel_height(5)
7492         .kernel_width(5)
7493         .subsampling(2)
7494         .padding_left(2)
7495         .padding_right(2)
7496         .padding_top(2)
7497         .padding_bottom(2)
7498         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4);
7499     }
7500   }
7501 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4,output_width_div_4)7502   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4, output_width_div_4) {
7503     TEST_REQUIRES_ARM_NEON;
7504     for (size_t input_width = 16; input_width < 64; input_width += 8) {
7505       DWConv2DMicrokernelTester()
7506         .input_width(input_width)
7507         .input_height(2)
7508         .kernel_height(5)
7509         .kernel_width(5)
7510         .subsampling(2)
7511         .padding_left(2)
7512         .padding_right(2)
7513         .padding_top(2)
7514         .padding_bottom(2)
7515         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4);
7516     }
7517   }
7518 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4,output_width_lt_4)7519   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4, output_width_lt_4) {
7520     TEST_REQUIRES_ARM_NEON;
7521     for (size_t input_width = 1; input_width < 7; input_width++) {
7522       DWConv2DMicrokernelTester()
7523         .input_width(8)
7524         .input_height(2)
7525         .kernel_height(5)
7526         .kernel_width(5)
7527         .subsampling(2)
7528         .padding_left(2)
7529         .padding_right(2)
7530         .padding_top(2)
7531         .padding_bottom(2)
7532         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4);
7533     }
7534   }
7535 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4,output_width_gt_4)7536   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4, output_width_gt_4) {
7537     TEST_REQUIRES_ARM_NEON;
7538     for (size_t input_width = 9; input_width < 17; input_width++) {
7539       DWConv2DMicrokernelTester()
7540         .input_width(input_width)
7541         .input_height(2)
7542         .kernel_height(5)
7543         .kernel_width(5)
7544         .subsampling(2)
7545         .padding_left(2)
7546         .padding_right(2)
7547         .padding_top(2)
7548         .padding_bottom(2)
7549         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4);
7550     }
7551   }
7552 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4,output_height_eq_1)7553   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4, output_height_eq_1) {
7554     TEST_REQUIRES_ARM_NEON;
7555     for (size_t input_height = 1; input_height < 3; input_height++) {
7556       for (size_t input_width = 1; input_width < 41; input_width += 7) {
7557         DWConv2DMicrokernelTester()
7558           .input_width(input_width)
7559           .input_height(input_height)
7560           .kernel_height(5)
7561           .kernel_width(5)
7562           .subsampling(2)
7563           .padding_left(2)
7564           .padding_right(2)
7565           .padding_top(2)
7566           .padding_bottom(2)
7567           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4);
7568       }
7569     }
7570   }
7571 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4,output_height_gt_1)7572   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4, output_height_gt_1) {
7573     TEST_REQUIRES_ARM_NEON;
7574     for (size_t input_height = 3; input_height < 5; input_height++) {
7575       for (size_t input_width = 1; input_width < 41; input_width += 7) {
7576         DWConv2DMicrokernelTester()
7577           .input_width(input_width)
7578           .input_height(input_height)
7579           .kernel_height(5)
7580           .kernel_width(5)
7581           .subsampling(2)
7582           .padding_left(2)
7583           .padding_right(2)
7584           .padding_top(2)
7585           .padding_bottom(2)
7586           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4);
7587       }
7588     }
7589   }
7590 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4,padding_top_eq_1)7591   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4, padding_top_eq_1) {
7592     TEST_REQUIRES_ARM_NEON;
7593     for (size_t input_height = 2; input_height < 8; input_height++) {
7594       for (size_t input_width = 1; input_width < 41; input_width += 7) {
7595         DWConv2DMicrokernelTester()
7596           .input_width(input_width)
7597           .input_height(input_height)
7598           .kernel_height(5)
7599           .kernel_width(5)
7600           .subsampling(2)
7601           .padding_left(2)
7602           .padding_right(2)
7603           .padding_top(1)
7604           .padding_bottom(2)
7605           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4);
7606       }
7607     }
7608   }
7609 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
7610 
7611 
7612 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2,output_width_eq_4)7613   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2, output_width_eq_4) {
7614     TEST_REQUIRES_ARM_NEON;
7615     for (size_t input_width = 7; input_width < 9; input_width++) {
7616       DWConv2DMicrokernelTester()
7617         .input_width(input_width)
7618         .input_height(2)
7619         .kernel_height(5)
7620         .kernel_width(5)
7621         .subsampling(2)
7622         .padding_left(2)
7623         .padding_right(2)
7624         .padding_top(2)
7625         .padding_bottom(2)
7626         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc2);
7627     }
7628   }
7629 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2,output_width_div_4)7630   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2, output_width_div_4) {
7631     TEST_REQUIRES_ARM_NEON;
7632     for (size_t input_width = 16; input_width < 64; input_width += 8) {
7633       DWConv2DMicrokernelTester()
7634         .input_width(input_width)
7635         .input_height(2)
7636         .kernel_height(5)
7637         .kernel_width(5)
7638         .subsampling(2)
7639         .padding_left(2)
7640         .padding_right(2)
7641         .padding_top(2)
7642         .padding_bottom(2)
7643         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc2);
7644     }
7645   }
7646 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2,output_width_lt_4)7647   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2, output_width_lt_4) {
7648     TEST_REQUIRES_ARM_NEON;
7649     for (size_t input_width = 1; input_width < 7; input_width++) {
7650       DWConv2DMicrokernelTester()
7651         .input_width(8)
7652         .input_height(2)
7653         .kernel_height(5)
7654         .kernel_width(5)
7655         .subsampling(2)
7656         .padding_left(2)
7657         .padding_right(2)
7658         .padding_top(2)
7659         .padding_bottom(2)
7660         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc2);
7661     }
7662   }
7663 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2,output_width_gt_4)7664   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2, output_width_gt_4) {
7665     TEST_REQUIRES_ARM_NEON;
7666     for (size_t input_width = 9; input_width < 17; input_width++) {
7667       DWConv2DMicrokernelTester()
7668         .input_width(input_width)
7669         .input_height(2)
7670         .kernel_height(5)
7671         .kernel_width(5)
7672         .subsampling(2)
7673         .padding_left(2)
7674         .padding_right(2)
7675         .padding_top(2)
7676         .padding_bottom(2)
7677         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc2);
7678     }
7679   }
7680 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2,output_height_eq_1)7681   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2, output_height_eq_1) {
7682     TEST_REQUIRES_ARM_NEON;
7683     for (size_t input_height = 1; input_height < 3; input_height++) {
7684       for (size_t input_width = 1; input_width < 41; input_width += 7) {
7685         DWConv2DMicrokernelTester()
7686           .input_width(input_width)
7687           .input_height(input_height)
7688           .kernel_height(5)
7689           .kernel_width(5)
7690           .subsampling(2)
7691           .padding_left(2)
7692           .padding_right(2)
7693           .padding_top(2)
7694           .padding_bottom(2)
7695           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc2);
7696       }
7697     }
7698   }
7699 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2,output_height_gt_1)7700   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2, output_height_gt_1) {
7701     TEST_REQUIRES_ARM_NEON;
7702     for (size_t input_height = 3; input_height < 5; input_height++) {
7703       for (size_t input_width = 1; input_width < 41; input_width += 7) {
7704         DWConv2DMicrokernelTester()
7705           .input_width(input_width)
7706           .input_height(input_height)
7707           .kernel_height(5)
7708           .kernel_width(5)
7709           .subsampling(2)
7710           .padding_left(2)
7711           .padding_right(2)
7712           .padding_top(2)
7713           .padding_bottom(2)
7714           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc2);
7715       }
7716     }
7717   }
7718 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2,padding_top_eq_1)7719   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC2, padding_top_eq_1) {
7720     TEST_REQUIRES_ARM_NEON;
7721     for (size_t input_height = 2; input_height < 8; input_height++) {
7722       for (size_t input_width = 1; input_width < 41; input_width += 7) {
7723         DWConv2DMicrokernelTester()
7724           .input_width(input_width)
7725           .input_height(input_height)
7726           .kernel_height(5)
7727           .kernel_width(5)
7728           .subsampling(2)
7729           .padding_left(2)
7730           .padding_right(2)
7731           .padding_top(1)
7732           .padding_bottom(2)
7733           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc2);
7734       }
7735     }
7736   }
7737 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
7738 
7739 
7740 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3,output_width_eq_4)7741   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3, output_width_eq_4) {
7742     TEST_REQUIRES_ARM_NEON;
7743     for (size_t input_width = 7; input_width < 9; input_width++) {
7744       DWConv2DMicrokernelTester()
7745         .input_width(input_width)
7746         .input_height(2)
7747         .kernel_height(5)
7748         .kernel_width(5)
7749         .subsampling(2)
7750         .padding_left(2)
7751         .padding_right(2)
7752         .padding_top(2)
7753         .padding_bottom(2)
7754         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc3);
7755     }
7756   }
7757 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3,output_width_div_4)7758   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3, output_width_div_4) {
7759     TEST_REQUIRES_ARM_NEON;
7760     for (size_t input_width = 16; input_width < 64; input_width += 8) {
7761       DWConv2DMicrokernelTester()
7762         .input_width(input_width)
7763         .input_height(2)
7764         .kernel_height(5)
7765         .kernel_width(5)
7766         .subsampling(2)
7767         .padding_left(2)
7768         .padding_right(2)
7769         .padding_top(2)
7770         .padding_bottom(2)
7771         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc3);
7772     }
7773   }
7774 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3,output_width_lt_4)7775   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3, output_width_lt_4) {
7776     TEST_REQUIRES_ARM_NEON;
7777     for (size_t input_width = 1; input_width < 7; input_width++) {
7778       DWConv2DMicrokernelTester()
7779         .input_width(8)
7780         .input_height(2)
7781         .kernel_height(5)
7782         .kernel_width(5)
7783         .subsampling(2)
7784         .padding_left(2)
7785         .padding_right(2)
7786         .padding_top(2)
7787         .padding_bottom(2)
7788         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc3);
7789     }
7790   }
7791 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3,output_width_gt_4)7792   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3, output_width_gt_4) {
7793     TEST_REQUIRES_ARM_NEON;
7794     for (size_t input_width = 9; input_width < 17; input_width++) {
7795       DWConv2DMicrokernelTester()
7796         .input_width(input_width)
7797         .input_height(2)
7798         .kernel_height(5)
7799         .kernel_width(5)
7800         .subsampling(2)
7801         .padding_left(2)
7802         .padding_right(2)
7803         .padding_top(2)
7804         .padding_bottom(2)
7805         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc3);
7806     }
7807   }
7808 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3,output_height_eq_1)7809   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3, output_height_eq_1) {
7810     TEST_REQUIRES_ARM_NEON;
7811     for (size_t input_height = 1; input_height < 3; input_height++) {
7812       for (size_t input_width = 1; input_width < 41; input_width += 7) {
7813         DWConv2DMicrokernelTester()
7814           .input_width(input_width)
7815           .input_height(input_height)
7816           .kernel_height(5)
7817           .kernel_width(5)
7818           .subsampling(2)
7819           .padding_left(2)
7820           .padding_right(2)
7821           .padding_top(2)
7822           .padding_bottom(2)
7823           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc3);
7824       }
7825     }
7826   }
7827 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3,output_height_gt_1)7828   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3, output_height_gt_1) {
7829     TEST_REQUIRES_ARM_NEON;
7830     for (size_t input_height = 3; input_height < 5; input_height++) {
7831       for (size_t input_width = 1; input_width < 41; input_width += 7) {
7832         DWConv2DMicrokernelTester()
7833           .input_width(input_width)
7834           .input_height(input_height)
7835           .kernel_height(5)
7836           .kernel_width(5)
7837           .subsampling(2)
7838           .padding_left(2)
7839           .padding_right(2)
7840           .padding_top(2)
7841           .padding_bottom(2)
7842           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc3);
7843       }
7844     }
7845   }
7846 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3,padding_top_eq_1)7847   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC3, padding_top_eq_1) {
7848     TEST_REQUIRES_ARM_NEON;
7849     for (size_t input_height = 2; input_height < 8; input_height++) {
7850       for (size_t input_width = 1; input_width < 41; input_width += 7) {
7851         DWConv2DMicrokernelTester()
7852           .input_width(input_width)
7853           .input_height(input_height)
7854           .kernel_height(5)
7855           .kernel_width(5)
7856           .subsampling(2)
7857           .padding_left(2)
7858           .padding_right(2)
7859           .padding_top(1)
7860           .padding_bottom(2)
7861           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc3);
7862       }
7863     }
7864   }
7865 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
7866 
7867 
7868 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4,output_width_eq_4)7869   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4, output_width_eq_4) {
7870     TEST_REQUIRES_ARM_NEON;
7871     for (size_t input_width = 7; input_width < 9; input_width++) {
7872       DWConv2DMicrokernelTester()
7873         .input_width(input_width)
7874         .input_height(2)
7875         .kernel_height(5)
7876         .kernel_width(5)
7877         .subsampling(2)
7878         .padding_left(2)
7879         .padding_right(2)
7880         .padding_top(2)
7881         .padding_bottom(2)
7882         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc4);
7883     }
7884   }
7885 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4,output_width_div_4)7886   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4, output_width_div_4) {
7887     TEST_REQUIRES_ARM_NEON;
7888     for (size_t input_width = 16; input_width < 64; input_width += 8) {
7889       DWConv2DMicrokernelTester()
7890         .input_width(input_width)
7891         .input_height(2)
7892         .kernel_height(5)
7893         .kernel_width(5)
7894         .subsampling(2)
7895         .padding_left(2)
7896         .padding_right(2)
7897         .padding_top(2)
7898         .padding_bottom(2)
7899         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc4);
7900     }
7901   }
7902 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4,output_width_lt_4)7903   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4, output_width_lt_4) {
7904     TEST_REQUIRES_ARM_NEON;
7905     for (size_t input_width = 1; input_width < 7; input_width++) {
7906       DWConv2DMicrokernelTester()
7907         .input_width(8)
7908         .input_height(2)
7909         .kernel_height(5)
7910         .kernel_width(5)
7911         .subsampling(2)
7912         .padding_left(2)
7913         .padding_right(2)
7914         .padding_top(2)
7915         .padding_bottom(2)
7916         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc4);
7917     }
7918   }
7919 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4,output_width_gt_4)7920   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4, output_width_gt_4) {
7921     TEST_REQUIRES_ARM_NEON;
7922     for (size_t input_width = 9; input_width < 17; input_width++) {
7923       DWConv2DMicrokernelTester()
7924         .input_width(input_width)
7925         .input_height(2)
7926         .kernel_height(5)
7927         .kernel_width(5)
7928         .subsampling(2)
7929         .padding_left(2)
7930         .padding_right(2)
7931         .padding_top(2)
7932         .padding_bottom(2)
7933         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc4);
7934     }
7935   }
7936 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4,output_height_eq_1)7937   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4, output_height_eq_1) {
7938     TEST_REQUIRES_ARM_NEON;
7939     for (size_t input_height = 1; input_height < 3; input_height++) {
7940       for (size_t input_width = 1; input_width < 41; input_width += 7) {
7941         DWConv2DMicrokernelTester()
7942           .input_width(input_width)
7943           .input_height(input_height)
7944           .kernel_height(5)
7945           .kernel_width(5)
7946           .subsampling(2)
7947           .padding_left(2)
7948           .padding_right(2)
7949           .padding_top(2)
7950           .padding_bottom(2)
7951           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc4);
7952       }
7953     }
7954   }
7955 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4,output_height_gt_1)7956   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4, output_height_gt_1) {
7957     TEST_REQUIRES_ARM_NEON;
7958     for (size_t input_height = 3; input_height < 5; input_height++) {
7959       for (size_t input_width = 1; input_width < 41; input_width += 7) {
7960         DWConv2DMicrokernelTester()
7961           .input_width(input_width)
7962           .input_height(input_height)
7963           .kernel_height(5)
7964           .kernel_width(5)
7965           .subsampling(2)
7966           .padding_left(2)
7967           .padding_right(2)
7968           .padding_top(2)
7969           .padding_bottom(2)
7970           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc4);
7971       }
7972     }
7973   }
7974 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4,padding_top_eq_1)7975   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC4, padding_top_eq_1) {
7976     TEST_REQUIRES_ARM_NEON;
7977     for (size_t input_height = 2; input_height < 8; input_height++) {
7978       for (size_t input_width = 1; input_width < 41; input_width += 7) {
7979         DWConv2DMicrokernelTester()
7980           .input_width(input_width)
7981           .input_height(input_height)
7982           .kernel_height(5)
7983           .kernel_width(5)
7984           .subsampling(2)
7985           .padding_left(2)
7986           .padding_right(2)
7987           .padding_top(1)
7988           .padding_bottom(2)
7989           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc4);
7990       }
7991     }
7992   }
7993 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
7994 
7995 
7996 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5,output_width_eq_4)7997   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5, output_width_eq_4) {
7998     TEST_REQUIRES_ARM_NEON;
7999     for (size_t input_width = 7; input_width < 9; input_width++) {
8000       DWConv2DMicrokernelTester()
8001         .input_width(input_width)
8002         .input_height(2)
8003         .kernel_height(5)
8004         .kernel_width(5)
8005         .subsampling(2)
8006         .padding_left(2)
8007         .padding_right(2)
8008         .padding_top(2)
8009         .padding_bottom(2)
8010         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc5);
8011     }
8012   }
8013 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5,output_width_div_4)8014   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5, output_width_div_4) {
8015     TEST_REQUIRES_ARM_NEON;
8016     for (size_t input_width = 16; input_width < 64; input_width += 8) {
8017       DWConv2DMicrokernelTester()
8018         .input_width(input_width)
8019         .input_height(2)
8020         .kernel_height(5)
8021         .kernel_width(5)
8022         .subsampling(2)
8023         .padding_left(2)
8024         .padding_right(2)
8025         .padding_top(2)
8026         .padding_bottom(2)
8027         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc5);
8028     }
8029   }
8030 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5,output_width_lt_4)8031   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5, output_width_lt_4) {
8032     TEST_REQUIRES_ARM_NEON;
8033     for (size_t input_width = 1; input_width < 7; input_width++) {
8034       DWConv2DMicrokernelTester()
8035         .input_width(8)
8036         .input_height(2)
8037         .kernel_height(5)
8038         .kernel_width(5)
8039         .subsampling(2)
8040         .padding_left(2)
8041         .padding_right(2)
8042         .padding_top(2)
8043         .padding_bottom(2)
8044         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc5);
8045     }
8046   }
8047 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5,output_width_gt_4)8048   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5, output_width_gt_4) {
8049     TEST_REQUIRES_ARM_NEON;
8050     for (size_t input_width = 9; input_width < 17; input_width++) {
8051       DWConv2DMicrokernelTester()
8052         .input_width(input_width)
8053         .input_height(2)
8054         .kernel_height(5)
8055         .kernel_width(5)
8056         .subsampling(2)
8057         .padding_left(2)
8058         .padding_right(2)
8059         .padding_top(2)
8060         .padding_bottom(2)
8061         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc5);
8062     }
8063   }
8064 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5,output_height_eq_1)8065   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5, output_height_eq_1) {
8066     TEST_REQUIRES_ARM_NEON;
8067     for (size_t input_height = 1; input_height < 3; input_height++) {
8068       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8069         DWConv2DMicrokernelTester()
8070           .input_width(input_width)
8071           .input_height(input_height)
8072           .kernel_height(5)
8073           .kernel_width(5)
8074           .subsampling(2)
8075           .padding_left(2)
8076           .padding_right(2)
8077           .padding_top(2)
8078           .padding_bottom(2)
8079           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc5);
8080       }
8081     }
8082   }
8083 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5,output_height_gt_1)8084   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5, output_height_gt_1) {
8085     TEST_REQUIRES_ARM_NEON;
8086     for (size_t input_height = 3; input_height < 5; input_height++) {
8087       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8088         DWConv2DMicrokernelTester()
8089           .input_width(input_width)
8090           .input_height(input_height)
8091           .kernel_height(5)
8092           .kernel_width(5)
8093           .subsampling(2)
8094           .padding_left(2)
8095           .padding_right(2)
8096           .padding_top(2)
8097           .padding_bottom(2)
8098           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc5);
8099       }
8100     }
8101   }
8102 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5,padding_top_eq_1)8103   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_1X4_ACC5, padding_top_eq_1) {
8104     TEST_REQUIRES_ARM_NEON;
8105     for (size_t input_height = 2; input_height < 8; input_height++) {
8106       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8107         DWConv2DMicrokernelTester()
8108           .input_width(input_width)
8109           .input_height(input_height)
8110           .kernel_height(5)
8111           .kernel_width(5)
8112           .subsampling(2)
8113           .padding_left(2)
8114           .padding_right(2)
8115           .padding_top(1)
8116           .padding_bottom(2)
8117           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_1x4_acc5);
8118       }
8119     }
8120   }
8121 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8122 
8123 
8124 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4,output_width_eq_4)8125   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4, output_width_eq_4) {
8126     TEST_REQUIRES_ARM_NEON;
8127     for (size_t input_width = 7; input_width < 9; input_width++) {
8128       DWConv2DMicrokernelTester()
8129         .input_width(input_width)
8130         .input_height(4)
8131         .kernel_height(5)
8132         .kernel_width(5)
8133         .subsampling(2)
8134         .padding_left(2)
8135         .padding_right(2)
8136         .padding_top(2)
8137         .padding_bottom(2)
8138         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4);
8139     }
8140   }
8141 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4,output_width_div_4)8142   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4, output_width_div_4) {
8143     TEST_REQUIRES_ARM_NEON;
8144     for (size_t input_width = 16; input_width < 64; input_width += 8) {
8145       DWConv2DMicrokernelTester()
8146         .input_width(input_width)
8147         .input_height(4)
8148         .kernel_height(5)
8149         .kernel_width(5)
8150         .subsampling(2)
8151         .padding_left(2)
8152         .padding_right(2)
8153         .padding_top(2)
8154         .padding_bottom(2)
8155         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4);
8156     }
8157   }
8158 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4,output_width_lt_4)8159   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4, output_width_lt_4) {
8160     TEST_REQUIRES_ARM_NEON;
8161     for (size_t input_width = 1; input_width < 7; input_width++) {
8162       DWConv2DMicrokernelTester()
8163         .input_width(8)
8164         .input_height(4)
8165         .kernel_height(5)
8166         .kernel_width(5)
8167         .subsampling(2)
8168         .padding_left(2)
8169         .padding_right(2)
8170         .padding_top(2)
8171         .padding_bottom(2)
8172         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4);
8173     }
8174   }
8175 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4,output_width_gt_4)8176   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4, output_width_gt_4) {
8177     TEST_REQUIRES_ARM_NEON;
8178     for (size_t input_width = 9; input_width < 17; input_width++) {
8179       DWConv2DMicrokernelTester()
8180         .input_width(input_width)
8181         .input_height(4)
8182         .kernel_height(5)
8183         .kernel_width(5)
8184         .subsampling(2)
8185         .padding_left(2)
8186         .padding_right(2)
8187         .padding_top(2)
8188         .padding_bottom(2)
8189         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4);
8190     }
8191   }
8192 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4,output_height_eq_2)8193   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4, output_height_eq_2) {
8194     TEST_REQUIRES_ARM_NEON;
8195     for (size_t input_height = 3; input_height < 5; input_height++) {
8196       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8197         DWConv2DMicrokernelTester()
8198           .input_width(input_width)
8199           .input_height(input_height)
8200           .kernel_height(5)
8201           .kernel_width(5)
8202           .subsampling(2)
8203           .padding_left(2)
8204           .padding_right(2)
8205           .padding_top(2)
8206           .padding_bottom(2)
8207           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4);
8208       }
8209     }
8210   }
8211 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4,output_height_div_2)8212   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4, output_height_div_2) {
8213     TEST_REQUIRES_ARM_NEON;
8214     for (size_t input_height = 8; input_height < 32; input_height += 4) {
8215       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8216         DWConv2DMicrokernelTester()
8217           .input_width(input_width)
8218           .input_height(input_height)
8219           .kernel_height(5)
8220           .kernel_width(5)
8221           .subsampling(2)
8222           .padding_left(2)
8223           .padding_right(2)
8224           .padding_top(2)
8225           .padding_bottom(2)
8226           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4);
8227       }
8228     }
8229   }
8230 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4,output_height_lt_2)8231   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4, output_height_lt_2) {
8232     TEST_REQUIRES_ARM_NEON;
8233     for (size_t input_height = 1; input_height < 3; input_height++) {
8234       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8235         DWConv2DMicrokernelTester()
8236           .input_width(input_width)
8237           .input_height(input_height)
8238           .kernel_height(5)
8239           .kernel_width(5)
8240           .subsampling(2)
8241           .padding_left(2)
8242           .padding_right(2)
8243           .padding_top(2)
8244           .padding_bottom(2)
8245           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4);
8246       }
8247     }
8248   }
8249 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4,output_height_gt_2)8250   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4, output_height_gt_2) {
8251     TEST_REQUIRES_ARM_NEON;
8252     for (size_t input_height = 5; input_height < 9; input_height++) {
8253       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8254         DWConv2DMicrokernelTester()
8255           .input_width(input_width)
8256           .input_height(input_height)
8257           .kernel_height(5)
8258           .kernel_width(5)
8259           .subsampling(2)
8260           .padding_left(2)
8261           .padding_right(2)
8262           .padding_top(2)
8263           .padding_bottom(2)
8264           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4);
8265       }
8266     }
8267   }
8268 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4,padding_top_eq_1)8269   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4, padding_top_eq_1) {
8270     TEST_REQUIRES_ARM_NEON;
8271     for (size_t input_height = 2; input_height < 14; input_height++) {
8272       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8273         DWConv2DMicrokernelTester()
8274           .input_width(input_width)
8275           .input_height(input_height)
8276           .kernel_height(5)
8277           .kernel_width(5)
8278           .subsampling(2)
8279           .padding_left(2)
8280           .padding_right(2)
8281           .padding_top(1)
8282           .padding_bottom(2)
8283           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4);
8284       }
8285     }
8286   }
8287 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8288 
8289 
8290 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2,output_width_eq_4)8291   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2, output_width_eq_4) {
8292     TEST_REQUIRES_ARM_NEON;
8293     for (size_t input_width = 7; input_width < 9; input_width++) {
8294       DWConv2DMicrokernelTester()
8295         .input_width(input_width)
8296         .input_height(4)
8297         .kernel_height(5)
8298         .kernel_width(5)
8299         .subsampling(2)
8300         .padding_left(2)
8301         .padding_right(2)
8302         .padding_top(2)
8303         .padding_bottom(2)
8304         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc2);
8305     }
8306   }
8307 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2,output_width_div_4)8308   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2, output_width_div_4) {
8309     TEST_REQUIRES_ARM_NEON;
8310     for (size_t input_width = 16; input_width < 64; input_width += 8) {
8311       DWConv2DMicrokernelTester()
8312         .input_width(input_width)
8313         .input_height(4)
8314         .kernel_height(5)
8315         .kernel_width(5)
8316         .subsampling(2)
8317         .padding_left(2)
8318         .padding_right(2)
8319         .padding_top(2)
8320         .padding_bottom(2)
8321         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc2);
8322     }
8323   }
8324 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2,output_width_lt_4)8325   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2, output_width_lt_4) {
8326     TEST_REQUIRES_ARM_NEON;
8327     for (size_t input_width = 1; input_width < 7; input_width++) {
8328       DWConv2DMicrokernelTester()
8329         .input_width(8)
8330         .input_height(4)
8331         .kernel_height(5)
8332         .kernel_width(5)
8333         .subsampling(2)
8334         .padding_left(2)
8335         .padding_right(2)
8336         .padding_top(2)
8337         .padding_bottom(2)
8338         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc2);
8339     }
8340   }
8341 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2,output_width_gt_4)8342   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2, output_width_gt_4) {
8343     TEST_REQUIRES_ARM_NEON;
8344     for (size_t input_width = 9; input_width < 17; input_width++) {
8345       DWConv2DMicrokernelTester()
8346         .input_width(input_width)
8347         .input_height(4)
8348         .kernel_height(5)
8349         .kernel_width(5)
8350         .subsampling(2)
8351         .padding_left(2)
8352         .padding_right(2)
8353         .padding_top(2)
8354         .padding_bottom(2)
8355         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc2);
8356     }
8357   }
8358 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2,output_height_eq_2)8359   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2, output_height_eq_2) {
8360     TEST_REQUIRES_ARM_NEON;
8361     for (size_t input_height = 3; input_height < 5; input_height++) {
8362       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8363         DWConv2DMicrokernelTester()
8364           .input_width(input_width)
8365           .input_height(input_height)
8366           .kernel_height(5)
8367           .kernel_width(5)
8368           .subsampling(2)
8369           .padding_left(2)
8370           .padding_right(2)
8371           .padding_top(2)
8372           .padding_bottom(2)
8373           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc2);
8374       }
8375     }
8376   }
8377 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2,output_height_div_2)8378   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2, output_height_div_2) {
8379     TEST_REQUIRES_ARM_NEON;
8380     for (size_t input_height = 8; input_height < 32; input_height += 4) {
8381       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8382         DWConv2DMicrokernelTester()
8383           .input_width(input_width)
8384           .input_height(input_height)
8385           .kernel_height(5)
8386           .kernel_width(5)
8387           .subsampling(2)
8388           .padding_left(2)
8389           .padding_right(2)
8390           .padding_top(2)
8391           .padding_bottom(2)
8392           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc2);
8393       }
8394     }
8395   }
8396 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2,output_height_lt_2)8397   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2, output_height_lt_2) {
8398     TEST_REQUIRES_ARM_NEON;
8399     for (size_t input_height = 1; input_height < 3; input_height++) {
8400       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8401         DWConv2DMicrokernelTester()
8402           .input_width(input_width)
8403           .input_height(input_height)
8404           .kernel_height(5)
8405           .kernel_width(5)
8406           .subsampling(2)
8407           .padding_left(2)
8408           .padding_right(2)
8409           .padding_top(2)
8410           .padding_bottom(2)
8411           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc2);
8412       }
8413     }
8414   }
8415 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2,output_height_gt_2)8416   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2, output_height_gt_2) {
8417     TEST_REQUIRES_ARM_NEON;
8418     for (size_t input_height = 5; input_height < 9; input_height++) {
8419       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8420         DWConv2DMicrokernelTester()
8421           .input_width(input_width)
8422           .input_height(input_height)
8423           .kernel_height(5)
8424           .kernel_width(5)
8425           .subsampling(2)
8426           .padding_left(2)
8427           .padding_right(2)
8428           .padding_top(2)
8429           .padding_bottom(2)
8430           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc2);
8431       }
8432     }
8433   }
8434 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2,padding_top_eq_1)8435   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC2, padding_top_eq_1) {
8436     TEST_REQUIRES_ARM_NEON;
8437     for (size_t input_height = 2; input_height < 14; input_height++) {
8438       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8439         DWConv2DMicrokernelTester()
8440           .input_width(input_width)
8441           .input_height(input_height)
8442           .kernel_height(5)
8443           .kernel_width(5)
8444           .subsampling(2)
8445           .padding_left(2)
8446           .padding_right(2)
8447           .padding_top(1)
8448           .padding_bottom(2)
8449           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc2);
8450       }
8451     }
8452   }
8453 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8454 
8455 
8456 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3,output_width_eq_4)8457   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3, output_width_eq_4) {
8458     TEST_REQUIRES_ARM_NEON;
8459     for (size_t input_width = 7; input_width < 9; input_width++) {
8460       DWConv2DMicrokernelTester()
8461         .input_width(input_width)
8462         .input_height(4)
8463         .kernel_height(5)
8464         .kernel_width(5)
8465         .subsampling(2)
8466         .padding_left(2)
8467         .padding_right(2)
8468         .padding_top(2)
8469         .padding_bottom(2)
8470         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc3);
8471     }
8472   }
8473 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3,output_width_div_4)8474   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3, output_width_div_4) {
8475     TEST_REQUIRES_ARM_NEON;
8476     for (size_t input_width = 16; input_width < 64; input_width += 8) {
8477       DWConv2DMicrokernelTester()
8478         .input_width(input_width)
8479         .input_height(4)
8480         .kernel_height(5)
8481         .kernel_width(5)
8482         .subsampling(2)
8483         .padding_left(2)
8484         .padding_right(2)
8485         .padding_top(2)
8486         .padding_bottom(2)
8487         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc3);
8488     }
8489   }
8490 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3,output_width_lt_4)8491   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3, output_width_lt_4) {
8492     TEST_REQUIRES_ARM_NEON;
8493     for (size_t input_width = 1; input_width < 7; input_width++) {
8494       DWConv2DMicrokernelTester()
8495         .input_width(8)
8496         .input_height(4)
8497         .kernel_height(5)
8498         .kernel_width(5)
8499         .subsampling(2)
8500         .padding_left(2)
8501         .padding_right(2)
8502         .padding_top(2)
8503         .padding_bottom(2)
8504         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc3);
8505     }
8506   }
8507 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3,output_width_gt_4)8508   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3, output_width_gt_4) {
8509     TEST_REQUIRES_ARM_NEON;
8510     for (size_t input_width = 9; input_width < 17; input_width++) {
8511       DWConv2DMicrokernelTester()
8512         .input_width(input_width)
8513         .input_height(4)
8514         .kernel_height(5)
8515         .kernel_width(5)
8516         .subsampling(2)
8517         .padding_left(2)
8518         .padding_right(2)
8519         .padding_top(2)
8520         .padding_bottom(2)
8521         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc3);
8522     }
8523   }
8524 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3,output_height_eq_2)8525   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3, output_height_eq_2) {
8526     TEST_REQUIRES_ARM_NEON;
8527     for (size_t input_height = 3; input_height < 5; input_height++) {
8528       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8529         DWConv2DMicrokernelTester()
8530           .input_width(input_width)
8531           .input_height(input_height)
8532           .kernel_height(5)
8533           .kernel_width(5)
8534           .subsampling(2)
8535           .padding_left(2)
8536           .padding_right(2)
8537           .padding_top(2)
8538           .padding_bottom(2)
8539           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc3);
8540       }
8541     }
8542   }
8543 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3,output_height_div_2)8544   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3, output_height_div_2) {
8545     TEST_REQUIRES_ARM_NEON;
8546     for (size_t input_height = 8; input_height < 32; input_height += 4) {
8547       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8548         DWConv2DMicrokernelTester()
8549           .input_width(input_width)
8550           .input_height(input_height)
8551           .kernel_height(5)
8552           .kernel_width(5)
8553           .subsampling(2)
8554           .padding_left(2)
8555           .padding_right(2)
8556           .padding_top(2)
8557           .padding_bottom(2)
8558           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc3);
8559       }
8560     }
8561   }
8562 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3,output_height_lt_2)8563   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3, output_height_lt_2) {
8564     TEST_REQUIRES_ARM_NEON;
8565     for (size_t input_height = 1; input_height < 3; input_height++) {
8566       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8567         DWConv2DMicrokernelTester()
8568           .input_width(input_width)
8569           .input_height(input_height)
8570           .kernel_height(5)
8571           .kernel_width(5)
8572           .subsampling(2)
8573           .padding_left(2)
8574           .padding_right(2)
8575           .padding_top(2)
8576           .padding_bottom(2)
8577           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc3);
8578       }
8579     }
8580   }
8581 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3,output_height_gt_2)8582   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3, output_height_gt_2) {
8583     TEST_REQUIRES_ARM_NEON;
8584     for (size_t input_height = 5; input_height < 9; input_height++) {
8585       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8586         DWConv2DMicrokernelTester()
8587           .input_width(input_width)
8588           .input_height(input_height)
8589           .kernel_height(5)
8590           .kernel_width(5)
8591           .subsampling(2)
8592           .padding_left(2)
8593           .padding_right(2)
8594           .padding_top(2)
8595           .padding_bottom(2)
8596           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc3);
8597       }
8598     }
8599   }
8600 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3,padding_top_eq_1)8601   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_2X4_ACC3, padding_top_eq_1) {
8602     TEST_REQUIRES_ARM_NEON;
8603     for (size_t input_height = 2; input_height < 14; input_height++) {
8604       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8605         DWConv2DMicrokernelTester()
8606           .input_width(input_width)
8607           .input_height(input_height)
8608           .kernel_height(5)
8609           .kernel_width(5)
8610           .subsampling(2)
8611           .padding_left(2)
8612           .padding_right(2)
8613           .padding_top(1)
8614           .padding_bottom(2)
8615           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_2x4_acc3);
8616       }
8617     }
8618   }
8619 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8620 
8621 
8622 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4,output_width_eq_4)8623   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4, output_width_eq_4) {
8624     TEST_REQUIRES_ARM_NEON;
8625     for (size_t input_width = 7; input_width < 9; input_width++) {
8626       DWConv2DMicrokernelTester()
8627         .input_width(input_width)
8628         .input_height(6)
8629         .kernel_height(5)
8630         .kernel_width(5)
8631         .subsampling(2)
8632         .padding_left(2)
8633         .padding_right(2)
8634         .padding_top(2)
8635         .padding_bottom(2)
8636         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4);
8637     }
8638   }
8639 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4,output_width_div_4)8640   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4, output_width_div_4) {
8641     TEST_REQUIRES_ARM_NEON;
8642     for (size_t input_width = 16; input_width < 64; input_width += 8) {
8643       DWConv2DMicrokernelTester()
8644         .input_width(input_width)
8645         .input_height(6)
8646         .kernel_height(5)
8647         .kernel_width(5)
8648         .subsampling(2)
8649         .padding_left(2)
8650         .padding_right(2)
8651         .padding_top(2)
8652         .padding_bottom(2)
8653         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4);
8654     }
8655   }
8656 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4,output_width_lt_4)8657   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4, output_width_lt_4) {
8658     TEST_REQUIRES_ARM_NEON;
8659     for (size_t input_width = 1; input_width < 7; input_width++) {
8660       DWConv2DMicrokernelTester()
8661         .input_width(8)
8662         .input_height(6)
8663         .kernel_height(5)
8664         .kernel_width(5)
8665         .subsampling(2)
8666         .padding_left(2)
8667         .padding_right(2)
8668         .padding_top(2)
8669         .padding_bottom(2)
8670         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4);
8671     }
8672   }
8673 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4,output_width_gt_4)8674   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4, output_width_gt_4) {
8675     TEST_REQUIRES_ARM_NEON;
8676     for (size_t input_width = 9; input_width < 17; input_width++) {
8677       DWConv2DMicrokernelTester()
8678         .input_width(input_width)
8679         .input_height(6)
8680         .kernel_height(5)
8681         .kernel_width(5)
8682         .subsampling(2)
8683         .padding_left(2)
8684         .padding_right(2)
8685         .padding_top(2)
8686         .padding_bottom(2)
8687         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4);
8688     }
8689   }
8690 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4,output_height_eq_3)8691   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4, output_height_eq_3) {
8692     TEST_REQUIRES_ARM_NEON;
8693     for (size_t input_height = 5; input_height < 7; input_height++) {
8694       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8695         DWConv2DMicrokernelTester()
8696           .input_width(input_width)
8697           .input_height(input_height)
8698           .kernel_height(5)
8699           .kernel_width(5)
8700           .subsampling(2)
8701           .padding_left(2)
8702           .padding_right(2)
8703           .padding_top(2)
8704           .padding_bottom(2)
8705           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4);
8706       }
8707     }
8708   }
8709 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4,output_height_div_3)8710   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4, output_height_div_3) {
8711     TEST_REQUIRES_ARM_NEON;
8712     for (size_t input_height = 12; input_height < 48; input_height += 6) {
8713       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8714         DWConv2DMicrokernelTester()
8715           .input_width(input_width)
8716           .input_height(input_height)
8717           .kernel_height(5)
8718           .kernel_width(5)
8719           .subsampling(2)
8720           .padding_left(2)
8721           .padding_right(2)
8722           .padding_top(2)
8723           .padding_bottom(2)
8724           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4);
8725       }
8726     }
8727   }
8728 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4,output_height_lt_3)8729   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4, output_height_lt_3) {
8730     TEST_REQUIRES_ARM_NEON;
8731     for (size_t input_height = 1; input_height < 5; input_height++) {
8732       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8733         DWConv2DMicrokernelTester()
8734           .input_width(input_width)
8735           .input_height(input_height)
8736           .kernel_height(5)
8737           .kernel_width(5)
8738           .subsampling(2)
8739           .padding_left(2)
8740           .padding_right(2)
8741           .padding_top(2)
8742           .padding_bottom(2)
8743           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4);
8744       }
8745     }
8746   }
8747 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4,output_height_gt_3)8748   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4, output_height_gt_3) {
8749     TEST_REQUIRES_ARM_NEON;
8750     for (size_t input_height = 7; input_height < 13; input_height++) {
8751       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8752         DWConv2DMicrokernelTester()
8753           .input_width(input_width)
8754           .input_height(input_height)
8755           .kernel_height(5)
8756           .kernel_width(5)
8757           .subsampling(2)
8758           .padding_left(2)
8759           .padding_right(2)
8760           .padding_top(2)
8761           .padding_bottom(2)
8762           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4);
8763       }
8764     }
8765   }
8766 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4,padding_top_eq_1)8767   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4, padding_top_eq_1) {
8768     TEST_REQUIRES_ARM_NEON;
8769     for (size_t input_height = 2; input_height < 20; input_height++) {
8770       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8771         DWConv2DMicrokernelTester()
8772           .input_width(input_width)
8773           .input_height(input_height)
8774           .kernel_height(5)
8775           .kernel_width(5)
8776           .subsampling(2)
8777           .padding_left(2)
8778           .padding_right(2)
8779           .padding_top(1)
8780           .padding_bottom(2)
8781           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4);
8782       }
8783     }
8784   }
8785 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8786 
8787 
8788 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2,output_width_eq_4)8789   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2, output_width_eq_4) {
8790     TEST_REQUIRES_ARM_NEON;
8791     for (size_t input_width = 7; input_width < 9; input_width++) {
8792       DWConv2DMicrokernelTester()
8793         .input_width(input_width)
8794         .input_height(6)
8795         .kernel_height(5)
8796         .kernel_width(5)
8797         .subsampling(2)
8798         .padding_left(2)
8799         .padding_right(2)
8800         .padding_top(2)
8801         .padding_bottom(2)
8802         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4_acc2);
8803     }
8804   }
8805 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2,output_width_div_4)8806   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2, output_width_div_4) {
8807     TEST_REQUIRES_ARM_NEON;
8808     for (size_t input_width = 16; input_width < 64; input_width += 8) {
8809       DWConv2DMicrokernelTester()
8810         .input_width(input_width)
8811         .input_height(6)
8812         .kernel_height(5)
8813         .kernel_width(5)
8814         .subsampling(2)
8815         .padding_left(2)
8816         .padding_right(2)
8817         .padding_top(2)
8818         .padding_bottom(2)
8819         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4_acc2);
8820     }
8821   }
8822 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2,output_width_lt_4)8823   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2, output_width_lt_4) {
8824     TEST_REQUIRES_ARM_NEON;
8825     for (size_t input_width = 1; input_width < 7; input_width++) {
8826       DWConv2DMicrokernelTester()
8827         .input_width(8)
8828         .input_height(6)
8829         .kernel_height(5)
8830         .kernel_width(5)
8831         .subsampling(2)
8832         .padding_left(2)
8833         .padding_right(2)
8834         .padding_top(2)
8835         .padding_bottom(2)
8836         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4_acc2);
8837     }
8838   }
8839 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2,output_width_gt_4)8840   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2, output_width_gt_4) {
8841     TEST_REQUIRES_ARM_NEON;
8842     for (size_t input_width = 9; input_width < 17; input_width++) {
8843       DWConv2DMicrokernelTester()
8844         .input_width(input_width)
8845         .input_height(6)
8846         .kernel_height(5)
8847         .kernel_width(5)
8848         .subsampling(2)
8849         .padding_left(2)
8850         .padding_right(2)
8851         .padding_top(2)
8852         .padding_bottom(2)
8853         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4_acc2);
8854     }
8855   }
8856 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2,output_height_eq_3)8857   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2, output_height_eq_3) {
8858     TEST_REQUIRES_ARM_NEON;
8859     for (size_t input_height = 5; input_height < 7; input_height++) {
8860       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8861         DWConv2DMicrokernelTester()
8862           .input_width(input_width)
8863           .input_height(input_height)
8864           .kernel_height(5)
8865           .kernel_width(5)
8866           .subsampling(2)
8867           .padding_left(2)
8868           .padding_right(2)
8869           .padding_top(2)
8870           .padding_bottom(2)
8871           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4_acc2);
8872       }
8873     }
8874   }
8875 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2,output_height_div_3)8876   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2, output_height_div_3) {
8877     TEST_REQUIRES_ARM_NEON;
8878     for (size_t input_height = 12; input_height < 48; input_height += 6) {
8879       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8880         DWConv2DMicrokernelTester()
8881           .input_width(input_width)
8882           .input_height(input_height)
8883           .kernel_height(5)
8884           .kernel_width(5)
8885           .subsampling(2)
8886           .padding_left(2)
8887           .padding_right(2)
8888           .padding_top(2)
8889           .padding_bottom(2)
8890           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4_acc2);
8891       }
8892     }
8893   }
8894 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2,output_height_lt_3)8895   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2, output_height_lt_3) {
8896     TEST_REQUIRES_ARM_NEON;
8897     for (size_t input_height = 1; input_height < 5; input_height++) {
8898       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8899         DWConv2DMicrokernelTester()
8900           .input_width(input_width)
8901           .input_height(input_height)
8902           .kernel_height(5)
8903           .kernel_width(5)
8904           .subsampling(2)
8905           .padding_left(2)
8906           .padding_right(2)
8907           .padding_top(2)
8908           .padding_bottom(2)
8909           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4_acc2);
8910       }
8911     }
8912   }
8913 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2,output_height_gt_3)8914   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2, output_height_gt_3) {
8915     TEST_REQUIRES_ARM_NEON;
8916     for (size_t input_height = 7; input_height < 13; input_height++) {
8917       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8918         DWConv2DMicrokernelTester()
8919           .input_width(input_width)
8920           .input_height(input_height)
8921           .kernel_height(5)
8922           .kernel_width(5)
8923           .subsampling(2)
8924           .padding_left(2)
8925           .padding_right(2)
8926           .padding_top(2)
8927           .padding_bottom(2)
8928           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4_acc2);
8929       }
8930     }
8931   }
8932 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2,padding_top_eq_1)8933   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEON_3X4_ACC2, padding_top_eq_1) {
8934     TEST_REQUIRES_ARM_NEON;
8935     for (size_t input_height = 2; input_height < 20; input_height++) {
8936       for (size_t input_width = 1; input_width < 41; input_width += 7) {
8937         DWConv2DMicrokernelTester()
8938           .input_width(input_width)
8939           .input_height(input_height)
8940           .kernel_height(5)
8941           .kernel_width(5)
8942           .subsampling(2)
8943           .padding_left(2)
8944           .padding_right(2)
8945           .padding_top(1)
8946           .padding_bottom(2)
8947           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neon_3x4_acc2);
8948       }
8949     }
8950   }
8951 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8952 
8953 
8954 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4,output_width_eq_4)8955   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4, output_width_eq_4) {
8956     TEST_REQUIRES_ARM_NEON_FMA;
8957     for (size_t input_width = 7; input_width < 9; input_width++) {
8958       DWConv2DMicrokernelTester()
8959         .input_width(input_width)
8960         .input_height(2)
8961         .kernel_height(5)
8962         .kernel_width(5)
8963         .subsampling(2)
8964         .padding_left(2)
8965         .padding_right(2)
8966         .padding_top(2)
8967         .padding_bottom(2)
8968         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4);
8969     }
8970   }
8971 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4,output_width_div_4)8972   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4, output_width_div_4) {
8973     TEST_REQUIRES_ARM_NEON_FMA;
8974     for (size_t input_width = 16; input_width < 64; input_width += 8) {
8975       DWConv2DMicrokernelTester()
8976         .input_width(input_width)
8977         .input_height(2)
8978         .kernel_height(5)
8979         .kernel_width(5)
8980         .subsampling(2)
8981         .padding_left(2)
8982         .padding_right(2)
8983         .padding_top(2)
8984         .padding_bottom(2)
8985         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4);
8986     }
8987   }
8988 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4,output_width_lt_4)8989   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4, output_width_lt_4) {
8990     TEST_REQUIRES_ARM_NEON_FMA;
8991     for (size_t input_width = 1; input_width < 7; input_width++) {
8992       DWConv2DMicrokernelTester()
8993         .input_width(8)
8994         .input_height(2)
8995         .kernel_height(5)
8996         .kernel_width(5)
8997         .subsampling(2)
8998         .padding_left(2)
8999         .padding_right(2)
9000         .padding_top(2)
9001         .padding_bottom(2)
9002         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4);
9003     }
9004   }
9005 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4,output_width_gt_4)9006   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4, output_width_gt_4) {
9007     TEST_REQUIRES_ARM_NEON_FMA;
9008     for (size_t input_width = 9; input_width < 17; input_width++) {
9009       DWConv2DMicrokernelTester()
9010         .input_width(input_width)
9011         .input_height(2)
9012         .kernel_height(5)
9013         .kernel_width(5)
9014         .subsampling(2)
9015         .padding_left(2)
9016         .padding_right(2)
9017         .padding_top(2)
9018         .padding_bottom(2)
9019         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4);
9020     }
9021   }
9022 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4,output_height_eq_1)9023   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4, output_height_eq_1) {
9024     TEST_REQUIRES_ARM_NEON_FMA;
9025     for (size_t input_height = 1; input_height < 3; input_height++) {
9026       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9027         DWConv2DMicrokernelTester()
9028           .input_width(input_width)
9029           .input_height(input_height)
9030           .kernel_height(5)
9031           .kernel_width(5)
9032           .subsampling(2)
9033           .padding_left(2)
9034           .padding_right(2)
9035           .padding_top(2)
9036           .padding_bottom(2)
9037           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4);
9038       }
9039     }
9040   }
9041 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4,output_height_gt_1)9042   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4, output_height_gt_1) {
9043     TEST_REQUIRES_ARM_NEON_FMA;
9044     for (size_t input_height = 3; input_height < 5; input_height++) {
9045       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9046         DWConv2DMicrokernelTester()
9047           .input_width(input_width)
9048           .input_height(input_height)
9049           .kernel_height(5)
9050           .kernel_width(5)
9051           .subsampling(2)
9052           .padding_left(2)
9053           .padding_right(2)
9054           .padding_top(2)
9055           .padding_bottom(2)
9056           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4);
9057       }
9058     }
9059   }
9060 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4,padding_top_eq_1)9061   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4, padding_top_eq_1) {
9062     TEST_REQUIRES_ARM_NEON_FMA;
9063     for (size_t input_height = 2; input_height < 8; input_height++) {
9064       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9065         DWConv2DMicrokernelTester()
9066           .input_width(input_width)
9067           .input_height(input_height)
9068           .kernel_height(5)
9069           .kernel_width(5)
9070           .subsampling(2)
9071           .padding_left(2)
9072           .padding_right(2)
9073           .padding_top(1)
9074           .padding_bottom(2)
9075           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4);
9076       }
9077     }
9078   }
9079 #endif  // XNN_ARCH_ARM64
9080 
9081 
9082 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2,output_width_eq_4)9083   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2, output_width_eq_4) {
9084     TEST_REQUIRES_ARM_NEON_FMA;
9085     for (size_t input_width = 7; input_width < 9; input_width++) {
9086       DWConv2DMicrokernelTester()
9087         .input_width(input_width)
9088         .input_height(2)
9089         .kernel_height(5)
9090         .kernel_width(5)
9091         .subsampling(2)
9092         .padding_left(2)
9093         .padding_right(2)
9094         .padding_top(2)
9095         .padding_bottom(2)
9096         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc2);
9097     }
9098   }
9099 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2,output_width_div_4)9100   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2, output_width_div_4) {
9101     TEST_REQUIRES_ARM_NEON_FMA;
9102     for (size_t input_width = 16; input_width < 64; input_width += 8) {
9103       DWConv2DMicrokernelTester()
9104         .input_width(input_width)
9105         .input_height(2)
9106         .kernel_height(5)
9107         .kernel_width(5)
9108         .subsampling(2)
9109         .padding_left(2)
9110         .padding_right(2)
9111         .padding_top(2)
9112         .padding_bottom(2)
9113         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc2);
9114     }
9115   }
9116 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2,output_width_lt_4)9117   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2, output_width_lt_4) {
9118     TEST_REQUIRES_ARM_NEON_FMA;
9119     for (size_t input_width = 1; input_width < 7; input_width++) {
9120       DWConv2DMicrokernelTester()
9121         .input_width(8)
9122         .input_height(2)
9123         .kernel_height(5)
9124         .kernel_width(5)
9125         .subsampling(2)
9126         .padding_left(2)
9127         .padding_right(2)
9128         .padding_top(2)
9129         .padding_bottom(2)
9130         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc2);
9131     }
9132   }
9133 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2,output_width_gt_4)9134   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2, output_width_gt_4) {
9135     TEST_REQUIRES_ARM_NEON_FMA;
9136     for (size_t input_width = 9; input_width < 17; input_width++) {
9137       DWConv2DMicrokernelTester()
9138         .input_width(input_width)
9139         .input_height(2)
9140         .kernel_height(5)
9141         .kernel_width(5)
9142         .subsampling(2)
9143         .padding_left(2)
9144         .padding_right(2)
9145         .padding_top(2)
9146         .padding_bottom(2)
9147         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc2);
9148     }
9149   }
9150 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2,output_height_eq_1)9151   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2, output_height_eq_1) {
9152     TEST_REQUIRES_ARM_NEON_FMA;
9153     for (size_t input_height = 1; input_height < 3; input_height++) {
9154       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9155         DWConv2DMicrokernelTester()
9156           .input_width(input_width)
9157           .input_height(input_height)
9158           .kernel_height(5)
9159           .kernel_width(5)
9160           .subsampling(2)
9161           .padding_left(2)
9162           .padding_right(2)
9163           .padding_top(2)
9164           .padding_bottom(2)
9165           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc2);
9166       }
9167     }
9168   }
9169 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2,output_height_gt_1)9170   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2, output_height_gt_1) {
9171     TEST_REQUIRES_ARM_NEON_FMA;
9172     for (size_t input_height = 3; input_height < 5; input_height++) {
9173       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9174         DWConv2DMicrokernelTester()
9175           .input_width(input_width)
9176           .input_height(input_height)
9177           .kernel_height(5)
9178           .kernel_width(5)
9179           .subsampling(2)
9180           .padding_left(2)
9181           .padding_right(2)
9182           .padding_top(2)
9183           .padding_bottom(2)
9184           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc2);
9185       }
9186     }
9187   }
9188 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2,padding_top_eq_1)9189   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC2, padding_top_eq_1) {
9190     TEST_REQUIRES_ARM_NEON_FMA;
9191     for (size_t input_height = 2; input_height < 8; input_height++) {
9192       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9193         DWConv2DMicrokernelTester()
9194           .input_width(input_width)
9195           .input_height(input_height)
9196           .kernel_height(5)
9197           .kernel_width(5)
9198           .subsampling(2)
9199           .padding_left(2)
9200           .padding_right(2)
9201           .padding_top(1)
9202           .padding_bottom(2)
9203           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc2);
9204       }
9205     }
9206   }
9207 #endif  // XNN_ARCH_ARM64
9208 
9209 
9210 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3,output_width_eq_4)9211   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3, output_width_eq_4) {
9212     TEST_REQUIRES_ARM_NEON_FMA;
9213     for (size_t input_width = 7; input_width < 9; input_width++) {
9214       DWConv2DMicrokernelTester()
9215         .input_width(input_width)
9216         .input_height(2)
9217         .kernel_height(5)
9218         .kernel_width(5)
9219         .subsampling(2)
9220         .padding_left(2)
9221         .padding_right(2)
9222         .padding_top(2)
9223         .padding_bottom(2)
9224         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc3);
9225     }
9226   }
9227 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3,output_width_div_4)9228   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3, output_width_div_4) {
9229     TEST_REQUIRES_ARM_NEON_FMA;
9230     for (size_t input_width = 16; input_width < 64; input_width += 8) {
9231       DWConv2DMicrokernelTester()
9232         .input_width(input_width)
9233         .input_height(2)
9234         .kernel_height(5)
9235         .kernel_width(5)
9236         .subsampling(2)
9237         .padding_left(2)
9238         .padding_right(2)
9239         .padding_top(2)
9240         .padding_bottom(2)
9241         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc3);
9242     }
9243   }
9244 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3,output_width_lt_4)9245   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3, output_width_lt_4) {
9246     TEST_REQUIRES_ARM_NEON_FMA;
9247     for (size_t input_width = 1; input_width < 7; input_width++) {
9248       DWConv2DMicrokernelTester()
9249         .input_width(8)
9250         .input_height(2)
9251         .kernel_height(5)
9252         .kernel_width(5)
9253         .subsampling(2)
9254         .padding_left(2)
9255         .padding_right(2)
9256         .padding_top(2)
9257         .padding_bottom(2)
9258         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc3);
9259     }
9260   }
9261 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3,output_width_gt_4)9262   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3, output_width_gt_4) {
9263     TEST_REQUIRES_ARM_NEON_FMA;
9264     for (size_t input_width = 9; input_width < 17; input_width++) {
9265       DWConv2DMicrokernelTester()
9266         .input_width(input_width)
9267         .input_height(2)
9268         .kernel_height(5)
9269         .kernel_width(5)
9270         .subsampling(2)
9271         .padding_left(2)
9272         .padding_right(2)
9273         .padding_top(2)
9274         .padding_bottom(2)
9275         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc3);
9276     }
9277   }
9278 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3,output_height_eq_1)9279   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3, output_height_eq_1) {
9280     TEST_REQUIRES_ARM_NEON_FMA;
9281     for (size_t input_height = 1; input_height < 3; input_height++) {
9282       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9283         DWConv2DMicrokernelTester()
9284           .input_width(input_width)
9285           .input_height(input_height)
9286           .kernel_height(5)
9287           .kernel_width(5)
9288           .subsampling(2)
9289           .padding_left(2)
9290           .padding_right(2)
9291           .padding_top(2)
9292           .padding_bottom(2)
9293           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc3);
9294       }
9295     }
9296   }
9297 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3,output_height_gt_1)9298   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3, output_height_gt_1) {
9299     TEST_REQUIRES_ARM_NEON_FMA;
9300     for (size_t input_height = 3; input_height < 5; input_height++) {
9301       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9302         DWConv2DMicrokernelTester()
9303           .input_width(input_width)
9304           .input_height(input_height)
9305           .kernel_height(5)
9306           .kernel_width(5)
9307           .subsampling(2)
9308           .padding_left(2)
9309           .padding_right(2)
9310           .padding_top(2)
9311           .padding_bottom(2)
9312           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc3);
9313       }
9314     }
9315   }
9316 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3,padding_top_eq_1)9317   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC3, padding_top_eq_1) {
9318     TEST_REQUIRES_ARM_NEON_FMA;
9319     for (size_t input_height = 2; input_height < 8; input_height++) {
9320       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9321         DWConv2DMicrokernelTester()
9322           .input_width(input_width)
9323           .input_height(input_height)
9324           .kernel_height(5)
9325           .kernel_width(5)
9326           .subsampling(2)
9327           .padding_left(2)
9328           .padding_right(2)
9329           .padding_top(1)
9330           .padding_bottom(2)
9331           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc3);
9332       }
9333     }
9334   }
9335 #endif  // XNN_ARCH_ARM64
9336 
9337 
9338 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4,output_width_eq_4)9339   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4, output_width_eq_4) {
9340     TEST_REQUIRES_ARM_NEON_FMA;
9341     for (size_t input_width = 7; input_width < 9; input_width++) {
9342       DWConv2DMicrokernelTester()
9343         .input_width(input_width)
9344         .input_height(2)
9345         .kernel_height(5)
9346         .kernel_width(5)
9347         .subsampling(2)
9348         .padding_left(2)
9349         .padding_right(2)
9350         .padding_top(2)
9351         .padding_bottom(2)
9352         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc4);
9353     }
9354   }
9355 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4,output_width_div_4)9356   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4, output_width_div_4) {
9357     TEST_REQUIRES_ARM_NEON_FMA;
9358     for (size_t input_width = 16; input_width < 64; input_width += 8) {
9359       DWConv2DMicrokernelTester()
9360         .input_width(input_width)
9361         .input_height(2)
9362         .kernel_height(5)
9363         .kernel_width(5)
9364         .subsampling(2)
9365         .padding_left(2)
9366         .padding_right(2)
9367         .padding_top(2)
9368         .padding_bottom(2)
9369         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc4);
9370     }
9371   }
9372 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4,output_width_lt_4)9373   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4, output_width_lt_4) {
9374     TEST_REQUIRES_ARM_NEON_FMA;
9375     for (size_t input_width = 1; input_width < 7; input_width++) {
9376       DWConv2DMicrokernelTester()
9377         .input_width(8)
9378         .input_height(2)
9379         .kernel_height(5)
9380         .kernel_width(5)
9381         .subsampling(2)
9382         .padding_left(2)
9383         .padding_right(2)
9384         .padding_top(2)
9385         .padding_bottom(2)
9386         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc4);
9387     }
9388   }
9389 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4,output_width_gt_4)9390   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4, output_width_gt_4) {
9391     TEST_REQUIRES_ARM_NEON_FMA;
9392     for (size_t input_width = 9; input_width < 17; input_width++) {
9393       DWConv2DMicrokernelTester()
9394         .input_width(input_width)
9395         .input_height(2)
9396         .kernel_height(5)
9397         .kernel_width(5)
9398         .subsampling(2)
9399         .padding_left(2)
9400         .padding_right(2)
9401         .padding_top(2)
9402         .padding_bottom(2)
9403         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc4);
9404     }
9405   }
9406 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4,output_height_eq_1)9407   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4, output_height_eq_1) {
9408     TEST_REQUIRES_ARM_NEON_FMA;
9409     for (size_t input_height = 1; input_height < 3; input_height++) {
9410       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9411         DWConv2DMicrokernelTester()
9412           .input_width(input_width)
9413           .input_height(input_height)
9414           .kernel_height(5)
9415           .kernel_width(5)
9416           .subsampling(2)
9417           .padding_left(2)
9418           .padding_right(2)
9419           .padding_top(2)
9420           .padding_bottom(2)
9421           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc4);
9422       }
9423     }
9424   }
9425 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4,output_height_gt_1)9426   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4, output_height_gt_1) {
9427     TEST_REQUIRES_ARM_NEON_FMA;
9428     for (size_t input_height = 3; input_height < 5; input_height++) {
9429       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9430         DWConv2DMicrokernelTester()
9431           .input_width(input_width)
9432           .input_height(input_height)
9433           .kernel_height(5)
9434           .kernel_width(5)
9435           .subsampling(2)
9436           .padding_left(2)
9437           .padding_right(2)
9438           .padding_top(2)
9439           .padding_bottom(2)
9440           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc4);
9441       }
9442     }
9443   }
9444 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4,padding_top_eq_1)9445   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC4, padding_top_eq_1) {
9446     TEST_REQUIRES_ARM_NEON_FMA;
9447     for (size_t input_height = 2; input_height < 8; input_height++) {
9448       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9449         DWConv2DMicrokernelTester()
9450           .input_width(input_width)
9451           .input_height(input_height)
9452           .kernel_height(5)
9453           .kernel_width(5)
9454           .subsampling(2)
9455           .padding_left(2)
9456           .padding_right(2)
9457           .padding_top(1)
9458           .padding_bottom(2)
9459           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc4);
9460       }
9461     }
9462   }
9463 #endif  // XNN_ARCH_ARM64
9464 
9465 
9466 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5,output_width_eq_4)9467   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5, output_width_eq_4) {
9468     TEST_REQUIRES_ARM_NEON_FMA;
9469     for (size_t input_width = 7; input_width < 9; input_width++) {
9470       DWConv2DMicrokernelTester()
9471         .input_width(input_width)
9472         .input_height(2)
9473         .kernel_height(5)
9474         .kernel_width(5)
9475         .subsampling(2)
9476         .padding_left(2)
9477         .padding_right(2)
9478         .padding_top(2)
9479         .padding_bottom(2)
9480         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc5);
9481     }
9482   }
9483 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5,output_width_div_4)9484   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5, output_width_div_4) {
9485     TEST_REQUIRES_ARM_NEON_FMA;
9486     for (size_t input_width = 16; input_width < 64; input_width += 8) {
9487       DWConv2DMicrokernelTester()
9488         .input_width(input_width)
9489         .input_height(2)
9490         .kernel_height(5)
9491         .kernel_width(5)
9492         .subsampling(2)
9493         .padding_left(2)
9494         .padding_right(2)
9495         .padding_top(2)
9496         .padding_bottom(2)
9497         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc5);
9498     }
9499   }
9500 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5,output_width_lt_4)9501   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5, output_width_lt_4) {
9502     TEST_REQUIRES_ARM_NEON_FMA;
9503     for (size_t input_width = 1; input_width < 7; input_width++) {
9504       DWConv2DMicrokernelTester()
9505         .input_width(8)
9506         .input_height(2)
9507         .kernel_height(5)
9508         .kernel_width(5)
9509         .subsampling(2)
9510         .padding_left(2)
9511         .padding_right(2)
9512         .padding_top(2)
9513         .padding_bottom(2)
9514         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc5);
9515     }
9516   }
9517 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5,output_width_gt_4)9518   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5, output_width_gt_4) {
9519     TEST_REQUIRES_ARM_NEON_FMA;
9520     for (size_t input_width = 9; input_width < 17; input_width++) {
9521       DWConv2DMicrokernelTester()
9522         .input_width(input_width)
9523         .input_height(2)
9524         .kernel_height(5)
9525         .kernel_width(5)
9526         .subsampling(2)
9527         .padding_left(2)
9528         .padding_right(2)
9529         .padding_top(2)
9530         .padding_bottom(2)
9531         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc5);
9532     }
9533   }
9534 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5,output_height_eq_1)9535   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5, output_height_eq_1) {
9536     TEST_REQUIRES_ARM_NEON_FMA;
9537     for (size_t input_height = 1; input_height < 3; input_height++) {
9538       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9539         DWConv2DMicrokernelTester()
9540           .input_width(input_width)
9541           .input_height(input_height)
9542           .kernel_height(5)
9543           .kernel_width(5)
9544           .subsampling(2)
9545           .padding_left(2)
9546           .padding_right(2)
9547           .padding_top(2)
9548           .padding_bottom(2)
9549           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc5);
9550       }
9551     }
9552   }
9553 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5,output_height_gt_1)9554   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5, output_height_gt_1) {
9555     TEST_REQUIRES_ARM_NEON_FMA;
9556     for (size_t input_height = 3; input_height < 5; input_height++) {
9557       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9558         DWConv2DMicrokernelTester()
9559           .input_width(input_width)
9560           .input_height(input_height)
9561           .kernel_height(5)
9562           .kernel_width(5)
9563           .subsampling(2)
9564           .padding_left(2)
9565           .padding_right(2)
9566           .padding_top(2)
9567           .padding_bottom(2)
9568           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc5);
9569       }
9570     }
9571   }
9572 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5,padding_top_eq_1)9573   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_1X4_ACC5, padding_top_eq_1) {
9574     TEST_REQUIRES_ARM_NEON_FMA;
9575     for (size_t input_height = 2; input_height < 8; input_height++) {
9576       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9577         DWConv2DMicrokernelTester()
9578           .input_width(input_width)
9579           .input_height(input_height)
9580           .kernel_height(5)
9581           .kernel_width(5)
9582           .subsampling(2)
9583           .padding_left(2)
9584           .padding_right(2)
9585           .padding_top(1)
9586           .padding_bottom(2)
9587           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_1x4_acc5);
9588       }
9589     }
9590   }
9591 #endif  // XNN_ARCH_ARM64
9592 
9593 
9594 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4,output_width_eq_4)9595   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4, output_width_eq_4) {
9596     TEST_REQUIRES_ARM_NEON_FMA;
9597     for (size_t input_width = 7; input_width < 9; input_width++) {
9598       DWConv2DMicrokernelTester()
9599         .input_width(input_width)
9600         .input_height(4)
9601         .kernel_height(5)
9602         .kernel_width(5)
9603         .subsampling(2)
9604         .padding_left(2)
9605         .padding_right(2)
9606         .padding_top(2)
9607         .padding_bottom(2)
9608         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4);
9609     }
9610   }
9611 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4,output_width_div_4)9612   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4, output_width_div_4) {
9613     TEST_REQUIRES_ARM_NEON_FMA;
9614     for (size_t input_width = 16; input_width < 64; input_width += 8) {
9615       DWConv2DMicrokernelTester()
9616         .input_width(input_width)
9617         .input_height(4)
9618         .kernel_height(5)
9619         .kernel_width(5)
9620         .subsampling(2)
9621         .padding_left(2)
9622         .padding_right(2)
9623         .padding_top(2)
9624         .padding_bottom(2)
9625         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4);
9626     }
9627   }
9628 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4,output_width_lt_4)9629   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4, output_width_lt_4) {
9630     TEST_REQUIRES_ARM_NEON_FMA;
9631     for (size_t input_width = 1; input_width < 7; input_width++) {
9632       DWConv2DMicrokernelTester()
9633         .input_width(8)
9634         .input_height(4)
9635         .kernel_height(5)
9636         .kernel_width(5)
9637         .subsampling(2)
9638         .padding_left(2)
9639         .padding_right(2)
9640         .padding_top(2)
9641         .padding_bottom(2)
9642         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4);
9643     }
9644   }
9645 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4,output_width_gt_4)9646   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4, output_width_gt_4) {
9647     TEST_REQUIRES_ARM_NEON_FMA;
9648     for (size_t input_width = 9; input_width < 17; input_width++) {
9649       DWConv2DMicrokernelTester()
9650         .input_width(input_width)
9651         .input_height(4)
9652         .kernel_height(5)
9653         .kernel_width(5)
9654         .subsampling(2)
9655         .padding_left(2)
9656         .padding_right(2)
9657         .padding_top(2)
9658         .padding_bottom(2)
9659         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4);
9660     }
9661   }
9662 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4,output_height_eq_2)9663   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4, output_height_eq_2) {
9664     TEST_REQUIRES_ARM_NEON_FMA;
9665     for (size_t input_height = 3; input_height < 5; input_height++) {
9666       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9667         DWConv2DMicrokernelTester()
9668           .input_width(input_width)
9669           .input_height(input_height)
9670           .kernel_height(5)
9671           .kernel_width(5)
9672           .subsampling(2)
9673           .padding_left(2)
9674           .padding_right(2)
9675           .padding_top(2)
9676           .padding_bottom(2)
9677           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4);
9678       }
9679     }
9680   }
9681 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4,output_height_div_2)9682   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4, output_height_div_2) {
9683     TEST_REQUIRES_ARM_NEON_FMA;
9684     for (size_t input_height = 8; input_height < 32; input_height += 4) {
9685       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9686         DWConv2DMicrokernelTester()
9687           .input_width(input_width)
9688           .input_height(input_height)
9689           .kernel_height(5)
9690           .kernel_width(5)
9691           .subsampling(2)
9692           .padding_left(2)
9693           .padding_right(2)
9694           .padding_top(2)
9695           .padding_bottom(2)
9696           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4);
9697       }
9698     }
9699   }
9700 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4,output_height_lt_2)9701   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4, output_height_lt_2) {
9702     TEST_REQUIRES_ARM_NEON_FMA;
9703     for (size_t input_height = 1; input_height < 3; input_height++) {
9704       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9705         DWConv2DMicrokernelTester()
9706           .input_width(input_width)
9707           .input_height(input_height)
9708           .kernel_height(5)
9709           .kernel_width(5)
9710           .subsampling(2)
9711           .padding_left(2)
9712           .padding_right(2)
9713           .padding_top(2)
9714           .padding_bottom(2)
9715           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4);
9716       }
9717     }
9718   }
9719 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4,output_height_gt_2)9720   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4, output_height_gt_2) {
9721     TEST_REQUIRES_ARM_NEON_FMA;
9722     for (size_t input_height = 5; input_height < 9; input_height++) {
9723       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9724         DWConv2DMicrokernelTester()
9725           .input_width(input_width)
9726           .input_height(input_height)
9727           .kernel_height(5)
9728           .kernel_width(5)
9729           .subsampling(2)
9730           .padding_left(2)
9731           .padding_right(2)
9732           .padding_top(2)
9733           .padding_bottom(2)
9734           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4);
9735       }
9736     }
9737   }
9738 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4,padding_top_eq_1)9739   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4, padding_top_eq_1) {
9740     TEST_REQUIRES_ARM_NEON_FMA;
9741     for (size_t input_height = 2; input_height < 14; input_height++) {
9742       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9743         DWConv2DMicrokernelTester()
9744           .input_width(input_width)
9745           .input_height(input_height)
9746           .kernel_height(5)
9747           .kernel_width(5)
9748           .subsampling(2)
9749           .padding_left(2)
9750           .padding_right(2)
9751           .padding_top(1)
9752           .padding_bottom(2)
9753           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4);
9754       }
9755     }
9756   }
9757 #endif  // XNN_ARCH_ARM64
9758 
9759 
9760 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2,output_width_eq_4)9761   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2, output_width_eq_4) {
9762     TEST_REQUIRES_ARM_NEON_FMA;
9763     for (size_t input_width = 7; input_width < 9; input_width++) {
9764       DWConv2DMicrokernelTester()
9765         .input_width(input_width)
9766         .input_height(4)
9767         .kernel_height(5)
9768         .kernel_width(5)
9769         .subsampling(2)
9770         .padding_left(2)
9771         .padding_right(2)
9772         .padding_top(2)
9773         .padding_bottom(2)
9774         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc2);
9775     }
9776   }
9777 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2,output_width_div_4)9778   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2, output_width_div_4) {
9779     TEST_REQUIRES_ARM_NEON_FMA;
9780     for (size_t input_width = 16; input_width < 64; input_width += 8) {
9781       DWConv2DMicrokernelTester()
9782         .input_width(input_width)
9783         .input_height(4)
9784         .kernel_height(5)
9785         .kernel_width(5)
9786         .subsampling(2)
9787         .padding_left(2)
9788         .padding_right(2)
9789         .padding_top(2)
9790         .padding_bottom(2)
9791         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc2);
9792     }
9793   }
9794 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2,output_width_lt_4)9795   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2, output_width_lt_4) {
9796     TEST_REQUIRES_ARM_NEON_FMA;
9797     for (size_t input_width = 1; input_width < 7; input_width++) {
9798       DWConv2DMicrokernelTester()
9799         .input_width(8)
9800         .input_height(4)
9801         .kernel_height(5)
9802         .kernel_width(5)
9803         .subsampling(2)
9804         .padding_left(2)
9805         .padding_right(2)
9806         .padding_top(2)
9807         .padding_bottom(2)
9808         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc2);
9809     }
9810   }
9811 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2,output_width_gt_4)9812   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2, output_width_gt_4) {
9813     TEST_REQUIRES_ARM_NEON_FMA;
9814     for (size_t input_width = 9; input_width < 17; input_width++) {
9815       DWConv2DMicrokernelTester()
9816         .input_width(input_width)
9817         .input_height(4)
9818         .kernel_height(5)
9819         .kernel_width(5)
9820         .subsampling(2)
9821         .padding_left(2)
9822         .padding_right(2)
9823         .padding_top(2)
9824         .padding_bottom(2)
9825         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc2);
9826     }
9827   }
9828 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2,output_height_eq_2)9829   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2, output_height_eq_2) {
9830     TEST_REQUIRES_ARM_NEON_FMA;
9831     for (size_t input_height = 3; input_height < 5; input_height++) {
9832       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9833         DWConv2DMicrokernelTester()
9834           .input_width(input_width)
9835           .input_height(input_height)
9836           .kernel_height(5)
9837           .kernel_width(5)
9838           .subsampling(2)
9839           .padding_left(2)
9840           .padding_right(2)
9841           .padding_top(2)
9842           .padding_bottom(2)
9843           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc2);
9844       }
9845     }
9846   }
9847 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2,output_height_div_2)9848   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2, output_height_div_2) {
9849     TEST_REQUIRES_ARM_NEON_FMA;
9850     for (size_t input_height = 8; input_height < 32; input_height += 4) {
9851       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9852         DWConv2DMicrokernelTester()
9853           .input_width(input_width)
9854           .input_height(input_height)
9855           .kernel_height(5)
9856           .kernel_width(5)
9857           .subsampling(2)
9858           .padding_left(2)
9859           .padding_right(2)
9860           .padding_top(2)
9861           .padding_bottom(2)
9862           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc2);
9863       }
9864     }
9865   }
9866 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2,output_height_lt_2)9867   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2, output_height_lt_2) {
9868     TEST_REQUIRES_ARM_NEON_FMA;
9869     for (size_t input_height = 1; input_height < 3; input_height++) {
9870       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9871         DWConv2DMicrokernelTester()
9872           .input_width(input_width)
9873           .input_height(input_height)
9874           .kernel_height(5)
9875           .kernel_width(5)
9876           .subsampling(2)
9877           .padding_left(2)
9878           .padding_right(2)
9879           .padding_top(2)
9880           .padding_bottom(2)
9881           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc2);
9882       }
9883     }
9884   }
9885 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2,output_height_gt_2)9886   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2, output_height_gt_2) {
9887     TEST_REQUIRES_ARM_NEON_FMA;
9888     for (size_t input_height = 5; input_height < 9; input_height++) {
9889       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9890         DWConv2DMicrokernelTester()
9891           .input_width(input_width)
9892           .input_height(input_height)
9893           .kernel_height(5)
9894           .kernel_width(5)
9895           .subsampling(2)
9896           .padding_left(2)
9897           .padding_right(2)
9898           .padding_top(2)
9899           .padding_bottom(2)
9900           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc2);
9901       }
9902     }
9903   }
9904 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2,padding_top_eq_1)9905   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC2, padding_top_eq_1) {
9906     TEST_REQUIRES_ARM_NEON_FMA;
9907     for (size_t input_height = 2; input_height < 14; input_height++) {
9908       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9909         DWConv2DMicrokernelTester()
9910           .input_width(input_width)
9911           .input_height(input_height)
9912           .kernel_height(5)
9913           .kernel_width(5)
9914           .subsampling(2)
9915           .padding_left(2)
9916           .padding_right(2)
9917           .padding_top(1)
9918           .padding_bottom(2)
9919           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc2);
9920       }
9921     }
9922   }
9923 #endif  // XNN_ARCH_ARM64
9924 
9925 
9926 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3,output_width_eq_4)9927   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3, output_width_eq_4) {
9928     TEST_REQUIRES_ARM_NEON_FMA;
9929     for (size_t input_width = 7; input_width < 9; input_width++) {
9930       DWConv2DMicrokernelTester()
9931         .input_width(input_width)
9932         .input_height(4)
9933         .kernel_height(5)
9934         .kernel_width(5)
9935         .subsampling(2)
9936         .padding_left(2)
9937         .padding_right(2)
9938         .padding_top(2)
9939         .padding_bottom(2)
9940         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc3);
9941     }
9942   }
9943 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3,output_width_div_4)9944   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3, output_width_div_4) {
9945     TEST_REQUIRES_ARM_NEON_FMA;
9946     for (size_t input_width = 16; input_width < 64; input_width += 8) {
9947       DWConv2DMicrokernelTester()
9948         .input_width(input_width)
9949         .input_height(4)
9950         .kernel_height(5)
9951         .kernel_width(5)
9952         .subsampling(2)
9953         .padding_left(2)
9954         .padding_right(2)
9955         .padding_top(2)
9956         .padding_bottom(2)
9957         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc3);
9958     }
9959   }
9960 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3,output_width_lt_4)9961   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3, output_width_lt_4) {
9962     TEST_REQUIRES_ARM_NEON_FMA;
9963     for (size_t input_width = 1; input_width < 7; input_width++) {
9964       DWConv2DMicrokernelTester()
9965         .input_width(8)
9966         .input_height(4)
9967         .kernel_height(5)
9968         .kernel_width(5)
9969         .subsampling(2)
9970         .padding_left(2)
9971         .padding_right(2)
9972         .padding_top(2)
9973         .padding_bottom(2)
9974         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc3);
9975     }
9976   }
9977 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3,output_width_gt_4)9978   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3, output_width_gt_4) {
9979     TEST_REQUIRES_ARM_NEON_FMA;
9980     for (size_t input_width = 9; input_width < 17; input_width++) {
9981       DWConv2DMicrokernelTester()
9982         .input_width(input_width)
9983         .input_height(4)
9984         .kernel_height(5)
9985         .kernel_width(5)
9986         .subsampling(2)
9987         .padding_left(2)
9988         .padding_right(2)
9989         .padding_top(2)
9990         .padding_bottom(2)
9991         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc3);
9992     }
9993   }
9994 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3,output_height_eq_2)9995   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3, output_height_eq_2) {
9996     TEST_REQUIRES_ARM_NEON_FMA;
9997     for (size_t input_height = 3; input_height < 5; input_height++) {
9998       for (size_t input_width = 1; input_width < 41; input_width += 7) {
9999         DWConv2DMicrokernelTester()
10000           .input_width(input_width)
10001           .input_height(input_height)
10002           .kernel_height(5)
10003           .kernel_width(5)
10004           .subsampling(2)
10005           .padding_left(2)
10006           .padding_right(2)
10007           .padding_top(2)
10008           .padding_bottom(2)
10009           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc3);
10010       }
10011     }
10012   }
10013 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3,output_height_div_2)10014   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3, output_height_div_2) {
10015     TEST_REQUIRES_ARM_NEON_FMA;
10016     for (size_t input_height = 8; input_height < 32; input_height += 4) {
10017       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10018         DWConv2DMicrokernelTester()
10019           .input_width(input_width)
10020           .input_height(input_height)
10021           .kernel_height(5)
10022           .kernel_width(5)
10023           .subsampling(2)
10024           .padding_left(2)
10025           .padding_right(2)
10026           .padding_top(2)
10027           .padding_bottom(2)
10028           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc3);
10029       }
10030     }
10031   }
10032 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3,output_height_lt_2)10033   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3, output_height_lt_2) {
10034     TEST_REQUIRES_ARM_NEON_FMA;
10035     for (size_t input_height = 1; input_height < 3; input_height++) {
10036       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10037         DWConv2DMicrokernelTester()
10038           .input_width(input_width)
10039           .input_height(input_height)
10040           .kernel_height(5)
10041           .kernel_width(5)
10042           .subsampling(2)
10043           .padding_left(2)
10044           .padding_right(2)
10045           .padding_top(2)
10046           .padding_bottom(2)
10047           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc3);
10048       }
10049     }
10050   }
10051 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3,output_height_gt_2)10052   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3, output_height_gt_2) {
10053     TEST_REQUIRES_ARM_NEON_FMA;
10054     for (size_t input_height = 5; input_height < 9; input_height++) {
10055       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10056         DWConv2DMicrokernelTester()
10057           .input_width(input_width)
10058           .input_height(input_height)
10059           .kernel_height(5)
10060           .kernel_width(5)
10061           .subsampling(2)
10062           .padding_left(2)
10063           .padding_right(2)
10064           .padding_top(2)
10065           .padding_bottom(2)
10066           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc3);
10067       }
10068     }
10069   }
10070 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3,padding_top_eq_1)10071   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_2X4_ACC3, padding_top_eq_1) {
10072     TEST_REQUIRES_ARM_NEON_FMA;
10073     for (size_t input_height = 2; input_height < 14; input_height++) {
10074       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10075         DWConv2DMicrokernelTester()
10076           .input_width(input_width)
10077           .input_height(input_height)
10078           .kernel_height(5)
10079           .kernel_width(5)
10080           .subsampling(2)
10081           .padding_left(2)
10082           .padding_right(2)
10083           .padding_top(1)
10084           .padding_bottom(2)
10085           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_2x4_acc3);
10086       }
10087     }
10088   }
10089 #endif  // XNN_ARCH_ARM64
10090 
10091 
10092 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4,output_width_eq_4)10093   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4, output_width_eq_4) {
10094     TEST_REQUIRES_ARM_NEON_FMA;
10095     for (size_t input_width = 7; input_width < 9; input_width++) {
10096       DWConv2DMicrokernelTester()
10097         .input_width(input_width)
10098         .input_height(6)
10099         .kernel_height(5)
10100         .kernel_width(5)
10101         .subsampling(2)
10102         .padding_left(2)
10103         .padding_right(2)
10104         .padding_top(2)
10105         .padding_bottom(2)
10106         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4);
10107     }
10108   }
10109 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4,output_width_div_4)10110   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4, output_width_div_4) {
10111     TEST_REQUIRES_ARM_NEON_FMA;
10112     for (size_t input_width = 16; input_width < 64; input_width += 8) {
10113       DWConv2DMicrokernelTester()
10114         .input_width(input_width)
10115         .input_height(6)
10116         .kernel_height(5)
10117         .kernel_width(5)
10118         .subsampling(2)
10119         .padding_left(2)
10120         .padding_right(2)
10121         .padding_top(2)
10122         .padding_bottom(2)
10123         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4);
10124     }
10125   }
10126 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4,output_width_lt_4)10127   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4, output_width_lt_4) {
10128     TEST_REQUIRES_ARM_NEON_FMA;
10129     for (size_t input_width = 1; input_width < 7; input_width++) {
10130       DWConv2DMicrokernelTester()
10131         .input_width(8)
10132         .input_height(6)
10133         .kernel_height(5)
10134         .kernel_width(5)
10135         .subsampling(2)
10136         .padding_left(2)
10137         .padding_right(2)
10138         .padding_top(2)
10139         .padding_bottom(2)
10140         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4);
10141     }
10142   }
10143 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4,output_width_gt_4)10144   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4, output_width_gt_4) {
10145     TEST_REQUIRES_ARM_NEON_FMA;
10146     for (size_t input_width = 9; input_width < 17; input_width++) {
10147       DWConv2DMicrokernelTester()
10148         .input_width(input_width)
10149         .input_height(6)
10150         .kernel_height(5)
10151         .kernel_width(5)
10152         .subsampling(2)
10153         .padding_left(2)
10154         .padding_right(2)
10155         .padding_top(2)
10156         .padding_bottom(2)
10157         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4);
10158     }
10159   }
10160 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4,output_height_eq_3)10161   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4, output_height_eq_3) {
10162     TEST_REQUIRES_ARM_NEON_FMA;
10163     for (size_t input_height = 5; input_height < 7; input_height++) {
10164       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10165         DWConv2DMicrokernelTester()
10166           .input_width(input_width)
10167           .input_height(input_height)
10168           .kernel_height(5)
10169           .kernel_width(5)
10170           .subsampling(2)
10171           .padding_left(2)
10172           .padding_right(2)
10173           .padding_top(2)
10174           .padding_bottom(2)
10175           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4);
10176       }
10177     }
10178   }
10179 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4,output_height_div_3)10180   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4, output_height_div_3) {
10181     TEST_REQUIRES_ARM_NEON_FMA;
10182     for (size_t input_height = 12; input_height < 48; input_height += 6) {
10183       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10184         DWConv2DMicrokernelTester()
10185           .input_width(input_width)
10186           .input_height(input_height)
10187           .kernel_height(5)
10188           .kernel_width(5)
10189           .subsampling(2)
10190           .padding_left(2)
10191           .padding_right(2)
10192           .padding_top(2)
10193           .padding_bottom(2)
10194           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4);
10195       }
10196     }
10197   }
10198 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4,output_height_lt_3)10199   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4, output_height_lt_3) {
10200     TEST_REQUIRES_ARM_NEON_FMA;
10201     for (size_t input_height = 1; input_height < 5; input_height++) {
10202       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10203         DWConv2DMicrokernelTester()
10204           .input_width(input_width)
10205           .input_height(input_height)
10206           .kernel_height(5)
10207           .kernel_width(5)
10208           .subsampling(2)
10209           .padding_left(2)
10210           .padding_right(2)
10211           .padding_top(2)
10212           .padding_bottom(2)
10213           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4);
10214       }
10215     }
10216   }
10217 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4,output_height_gt_3)10218   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4, output_height_gt_3) {
10219     TEST_REQUIRES_ARM_NEON_FMA;
10220     for (size_t input_height = 7; input_height < 13; input_height++) {
10221       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10222         DWConv2DMicrokernelTester()
10223           .input_width(input_width)
10224           .input_height(input_height)
10225           .kernel_height(5)
10226           .kernel_width(5)
10227           .subsampling(2)
10228           .padding_left(2)
10229           .padding_right(2)
10230           .padding_top(2)
10231           .padding_bottom(2)
10232           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4);
10233       }
10234     }
10235   }
10236 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4,padding_top_eq_1)10237   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4, padding_top_eq_1) {
10238     TEST_REQUIRES_ARM_NEON_FMA;
10239     for (size_t input_height = 2; input_height < 20; input_height++) {
10240       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10241         DWConv2DMicrokernelTester()
10242           .input_width(input_width)
10243           .input_height(input_height)
10244           .kernel_height(5)
10245           .kernel_width(5)
10246           .subsampling(2)
10247           .padding_left(2)
10248           .padding_right(2)
10249           .padding_top(1)
10250           .padding_bottom(2)
10251           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4);
10252       }
10253     }
10254   }
10255 #endif  // XNN_ARCH_ARM64
10256 
10257 
10258 #if XNN_ARCH_ARM64
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2,output_width_eq_4)10259   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2, output_width_eq_4) {
10260     TEST_REQUIRES_ARM_NEON_FMA;
10261     for (size_t input_width = 7; input_width < 9; input_width++) {
10262       DWConv2DMicrokernelTester()
10263         .input_width(input_width)
10264         .input_height(6)
10265         .kernel_height(5)
10266         .kernel_width(5)
10267         .subsampling(2)
10268         .padding_left(2)
10269         .padding_right(2)
10270         .padding_top(2)
10271         .padding_bottom(2)
10272         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4_acc2);
10273     }
10274   }
10275 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2,output_width_div_4)10276   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2, output_width_div_4) {
10277     TEST_REQUIRES_ARM_NEON_FMA;
10278     for (size_t input_width = 16; input_width < 64; input_width += 8) {
10279       DWConv2DMicrokernelTester()
10280         .input_width(input_width)
10281         .input_height(6)
10282         .kernel_height(5)
10283         .kernel_width(5)
10284         .subsampling(2)
10285         .padding_left(2)
10286         .padding_right(2)
10287         .padding_top(2)
10288         .padding_bottom(2)
10289         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4_acc2);
10290     }
10291   }
10292 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2,output_width_lt_4)10293   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2, output_width_lt_4) {
10294     TEST_REQUIRES_ARM_NEON_FMA;
10295     for (size_t input_width = 1; input_width < 7; input_width++) {
10296       DWConv2DMicrokernelTester()
10297         .input_width(8)
10298         .input_height(6)
10299         .kernel_height(5)
10300         .kernel_width(5)
10301         .subsampling(2)
10302         .padding_left(2)
10303         .padding_right(2)
10304         .padding_top(2)
10305         .padding_bottom(2)
10306         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4_acc2);
10307     }
10308   }
10309 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2,output_width_gt_4)10310   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2, output_width_gt_4) {
10311     TEST_REQUIRES_ARM_NEON_FMA;
10312     for (size_t input_width = 9; input_width < 17; input_width++) {
10313       DWConv2DMicrokernelTester()
10314         .input_width(input_width)
10315         .input_height(6)
10316         .kernel_height(5)
10317         .kernel_width(5)
10318         .subsampling(2)
10319         .padding_left(2)
10320         .padding_right(2)
10321         .padding_top(2)
10322         .padding_bottom(2)
10323         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4_acc2);
10324     }
10325   }
10326 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2,output_height_eq_3)10327   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2, output_height_eq_3) {
10328     TEST_REQUIRES_ARM_NEON_FMA;
10329     for (size_t input_height = 5; input_height < 7; input_height++) {
10330       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10331         DWConv2DMicrokernelTester()
10332           .input_width(input_width)
10333           .input_height(input_height)
10334           .kernel_height(5)
10335           .kernel_width(5)
10336           .subsampling(2)
10337           .padding_left(2)
10338           .padding_right(2)
10339           .padding_top(2)
10340           .padding_bottom(2)
10341           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4_acc2);
10342       }
10343     }
10344   }
10345 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2,output_height_div_3)10346   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2, output_height_div_3) {
10347     TEST_REQUIRES_ARM_NEON_FMA;
10348     for (size_t input_height = 12; input_height < 48; input_height += 6) {
10349       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10350         DWConv2DMicrokernelTester()
10351           .input_width(input_width)
10352           .input_height(input_height)
10353           .kernel_height(5)
10354           .kernel_width(5)
10355           .subsampling(2)
10356           .padding_left(2)
10357           .padding_right(2)
10358           .padding_top(2)
10359           .padding_bottom(2)
10360           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4_acc2);
10361       }
10362     }
10363   }
10364 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2,output_height_lt_3)10365   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2, output_height_lt_3) {
10366     TEST_REQUIRES_ARM_NEON_FMA;
10367     for (size_t input_height = 1; input_height < 5; input_height++) {
10368       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10369         DWConv2DMicrokernelTester()
10370           .input_width(input_width)
10371           .input_height(input_height)
10372           .kernel_height(5)
10373           .kernel_width(5)
10374           .subsampling(2)
10375           .padding_left(2)
10376           .padding_right(2)
10377           .padding_top(2)
10378           .padding_bottom(2)
10379           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4_acc2);
10380       }
10381     }
10382   }
10383 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2,output_height_gt_3)10384   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2, output_height_gt_3) {
10385     TEST_REQUIRES_ARM_NEON_FMA;
10386     for (size_t input_height = 7; input_height < 13; input_height++) {
10387       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10388         DWConv2DMicrokernelTester()
10389           .input_width(input_width)
10390           .input_height(input_height)
10391           .kernel_height(5)
10392           .kernel_width(5)
10393           .subsampling(2)
10394           .padding_left(2)
10395           .padding_right(2)
10396           .padding_top(2)
10397           .padding_bottom(2)
10398           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4_acc2);
10399       }
10400     }
10401   }
10402 
TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2,padding_top_eq_1)10403   TEST(F32_DWCONV2D_CHW_5X5S2P2__NEONFMA_3X4_ACC2, padding_top_eq_1) {
10404     TEST_REQUIRES_ARM_NEON_FMA;
10405     for (size_t input_height = 2; input_height < 20; input_height++) {
10406       for (size_t input_width = 1; input_width < 41; input_width += 7) {
10407         DWConv2DMicrokernelTester()
10408           .input_width(input_width)
10409           .input_height(input_height)
10410           .kernel_height(5)
10411           .kernel_width(5)
10412           .subsampling(2)
10413           .padding_left(2)
10414           .padding_right(2)
10415           .padding_top(1)
10416           .padding_bottom(2)
10417           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__neonfma_3x4_acc2);
10418       }
10419     }
10420   }
10421 #endif  // XNN_ARCH_ARM64
10422 
10423 
10424 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4,output_width_eq_4)10425   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4, output_width_eq_4) {
10426     TEST_REQUIRES_X86_SSE;
10427     DWConv2DMicrokernelTester()
10428       .input_width(4)
10429       .input_height(1)
10430       .kernel_height(3)
10431       .kernel_width(3)
10432       .subsampling(1)
10433       .padding_left(1)
10434       .padding_right(1)
10435       .padding_top(1)
10436       .padding_bottom(1)
10437       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4);
10438   }
10439 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4,output_width_div_4)10440   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4, output_width_div_4) {
10441     TEST_REQUIRES_X86_SSE;
10442     for (size_t input_width = 8; input_width < 32; input_width += 4) {
10443       DWConv2DMicrokernelTester()
10444         .input_width(input_width)
10445         .input_height(1)
10446         .kernel_height(3)
10447         .kernel_width(3)
10448         .subsampling(1)
10449         .padding_left(1)
10450         .padding_right(1)
10451         .padding_top(1)
10452         .padding_bottom(1)
10453         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4);
10454     }
10455   }
10456 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4,output_width_lt_4)10457   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4, output_width_lt_4) {
10458     TEST_REQUIRES_X86_SSE;
10459     for (size_t input_width = 1; input_width < 4; input_width++) {
10460       DWConv2DMicrokernelTester()
10461         .input_width(4)
10462         .input_height(1)
10463         .kernel_height(3)
10464         .kernel_width(3)
10465         .subsampling(1)
10466         .padding_left(1)
10467         .padding_right(1)
10468         .padding_top(1)
10469         .padding_bottom(1)
10470         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4);
10471     }
10472   }
10473 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4,output_width_gt_4)10474   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4, output_width_gt_4) {
10475     TEST_REQUIRES_X86_SSE;
10476     for (size_t input_width = 5; input_width < 9; input_width++) {
10477       DWConv2DMicrokernelTester()
10478         .input_width(input_width)
10479         .input_height(1)
10480         .kernel_height(3)
10481         .kernel_width(3)
10482         .subsampling(1)
10483         .padding_left(1)
10484         .padding_right(1)
10485         .padding_top(1)
10486         .padding_bottom(1)
10487         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4);
10488     }
10489   }
10490 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4,output_height_gt_1)10491   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4, output_height_gt_1) {
10492     TEST_REQUIRES_X86_SSE;
10493     for (size_t input_height = 2; input_height < 3; input_height++) {
10494       for (size_t input_width = 1; input_width < 21; input_width += 3) {
10495         DWConv2DMicrokernelTester()
10496           .input_width(input_width)
10497           .input_height(input_height)
10498           .kernel_height(3)
10499           .kernel_width(3)
10500           .subsampling(1)
10501           .padding_left(1)
10502           .padding_right(1)
10503           .padding_top(1)
10504           .padding_bottom(1)
10505           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4);
10506       }
10507     }
10508   }
10509 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10510 
10511 
10512 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC2,output_width_eq_4)10513   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC2, output_width_eq_4) {
10514     TEST_REQUIRES_X86_SSE;
10515     DWConv2DMicrokernelTester()
10516       .input_width(4)
10517       .input_height(1)
10518       .kernel_height(3)
10519       .kernel_width(3)
10520       .subsampling(1)
10521       .padding_left(1)
10522       .padding_right(1)
10523       .padding_top(1)
10524       .padding_bottom(1)
10525       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc2);
10526   }
10527 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC2,output_width_div_4)10528   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC2, output_width_div_4) {
10529     TEST_REQUIRES_X86_SSE;
10530     for (size_t input_width = 8; input_width < 32; input_width += 4) {
10531       DWConv2DMicrokernelTester()
10532         .input_width(input_width)
10533         .input_height(1)
10534         .kernel_height(3)
10535         .kernel_width(3)
10536         .subsampling(1)
10537         .padding_left(1)
10538         .padding_right(1)
10539         .padding_top(1)
10540         .padding_bottom(1)
10541         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc2);
10542     }
10543   }
10544 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC2,output_width_lt_4)10545   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC2, output_width_lt_4) {
10546     TEST_REQUIRES_X86_SSE;
10547     for (size_t input_width = 1; input_width < 4; input_width++) {
10548       DWConv2DMicrokernelTester()
10549         .input_width(4)
10550         .input_height(1)
10551         .kernel_height(3)
10552         .kernel_width(3)
10553         .subsampling(1)
10554         .padding_left(1)
10555         .padding_right(1)
10556         .padding_top(1)
10557         .padding_bottom(1)
10558         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc2);
10559     }
10560   }
10561 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC2,output_width_gt_4)10562   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC2, output_width_gt_4) {
10563     TEST_REQUIRES_X86_SSE;
10564     for (size_t input_width = 5; input_width < 9; input_width++) {
10565       DWConv2DMicrokernelTester()
10566         .input_width(input_width)
10567         .input_height(1)
10568         .kernel_height(3)
10569         .kernel_width(3)
10570         .subsampling(1)
10571         .padding_left(1)
10572         .padding_right(1)
10573         .padding_top(1)
10574         .padding_bottom(1)
10575         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc2);
10576     }
10577   }
10578 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC2,output_height_gt_1)10579   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC2, output_height_gt_1) {
10580     TEST_REQUIRES_X86_SSE;
10581     for (size_t input_height = 2; input_height < 3; input_height++) {
10582       for (size_t input_width = 1; input_width < 21; input_width += 3) {
10583         DWConv2DMicrokernelTester()
10584           .input_width(input_width)
10585           .input_height(input_height)
10586           .kernel_height(3)
10587           .kernel_width(3)
10588           .subsampling(1)
10589           .padding_left(1)
10590           .padding_right(1)
10591           .padding_top(1)
10592           .padding_bottom(1)
10593           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc2);
10594       }
10595     }
10596   }
10597 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10598 
10599 
10600 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC3,output_width_eq_4)10601   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC3, output_width_eq_4) {
10602     TEST_REQUIRES_X86_SSE;
10603     DWConv2DMicrokernelTester()
10604       .input_width(4)
10605       .input_height(1)
10606       .kernel_height(3)
10607       .kernel_width(3)
10608       .subsampling(1)
10609       .padding_left(1)
10610       .padding_right(1)
10611       .padding_top(1)
10612       .padding_bottom(1)
10613       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc3);
10614   }
10615 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC3,output_width_div_4)10616   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC3, output_width_div_4) {
10617     TEST_REQUIRES_X86_SSE;
10618     for (size_t input_width = 8; input_width < 32; input_width += 4) {
10619       DWConv2DMicrokernelTester()
10620         .input_width(input_width)
10621         .input_height(1)
10622         .kernel_height(3)
10623         .kernel_width(3)
10624         .subsampling(1)
10625         .padding_left(1)
10626         .padding_right(1)
10627         .padding_top(1)
10628         .padding_bottom(1)
10629         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc3);
10630     }
10631   }
10632 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC3,output_width_lt_4)10633   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC3, output_width_lt_4) {
10634     TEST_REQUIRES_X86_SSE;
10635     for (size_t input_width = 1; input_width < 4; input_width++) {
10636       DWConv2DMicrokernelTester()
10637         .input_width(4)
10638         .input_height(1)
10639         .kernel_height(3)
10640         .kernel_width(3)
10641         .subsampling(1)
10642         .padding_left(1)
10643         .padding_right(1)
10644         .padding_top(1)
10645         .padding_bottom(1)
10646         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc3);
10647     }
10648   }
10649 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC3,output_width_gt_4)10650   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC3, output_width_gt_4) {
10651     TEST_REQUIRES_X86_SSE;
10652     for (size_t input_width = 5; input_width < 9; input_width++) {
10653       DWConv2DMicrokernelTester()
10654         .input_width(input_width)
10655         .input_height(1)
10656         .kernel_height(3)
10657         .kernel_width(3)
10658         .subsampling(1)
10659         .padding_left(1)
10660         .padding_right(1)
10661         .padding_top(1)
10662         .padding_bottom(1)
10663         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc3);
10664     }
10665   }
10666 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC3,output_height_gt_1)10667   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC3, output_height_gt_1) {
10668     TEST_REQUIRES_X86_SSE;
10669     for (size_t input_height = 2; input_height < 3; input_height++) {
10670       for (size_t input_width = 1; input_width < 21; input_width += 3) {
10671         DWConv2DMicrokernelTester()
10672           .input_width(input_width)
10673           .input_height(input_height)
10674           .kernel_height(3)
10675           .kernel_width(3)
10676           .subsampling(1)
10677           .padding_left(1)
10678           .padding_right(1)
10679           .padding_top(1)
10680           .padding_bottom(1)
10681           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc3);
10682       }
10683     }
10684   }
10685 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10686 
10687 
10688 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC4,output_width_eq_4)10689   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC4, output_width_eq_4) {
10690     TEST_REQUIRES_X86_SSE;
10691     DWConv2DMicrokernelTester()
10692       .input_width(4)
10693       .input_height(1)
10694       .kernel_height(3)
10695       .kernel_width(3)
10696       .subsampling(1)
10697       .padding_left(1)
10698       .padding_right(1)
10699       .padding_top(1)
10700       .padding_bottom(1)
10701       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc4);
10702   }
10703 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC4,output_width_div_4)10704   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC4, output_width_div_4) {
10705     TEST_REQUIRES_X86_SSE;
10706     for (size_t input_width = 8; input_width < 32; input_width += 4) {
10707       DWConv2DMicrokernelTester()
10708         .input_width(input_width)
10709         .input_height(1)
10710         .kernel_height(3)
10711         .kernel_width(3)
10712         .subsampling(1)
10713         .padding_left(1)
10714         .padding_right(1)
10715         .padding_top(1)
10716         .padding_bottom(1)
10717         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc4);
10718     }
10719   }
10720 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC4,output_width_lt_4)10721   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC4, output_width_lt_4) {
10722     TEST_REQUIRES_X86_SSE;
10723     for (size_t input_width = 1; input_width < 4; input_width++) {
10724       DWConv2DMicrokernelTester()
10725         .input_width(4)
10726         .input_height(1)
10727         .kernel_height(3)
10728         .kernel_width(3)
10729         .subsampling(1)
10730         .padding_left(1)
10731         .padding_right(1)
10732         .padding_top(1)
10733         .padding_bottom(1)
10734         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc4);
10735     }
10736   }
10737 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC4,output_width_gt_4)10738   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC4, output_width_gt_4) {
10739     TEST_REQUIRES_X86_SSE;
10740     for (size_t input_width = 5; input_width < 9; input_width++) {
10741       DWConv2DMicrokernelTester()
10742         .input_width(input_width)
10743         .input_height(1)
10744         .kernel_height(3)
10745         .kernel_width(3)
10746         .subsampling(1)
10747         .padding_left(1)
10748         .padding_right(1)
10749         .padding_top(1)
10750         .padding_bottom(1)
10751         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc4);
10752     }
10753   }
10754 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC4,output_height_gt_1)10755   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_1X4_ACC4, output_height_gt_1) {
10756     TEST_REQUIRES_X86_SSE;
10757     for (size_t input_height = 2; input_height < 3; input_height++) {
10758       for (size_t input_width = 1; input_width < 21; input_width += 3) {
10759         DWConv2DMicrokernelTester()
10760           .input_width(input_width)
10761           .input_height(input_height)
10762           .kernel_height(3)
10763           .kernel_width(3)
10764           .subsampling(1)
10765           .padding_left(1)
10766           .padding_right(1)
10767           .padding_top(1)
10768           .padding_bottom(1)
10769           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_1x4_acc4);
10770       }
10771     }
10772   }
10773 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10774 
10775 
10776 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4,output_width_eq_4)10777   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4, output_width_eq_4) {
10778     TEST_REQUIRES_X86_SSE;
10779     DWConv2DMicrokernelTester()
10780       .input_width(4)
10781       .input_height(2)
10782       .kernel_height(3)
10783       .kernel_width(3)
10784       .subsampling(1)
10785       .padding_left(1)
10786       .padding_right(1)
10787       .padding_top(1)
10788       .padding_bottom(1)
10789       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4);
10790   }
10791 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4,output_width_div_4)10792   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4, output_width_div_4) {
10793     TEST_REQUIRES_X86_SSE;
10794     for (size_t input_width = 8; input_width < 32; input_width += 4) {
10795       DWConv2DMicrokernelTester()
10796         .input_width(input_width)
10797         .input_height(2)
10798         .kernel_height(3)
10799         .kernel_width(3)
10800         .subsampling(1)
10801         .padding_left(1)
10802         .padding_right(1)
10803         .padding_top(1)
10804         .padding_bottom(1)
10805         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4);
10806     }
10807   }
10808 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4,output_width_lt_4)10809   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4, output_width_lt_4) {
10810     TEST_REQUIRES_X86_SSE;
10811     for (size_t input_width = 1; input_width < 4; input_width++) {
10812       DWConv2DMicrokernelTester()
10813         .input_width(4)
10814         .input_height(2)
10815         .kernel_height(3)
10816         .kernel_width(3)
10817         .subsampling(1)
10818         .padding_left(1)
10819         .padding_right(1)
10820         .padding_top(1)
10821         .padding_bottom(1)
10822         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4);
10823     }
10824   }
10825 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4,output_width_gt_4)10826   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4, output_width_gt_4) {
10827     TEST_REQUIRES_X86_SSE;
10828     for (size_t input_width = 5; input_width < 9; input_width++) {
10829       DWConv2DMicrokernelTester()
10830         .input_width(input_width)
10831         .input_height(2)
10832         .kernel_height(3)
10833         .kernel_width(3)
10834         .subsampling(1)
10835         .padding_left(1)
10836         .padding_right(1)
10837         .padding_top(1)
10838         .padding_bottom(1)
10839         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4);
10840     }
10841   }
10842 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4,output_height_div_2)10843   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4, output_height_div_2) {
10844     TEST_REQUIRES_X86_SSE;
10845     for (size_t input_height = 4; input_height < 16; input_height += 2) {
10846       for (size_t input_width = 1; input_width < 21; input_width += 3) {
10847         DWConv2DMicrokernelTester()
10848           .input_width(input_width)
10849           .input_height(input_height)
10850           .kernel_height(3)
10851           .kernel_width(3)
10852           .subsampling(1)
10853           .padding_left(1)
10854           .padding_right(1)
10855           .padding_top(1)
10856           .padding_bottom(1)
10857           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4);
10858       }
10859     }
10860   }
10861 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4,output_height_lt_2)10862   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4, output_height_lt_2) {
10863     TEST_REQUIRES_X86_SSE;
10864     for (size_t input_height = 1; input_height < 2; input_height++) {
10865       for (size_t input_width = 1; input_width < 21; input_width += 3) {
10866         DWConv2DMicrokernelTester()
10867           .input_width(input_width)
10868           .input_height(input_height)
10869           .kernel_height(3)
10870           .kernel_width(3)
10871           .subsampling(1)
10872           .padding_left(1)
10873           .padding_right(1)
10874           .padding_top(1)
10875           .padding_bottom(1)
10876           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4);
10877       }
10878     }
10879   }
10880 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4,output_height_gt_2)10881   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4, output_height_gt_2) {
10882     TEST_REQUIRES_X86_SSE;
10883     for (size_t input_height = 3; input_height < 5; input_height++) {
10884       for (size_t input_width = 1; input_width < 21; input_width += 3) {
10885         DWConv2DMicrokernelTester()
10886           .input_width(input_width)
10887           .input_height(input_height)
10888           .kernel_height(3)
10889           .kernel_width(3)
10890           .subsampling(1)
10891           .padding_left(1)
10892           .padding_right(1)
10893           .padding_top(1)
10894           .padding_bottom(1)
10895           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4);
10896       }
10897     }
10898   }
10899 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10900 
10901 
10902 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2,output_width_eq_4)10903   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2, output_width_eq_4) {
10904     TEST_REQUIRES_X86_SSE;
10905     DWConv2DMicrokernelTester()
10906       .input_width(4)
10907       .input_height(2)
10908       .kernel_height(3)
10909       .kernel_width(3)
10910       .subsampling(1)
10911       .padding_left(1)
10912       .padding_right(1)
10913       .padding_top(1)
10914       .padding_bottom(1)
10915       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4_acc2);
10916   }
10917 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2,output_width_div_4)10918   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2, output_width_div_4) {
10919     TEST_REQUIRES_X86_SSE;
10920     for (size_t input_width = 8; input_width < 32; input_width += 4) {
10921       DWConv2DMicrokernelTester()
10922         .input_width(input_width)
10923         .input_height(2)
10924         .kernel_height(3)
10925         .kernel_width(3)
10926         .subsampling(1)
10927         .padding_left(1)
10928         .padding_right(1)
10929         .padding_top(1)
10930         .padding_bottom(1)
10931         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4_acc2);
10932     }
10933   }
10934 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2,output_width_lt_4)10935   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2, output_width_lt_4) {
10936     TEST_REQUIRES_X86_SSE;
10937     for (size_t input_width = 1; input_width < 4; input_width++) {
10938       DWConv2DMicrokernelTester()
10939         .input_width(4)
10940         .input_height(2)
10941         .kernel_height(3)
10942         .kernel_width(3)
10943         .subsampling(1)
10944         .padding_left(1)
10945         .padding_right(1)
10946         .padding_top(1)
10947         .padding_bottom(1)
10948         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4_acc2);
10949     }
10950   }
10951 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2,output_width_gt_4)10952   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2, output_width_gt_4) {
10953     TEST_REQUIRES_X86_SSE;
10954     for (size_t input_width = 5; input_width < 9; input_width++) {
10955       DWConv2DMicrokernelTester()
10956         .input_width(input_width)
10957         .input_height(2)
10958         .kernel_height(3)
10959         .kernel_width(3)
10960         .subsampling(1)
10961         .padding_left(1)
10962         .padding_right(1)
10963         .padding_top(1)
10964         .padding_bottom(1)
10965         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4_acc2);
10966     }
10967   }
10968 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2,output_height_div_2)10969   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2, output_height_div_2) {
10970     TEST_REQUIRES_X86_SSE;
10971     for (size_t input_height = 4; input_height < 16; input_height += 2) {
10972       for (size_t input_width = 1; input_width < 21; input_width += 3) {
10973         DWConv2DMicrokernelTester()
10974           .input_width(input_width)
10975           .input_height(input_height)
10976           .kernel_height(3)
10977           .kernel_width(3)
10978           .subsampling(1)
10979           .padding_left(1)
10980           .padding_right(1)
10981           .padding_top(1)
10982           .padding_bottom(1)
10983           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4_acc2);
10984       }
10985     }
10986   }
10987 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2,output_height_lt_2)10988   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2, output_height_lt_2) {
10989     TEST_REQUIRES_X86_SSE;
10990     for (size_t input_height = 1; input_height < 2; input_height++) {
10991       for (size_t input_width = 1; input_width < 21; input_width += 3) {
10992         DWConv2DMicrokernelTester()
10993           .input_width(input_width)
10994           .input_height(input_height)
10995           .kernel_height(3)
10996           .kernel_width(3)
10997           .subsampling(1)
10998           .padding_left(1)
10999           .padding_right(1)
11000           .padding_top(1)
11001           .padding_bottom(1)
11002           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4_acc2);
11003       }
11004     }
11005   }
11006 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2,output_height_gt_2)11007   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_2X4_ACC2, output_height_gt_2) {
11008     TEST_REQUIRES_X86_SSE;
11009     for (size_t input_height = 3; input_height < 5; input_height++) {
11010       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11011         DWConv2DMicrokernelTester()
11012           .input_width(input_width)
11013           .input_height(input_height)
11014           .kernel_height(3)
11015           .kernel_width(3)
11016           .subsampling(1)
11017           .padding_left(1)
11018           .padding_right(1)
11019           .padding_top(1)
11020           .padding_bottom(1)
11021           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_2x4_acc2);
11022       }
11023     }
11024   }
11025 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11026 
11027 
11028 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4,output_width_eq_4)11029   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4, output_width_eq_4) {
11030     TEST_REQUIRES_X86_SSE;
11031     DWConv2DMicrokernelTester()
11032       .input_width(4)
11033       .input_height(3)
11034       .kernel_height(3)
11035       .kernel_width(3)
11036       .subsampling(1)
11037       .padding_left(1)
11038       .padding_right(1)
11039       .padding_top(1)
11040       .padding_bottom(1)
11041       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_3x4);
11042   }
11043 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4,output_width_div_4)11044   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4, output_width_div_4) {
11045     TEST_REQUIRES_X86_SSE;
11046     for (size_t input_width = 8; input_width < 32; input_width += 4) {
11047       DWConv2DMicrokernelTester()
11048         .input_width(input_width)
11049         .input_height(3)
11050         .kernel_height(3)
11051         .kernel_width(3)
11052         .subsampling(1)
11053         .padding_left(1)
11054         .padding_right(1)
11055         .padding_top(1)
11056         .padding_bottom(1)
11057         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_3x4);
11058     }
11059   }
11060 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4,output_width_lt_4)11061   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4, output_width_lt_4) {
11062     TEST_REQUIRES_X86_SSE;
11063     for (size_t input_width = 1; input_width < 4; input_width++) {
11064       DWConv2DMicrokernelTester()
11065         .input_width(4)
11066         .input_height(3)
11067         .kernel_height(3)
11068         .kernel_width(3)
11069         .subsampling(1)
11070         .padding_left(1)
11071         .padding_right(1)
11072         .padding_top(1)
11073         .padding_bottom(1)
11074         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_3x4);
11075     }
11076   }
11077 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4,output_width_gt_4)11078   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4, output_width_gt_4) {
11079     TEST_REQUIRES_X86_SSE;
11080     for (size_t input_width = 5; input_width < 9; input_width++) {
11081       DWConv2DMicrokernelTester()
11082         .input_width(input_width)
11083         .input_height(3)
11084         .kernel_height(3)
11085         .kernel_width(3)
11086         .subsampling(1)
11087         .padding_left(1)
11088         .padding_right(1)
11089         .padding_top(1)
11090         .padding_bottom(1)
11091         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_3x4);
11092     }
11093   }
11094 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4,output_height_div_3)11095   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4, output_height_div_3) {
11096     TEST_REQUIRES_X86_SSE;
11097     for (size_t input_height = 6; input_height < 24; input_height += 3) {
11098       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11099         DWConv2DMicrokernelTester()
11100           .input_width(input_width)
11101           .input_height(input_height)
11102           .kernel_height(3)
11103           .kernel_width(3)
11104           .subsampling(1)
11105           .padding_left(1)
11106           .padding_right(1)
11107           .padding_top(1)
11108           .padding_bottom(1)
11109           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_3x4);
11110       }
11111     }
11112   }
11113 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4,output_height_lt_3)11114   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4, output_height_lt_3) {
11115     TEST_REQUIRES_X86_SSE;
11116     for (size_t input_height = 1; input_height < 3; input_height++) {
11117       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11118         DWConv2DMicrokernelTester()
11119           .input_width(input_width)
11120           .input_height(input_height)
11121           .kernel_height(3)
11122           .kernel_width(3)
11123           .subsampling(1)
11124           .padding_left(1)
11125           .padding_right(1)
11126           .padding_top(1)
11127           .padding_bottom(1)
11128           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_3x4);
11129       }
11130     }
11131   }
11132 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4,output_height_gt_3)11133   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_3X4, output_height_gt_3) {
11134     TEST_REQUIRES_X86_SSE;
11135     for (size_t input_height = 4; input_height < 7; input_height++) {
11136       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11137         DWConv2DMicrokernelTester()
11138           .input_width(input_width)
11139           .input_height(input_height)
11140           .kernel_height(3)
11141           .kernel_width(3)
11142           .subsampling(1)
11143           .padding_left(1)
11144           .padding_right(1)
11145           .padding_top(1)
11146           .padding_bottom(1)
11147           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_3x4);
11148       }
11149     }
11150   }
11151 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11152 
11153 
11154 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4,output_width_eq_4)11155   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4, output_width_eq_4) {
11156     TEST_REQUIRES_X86_SSE;
11157     DWConv2DMicrokernelTester()
11158       .input_width(4)
11159       .input_height(4)
11160       .kernel_height(3)
11161       .kernel_width(3)
11162       .subsampling(1)
11163       .padding_left(1)
11164       .padding_right(1)
11165       .padding_top(1)
11166       .padding_bottom(1)
11167       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_4x4);
11168   }
11169 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4,output_width_div_4)11170   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4, output_width_div_4) {
11171     TEST_REQUIRES_X86_SSE;
11172     for (size_t input_width = 8; input_width < 32; input_width += 4) {
11173       DWConv2DMicrokernelTester()
11174         .input_width(input_width)
11175         .input_height(4)
11176         .kernel_height(3)
11177         .kernel_width(3)
11178         .subsampling(1)
11179         .padding_left(1)
11180         .padding_right(1)
11181         .padding_top(1)
11182         .padding_bottom(1)
11183         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_4x4);
11184     }
11185   }
11186 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4,output_width_lt_4)11187   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4, output_width_lt_4) {
11188     TEST_REQUIRES_X86_SSE;
11189     for (size_t input_width = 1; input_width < 4; input_width++) {
11190       DWConv2DMicrokernelTester()
11191         .input_width(4)
11192         .input_height(4)
11193         .kernel_height(3)
11194         .kernel_width(3)
11195         .subsampling(1)
11196         .padding_left(1)
11197         .padding_right(1)
11198         .padding_top(1)
11199         .padding_bottom(1)
11200         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_4x4);
11201     }
11202   }
11203 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4,output_width_gt_4)11204   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4, output_width_gt_4) {
11205     TEST_REQUIRES_X86_SSE;
11206     for (size_t input_width = 5; input_width < 9; input_width++) {
11207       DWConv2DMicrokernelTester()
11208         .input_width(input_width)
11209         .input_height(4)
11210         .kernel_height(3)
11211         .kernel_width(3)
11212         .subsampling(1)
11213         .padding_left(1)
11214         .padding_right(1)
11215         .padding_top(1)
11216         .padding_bottom(1)
11217         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_4x4);
11218     }
11219   }
11220 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4,output_height_div_4)11221   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4, output_height_div_4) {
11222     TEST_REQUIRES_X86_SSE;
11223     for (size_t input_height = 8; input_height < 32; input_height += 4) {
11224       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11225         DWConv2DMicrokernelTester()
11226           .input_width(input_width)
11227           .input_height(input_height)
11228           .kernel_height(3)
11229           .kernel_width(3)
11230           .subsampling(1)
11231           .padding_left(1)
11232           .padding_right(1)
11233           .padding_top(1)
11234           .padding_bottom(1)
11235           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_4x4);
11236       }
11237     }
11238   }
11239 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4,output_height_lt_4)11240   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4, output_height_lt_4) {
11241     TEST_REQUIRES_X86_SSE;
11242     for (size_t input_height = 1; input_height < 4; input_height++) {
11243       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11244         DWConv2DMicrokernelTester()
11245           .input_width(input_width)
11246           .input_height(input_height)
11247           .kernel_height(3)
11248           .kernel_width(3)
11249           .subsampling(1)
11250           .padding_left(1)
11251           .padding_right(1)
11252           .padding_top(1)
11253           .padding_bottom(1)
11254           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_4x4);
11255       }
11256     }
11257   }
11258 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4,output_height_gt_4)11259   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_4X4, output_height_gt_4) {
11260     TEST_REQUIRES_X86_SSE;
11261     for (size_t input_height = 5; input_height < 9; input_height++) {
11262       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11263         DWConv2DMicrokernelTester()
11264           .input_width(input_width)
11265           .input_height(input_height)
11266           .kernel_height(3)
11267           .kernel_width(3)
11268           .subsampling(1)
11269           .padding_left(1)
11270           .padding_right(1)
11271           .padding_top(1)
11272           .padding_bottom(1)
11273           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_4x4);
11274       }
11275     }
11276   }
11277 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11278 
11279 
11280 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4,output_width_eq_4)11281   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4, output_width_eq_4) {
11282     TEST_REQUIRES_X86_SSE;
11283     DWConv2DMicrokernelTester()
11284       .input_width(4)
11285       .input_height(5)
11286       .kernel_height(3)
11287       .kernel_width(3)
11288       .subsampling(1)
11289       .padding_left(1)
11290       .padding_right(1)
11291       .padding_top(1)
11292       .padding_bottom(1)
11293       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_5x4);
11294   }
11295 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4,output_width_div_4)11296   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4, output_width_div_4) {
11297     TEST_REQUIRES_X86_SSE;
11298     for (size_t input_width = 8; input_width < 32; input_width += 4) {
11299       DWConv2DMicrokernelTester()
11300         .input_width(input_width)
11301         .input_height(5)
11302         .kernel_height(3)
11303         .kernel_width(3)
11304         .subsampling(1)
11305         .padding_left(1)
11306         .padding_right(1)
11307         .padding_top(1)
11308         .padding_bottom(1)
11309         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_5x4);
11310     }
11311   }
11312 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4,output_width_lt_4)11313   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4, output_width_lt_4) {
11314     TEST_REQUIRES_X86_SSE;
11315     for (size_t input_width = 1; input_width < 4; input_width++) {
11316       DWConv2DMicrokernelTester()
11317         .input_width(4)
11318         .input_height(5)
11319         .kernel_height(3)
11320         .kernel_width(3)
11321         .subsampling(1)
11322         .padding_left(1)
11323         .padding_right(1)
11324         .padding_top(1)
11325         .padding_bottom(1)
11326         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_5x4);
11327     }
11328   }
11329 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4,output_width_gt_4)11330   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4, output_width_gt_4) {
11331     TEST_REQUIRES_X86_SSE;
11332     for (size_t input_width = 5; input_width < 9; input_width++) {
11333       DWConv2DMicrokernelTester()
11334         .input_width(input_width)
11335         .input_height(5)
11336         .kernel_height(3)
11337         .kernel_width(3)
11338         .subsampling(1)
11339         .padding_left(1)
11340         .padding_right(1)
11341         .padding_top(1)
11342         .padding_bottom(1)
11343         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_5x4);
11344     }
11345   }
11346 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4,output_height_div_5)11347   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4, output_height_div_5) {
11348     TEST_REQUIRES_X86_SSE;
11349     for (size_t input_height = 10; input_height < 40; input_height += 5) {
11350       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11351         DWConv2DMicrokernelTester()
11352           .input_width(input_width)
11353           .input_height(input_height)
11354           .kernel_height(3)
11355           .kernel_width(3)
11356           .subsampling(1)
11357           .padding_left(1)
11358           .padding_right(1)
11359           .padding_top(1)
11360           .padding_bottom(1)
11361           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_5x4);
11362       }
11363     }
11364   }
11365 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4,output_height_lt_5)11366   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4, output_height_lt_5) {
11367     TEST_REQUIRES_X86_SSE;
11368     for (size_t input_height = 1; input_height < 5; input_height++) {
11369       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11370         DWConv2DMicrokernelTester()
11371           .input_width(input_width)
11372           .input_height(input_height)
11373           .kernel_height(3)
11374           .kernel_width(3)
11375           .subsampling(1)
11376           .padding_left(1)
11377           .padding_right(1)
11378           .padding_top(1)
11379           .padding_bottom(1)
11380           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_5x4);
11381       }
11382     }
11383   }
11384 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4,output_height_gt_5)11385   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_5X4, output_height_gt_5) {
11386     TEST_REQUIRES_X86_SSE;
11387     for (size_t input_height = 6; input_height < 11; input_height++) {
11388       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11389         DWConv2DMicrokernelTester()
11390           .input_width(input_width)
11391           .input_height(input_height)
11392           .kernel_height(3)
11393           .kernel_width(3)
11394           .subsampling(1)
11395           .padding_left(1)
11396           .padding_right(1)
11397           .padding_top(1)
11398           .padding_bottom(1)
11399           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_5x4);
11400       }
11401     }
11402   }
11403 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11404 
11405 
11406 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4,output_width_eq_4)11407   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4, output_width_eq_4) {
11408     TEST_REQUIRES_X86_SSE;
11409     DWConv2DMicrokernelTester()
11410       .input_width(4)
11411       .input_height(6)
11412       .kernel_height(3)
11413       .kernel_width(3)
11414       .subsampling(1)
11415       .padding_left(1)
11416       .padding_right(1)
11417       .padding_top(1)
11418       .padding_bottom(1)
11419       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_6x4);
11420   }
11421 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4,output_width_div_4)11422   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4, output_width_div_4) {
11423     TEST_REQUIRES_X86_SSE;
11424     for (size_t input_width = 8; input_width < 32; input_width += 4) {
11425       DWConv2DMicrokernelTester()
11426         .input_width(input_width)
11427         .input_height(6)
11428         .kernel_height(3)
11429         .kernel_width(3)
11430         .subsampling(1)
11431         .padding_left(1)
11432         .padding_right(1)
11433         .padding_top(1)
11434         .padding_bottom(1)
11435         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_6x4);
11436     }
11437   }
11438 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4,output_width_lt_4)11439   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4, output_width_lt_4) {
11440     TEST_REQUIRES_X86_SSE;
11441     for (size_t input_width = 1; input_width < 4; input_width++) {
11442       DWConv2DMicrokernelTester()
11443         .input_width(4)
11444         .input_height(6)
11445         .kernel_height(3)
11446         .kernel_width(3)
11447         .subsampling(1)
11448         .padding_left(1)
11449         .padding_right(1)
11450         .padding_top(1)
11451         .padding_bottom(1)
11452         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_6x4);
11453     }
11454   }
11455 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4,output_width_gt_4)11456   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4, output_width_gt_4) {
11457     TEST_REQUIRES_X86_SSE;
11458     for (size_t input_width = 5; input_width < 9; input_width++) {
11459       DWConv2DMicrokernelTester()
11460         .input_width(input_width)
11461         .input_height(6)
11462         .kernel_height(3)
11463         .kernel_width(3)
11464         .subsampling(1)
11465         .padding_left(1)
11466         .padding_right(1)
11467         .padding_top(1)
11468         .padding_bottom(1)
11469         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_6x4);
11470     }
11471   }
11472 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4,output_height_div_6)11473   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4, output_height_div_6) {
11474     TEST_REQUIRES_X86_SSE;
11475     for (size_t input_height = 12; input_height < 48; input_height += 6) {
11476       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11477         DWConv2DMicrokernelTester()
11478           .input_width(input_width)
11479           .input_height(input_height)
11480           .kernel_height(3)
11481           .kernel_width(3)
11482           .subsampling(1)
11483           .padding_left(1)
11484           .padding_right(1)
11485           .padding_top(1)
11486           .padding_bottom(1)
11487           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_6x4);
11488       }
11489     }
11490   }
11491 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4,output_height_lt_6)11492   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4, output_height_lt_6) {
11493     TEST_REQUIRES_X86_SSE;
11494     for (size_t input_height = 1; input_height < 6; input_height++) {
11495       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11496         DWConv2DMicrokernelTester()
11497           .input_width(input_width)
11498           .input_height(input_height)
11499           .kernel_height(3)
11500           .kernel_width(3)
11501           .subsampling(1)
11502           .padding_left(1)
11503           .padding_right(1)
11504           .padding_top(1)
11505           .padding_bottom(1)
11506           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_6x4);
11507       }
11508     }
11509   }
11510 
TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4,output_height_gt_6)11511   TEST(F32_DWCONV2D_CHW_3X3P1__SSE_6X4, output_height_gt_6) {
11512     TEST_REQUIRES_X86_SSE;
11513     for (size_t input_height = 7; input_height < 13; input_height++) {
11514       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11515         DWConv2DMicrokernelTester()
11516           .input_width(input_width)
11517           .input_height(input_height)
11518           .kernel_height(3)
11519           .kernel_width(3)
11520           .subsampling(1)
11521           .padding_left(1)
11522           .padding_right(1)
11523           .padding_top(1)
11524           .padding_bottom(1)
11525           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__sse_6x4);
11526       }
11527     }
11528   }
11529 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11530 
11531 
11532 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4,output_width_eq_4)11533   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4, output_width_eq_4) {
11534     TEST_REQUIRES_X86_SSSE3;
11535     DWConv2DMicrokernelTester()
11536       .input_width(4)
11537       .input_height(1)
11538       .kernel_height(3)
11539       .kernel_width(3)
11540       .subsampling(1)
11541       .padding_left(1)
11542       .padding_right(1)
11543       .padding_top(1)
11544       .padding_bottom(1)
11545       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4);
11546   }
11547 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4,output_width_div_4)11548   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4, output_width_div_4) {
11549     TEST_REQUIRES_X86_SSSE3;
11550     for (size_t input_width = 8; input_width < 32; input_width += 4) {
11551       DWConv2DMicrokernelTester()
11552         .input_width(input_width)
11553         .input_height(1)
11554         .kernel_height(3)
11555         .kernel_width(3)
11556         .subsampling(1)
11557         .padding_left(1)
11558         .padding_right(1)
11559         .padding_top(1)
11560         .padding_bottom(1)
11561         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4);
11562     }
11563   }
11564 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4,output_width_lt_4)11565   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4, output_width_lt_4) {
11566     TEST_REQUIRES_X86_SSSE3;
11567     for (size_t input_width = 1; input_width < 4; input_width++) {
11568       DWConv2DMicrokernelTester()
11569         .input_width(4)
11570         .input_height(1)
11571         .kernel_height(3)
11572         .kernel_width(3)
11573         .subsampling(1)
11574         .padding_left(1)
11575         .padding_right(1)
11576         .padding_top(1)
11577         .padding_bottom(1)
11578         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4);
11579     }
11580   }
11581 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4,output_width_gt_4)11582   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4, output_width_gt_4) {
11583     TEST_REQUIRES_X86_SSSE3;
11584     for (size_t input_width = 5; input_width < 9; input_width++) {
11585       DWConv2DMicrokernelTester()
11586         .input_width(input_width)
11587         .input_height(1)
11588         .kernel_height(3)
11589         .kernel_width(3)
11590         .subsampling(1)
11591         .padding_left(1)
11592         .padding_right(1)
11593         .padding_top(1)
11594         .padding_bottom(1)
11595         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4);
11596     }
11597   }
11598 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4,output_height_gt_1)11599   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4, output_height_gt_1) {
11600     TEST_REQUIRES_X86_SSSE3;
11601     for (size_t input_height = 2; input_height < 3; input_height++) {
11602       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11603         DWConv2DMicrokernelTester()
11604           .input_width(input_width)
11605           .input_height(input_height)
11606           .kernel_height(3)
11607           .kernel_width(3)
11608           .subsampling(1)
11609           .padding_left(1)
11610           .padding_right(1)
11611           .padding_top(1)
11612           .padding_bottom(1)
11613           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4);
11614       }
11615     }
11616   }
11617 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11618 
11619 
11620 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC2,output_width_eq_4)11621   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC2, output_width_eq_4) {
11622     TEST_REQUIRES_X86_SSSE3;
11623     DWConv2DMicrokernelTester()
11624       .input_width(4)
11625       .input_height(1)
11626       .kernel_height(3)
11627       .kernel_width(3)
11628       .subsampling(1)
11629       .padding_left(1)
11630       .padding_right(1)
11631       .padding_top(1)
11632       .padding_bottom(1)
11633       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc2);
11634   }
11635 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC2,output_width_div_4)11636   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC2, output_width_div_4) {
11637     TEST_REQUIRES_X86_SSSE3;
11638     for (size_t input_width = 8; input_width < 32; input_width += 4) {
11639       DWConv2DMicrokernelTester()
11640         .input_width(input_width)
11641         .input_height(1)
11642         .kernel_height(3)
11643         .kernel_width(3)
11644         .subsampling(1)
11645         .padding_left(1)
11646         .padding_right(1)
11647         .padding_top(1)
11648         .padding_bottom(1)
11649         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc2);
11650     }
11651   }
11652 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC2,output_width_lt_4)11653   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC2, output_width_lt_4) {
11654     TEST_REQUIRES_X86_SSSE3;
11655     for (size_t input_width = 1; input_width < 4; input_width++) {
11656       DWConv2DMicrokernelTester()
11657         .input_width(4)
11658         .input_height(1)
11659         .kernel_height(3)
11660         .kernel_width(3)
11661         .subsampling(1)
11662         .padding_left(1)
11663         .padding_right(1)
11664         .padding_top(1)
11665         .padding_bottom(1)
11666         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc2);
11667     }
11668   }
11669 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC2,output_width_gt_4)11670   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC2, output_width_gt_4) {
11671     TEST_REQUIRES_X86_SSSE3;
11672     for (size_t input_width = 5; input_width < 9; input_width++) {
11673       DWConv2DMicrokernelTester()
11674         .input_width(input_width)
11675         .input_height(1)
11676         .kernel_height(3)
11677         .kernel_width(3)
11678         .subsampling(1)
11679         .padding_left(1)
11680         .padding_right(1)
11681         .padding_top(1)
11682         .padding_bottom(1)
11683         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc2);
11684     }
11685   }
11686 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC2,output_height_gt_1)11687   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC2, output_height_gt_1) {
11688     TEST_REQUIRES_X86_SSSE3;
11689     for (size_t input_height = 2; input_height < 3; input_height++) {
11690       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11691         DWConv2DMicrokernelTester()
11692           .input_width(input_width)
11693           .input_height(input_height)
11694           .kernel_height(3)
11695           .kernel_width(3)
11696           .subsampling(1)
11697           .padding_left(1)
11698           .padding_right(1)
11699           .padding_top(1)
11700           .padding_bottom(1)
11701           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc2);
11702       }
11703     }
11704   }
11705 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11706 
11707 
11708 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC3,output_width_eq_4)11709   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC3, output_width_eq_4) {
11710     TEST_REQUIRES_X86_SSSE3;
11711     DWConv2DMicrokernelTester()
11712       .input_width(4)
11713       .input_height(1)
11714       .kernel_height(3)
11715       .kernel_width(3)
11716       .subsampling(1)
11717       .padding_left(1)
11718       .padding_right(1)
11719       .padding_top(1)
11720       .padding_bottom(1)
11721       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc3);
11722   }
11723 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC3,output_width_div_4)11724   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC3, output_width_div_4) {
11725     TEST_REQUIRES_X86_SSSE3;
11726     for (size_t input_width = 8; input_width < 32; input_width += 4) {
11727       DWConv2DMicrokernelTester()
11728         .input_width(input_width)
11729         .input_height(1)
11730         .kernel_height(3)
11731         .kernel_width(3)
11732         .subsampling(1)
11733         .padding_left(1)
11734         .padding_right(1)
11735         .padding_top(1)
11736         .padding_bottom(1)
11737         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc3);
11738     }
11739   }
11740 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC3,output_width_lt_4)11741   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC3, output_width_lt_4) {
11742     TEST_REQUIRES_X86_SSSE3;
11743     for (size_t input_width = 1; input_width < 4; input_width++) {
11744       DWConv2DMicrokernelTester()
11745         .input_width(4)
11746         .input_height(1)
11747         .kernel_height(3)
11748         .kernel_width(3)
11749         .subsampling(1)
11750         .padding_left(1)
11751         .padding_right(1)
11752         .padding_top(1)
11753         .padding_bottom(1)
11754         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc3);
11755     }
11756   }
11757 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC3,output_width_gt_4)11758   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC3, output_width_gt_4) {
11759     TEST_REQUIRES_X86_SSSE3;
11760     for (size_t input_width = 5; input_width < 9; input_width++) {
11761       DWConv2DMicrokernelTester()
11762         .input_width(input_width)
11763         .input_height(1)
11764         .kernel_height(3)
11765         .kernel_width(3)
11766         .subsampling(1)
11767         .padding_left(1)
11768         .padding_right(1)
11769         .padding_top(1)
11770         .padding_bottom(1)
11771         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc3);
11772     }
11773   }
11774 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC3,output_height_gt_1)11775   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC3, output_height_gt_1) {
11776     TEST_REQUIRES_X86_SSSE3;
11777     for (size_t input_height = 2; input_height < 3; input_height++) {
11778       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11779         DWConv2DMicrokernelTester()
11780           .input_width(input_width)
11781           .input_height(input_height)
11782           .kernel_height(3)
11783           .kernel_width(3)
11784           .subsampling(1)
11785           .padding_left(1)
11786           .padding_right(1)
11787           .padding_top(1)
11788           .padding_bottom(1)
11789           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc3);
11790       }
11791     }
11792   }
11793 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11794 
11795 
11796 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC4,output_width_eq_4)11797   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC4, output_width_eq_4) {
11798     TEST_REQUIRES_X86_SSSE3;
11799     DWConv2DMicrokernelTester()
11800       .input_width(4)
11801       .input_height(1)
11802       .kernel_height(3)
11803       .kernel_width(3)
11804       .subsampling(1)
11805       .padding_left(1)
11806       .padding_right(1)
11807       .padding_top(1)
11808       .padding_bottom(1)
11809       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc4);
11810   }
11811 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC4,output_width_div_4)11812   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC4, output_width_div_4) {
11813     TEST_REQUIRES_X86_SSSE3;
11814     for (size_t input_width = 8; input_width < 32; input_width += 4) {
11815       DWConv2DMicrokernelTester()
11816         .input_width(input_width)
11817         .input_height(1)
11818         .kernel_height(3)
11819         .kernel_width(3)
11820         .subsampling(1)
11821         .padding_left(1)
11822         .padding_right(1)
11823         .padding_top(1)
11824         .padding_bottom(1)
11825         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc4);
11826     }
11827   }
11828 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC4,output_width_lt_4)11829   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC4, output_width_lt_4) {
11830     TEST_REQUIRES_X86_SSSE3;
11831     for (size_t input_width = 1; input_width < 4; input_width++) {
11832       DWConv2DMicrokernelTester()
11833         .input_width(4)
11834         .input_height(1)
11835         .kernel_height(3)
11836         .kernel_width(3)
11837         .subsampling(1)
11838         .padding_left(1)
11839         .padding_right(1)
11840         .padding_top(1)
11841         .padding_bottom(1)
11842         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc4);
11843     }
11844   }
11845 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC4,output_width_gt_4)11846   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC4, output_width_gt_4) {
11847     TEST_REQUIRES_X86_SSSE3;
11848     for (size_t input_width = 5; input_width < 9; input_width++) {
11849       DWConv2DMicrokernelTester()
11850         .input_width(input_width)
11851         .input_height(1)
11852         .kernel_height(3)
11853         .kernel_width(3)
11854         .subsampling(1)
11855         .padding_left(1)
11856         .padding_right(1)
11857         .padding_top(1)
11858         .padding_bottom(1)
11859         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc4);
11860     }
11861   }
11862 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC4,output_height_gt_1)11863   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_1X4_ACC4, output_height_gt_1) {
11864     TEST_REQUIRES_X86_SSSE3;
11865     for (size_t input_height = 2; input_height < 3; input_height++) {
11866       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11867         DWConv2DMicrokernelTester()
11868           .input_width(input_width)
11869           .input_height(input_height)
11870           .kernel_height(3)
11871           .kernel_width(3)
11872           .subsampling(1)
11873           .padding_left(1)
11874           .padding_right(1)
11875           .padding_top(1)
11876           .padding_bottom(1)
11877           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_1x4_acc4);
11878       }
11879     }
11880   }
11881 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11882 
11883 
11884 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4,output_width_eq_4)11885   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4, output_width_eq_4) {
11886     TEST_REQUIRES_X86_SSSE3;
11887     DWConv2DMicrokernelTester()
11888       .input_width(4)
11889       .input_height(2)
11890       .kernel_height(3)
11891       .kernel_width(3)
11892       .subsampling(1)
11893       .padding_left(1)
11894       .padding_right(1)
11895       .padding_top(1)
11896       .padding_bottom(1)
11897       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4);
11898   }
11899 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4,output_width_div_4)11900   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4, output_width_div_4) {
11901     TEST_REQUIRES_X86_SSSE3;
11902     for (size_t input_width = 8; input_width < 32; input_width += 4) {
11903       DWConv2DMicrokernelTester()
11904         .input_width(input_width)
11905         .input_height(2)
11906         .kernel_height(3)
11907         .kernel_width(3)
11908         .subsampling(1)
11909         .padding_left(1)
11910         .padding_right(1)
11911         .padding_top(1)
11912         .padding_bottom(1)
11913         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4);
11914     }
11915   }
11916 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4,output_width_lt_4)11917   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4, output_width_lt_4) {
11918     TEST_REQUIRES_X86_SSSE3;
11919     for (size_t input_width = 1; input_width < 4; input_width++) {
11920       DWConv2DMicrokernelTester()
11921         .input_width(4)
11922         .input_height(2)
11923         .kernel_height(3)
11924         .kernel_width(3)
11925         .subsampling(1)
11926         .padding_left(1)
11927         .padding_right(1)
11928         .padding_top(1)
11929         .padding_bottom(1)
11930         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4);
11931     }
11932   }
11933 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4,output_width_gt_4)11934   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4, output_width_gt_4) {
11935     TEST_REQUIRES_X86_SSSE3;
11936     for (size_t input_width = 5; input_width < 9; input_width++) {
11937       DWConv2DMicrokernelTester()
11938         .input_width(input_width)
11939         .input_height(2)
11940         .kernel_height(3)
11941         .kernel_width(3)
11942         .subsampling(1)
11943         .padding_left(1)
11944         .padding_right(1)
11945         .padding_top(1)
11946         .padding_bottom(1)
11947         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4);
11948     }
11949   }
11950 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4,output_height_div_2)11951   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4, output_height_div_2) {
11952     TEST_REQUIRES_X86_SSSE3;
11953     for (size_t input_height = 4; input_height < 16; input_height += 2) {
11954       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11955         DWConv2DMicrokernelTester()
11956           .input_width(input_width)
11957           .input_height(input_height)
11958           .kernel_height(3)
11959           .kernel_width(3)
11960           .subsampling(1)
11961           .padding_left(1)
11962           .padding_right(1)
11963           .padding_top(1)
11964           .padding_bottom(1)
11965           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4);
11966       }
11967     }
11968   }
11969 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4,output_height_lt_2)11970   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4, output_height_lt_2) {
11971     TEST_REQUIRES_X86_SSSE3;
11972     for (size_t input_height = 1; input_height < 2; input_height++) {
11973       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11974         DWConv2DMicrokernelTester()
11975           .input_width(input_width)
11976           .input_height(input_height)
11977           .kernel_height(3)
11978           .kernel_width(3)
11979           .subsampling(1)
11980           .padding_left(1)
11981           .padding_right(1)
11982           .padding_top(1)
11983           .padding_bottom(1)
11984           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4);
11985       }
11986     }
11987   }
11988 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4,output_height_gt_2)11989   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4, output_height_gt_2) {
11990     TEST_REQUIRES_X86_SSSE3;
11991     for (size_t input_height = 3; input_height < 5; input_height++) {
11992       for (size_t input_width = 1; input_width < 21; input_width += 3) {
11993         DWConv2DMicrokernelTester()
11994           .input_width(input_width)
11995           .input_height(input_height)
11996           .kernel_height(3)
11997           .kernel_width(3)
11998           .subsampling(1)
11999           .padding_left(1)
12000           .padding_right(1)
12001           .padding_top(1)
12002           .padding_bottom(1)
12003           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4);
12004       }
12005     }
12006   }
12007 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12008 
12009 
12010 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2,output_width_eq_4)12011   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2, output_width_eq_4) {
12012     TEST_REQUIRES_X86_SSSE3;
12013     DWConv2DMicrokernelTester()
12014       .input_width(4)
12015       .input_height(2)
12016       .kernel_height(3)
12017       .kernel_width(3)
12018       .subsampling(1)
12019       .padding_left(1)
12020       .padding_right(1)
12021       .padding_top(1)
12022       .padding_bottom(1)
12023       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4_acc2);
12024   }
12025 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2,output_width_div_4)12026   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2, output_width_div_4) {
12027     TEST_REQUIRES_X86_SSSE3;
12028     for (size_t input_width = 8; input_width < 32; input_width += 4) {
12029       DWConv2DMicrokernelTester()
12030         .input_width(input_width)
12031         .input_height(2)
12032         .kernel_height(3)
12033         .kernel_width(3)
12034         .subsampling(1)
12035         .padding_left(1)
12036         .padding_right(1)
12037         .padding_top(1)
12038         .padding_bottom(1)
12039         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4_acc2);
12040     }
12041   }
12042 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2,output_width_lt_4)12043   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2, output_width_lt_4) {
12044     TEST_REQUIRES_X86_SSSE3;
12045     for (size_t input_width = 1; input_width < 4; input_width++) {
12046       DWConv2DMicrokernelTester()
12047         .input_width(4)
12048         .input_height(2)
12049         .kernel_height(3)
12050         .kernel_width(3)
12051         .subsampling(1)
12052         .padding_left(1)
12053         .padding_right(1)
12054         .padding_top(1)
12055         .padding_bottom(1)
12056         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4_acc2);
12057     }
12058   }
12059 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2,output_width_gt_4)12060   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2, output_width_gt_4) {
12061     TEST_REQUIRES_X86_SSSE3;
12062     for (size_t input_width = 5; input_width < 9; input_width++) {
12063       DWConv2DMicrokernelTester()
12064         .input_width(input_width)
12065         .input_height(2)
12066         .kernel_height(3)
12067         .kernel_width(3)
12068         .subsampling(1)
12069         .padding_left(1)
12070         .padding_right(1)
12071         .padding_top(1)
12072         .padding_bottom(1)
12073         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4_acc2);
12074     }
12075   }
12076 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2,output_height_div_2)12077   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2, output_height_div_2) {
12078     TEST_REQUIRES_X86_SSSE3;
12079     for (size_t input_height = 4; input_height < 16; input_height += 2) {
12080       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12081         DWConv2DMicrokernelTester()
12082           .input_width(input_width)
12083           .input_height(input_height)
12084           .kernel_height(3)
12085           .kernel_width(3)
12086           .subsampling(1)
12087           .padding_left(1)
12088           .padding_right(1)
12089           .padding_top(1)
12090           .padding_bottom(1)
12091           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4_acc2);
12092       }
12093     }
12094   }
12095 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2,output_height_lt_2)12096   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2, output_height_lt_2) {
12097     TEST_REQUIRES_X86_SSSE3;
12098     for (size_t input_height = 1; input_height < 2; input_height++) {
12099       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12100         DWConv2DMicrokernelTester()
12101           .input_width(input_width)
12102           .input_height(input_height)
12103           .kernel_height(3)
12104           .kernel_width(3)
12105           .subsampling(1)
12106           .padding_left(1)
12107           .padding_right(1)
12108           .padding_top(1)
12109           .padding_bottom(1)
12110           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4_acc2);
12111       }
12112     }
12113   }
12114 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2,output_height_gt_2)12115   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_2X4_ACC2, output_height_gt_2) {
12116     TEST_REQUIRES_X86_SSSE3;
12117     for (size_t input_height = 3; input_height < 5; input_height++) {
12118       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12119         DWConv2DMicrokernelTester()
12120           .input_width(input_width)
12121           .input_height(input_height)
12122           .kernel_height(3)
12123           .kernel_width(3)
12124           .subsampling(1)
12125           .padding_left(1)
12126           .padding_right(1)
12127           .padding_top(1)
12128           .padding_bottom(1)
12129           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_2x4_acc2);
12130       }
12131     }
12132   }
12133 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12134 
12135 
12136 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4,output_width_eq_4)12137   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4, output_width_eq_4) {
12138     TEST_REQUIRES_X86_SSSE3;
12139     DWConv2DMicrokernelTester()
12140       .input_width(4)
12141       .input_height(3)
12142       .kernel_height(3)
12143       .kernel_width(3)
12144       .subsampling(1)
12145       .padding_left(1)
12146       .padding_right(1)
12147       .padding_top(1)
12148       .padding_bottom(1)
12149       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_3x4);
12150   }
12151 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4,output_width_div_4)12152   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4, output_width_div_4) {
12153     TEST_REQUIRES_X86_SSSE3;
12154     for (size_t input_width = 8; input_width < 32; input_width += 4) {
12155       DWConv2DMicrokernelTester()
12156         .input_width(input_width)
12157         .input_height(3)
12158         .kernel_height(3)
12159         .kernel_width(3)
12160         .subsampling(1)
12161         .padding_left(1)
12162         .padding_right(1)
12163         .padding_top(1)
12164         .padding_bottom(1)
12165         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_3x4);
12166     }
12167   }
12168 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4,output_width_lt_4)12169   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4, output_width_lt_4) {
12170     TEST_REQUIRES_X86_SSSE3;
12171     for (size_t input_width = 1; input_width < 4; input_width++) {
12172       DWConv2DMicrokernelTester()
12173         .input_width(4)
12174         .input_height(3)
12175         .kernel_height(3)
12176         .kernel_width(3)
12177         .subsampling(1)
12178         .padding_left(1)
12179         .padding_right(1)
12180         .padding_top(1)
12181         .padding_bottom(1)
12182         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_3x4);
12183     }
12184   }
12185 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4,output_width_gt_4)12186   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4, output_width_gt_4) {
12187     TEST_REQUIRES_X86_SSSE3;
12188     for (size_t input_width = 5; input_width < 9; input_width++) {
12189       DWConv2DMicrokernelTester()
12190         .input_width(input_width)
12191         .input_height(3)
12192         .kernel_height(3)
12193         .kernel_width(3)
12194         .subsampling(1)
12195         .padding_left(1)
12196         .padding_right(1)
12197         .padding_top(1)
12198         .padding_bottom(1)
12199         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_3x4);
12200     }
12201   }
12202 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4,output_height_div_3)12203   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4, output_height_div_3) {
12204     TEST_REQUIRES_X86_SSSE3;
12205     for (size_t input_height = 6; input_height < 24; input_height += 3) {
12206       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12207         DWConv2DMicrokernelTester()
12208           .input_width(input_width)
12209           .input_height(input_height)
12210           .kernel_height(3)
12211           .kernel_width(3)
12212           .subsampling(1)
12213           .padding_left(1)
12214           .padding_right(1)
12215           .padding_top(1)
12216           .padding_bottom(1)
12217           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_3x4);
12218       }
12219     }
12220   }
12221 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4,output_height_lt_3)12222   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4, output_height_lt_3) {
12223     TEST_REQUIRES_X86_SSSE3;
12224     for (size_t input_height = 1; input_height < 3; input_height++) {
12225       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12226         DWConv2DMicrokernelTester()
12227           .input_width(input_width)
12228           .input_height(input_height)
12229           .kernel_height(3)
12230           .kernel_width(3)
12231           .subsampling(1)
12232           .padding_left(1)
12233           .padding_right(1)
12234           .padding_top(1)
12235           .padding_bottom(1)
12236           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_3x4);
12237       }
12238     }
12239   }
12240 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4,output_height_gt_3)12241   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_3X4, output_height_gt_3) {
12242     TEST_REQUIRES_X86_SSSE3;
12243     for (size_t input_height = 4; input_height < 7; input_height++) {
12244       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12245         DWConv2DMicrokernelTester()
12246           .input_width(input_width)
12247           .input_height(input_height)
12248           .kernel_height(3)
12249           .kernel_width(3)
12250           .subsampling(1)
12251           .padding_left(1)
12252           .padding_right(1)
12253           .padding_top(1)
12254           .padding_bottom(1)
12255           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_3x4);
12256       }
12257     }
12258   }
12259 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12260 
12261 
12262 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4,output_width_eq_4)12263   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4, output_width_eq_4) {
12264     TEST_REQUIRES_X86_SSSE3;
12265     DWConv2DMicrokernelTester()
12266       .input_width(4)
12267       .input_height(4)
12268       .kernel_height(3)
12269       .kernel_width(3)
12270       .subsampling(1)
12271       .padding_left(1)
12272       .padding_right(1)
12273       .padding_top(1)
12274       .padding_bottom(1)
12275       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_4x4);
12276   }
12277 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4,output_width_div_4)12278   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4, output_width_div_4) {
12279     TEST_REQUIRES_X86_SSSE3;
12280     for (size_t input_width = 8; input_width < 32; input_width += 4) {
12281       DWConv2DMicrokernelTester()
12282         .input_width(input_width)
12283         .input_height(4)
12284         .kernel_height(3)
12285         .kernel_width(3)
12286         .subsampling(1)
12287         .padding_left(1)
12288         .padding_right(1)
12289         .padding_top(1)
12290         .padding_bottom(1)
12291         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_4x4);
12292     }
12293   }
12294 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4,output_width_lt_4)12295   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4, output_width_lt_4) {
12296     TEST_REQUIRES_X86_SSSE3;
12297     for (size_t input_width = 1; input_width < 4; input_width++) {
12298       DWConv2DMicrokernelTester()
12299         .input_width(4)
12300         .input_height(4)
12301         .kernel_height(3)
12302         .kernel_width(3)
12303         .subsampling(1)
12304         .padding_left(1)
12305         .padding_right(1)
12306         .padding_top(1)
12307         .padding_bottom(1)
12308         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_4x4);
12309     }
12310   }
12311 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4,output_width_gt_4)12312   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4, output_width_gt_4) {
12313     TEST_REQUIRES_X86_SSSE3;
12314     for (size_t input_width = 5; input_width < 9; input_width++) {
12315       DWConv2DMicrokernelTester()
12316         .input_width(input_width)
12317         .input_height(4)
12318         .kernel_height(3)
12319         .kernel_width(3)
12320         .subsampling(1)
12321         .padding_left(1)
12322         .padding_right(1)
12323         .padding_top(1)
12324         .padding_bottom(1)
12325         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_4x4);
12326     }
12327   }
12328 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4,output_height_div_4)12329   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4, output_height_div_4) {
12330     TEST_REQUIRES_X86_SSSE3;
12331     for (size_t input_height = 8; input_height < 32; input_height += 4) {
12332       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12333         DWConv2DMicrokernelTester()
12334           .input_width(input_width)
12335           .input_height(input_height)
12336           .kernel_height(3)
12337           .kernel_width(3)
12338           .subsampling(1)
12339           .padding_left(1)
12340           .padding_right(1)
12341           .padding_top(1)
12342           .padding_bottom(1)
12343           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_4x4);
12344       }
12345     }
12346   }
12347 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4,output_height_lt_4)12348   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4, output_height_lt_4) {
12349     TEST_REQUIRES_X86_SSSE3;
12350     for (size_t input_height = 1; input_height < 4; input_height++) {
12351       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12352         DWConv2DMicrokernelTester()
12353           .input_width(input_width)
12354           .input_height(input_height)
12355           .kernel_height(3)
12356           .kernel_width(3)
12357           .subsampling(1)
12358           .padding_left(1)
12359           .padding_right(1)
12360           .padding_top(1)
12361           .padding_bottom(1)
12362           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_4x4);
12363       }
12364     }
12365   }
12366 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4,output_height_gt_4)12367   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_4X4, output_height_gt_4) {
12368     TEST_REQUIRES_X86_SSSE3;
12369     for (size_t input_height = 5; input_height < 9; input_height++) {
12370       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12371         DWConv2DMicrokernelTester()
12372           .input_width(input_width)
12373           .input_height(input_height)
12374           .kernel_height(3)
12375           .kernel_width(3)
12376           .subsampling(1)
12377           .padding_left(1)
12378           .padding_right(1)
12379           .padding_top(1)
12380           .padding_bottom(1)
12381           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_4x4);
12382       }
12383     }
12384   }
12385 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12386 
12387 
12388 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4,output_width_eq_4)12389   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4, output_width_eq_4) {
12390     TEST_REQUIRES_X86_SSSE3;
12391     DWConv2DMicrokernelTester()
12392       .input_width(4)
12393       .input_height(5)
12394       .kernel_height(3)
12395       .kernel_width(3)
12396       .subsampling(1)
12397       .padding_left(1)
12398       .padding_right(1)
12399       .padding_top(1)
12400       .padding_bottom(1)
12401       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_5x4);
12402   }
12403 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4,output_width_div_4)12404   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4, output_width_div_4) {
12405     TEST_REQUIRES_X86_SSSE3;
12406     for (size_t input_width = 8; input_width < 32; input_width += 4) {
12407       DWConv2DMicrokernelTester()
12408         .input_width(input_width)
12409         .input_height(5)
12410         .kernel_height(3)
12411         .kernel_width(3)
12412         .subsampling(1)
12413         .padding_left(1)
12414         .padding_right(1)
12415         .padding_top(1)
12416         .padding_bottom(1)
12417         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_5x4);
12418     }
12419   }
12420 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4,output_width_lt_4)12421   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4, output_width_lt_4) {
12422     TEST_REQUIRES_X86_SSSE3;
12423     for (size_t input_width = 1; input_width < 4; input_width++) {
12424       DWConv2DMicrokernelTester()
12425         .input_width(4)
12426         .input_height(5)
12427         .kernel_height(3)
12428         .kernel_width(3)
12429         .subsampling(1)
12430         .padding_left(1)
12431         .padding_right(1)
12432         .padding_top(1)
12433         .padding_bottom(1)
12434         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_5x4);
12435     }
12436   }
12437 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4,output_width_gt_4)12438   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4, output_width_gt_4) {
12439     TEST_REQUIRES_X86_SSSE3;
12440     for (size_t input_width = 5; input_width < 9; input_width++) {
12441       DWConv2DMicrokernelTester()
12442         .input_width(input_width)
12443         .input_height(5)
12444         .kernel_height(3)
12445         .kernel_width(3)
12446         .subsampling(1)
12447         .padding_left(1)
12448         .padding_right(1)
12449         .padding_top(1)
12450         .padding_bottom(1)
12451         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_5x4);
12452     }
12453   }
12454 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4,output_height_div_5)12455   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4, output_height_div_5) {
12456     TEST_REQUIRES_X86_SSSE3;
12457     for (size_t input_height = 10; input_height < 40; input_height += 5) {
12458       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12459         DWConv2DMicrokernelTester()
12460           .input_width(input_width)
12461           .input_height(input_height)
12462           .kernel_height(3)
12463           .kernel_width(3)
12464           .subsampling(1)
12465           .padding_left(1)
12466           .padding_right(1)
12467           .padding_top(1)
12468           .padding_bottom(1)
12469           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_5x4);
12470       }
12471     }
12472   }
12473 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4,output_height_lt_5)12474   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4, output_height_lt_5) {
12475     TEST_REQUIRES_X86_SSSE3;
12476     for (size_t input_height = 1; input_height < 5; input_height++) {
12477       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12478         DWConv2DMicrokernelTester()
12479           .input_width(input_width)
12480           .input_height(input_height)
12481           .kernel_height(3)
12482           .kernel_width(3)
12483           .subsampling(1)
12484           .padding_left(1)
12485           .padding_right(1)
12486           .padding_top(1)
12487           .padding_bottom(1)
12488           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_5x4);
12489       }
12490     }
12491   }
12492 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4,output_height_gt_5)12493   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_5X4, output_height_gt_5) {
12494     TEST_REQUIRES_X86_SSSE3;
12495     for (size_t input_height = 6; input_height < 11; input_height++) {
12496       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12497         DWConv2DMicrokernelTester()
12498           .input_width(input_width)
12499           .input_height(input_height)
12500           .kernel_height(3)
12501           .kernel_width(3)
12502           .subsampling(1)
12503           .padding_left(1)
12504           .padding_right(1)
12505           .padding_top(1)
12506           .padding_bottom(1)
12507           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_5x4);
12508       }
12509     }
12510   }
12511 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12512 
12513 
12514 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4,output_width_eq_4)12515   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4, output_width_eq_4) {
12516     TEST_REQUIRES_X86_SSSE3;
12517     DWConv2DMicrokernelTester()
12518       .input_width(4)
12519       .input_height(6)
12520       .kernel_height(3)
12521       .kernel_width(3)
12522       .subsampling(1)
12523       .padding_left(1)
12524       .padding_right(1)
12525       .padding_top(1)
12526       .padding_bottom(1)
12527       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_6x4);
12528   }
12529 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4,output_width_div_4)12530   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4, output_width_div_4) {
12531     TEST_REQUIRES_X86_SSSE3;
12532     for (size_t input_width = 8; input_width < 32; input_width += 4) {
12533       DWConv2DMicrokernelTester()
12534         .input_width(input_width)
12535         .input_height(6)
12536         .kernel_height(3)
12537         .kernel_width(3)
12538         .subsampling(1)
12539         .padding_left(1)
12540         .padding_right(1)
12541         .padding_top(1)
12542         .padding_bottom(1)
12543         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_6x4);
12544     }
12545   }
12546 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4,output_width_lt_4)12547   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4, output_width_lt_4) {
12548     TEST_REQUIRES_X86_SSSE3;
12549     for (size_t input_width = 1; input_width < 4; input_width++) {
12550       DWConv2DMicrokernelTester()
12551         .input_width(4)
12552         .input_height(6)
12553         .kernel_height(3)
12554         .kernel_width(3)
12555         .subsampling(1)
12556         .padding_left(1)
12557         .padding_right(1)
12558         .padding_top(1)
12559         .padding_bottom(1)
12560         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_6x4);
12561     }
12562   }
12563 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4,output_width_gt_4)12564   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4, output_width_gt_4) {
12565     TEST_REQUIRES_X86_SSSE3;
12566     for (size_t input_width = 5; input_width < 9; input_width++) {
12567       DWConv2DMicrokernelTester()
12568         .input_width(input_width)
12569         .input_height(6)
12570         .kernel_height(3)
12571         .kernel_width(3)
12572         .subsampling(1)
12573         .padding_left(1)
12574         .padding_right(1)
12575         .padding_top(1)
12576         .padding_bottom(1)
12577         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_6x4);
12578     }
12579   }
12580 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4,output_height_div_6)12581   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4, output_height_div_6) {
12582     TEST_REQUIRES_X86_SSSE3;
12583     for (size_t input_height = 12; input_height < 48; input_height += 6) {
12584       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12585         DWConv2DMicrokernelTester()
12586           .input_width(input_width)
12587           .input_height(input_height)
12588           .kernel_height(3)
12589           .kernel_width(3)
12590           .subsampling(1)
12591           .padding_left(1)
12592           .padding_right(1)
12593           .padding_top(1)
12594           .padding_bottom(1)
12595           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_6x4);
12596       }
12597     }
12598   }
12599 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4,output_height_lt_6)12600   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4, output_height_lt_6) {
12601     TEST_REQUIRES_X86_SSSE3;
12602     for (size_t input_height = 1; input_height < 6; input_height++) {
12603       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12604         DWConv2DMicrokernelTester()
12605           .input_width(input_width)
12606           .input_height(input_height)
12607           .kernel_height(3)
12608           .kernel_width(3)
12609           .subsampling(1)
12610           .padding_left(1)
12611           .padding_right(1)
12612           .padding_top(1)
12613           .padding_bottom(1)
12614           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_6x4);
12615       }
12616     }
12617   }
12618 
TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4,output_height_gt_6)12619   TEST(F32_DWCONV2D_CHW_3X3P1__SSSE3_6X4, output_height_gt_6) {
12620     TEST_REQUIRES_X86_SSSE3;
12621     for (size_t input_height = 7; input_height < 13; input_height++) {
12622       for (size_t input_width = 1; input_width < 21; input_width += 3) {
12623         DWConv2DMicrokernelTester()
12624           .input_width(input_width)
12625           .input_height(input_height)
12626           .kernel_height(3)
12627           .kernel_width(3)
12628           .subsampling(1)
12629           .padding_left(1)
12630           .padding_right(1)
12631           .padding_top(1)
12632           .padding_bottom(1)
12633           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__ssse3_6x4);
12634       }
12635     }
12636   }
12637 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12638 
12639 
12640 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4,output_width_eq_4)12641   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4, output_width_eq_4) {
12642     TEST_REQUIRES_X86_SSE;
12643     for (size_t input_width = 7; input_width < 9; input_width++) {
12644       DWConv2DMicrokernelTester()
12645         .input_width(input_width)
12646         .input_height(2)
12647         .kernel_height(3)
12648         .kernel_width(3)
12649         .subsampling(2)
12650         .padding_left(1)
12651         .padding_right(1)
12652         .padding_top(1)
12653         .padding_bottom(1)
12654         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4);
12655     }
12656   }
12657 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4,output_width_div_4)12658   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4, output_width_div_4) {
12659     TEST_REQUIRES_X86_SSE;
12660     for (size_t input_width = 16; input_width < 64; input_width += 8) {
12661       DWConv2DMicrokernelTester()
12662         .input_width(input_width)
12663         .input_height(2)
12664         .kernel_height(3)
12665         .kernel_width(3)
12666         .subsampling(2)
12667         .padding_left(1)
12668         .padding_right(1)
12669         .padding_top(1)
12670         .padding_bottom(1)
12671         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4);
12672     }
12673   }
12674 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4,output_width_lt_4)12675   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4, output_width_lt_4) {
12676     TEST_REQUIRES_X86_SSE;
12677     for (size_t input_width = 1; input_width < 7; input_width++) {
12678       DWConv2DMicrokernelTester()
12679         .input_width(8)
12680         .input_height(2)
12681         .kernel_height(3)
12682         .kernel_width(3)
12683         .subsampling(2)
12684         .padding_left(1)
12685         .padding_right(1)
12686         .padding_top(1)
12687         .padding_bottom(1)
12688         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4);
12689     }
12690   }
12691 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4,output_width_gt_4)12692   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4, output_width_gt_4) {
12693     TEST_REQUIRES_X86_SSE;
12694     for (size_t input_width = 9; input_width < 17; input_width++) {
12695       DWConv2DMicrokernelTester()
12696         .input_width(input_width)
12697         .input_height(2)
12698         .kernel_height(3)
12699         .kernel_width(3)
12700         .subsampling(2)
12701         .padding_left(1)
12702         .padding_right(1)
12703         .padding_top(1)
12704         .padding_bottom(1)
12705         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4);
12706     }
12707   }
12708 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4,output_height_eq_1)12709   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4, output_height_eq_1) {
12710     TEST_REQUIRES_X86_SSE;
12711     for (size_t input_height = 1; input_height < 3; input_height++) {
12712       for (size_t input_width = 1; input_width < 41; input_width += 7) {
12713         DWConv2DMicrokernelTester()
12714           .input_width(input_width)
12715           .input_height(input_height)
12716           .kernel_height(3)
12717           .kernel_width(3)
12718           .subsampling(2)
12719           .padding_left(1)
12720           .padding_right(1)
12721           .padding_top(1)
12722           .padding_bottom(1)
12723           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4);
12724       }
12725     }
12726   }
12727 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4,output_height_gt_1)12728   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4, output_height_gt_1) {
12729     TEST_REQUIRES_X86_SSE;
12730     for (size_t input_height = 3; input_height < 5; input_height++) {
12731       for (size_t input_width = 1; input_width < 41; input_width += 7) {
12732         DWConv2DMicrokernelTester()
12733           .input_width(input_width)
12734           .input_height(input_height)
12735           .kernel_height(3)
12736           .kernel_width(3)
12737           .subsampling(2)
12738           .padding_left(1)
12739           .padding_right(1)
12740           .padding_top(1)
12741           .padding_bottom(1)
12742           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4);
12743       }
12744     }
12745   }
12746 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4,padding_top_eq_1)12747   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4, padding_top_eq_1) {
12748     TEST_REQUIRES_X86_SSE;
12749     for (size_t input_height = 2; input_height < 8; input_height++) {
12750       for (size_t input_width = 1; input_width < 41; input_width += 7) {
12751         DWConv2DMicrokernelTester()
12752           .input_width(input_width)
12753           .input_height(input_height)
12754           .kernel_height(3)
12755           .kernel_width(3)
12756           .subsampling(2)
12757           .padding_left(1)
12758           .padding_right(1)
12759           .padding_top(0)
12760           .padding_bottom(1)
12761           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4);
12762       }
12763     }
12764   }
12765 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12766 
12767 
12768 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2,output_width_eq_4)12769   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2, output_width_eq_4) {
12770     TEST_REQUIRES_X86_SSE;
12771     for (size_t input_width = 7; input_width < 9; input_width++) {
12772       DWConv2DMicrokernelTester()
12773         .input_width(input_width)
12774         .input_height(2)
12775         .kernel_height(3)
12776         .kernel_width(3)
12777         .subsampling(2)
12778         .padding_left(1)
12779         .padding_right(1)
12780         .padding_top(1)
12781         .padding_bottom(1)
12782         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc2);
12783     }
12784   }
12785 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2,output_width_div_4)12786   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2, output_width_div_4) {
12787     TEST_REQUIRES_X86_SSE;
12788     for (size_t input_width = 16; input_width < 64; input_width += 8) {
12789       DWConv2DMicrokernelTester()
12790         .input_width(input_width)
12791         .input_height(2)
12792         .kernel_height(3)
12793         .kernel_width(3)
12794         .subsampling(2)
12795         .padding_left(1)
12796         .padding_right(1)
12797         .padding_top(1)
12798         .padding_bottom(1)
12799         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc2);
12800     }
12801   }
12802 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2,output_width_lt_4)12803   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2, output_width_lt_4) {
12804     TEST_REQUIRES_X86_SSE;
12805     for (size_t input_width = 1; input_width < 7; input_width++) {
12806       DWConv2DMicrokernelTester()
12807         .input_width(8)
12808         .input_height(2)
12809         .kernel_height(3)
12810         .kernel_width(3)
12811         .subsampling(2)
12812         .padding_left(1)
12813         .padding_right(1)
12814         .padding_top(1)
12815         .padding_bottom(1)
12816         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc2);
12817     }
12818   }
12819 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2,output_width_gt_4)12820   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2, output_width_gt_4) {
12821     TEST_REQUIRES_X86_SSE;
12822     for (size_t input_width = 9; input_width < 17; input_width++) {
12823       DWConv2DMicrokernelTester()
12824         .input_width(input_width)
12825         .input_height(2)
12826         .kernel_height(3)
12827         .kernel_width(3)
12828         .subsampling(2)
12829         .padding_left(1)
12830         .padding_right(1)
12831         .padding_top(1)
12832         .padding_bottom(1)
12833         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc2);
12834     }
12835   }
12836 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2,output_height_eq_1)12837   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2, output_height_eq_1) {
12838     TEST_REQUIRES_X86_SSE;
12839     for (size_t input_height = 1; input_height < 3; input_height++) {
12840       for (size_t input_width = 1; input_width < 41; input_width += 7) {
12841         DWConv2DMicrokernelTester()
12842           .input_width(input_width)
12843           .input_height(input_height)
12844           .kernel_height(3)
12845           .kernel_width(3)
12846           .subsampling(2)
12847           .padding_left(1)
12848           .padding_right(1)
12849           .padding_top(1)
12850           .padding_bottom(1)
12851           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc2);
12852       }
12853     }
12854   }
12855 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2,output_height_gt_1)12856   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2, output_height_gt_1) {
12857     TEST_REQUIRES_X86_SSE;
12858     for (size_t input_height = 3; input_height < 5; input_height++) {
12859       for (size_t input_width = 1; input_width < 41; input_width += 7) {
12860         DWConv2DMicrokernelTester()
12861           .input_width(input_width)
12862           .input_height(input_height)
12863           .kernel_height(3)
12864           .kernel_width(3)
12865           .subsampling(2)
12866           .padding_left(1)
12867           .padding_right(1)
12868           .padding_top(1)
12869           .padding_bottom(1)
12870           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc2);
12871       }
12872     }
12873   }
12874 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2,padding_top_eq_1)12875   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC2, padding_top_eq_1) {
12876     TEST_REQUIRES_X86_SSE;
12877     for (size_t input_height = 2; input_height < 8; input_height++) {
12878       for (size_t input_width = 1; input_width < 41; input_width += 7) {
12879         DWConv2DMicrokernelTester()
12880           .input_width(input_width)
12881           .input_height(input_height)
12882           .kernel_height(3)
12883           .kernel_width(3)
12884           .subsampling(2)
12885           .padding_left(1)
12886           .padding_right(1)
12887           .padding_top(0)
12888           .padding_bottom(1)
12889           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc2);
12890       }
12891     }
12892   }
12893 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12894 
12895 
12896 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3,output_width_eq_4)12897   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3, output_width_eq_4) {
12898     TEST_REQUIRES_X86_SSE;
12899     for (size_t input_width = 7; input_width < 9; input_width++) {
12900       DWConv2DMicrokernelTester()
12901         .input_width(input_width)
12902         .input_height(2)
12903         .kernel_height(3)
12904         .kernel_width(3)
12905         .subsampling(2)
12906         .padding_left(1)
12907         .padding_right(1)
12908         .padding_top(1)
12909         .padding_bottom(1)
12910         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc3);
12911     }
12912   }
12913 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3,output_width_div_4)12914   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3, output_width_div_4) {
12915     TEST_REQUIRES_X86_SSE;
12916     for (size_t input_width = 16; input_width < 64; input_width += 8) {
12917       DWConv2DMicrokernelTester()
12918         .input_width(input_width)
12919         .input_height(2)
12920         .kernel_height(3)
12921         .kernel_width(3)
12922         .subsampling(2)
12923         .padding_left(1)
12924         .padding_right(1)
12925         .padding_top(1)
12926         .padding_bottom(1)
12927         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc3);
12928     }
12929   }
12930 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3,output_width_lt_4)12931   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3, output_width_lt_4) {
12932     TEST_REQUIRES_X86_SSE;
12933     for (size_t input_width = 1; input_width < 7; input_width++) {
12934       DWConv2DMicrokernelTester()
12935         .input_width(8)
12936         .input_height(2)
12937         .kernel_height(3)
12938         .kernel_width(3)
12939         .subsampling(2)
12940         .padding_left(1)
12941         .padding_right(1)
12942         .padding_top(1)
12943         .padding_bottom(1)
12944         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc3);
12945     }
12946   }
12947 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3,output_width_gt_4)12948   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3, output_width_gt_4) {
12949     TEST_REQUIRES_X86_SSE;
12950     for (size_t input_width = 9; input_width < 17; input_width++) {
12951       DWConv2DMicrokernelTester()
12952         .input_width(input_width)
12953         .input_height(2)
12954         .kernel_height(3)
12955         .kernel_width(3)
12956         .subsampling(2)
12957         .padding_left(1)
12958         .padding_right(1)
12959         .padding_top(1)
12960         .padding_bottom(1)
12961         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc3);
12962     }
12963   }
12964 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3,output_height_eq_1)12965   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3, output_height_eq_1) {
12966     TEST_REQUIRES_X86_SSE;
12967     for (size_t input_height = 1; input_height < 3; input_height++) {
12968       for (size_t input_width = 1; input_width < 41; input_width += 7) {
12969         DWConv2DMicrokernelTester()
12970           .input_width(input_width)
12971           .input_height(input_height)
12972           .kernel_height(3)
12973           .kernel_width(3)
12974           .subsampling(2)
12975           .padding_left(1)
12976           .padding_right(1)
12977           .padding_top(1)
12978           .padding_bottom(1)
12979           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc3);
12980       }
12981     }
12982   }
12983 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3,output_height_gt_1)12984   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3, output_height_gt_1) {
12985     TEST_REQUIRES_X86_SSE;
12986     for (size_t input_height = 3; input_height < 5; input_height++) {
12987       for (size_t input_width = 1; input_width < 41; input_width += 7) {
12988         DWConv2DMicrokernelTester()
12989           .input_width(input_width)
12990           .input_height(input_height)
12991           .kernel_height(3)
12992           .kernel_width(3)
12993           .subsampling(2)
12994           .padding_left(1)
12995           .padding_right(1)
12996           .padding_top(1)
12997           .padding_bottom(1)
12998           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc3);
12999       }
13000     }
13001   }
13002 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3,padding_top_eq_1)13003   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC3, padding_top_eq_1) {
13004     TEST_REQUIRES_X86_SSE;
13005     for (size_t input_height = 2; input_height < 8; input_height++) {
13006       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13007         DWConv2DMicrokernelTester()
13008           .input_width(input_width)
13009           .input_height(input_height)
13010           .kernel_height(3)
13011           .kernel_width(3)
13012           .subsampling(2)
13013           .padding_left(1)
13014           .padding_right(1)
13015           .padding_top(0)
13016           .padding_bottom(1)
13017           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc3);
13018       }
13019     }
13020   }
13021 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13022 
13023 
13024 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4,output_width_eq_4)13025   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4, output_width_eq_4) {
13026     TEST_REQUIRES_X86_SSE;
13027     for (size_t input_width = 7; input_width < 9; input_width++) {
13028       DWConv2DMicrokernelTester()
13029         .input_width(input_width)
13030         .input_height(2)
13031         .kernel_height(3)
13032         .kernel_width(3)
13033         .subsampling(2)
13034         .padding_left(1)
13035         .padding_right(1)
13036         .padding_top(1)
13037         .padding_bottom(1)
13038         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc4);
13039     }
13040   }
13041 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4,output_width_div_4)13042   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4, output_width_div_4) {
13043     TEST_REQUIRES_X86_SSE;
13044     for (size_t input_width = 16; input_width < 64; input_width += 8) {
13045       DWConv2DMicrokernelTester()
13046         .input_width(input_width)
13047         .input_height(2)
13048         .kernel_height(3)
13049         .kernel_width(3)
13050         .subsampling(2)
13051         .padding_left(1)
13052         .padding_right(1)
13053         .padding_top(1)
13054         .padding_bottom(1)
13055         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc4);
13056     }
13057   }
13058 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4,output_width_lt_4)13059   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4, output_width_lt_4) {
13060     TEST_REQUIRES_X86_SSE;
13061     for (size_t input_width = 1; input_width < 7; input_width++) {
13062       DWConv2DMicrokernelTester()
13063         .input_width(8)
13064         .input_height(2)
13065         .kernel_height(3)
13066         .kernel_width(3)
13067         .subsampling(2)
13068         .padding_left(1)
13069         .padding_right(1)
13070         .padding_top(1)
13071         .padding_bottom(1)
13072         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc4);
13073     }
13074   }
13075 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4,output_width_gt_4)13076   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4, output_width_gt_4) {
13077     TEST_REQUIRES_X86_SSE;
13078     for (size_t input_width = 9; input_width < 17; input_width++) {
13079       DWConv2DMicrokernelTester()
13080         .input_width(input_width)
13081         .input_height(2)
13082         .kernel_height(3)
13083         .kernel_width(3)
13084         .subsampling(2)
13085         .padding_left(1)
13086         .padding_right(1)
13087         .padding_top(1)
13088         .padding_bottom(1)
13089         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc4);
13090     }
13091   }
13092 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4,output_height_eq_1)13093   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4, output_height_eq_1) {
13094     TEST_REQUIRES_X86_SSE;
13095     for (size_t input_height = 1; input_height < 3; input_height++) {
13096       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13097         DWConv2DMicrokernelTester()
13098           .input_width(input_width)
13099           .input_height(input_height)
13100           .kernel_height(3)
13101           .kernel_width(3)
13102           .subsampling(2)
13103           .padding_left(1)
13104           .padding_right(1)
13105           .padding_top(1)
13106           .padding_bottom(1)
13107           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc4);
13108       }
13109     }
13110   }
13111 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4,output_height_gt_1)13112   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4, output_height_gt_1) {
13113     TEST_REQUIRES_X86_SSE;
13114     for (size_t input_height = 3; input_height < 5; input_height++) {
13115       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13116         DWConv2DMicrokernelTester()
13117           .input_width(input_width)
13118           .input_height(input_height)
13119           .kernel_height(3)
13120           .kernel_width(3)
13121           .subsampling(2)
13122           .padding_left(1)
13123           .padding_right(1)
13124           .padding_top(1)
13125           .padding_bottom(1)
13126           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc4);
13127       }
13128     }
13129   }
13130 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4,padding_top_eq_1)13131   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_1X4_ACC4, padding_top_eq_1) {
13132     TEST_REQUIRES_X86_SSE;
13133     for (size_t input_height = 2; input_height < 8; input_height++) {
13134       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13135         DWConv2DMicrokernelTester()
13136           .input_width(input_width)
13137           .input_height(input_height)
13138           .kernel_height(3)
13139           .kernel_width(3)
13140           .subsampling(2)
13141           .padding_left(1)
13142           .padding_right(1)
13143           .padding_top(0)
13144           .padding_bottom(1)
13145           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_1x4_acc4);
13146       }
13147     }
13148   }
13149 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13150 
13151 
13152 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4,output_width_eq_4)13153   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4, output_width_eq_4) {
13154     TEST_REQUIRES_X86_SSE;
13155     for (size_t input_width = 7; input_width < 9; input_width++) {
13156       DWConv2DMicrokernelTester()
13157         .input_width(input_width)
13158         .input_height(4)
13159         .kernel_height(3)
13160         .kernel_width(3)
13161         .subsampling(2)
13162         .padding_left(1)
13163         .padding_right(1)
13164         .padding_top(1)
13165         .padding_bottom(1)
13166         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4);
13167     }
13168   }
13169 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4,output_width_div_4)13170   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4, output_width_div_4) {
13171     TEST_REQUIRES_X86_SSE;
13172     for (size_t input_width = 16; input_width < 64; input_width += 8) {
13173       DWConv2DMicrokernelTester()
13174         .input_width(input_width)
13175         .input_height(4)
13176         .kernel_height(3)
13177         .kernel_width(3)
13178         .subsampling(2)
13179         .padding_left(1)
13180         .padding_right(1)
13181         .padding_top(1)
13182         .padding_bottom(1)
13183         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4);
13184     }
13185   }
13186 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4,output_width_lt_4)13187   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4, output_width_lt_4) {
13188     TEST_REQUIRES_X86_SSE;
13189     for (size_t input_width = 1; input_width < 7; input_width++) {
13190       DWConv2DMicrokernelTester()
13191         .input_width(8)
13192         .input_height(4)
13193         .kernel_height(3)
13194         .kernel_width(3)
13195         .subsampling(2)
13196         .padding_left(1)
13197         .padding_right(1)
13198         .padding_top(1)
13199         .padding_bottom(1)
13200         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4);
13201     }
13202   }
13203 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4,output_width_gt_4)13204   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4, output_width_gt_4) {
13205     TEST_REQUIRES_X86_SSE;
13206     for (size_t input_width = 9; input_width < 17; input_width++) {
13207       DWConv2DMicrokernelTester()
13208         .input_width(input_width)
13209         .input_height(4)
13210         .kernel_height(3)
13211         .kernel_width(3)
13212         .subsampling(2)
13213         .padding_left(1)
13214         .padding_right(1)
13215         .padding_top(1)
13216         .padding_bottom(1)
13217         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4);
13218     }
13219   }
13220 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4,output_height_eq_2)13221   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4, output_height_eq_2) {
13222     TEST_REQUIRES_X86_SSE;
13223     for (size_t input_height = 3; input_height < 5; input_height++) {
13224       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13225         DWConv2DMicrokernelTester()
13226           .input_width(input_width)
13227           .input_height(input_height)
13228           .kernel_height(3)
13229           .kernel_width(3)
13230           .subsampling(2)
13231           .padding_left(1)
13232           .padding_right(1)
13233           .padding_top(1)
13234           .padding_bottom(1)
13235           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4);
13236       }
13237     }
13238   }
13239 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4,output_height_div_2)13240   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4, output_height_div_2) {
13241     TEST_REQUIRES_X86_SSE;
13242     for (size_t input_height = 8; input_height < 32; input_height += 4) {
13243       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13244         DWConv2DMicrokernelTester()
13245           .input_width(input_width)
13246           .input_height(input_height)
13247           .kernel_height(3)
13248           .kernel_width(3)
13249           .subsampling(2)
13250           .padding_left(1)
13251           .padding_right(1)
13252           .padding_top(1)
13253           .padding_bottom(1)
13254           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4);
13255       }
13256     }
13257   }
13258 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4,output_height_lt_2)13259   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4, output_height_lt_2) {
13260     TEST_REQUIRES_X86_SSE;
13261     for (size_t input_height = 1; input_height < 3; input_height++) {
13262       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13263         DWConv2DMicrokernelTester()
13264           .input_width(input_width)
13265           .input_height(input_height)
13266           .kernel_height(3)
13267           .kernel_width(3)
13268           .subsampling(2)
13269           .padding_left(1)
13270           .padding_right(1)
13271           .padding_top(1)
13272           .padding_bottom(1)
13273           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4);
13274       }
13275     }
13276   }
13277 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4,output_height_gt_2)13278   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4, output_height_gt_2) {
13279     TEST_REQUIRES_X86_SSE;
13280     for (size_t input_height = 5; input_height < 9; input_height++) {
13281       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13282         DWConv2DMicrokernelTester()
13283           .input_width(input_width)
13284           .input_height(input_height)
13285           .kernel_height(3)
13286           .kernel_width(3)
13287           .subsampling(2)
13288           .padding_left(1)
13289           .padding_right(1)
13290           .padding_top(1)
13291           .padding_bottom(1)
13292           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4);
13293       }
13294     }
13295   }
13296 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4,padding_top_eq_1)13297   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4, padding_top_eq_1) {
13298     TEST_REQUIRES_X86_SSE;
13299     for (size_t input_height = 2; input_height < 14; input_height++) {
13300       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13301         DWConv2DMicrokernelTester()
13302           .input_width(input_width)
13303           .input_height(input_height)
13304           .kernel_height(3)
13305           .kernel_width(3)
13306           .subsampling(2)
13307           .padding_left(1)
13308           .padding_right(1)
13309           .padding_top(0)
13310           .padding_bottom(1)
13311           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4);
13312       }
13313     }
13314   }
13315 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13316 
13317 
13318 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2,output_width_eq_4)13319   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2, output_width_eq_4) {
13320     TEST_REQUIRES_X86_SSE;
13321     for (size_t input_width = 7; input_width < 9; input_width++) {
13322       DWConv2DMicrokernelTester()
13323         .input_width(input_width)
13324         .input_height(4)
13325         .kernel_height(3)
13326         .kernel_width(3)
13327         .subsampling(2)
13328         .padding_left(1)
13329         .padding_right(1)
13330         .padding_top(1)
13331         .padding_bottom(1)
13332         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4_acc2);
13333     }
13334   }
13335 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2,output_width_div_4)13336   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2, output_width_div_4) {
13337     TEST_REQUIRES_X86_SSE;
13338     for (size_t input_width = 16; input_width < 64; input_width += 8) {
13339       DWConv2DMicrokernelTester()
13340         .input_width(input_width)
13341         .input_height(4)
13342         .kernel_height(3)
13343         .kernel_width(3)
13344         .subsampling(2)
13345         .padding_left(1)
13346         .padding_right(1)
13347         .padding_top(1)
13348         .padding_bottom(1)
13349         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4_acc2);
13350     }
13351   }
13352 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2,output_width_lt_4)13353   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2, output_width_lt_4) {
13354     TEST_REQUIRES_X86_SSE;
13355     for (size_t input_width = 1; input_width < 7; input_width++) {
13356       DWConv2DMicrokernelTester()
13357         .input_width(8)
13358         .input_height(4)
13359         .kernel_height(3)
13360         .kernel_width(3)
13361         .subsampling(2)
13362         .padding_left(1)
13363         .padding_right(1)
13364         .padding_top(1)
13365         .padding_bottom(1)
13366         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4_acc2);
13367     }
13368   }
13369 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2,output_width_gt_4)13370   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2, output_width_gt_4) {
13371     TEST_REQUIRES_X86_SSE;
13372     for (size_t input_width = 9; input_width < 17; input_width++) {
13373       DWConv2DMicrokernelTester()
13374         .input_width(input_width)
13375         .input_height(4)
13376         .kernel_height(3)
13377         .kernel_width(3)
13378         .subsampling(2)
13379         .padding_left(1)
13380         .padding_right(1)
13381         .padding_top(1)
13382         .padding_bottom(1)
13383         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4_acc2);
13384     }
13385   }
13386 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2,output_height_eq_2)13387   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2, output_height_eq_2) {
13388     TEST_REQUIRES_X86_SSE;
13389     for (size_t input_height = 3; input_height < 5; input_height++) {
13390       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13391         DWConv2DMicrokernelTester()
13392           .input_width(input_width)
13393           .input_height(input_height)
13394           .kernel_height(3)
13395           .kernel_width(3)
13396           .subsampling(2)
13397           .padding_left(1)
13398           .padding_right(1)
13399           .padding_top(1)
13400           .padding_bottom(1)
13401           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4_acc2);
13402       }
13403     }
13404   }
13405 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2,output_height_div_2)13406   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2, output_height_div_2) {
13407     TEST_REQUIRES_X86_SSE;
13408     for (size_t input_height = 8; input_height < 32; input_height += 4) {
13409       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13410         DWConv2DMicrokernelTester()
13411           .input_width(input_width)
13412           .input_height(input_height)
13413           .kernel_height(3)
13414           .kernel_width(3)
13415           .subsampling(2)
13416           .padding_left(1)
13417           .padding_right(1)
13418           .padding_top(1)
13419           .padding_bottom(1)
13420           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4_acc2);
13421       }
13422     }
13423   }
13424 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2,output_height_lt_2)13425   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2, output_height_lt_2) {
13426     TEST_REQUIRES_X86_SSE;
13427     for (size_t input_height = 1; input_height < 3; input_height++) {
13428       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13429         DWConv2DMicrokernelTester()
13430           .input_width(input_width)
13431           .input_height(input_height)
13432           .kernel_height(3)
13433           .kernel_width(3)
13434           .subsampling(2)
13435           .padding_left(1)
13436           .padding_right(1)
13437           .padding_top(1)
13438           .padding_bottom(1)
13439           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4_acc2);
13440       }
13441     }
13442   }
13443 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2,output_height_gt_2)13444   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2, output_height_gt_2) {
13445     TEST_REQUIRES_X86_SSE;
13446     for (size_t input_height = 5; input_height < 9; input_height++) {
13447       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13448         DWConv2DMicrokernelTester()
13449           .input_width(input_width)
13450           .input_height(input_height)
13451           .kernel_height(3)
13452           .kernel_width(3)
13453           .subsampling(2)
13454           .padding_left(1)
13455           .padding_right(1)
13456           .padding_top(1)
13457           .padding_bottom(1)
13458           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4_acc2);
13459       }
13460     }
13461   }
13462 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2,padding_top_eq_1)13463   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_2X4_ACC2, padding_top_eq_1) {
13464     TEST_REQUIRES_X86_SSE;
13465     for (size_t input_height = 2; input_height < 14; input_height++) {
13466       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13467         DWConv2DMicrokernelTester()
13468           .input_width(input_width)
13469           .input_height(input_height)
13470           .kernel_height(3)
13471           .kernel_width(3)
13472           .subsampling(2)
13473           .padding_left(1)
13474           .padding_right(1)
13475           .padding_top(0)
13476           .padding_bottom(1)
13477           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_2x4_acc2);
13478       }
13479     }
13480   }
13481 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13482 
13483 
13484 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4,output_width_eq_4)13485   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4, output_width_eq_4) {
13486     TEST_REQUIRES_X86_SSE;
13487     for (size_t input_width = 7; input_width < 9; input_width++) {
13488       DWConv2DMicrokernelTester()
13489         .input_width(input_width)
13490         .input_height(6)
13491         .kernel_height(3)
13492         .kernel_width(3)
13493         .subsampling(2)
13494         .padding_left(1)
13495         .padding_right(1)
13496         .padding_top(1)
13497         .padding_bottom(1)
13498         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_3x4);
13499     }
13500   }
13501 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4,output_width_div_4)13502   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4, output_width_div_4) {
13503     TEST_REQUIRES_X86_SSE;
13504     for (size_t input_width = 16; input_width < 64; input_width += 8) {
13505       DWConv2DMicrokernelTester()
13506         .input_width(input_width)
13507         .input_height(6)
13508         .kernel_height(3)
13509         .kernel_width(3)
13510         .subsampling(2)
13511         .padding_left(1)
13512         .padding_right(1)
13513         .padding_top(1)
13514         .padding_bottom(1)
13515         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_3x4);
13516     }
13517   }
13518 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4,output_width_lt_4)13519   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4, output_width_lt_4) {
13520     TEST_REQUIRES_X86_SSE;
13521     for (size_t input_width = 1; input_width < 7; input_width++) {
13522       DWConv2DMicrokernelTester()
13523         .input_width(8)
13524         .input_height(6)
13525         .kernel_height(3)
13526         .kernel_width(3)
13527         .subsampling(2)
13528         .padding_left(1)
13529         .padding_right(1)
13530         .padding_top(1)
13531         .padding_bottom(1)
13532         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_3x4);
13533     }
13534   }
13535 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4,output_width_gt_4)13536   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4, output_width_gt_4) {
13537     TEST_REQUIRES_X86_SSE;
13538     for (size_t input_width = 9; input_width < 17; input_width++) {
13539       DWConv2DMicrokernelTester()
13540         .input_width(input_width)
13541         .input_height(6)
13542         .kernel_height(3)
13543         .kernel_width(3)
13544         .subsampling(2)
13545         .padding_left(1)
13546         .padding_right(1)
13547         .padding_top(1)
13548         .padding_bottom(1)
13549         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_3x4);
13550     }
13551   }
13552 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4,output_height_eq_3)13553   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4, output_height_eq_3) {
13554     TEST_REQUIRES_X86_SSE;
13555     for (size_t input_height = 5; input_height < 7; input_height++) {
13556       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13557         DWConv2DMicrokernelTester()
13558           .input_width(input_width)
13559           .input_height(input_height)
13560           .kernel_height(3)
13561           .kernel_width(3)
13562           .subsampling(2)
13563           .padding_left(1)
13564           .padding_right(1)
13565           .padding_top(1)
13566           .padding_bottom(1)
13567           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_3x4);
13568       }
13569     }
13570   }
13571 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4,output_height_div_3)13572   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4, output_height_div_3) {
13573     TEST_REQUIRES_X86_SSE;
13574     for (size_t input_height = 12; input_height < 48; input_height += 6) {
13575       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13576         DWConv2DMicrokernelTester()
13577           .input_width(input_width)
13578           .input_height(input_height)
13579           .kernel_height(3)
13580           .kernel_width(3)
13581           .subsampling(2)
13582           .padding_left(1)
13583           .padding_right(1)
13584           .padding_top(1)
13585           .padding_bottom(1)
13586           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_3x4);
13587       }
13588     }
13589   }
13590 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4,output_height_lt_3)13591   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4, output_height_lt_3) {
13592     TEST_REQUIRES_X86_SSE;
13593     for (size_t input_height = 1; input_height < 5; input_height++) {
13594       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13595         DWConv2DMicrokernelTester()
13596           .input_width(input_width)
13597           .input_height(input_height)
13598           .kernel_height(3)
13599           .kernel_width(3)
13600           .subsampling(2)
13601           .padding_left(1)
13602           .padding_right(1)
13603           .padding_top(1)
13604           .padding_bottom(1)
13605           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_3x4);
13606       }
13607     }
13608   }
13609 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4,output_height_gt_3)13610   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4, output_height_gt_3) {
13611     TEST_REQUIRES_X86_SSE;
13612     for (size_t input_height = 7; input_height < 13; input_height++) {
13613       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13614         DWConv2DMicrokernelTester()
13615           .input_width(input_width)
13616           .input_height(input_height)
13617           .kernel_height(3)
13618           .kernel_width(3)
13619           .subsampling(2)
13620           .padding_left(1)
13621           .padding_right(1)
13622           .padding_top(1)
13623           .padding_bottom(1)
13624           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_3x4);
13625       }
13626     }
13627   }
13628 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4,padding_top_eq_1)13629   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_3X4, padding_top_eq_1) {
13630     TEST_REQUIRES_X86_SSE;
13631     for (size_t input_height = 2; input_height < 20; input_height++) {
13632       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13633         DWConv2DMicrokernelTester()
13634           .input_width(input_width)
13635           .input_height(input_height)
13636           .kernel_height(3)
13637           .kernel_width(3)
13638           .subsampling(2)
13639           .padding_left(1)
13640           .padding_right(1)
13641           .padding_top(0)
13642           .padding_bottom(1)
13643           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_3x4);
13644       }
13645     }
13646   }
13647 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13648 
13649 
13650 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4,output_width_eq_4)13651   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4, output_width_eq_4) {
13652     TEST_REQUIRES_X86_SSE;
13653     for (size_t input_width = 7; input_width < 9; input_width++) {
13654       DWConv2DMicrokernelTester()
13655         .input_width(input_width)
13656         .input_height(8)
13657         .kernel_height(3)
13658         .kernel_width(3)
13659         .subsampling(2)
13660         .padding_left(1)
13661         .padding_right(1)
13662         .padding_top(1)
13663         .padding_bottom(1)
13664         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_4x4);
13665     }
13666   }
13667 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4,output_width_div_4)13668   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4, output_width_div_4) {
13669     TEST_REQUIRES_X86_SSE;
13670     for (size_t input_width = 16; input_width < 64; input_width += 8) {
13671       DWConv2DMicrokernelTester()
13672         .input_width(input_width)
13673         .input_height(8)
13674         .kernel_height(3)
13675         .kernel_width(3)
13676         .subsampling(2)
13677         .padding_left(1)
13678         .padding_right(1)
13679         .padding_top(1)
13680         .padding_bottom(1)
13681         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_4x4);
13682     }
13683   }
13684 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4,output_width_lt_4)13685   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4, output_width_lt_4) {
13686     TEST_REQUIRES_X86_SSE;
13687     for (size_t input_width = 1; input_width < 7; input_width++) {
13688       DWConv2DMicrokernelTester()
13689         .input_width(8)
13690         .input_height(8)
13691         .kernel_height(3)
13692         .kernel_width(3)
13693         .subsampling(2)
13694         .padding_left(1)
13695         .padding_right(1)
13696         .padding_top(1)
13697         .padding_bottom(1)
13698         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_4x4);
13699     }
13700   }
13701 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4,output_width_gt_4)13702   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4, output_width_gt_4) {
13703     TEST_REQUIRES_X86_SSE;
13704     for (size_t input_width = 9; input_width < 17; input_width++) {
13705       DWConv2DMicrokernelTester()
13706         .input_width(input_width)
13707         .input_height(8)
13708         .kernel_height(3)
13709         .kernel_width(3)
13710         .subsampling(2)
13711         .padding_left(1)
13712         .padding_right(1)
13713         .padding_top(1)
13714         .padding_bottom(1)
13715         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_4x4);
13716     }
13717   }
13718 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4,output_height_eq_4)13719   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4, output_height_eq_4) {
13720     TEST_REQUIRES_X86_SSE;
13721     for (size_t input_height = 7; input_height < 9; input_height++) {
13722       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13723         DWConv2DMicrokernelTester()
13724           .input_width(input_width)
13725           .input_height(input_height)
13726           .kernel_height(3)
13727           .kernel_width(3)
13728           .subsampling(2)
13729           .padding_left(1)
13730           .padding_right(1)
13731           .padding_top(1)
13732           .padding_bottom(1)
13733           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_4x4);
13734       }
13735     }
13736   }
13737 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4,output_height_div_4)13738   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4, output_height_div_4) {
13739     TEST_REQUIRES_X86_SSE;
13740     for (size_t input_height = 16; input_height < 64; input_height += 8) {
13741       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13742         DWConv2DMicrokernelTester()
13743           .input_width(input_width)
13744           .input_height(input_height)
13745           .kernel_height(3)
13746           .kernel_width(3)
13747           .subsampling(2)
13748           .padding_left(1)
13749           .padding_right(1)
13750           .padding_top(1)
13751           .padding_bottom(1)
13752           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_4x4);
13753       }
13754     }
13755   }
13756 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4,output_height_lt_4)13757   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4, output_height_lt_4) {
13758     TEST_REQUIRES_X86_SSE;
13759     for (size_t input_height = 1; input_height < 7; input_height++) {
13760       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13761         DWConv2DMicrokernelTester()
13762           .input_width(input_width)
13763           .input_height(input_height)
13764           .kernel_height(3)
13765           .kernel_width(3)
13766           .subsampling(2)
13767           .padding_left(1)
13768           .padding_right(1)
13769           .padding_top(1)
13770           .padding_bottom(1)
13771           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_4x4);
13772       }
13773     }
13774   }
13775 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4,output_height_gt_4)13776   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4, output_height_gt_4) {
13777     TEST_REQUIRES_X86_SSE;
13778     for (size_t input_height = 9; input_height < 17; input_height++) {
13779       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13780         DWConv2DMicrokernelTester()
13781           .input_width(input_width)
13782           .input_height(input_height)
13783           .kernel_height(3)
13784           .kernel_width(3)
13785           .subsampling(2)
13786           .padding_left(1)
13787           .padding_right(1)
13788           .padding_top(1)
13789           .padding_bottom(1)
13790           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_4x4);
13791       }
13792     }
13793   }
13794 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4,padding_top_eq_1)13795   TEST(F32_DWCONV2D_CHW_3X3S2P1__SSE_4X4, padding_top_eq_1) {
13796     TEST_REQUIRES_X86_SSE;
13797     for (size_t input_height = 2; input_height < 26; input_height++) {
13798       for (size_t input_width = 1; input_width < 41; input_width += 7) {
13799         DWConv2DMicrokernelTester()
13800           .input_width(input_width)
13801           .input_height(input_height)
13802           .kernel_height(3)
13803           .kernel_width(3)
13804           .subsampling(2)
13805           .padding_left(1)
13806           .padding_right(1)
13807           .padding_top(0)
13808           .padding_bottom(1)
13809           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__sse_4x4);
13810       }
13811     }
13812   }
13813 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13814 
13815 
13816 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4,output_width_eq_4)13817   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4, output_width_eq_4) {
13818     TEST_REQUIRES_X86_SSE;
13819     DWConv2DMicrokernelTester()
13820       .input_width(4)
13821       .input_height(1)
13822       .kernel_height(5)
13823       .kernel_width(5)
13824       .subsampling(1)
13825       .padding_left(2)
13826       .padding_right(2)
13827       .padding_top(2)
13828       .padding_bottom(2)
13829       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4);
13830   }
13831 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4,output_width_div_4)13832   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4, output_width_div_4) {
13833     TEST_REQUIRES_X86_SSE;
13834     for (size_t input_width = 8; input_width < 32; input_width += 4) {
13835       DWConv2DMicrokernelTester()
13836         .input_width(input_width)
13837         .input_height(1)
13838         .kernel_height(5)
13839         .kernel_width(5)
13840         .subsampling(1)
13841         .padding_left(2)
13842         .padding_right(2)
13843         .padding_top(2)
13844         .padding_bottom(2)
13845         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4);
13846     }
13847   }
13848 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4,output_width_lt_4)13849   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4, output_width_lt_4) {
13850     TEST_REQUIRES_X86_SSE;
13851     for (size_t input_width = 1; input_width < 4; input_width++) {
13852       DWConv2DMicrokernelTester()
13853         .input_width(4)
13854         .input_height(1)
13855         .kernel_height(5)
13856         .kernel_width(5)
13857         .subsampling(1)
13858         .padding_left(2)
13859         .padding_right(2)
13860         .padding_top(2)
13861         .padding_bottom(2)
13862         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4);
13863     }
13864   }
13865 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4,output_width_gt_4)13866   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4, output_width_gt_4) {
13867     TEST_REQUIRES_X86_SSE;
13868     for (size_t input_width = 5; input_width < 9; input_width++) {
13869       DWConv2DMicrokernelTester()
13870         .input_width(input_width)
13871         .input_height(1)
13872         .kernel_height(5)
13873         .kernel_width(5)
13874         .subsampling(1)
13875         .padding_left(2)
13876         .padding_right(2)
13877         .padding_top(2)
13878         .padding_bottom(2)
13879         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4);
13880     }
13881   }
13882 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4,output_height_gt_1)13883   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4, output_height_gt_1) {
13884     TEST_REQUIRES_X86_SSE;
13885     for (size_t input_height = 2; input_height < 3; input_height++) {
13886       for (size_t input_width = 1; input_width < 21; input_width += 3) {
13887         DWConv2DMicrokernelTester()
13888           .input_width(input_width)
13889           .input_height(input_height)
13890           .kernel_height(5)
13891           .kernel_width(5)
13892           .subsampling(1)
13893           .padding_left(2)
13894           .padding_right(2)
13895           .padding_top(2)
13896           .padding_bottom(2)
13897           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4);
13898       }
13899     }
13900   }
13901 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13902 
13903 
13904 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC2,output_width_eq_4)13905   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC2, output_width_eq_4) {
13906     TEST_REQUIRES_X86_SSE;
13907     DWConv2DMicrokernelTester()
13908       .input_width(4)
13909       .input_height(1)
13910       .kernel_height(5)
13911       .kernel_width(5)
13912       .subsampling(1)
13913       .padding_left(2)
13914       .padding_right(2)
13915       .padding_top(2)
13916       .padding_bottom(2)
13917       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc2);
13918   }
13919 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC2,output_width_div_4)13920   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC2, output_width_div_4) {
13921     TEST_REQUIRES_X86_SSE;
13922     for (size_t input_width = 8; input_width < 32; input_width += 4) {
13923       DWConv2DMicrokernelTester()
13924         .input_width(input_width)
13925         .input_height(1)
13926         .kernel_height(5)
13927         .kernel_width(5)
13928         .subsampling(1)
13929         .padding_left(2)
13930         .padding_right(2)
13931         .padding_top(2)
13932         .padding_bottom(2)
13933         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc2);
13934     }
13935   }
13936 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC2,output_width_lt_4)13937   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC2, output_width_lt_4) {
13938     TEST_REQUIRES_X86_SSE;
13939     for (size_t input_width = 1; input_width < 4; input_width++) {
13940       DWConv2DMicrokernelTester()
13941         .input_width(4)
13942         .input_height(1)
13943         .kernel_height(5)
13944         .kernel_width(5)
13945         .subsampling(1)
13946         .padding_left(2)
13947         .padding_right(2)
13948         .padding_top(2)
13949         .padding_bottom(2)
13950         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc2);
13951     }
13952   }
13953 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC2,output_width_gt_4)13954   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC2, output_width_gt_4) {
13955     TEST_REQUIRES_X86_SSE;
13956     for (size_t input_width = 5; input_width < 9; input_width++) {
13957       DWConv2DMicrokernelTester()
13958         .input_width(input_width)
13959         .input_height(1)
13960         .kernel_height(5)
13961         .kernel_width(5)
13962         .subsampling(1)
13963         .padding_left(2)
13964         .padding_right(2)
13965         .padding_top(2)
13966         .padding_bottom(2)
13967         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc2);
13968     }
13969   }
13970 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC2,output_height_gt_1)13971   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC2, output_height_gt_1) {
13972     TEST_REQUIRES_X86_SSE;
13973     for (size_t input_height = 2; input_height < 3; input_height++) {
13974       for (size_t input_width = 1; input_width < 21; input_width += 3) {
13975         DWConv2DMicrokernelTester()
13976           .input_width(input_width)
13977           .input_height(input_height)
13978           .kernel_height(5)
13979           .kernel_width(5)
13980           .subsampling(1)
13981           .padding_left(2)
13982           .padding_right(2)
13983           .padding_top(2)
13984           .padding_bottom(2)
13985           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc2);
13986       }
13987     }
13988   }
13989 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13990 
13991 
13992 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC3,output_width_eq_4)13993   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC3, output_width_eq_4) {
13994     TEST_REQUIRES_X86_SSE;
13995     DWConv2DMicrokernelTester()
13996       .input_width(4)
13997       .input_height(1)
13998       .kernel_height(5)
13999       .kernel_width(5)
14000       .subsampling(1)
14001       .padding_left(2)
14002       .padding_right(2)
14003       .padding_top(2)
14004       .padding_bottom(2)
14005       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc3);
14006   }
14007 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC3,output_width_div_4)14008   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC3, output_width_div_4) {
14009     TEST_REQUIRES_X86_SSE;
14010     for (size_t input_width = 8; input_width < 32; input_width += 4) {
14011       DWConv2DMicrokernelTester()
14012         .input_width(input_width)
14013         .input_height(1)
14014         .kernel_height(5)
14015         .kernel_width(5)
14016         .subsampling(1)
14017         .padding_left(2)
14018         .padding_right(2)
14019         .padding_top(2)
14020         .padding_bottom(2)
14021         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc3);
14022     }
14023   }
14024 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC3,output_width_lt_4)14025   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC3, output_width_lt_4) {
14026     TEST_REQUIRES_X86_SSE;
14027     for (size_t input_width = 1; input_width < 4; input_width++) {
14028       DWConv2DMicrokernelTester()
14029         .input_width(4)
14030         .input_height(1)
14031         .kernel_height(5)
14032         .kernel_width(5)
14033         .subsampling(1)
14034         .padding_left(2)
14035         .padding_right(2)
14036         .padding_top(2)
14037         .padding_bottom(2)
14038         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc3);
14039     }
14040   }
14041 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC3,output_width_gt_4)14042   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC3, output_width_gt_4) {
14043     TEST_REQUIRES_X86_SSE;
14044     for (size_t input_width = 5; input_width < 9; input_width++) {
14045       DWConv2DMicrokernelTester()
14046         .input_width(input_width)
14047         .input_height(1)
14048         .kernel_height(5)
14049         .kernel_width(5)
14050         .subsampling(1)
14051         .padding_left(2)
14052         .padding_right(2)
14053         .padding_top(2)
14054         .padding_bottom(2)
14055         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc3);
14056     }
14057   }
14058 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC3,output_height_gt_1)14059   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC3, output_height_gt_1) {
14060     TEST_REQUIRES_X86_SSE;
14061     for (size_t input_height = 2; input_height < 3; input_height++) {
14062       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14063         DWConv2DMicrokernelTester()
14064           .input_width(input_width)
14065           .input_height(input_height)
14066           .kernel_height(5)
14067           .kernel_width(5)
14068           .subsampling(1)
14069           .padding_left(2)
14070           .padding_right(2)
14071           .padding_top(2)
14072           .padding_bottom(2)
14073           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc3);
14074       }
14075     }
14076   }
14077 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
14078 
14079 
14080 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC4,output_width_eq_4)14081   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC4, output_width_eq_4) {
14082     TEST_REQUIRES_X86_SSE;
14083     DWConv2DMicrokernelTester()
14084       .input_width(4)
14085       .input_height(1)
14086       .kernel_height(5)
14087       .kernel_width(5)
14088       .subsampling(1)
14089       .padding_left(2)
14090       .padding_right(2)
14091       .padding_top(2)
14092       .padding_bottom(2)
14093       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc4);
14094   }
14095 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC4,output_width_div_4)14096   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC4, output_width_div_4) {
14097     TEST_REQUIRES_X86_SSE;
14098     for (size_t input_width = 8; input_width < 32; input_width += 4) {
14099       DWConv2DMicrokernelTester()
14100         .input_width(input_width)
14101         .input_height(1)
14102         .kernel_height(5)
14103         .kernel_width(5)
14104         .subsampling(1)
14105         .padding_left(2)
14106         .padding_right(2)
14107         .padding_top(2)
14108         .padding_bottom(2)
14109         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc4);
14110     }
14111   }
14112 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC4,output_width_lt_4)14113   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC4, output_width_lt_4) {
14114     TEST_REQUIRES_X86_SSE;
14115     for (size_t input_width = 1; input_width < 4; input_width++) {
14116       DWConv2DMicrokernelTester()
14117         .input_width(4)
14118         .input_height(1)
14119         .kernel_height(5)
14120         .kernel_width(5)
14121         .subsampling(1)
14122         .padding_left(2)
14123         .padding_right(2)
14124         .padding_top(2)
14125         .padding_bottom(2)
14126         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc4);
14127     }
14128   }
14129 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC4,output_width_gt_4)14130   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC4, output_width_gt_4) {
14131     TEST_REQUIRES_X86_SSE;
14132     for (size_t input_width = 5; input_width < 9; input_width++) {
14133       DWConv2DMicrokernelTester()
14134         .input_width(input_width)
14135         .input_height(1)
14136         .kernel_height(5)
14137         .kernel_width(5)
14138         .subsampling(1)
14139         .padding_left(2)
14140         .padding_right(2)
14141         .padding_top(2)
14142         .padding_bottom(2)
14143         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc4);
14144     }
14145   }
14146 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC4,output_height_gt_1)14147   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC4, output_height_gt_1) {
14148     TEST_REQUIRES_X86_SSE;
14149     for (size_t input_height = 2; input_height < 3; input_height++) {
14150       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14151         DWConv2DMicrokernelTester()
14152           .input_width(input_width)
14153           .input_height(input_height)
14154           .kernel_height(5)
14155           .kernel_width(5)
14156           .subsampling(1)
14157           .padding_left(2)
14158           .padding_right(2)
14159           .padding_top(2)
14160           .padding_bottom(2)
14161           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc4);
14162       }
14163     }
14164   }
14165 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
14166 
14167 
14168 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC5,output_width_eq_4)14169   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC5, output_width_eq_4) {
14170     TEST_REQUIRES_X86_SSE;
14171     DWConv2DMicrokernelTester()
14172       .input_width(4)
14173       .input_height(1)
14174       .kernel_height(5)
14175       .kernel_width(5)
14176       .subsampling(1)
14177       .padding_left(2)
14178       .padding_right(2)
14179       .padding_top(2)
14180       .padding_bottom(2)
14181       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc5);
14182   }
14183 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC5,output_width_div_4)14184   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC5, output_width_div_4) {
14185     TEST_REQUIRES_X86_SSE;
14186     for (size_t input_width = 8; input_width < 32; input_width += 4) {
14187       DWConv2DMicrokernelTester()
14188         .input_width(input_width)
14189         .input_height(1)
14190         .kernel_height(5)
14191         .kernel_width(5)
14192         .subsampling(1)
14193         .padding_left(2)
14194         .padding_right(2)
14195         .padding_top(2)
14196         .padding_bottom(2)
14197         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc5);
14198     }
14199   }
14200 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC5,output_width_lt_4)14201   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC5, output_width_lt_4) {
14202     TEST_REQUIRES_X86_SSE;
14203     for (size_t input_width = 1; input_width < 4; input_width++) {
14204       DWConv2DMicrokernelTester()
14205         .input_width(4)
14206         .input_height(1)
14207         .kernel_height(5)
14208         .kernel_width(5)
14209         .subsampling(1)
14210         .padding_left(2)
14211         .padding_right(2)
14212         .padding_top(2)
14213         .padding_bottom(2)
14214         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc5);
14215     }
14216   }
14217 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC5,output_width_gt_4)14218   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC5, output_width_gt_4) {
14219     TEST_REQUIRES_X86_SSE;
14220     for (size_t input_width = 5; input_width < 9; input_width++) {
14221       DWConv2DMicrokernelTester()
14222         .input_width(input_width)
14223         .input_height(1)
14224         .kernel_height(5)
14225         .kernel_width(5)
14226         .subsampling(1)
14227         .padding_left(2)
14228         .padding_right(2)
14229         .padding_top(2)
14230         .padding_bottom(2)
14231         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc5);
14232     }
14233   }
14234 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC5,output_height_gt_1)14235   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_1X4_ACC5, output_height_gt_1) {
14236     TEST_REQUIRES_X86_SSE;
14237     for (size_t input_height = 2; input_height < 3; input_height++) {
14238       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14239         DWConv2DMicrokernelTester()
14240           .input_width(input_width)
14241           .input_height(input_height)
14242           .kernel_height(5)
14243           .kernel_width(5)
14244           .subsampling(1)
14245           .padding_left(2)
14246           .padding_right(2)
14247           .padding_top(2)
14248           .padding_bottom(2)
14249           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_1x4_acc5);
14250       }
14251     }
14252   }
14253 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
14254 
14255 
14256 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4,output_width_eq_4)14257   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4, output_width_eq_4) {
14258     TEST_REQUIRES_X86_SSE;
14259     DWConv2DMicrokernelTester()
14260       .input_width(4)
14261       .input_height(2)
14262       .kernel_height(5)
14263       .kernel_width(5)
14264       .subsampling(1)
14265       .padding_left(2)
14266       .padding_right(2)
14267       .padding_top(2)
14268       .padding_bottom(2)
14269       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4);
14270   }
14271 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4,output_width_div_4)14272   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4, output_width_div_4) {
14273     TEST_REQUIRES_X86_SSE;
14274     for (size_t input_width = 8; input_width < 32; input_width += 4) {
14275       DWConv2DMicrokernelTester()
14276         .input_width(input_width)
14277         .input_height(2)
14278         .kernel_height(5)
14279         .kernel_width(5)
14280         .subsampling(1)
14281         .padding_left(2)
14282         .padding_right(2)
14283         .padding_top(2)
14284         .padding_bottom(2)
14285         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4);
14286     }
14287   }
14288 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4,output_width_lt_4)14289   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4, output_width_lt_4) {
14290     TEST_REQUIRES_X86_SSE;
14291     for (size_t input_width = 1; input_width < 4; input_width++) {
14292       DWConv2DMicrokernelTester()
14293         .input_width(4)
14294         .input_height(2)
14295         .kernel_height(5)
14296         .kernel_width(5)
14297         .subsampling(1)
14298         .padding_left(2)
14299         .padding_right(2)
14300         .padding_top(2)
14301         .padding_bottom(2)
14302         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4);
14303     }
14304   }
14305 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4,output_width_gt_4)14306   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4, output_width_gt_4) {
14307     TEST_REQUIRES_X86_SSE;
14308     for (size_t input_width = 5; input_width < 9; input_width++) {
14309       DWConv2DMicrokernelTester()
14310         .input_width(input_width)
14311         .input_height(2)
14312         .kernel_height(5)
14313         .kernel_width(5)
14314         .subsampling(1)
14315         .padding_left(2)
14316         .padding_right(2)
14317         .padding_top(2)
14318         .padding_bottom(2)
14319         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4);
14320     }
14321   }
14322 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4,output_height_div_2)14323   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4, output_height_div_2) {
14324     TEST_REQUIRES_X86_SSE;
14325     for (size_t input_height = 4; input_height < 16; input_height += 2) {
14326       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14327         DWConv2DMicrokernelTester()
14328           .input_width(input_width)
14329           .input_height(input_height)
14330           .kernel_height(5)
14331           .kernel_width(5)
14332           .subsampling(1)
14333           .padding_left(2)
14334           .padding_right(2)
14335           .padding_top(2)
14336           .padding_bottom(2)
14337           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4);
14338       }
14339     }
14340   }
14341 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4,output_height_lt_2)14342   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4, output_height_lt_2) {
14343     TEST_REQUIRES_X86_SSE;
14344     for (size_t input_height = 1; input_height < 2; input_height++) {
14345       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14346         DWConv2DMicrokernelTester()
14347           .input_width(input_width)
14348           .input_height(input_height)
14349           .kernel_height(5)
14350           .kernel_width(5)
14351           .subsampling(1)
14352           .padding_left(2)
14353           .padding_right(2)
14354           .padding_top(2)
14355           .padding_bottom(2)
14356           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4);
14357       }
14358     }
14359   }
14360 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4,output_height_gt_2)14361   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4, output_height_gt_2) {
14362     TEST_REQUIRES_X86_SSE;
14363     for (size_t input_height = 3; input_height < 5; input_height++) {
14364       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14365         DWConv2DMicrokernelTester()
14366           .input_width(input_width)
14367           .input_height(input_height)
14368           .kernel_height(5)
14369           .kernel_width(5)
14370           .subsampling(1)
14371           .padding_left(2)
14372           .padding_right(2)
14373           .padding_top(2)
14374           .padding_bottom(2)
14375           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4);
14376       }
14377     }
14378   }
14379 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
14380 
14381 
14382 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2,output_width_eq_4)14383   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2, output_width_eq_4) {
14384     TEST_REQUIRES_X86_SSE;
14385     DWConv2DMicrokernelTester()
14386       .input_width(4)
14387       .input_height(2)
14388       .kernel_height(5)
14389       .kernel_width(5)
14390       .subsampling(1)
14391       .padding_left(2)
14392       .padding_right(2)
14393       .padding_top(2)
14394       .padding_bottom(2)
14395       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc2);
14396   }
14397 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2,output_width_div_4)14398   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2, output_width_div_4) {
14399     TEST_REQUIRES_X86_SSE;
14400     for (size_t input_width = 8; input_width < 32; input_width += 4) {
14401       DWConv2DMicrokernelTester()
14402         .input_width(input_width)
14403         .input_height(2)
14404         .kernel_height(5)
14405         .kernel_width(5)
14406         .subsampling(1)
14407         .padding_left(2)
14408         .padding_right(2)
14409         .padding_top(2)
14410         .padding_bottom(2)
14411         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc2);
14412     }
14413   }
14414 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2,output_width_lt_4)14415   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2, output_width_lt_4) {
14416     TEST_REQUIRES_X86_SSE;
14417     for (size_t input_width = 1; input_width < 4; input_width++) {
14418       DWConv2DMicrokernelTester()
14419         .input_width(4)
14420         .input_height(2)
14421         .kernel_height(5)
14422         .kernel_width(5)
14423         .subsampling(1)
14424         .padding_left(2)
14425         .padding_right(2)
14426         .padding_top(2)
14427         .padding_bottom(2)
14428         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc2);
14429     }
14430   }
14431 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2,output_width_gt_4)14432   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2, output_width_gt_4) {
14433     TEST_REQUIRES_X86_SSE;
14434     for (size_t input_width = 5; input_width < 9; input_width++) {
14435       DWConv2DMicrokernelTester()
14436         .input_width(input_width)
14437         .input_height(2)
14438         .kernel_height(5)
14439         .kernel_width(5)
14440         .subsampling(1)
14441         .padding_left(2)
14442         .padding_right(2)
14443         .padding_top(2)
14444         .padding_bottom(2)
14445         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc2);
14446     }
14447   }
14448 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2,output_height_div_2)14449   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2, output_height_div_2) {
14450     TEST_REQUIRES_X86_SSE;
14451     for (size_t input_height = 4; input_height < 16; input_height += 2) {
14452       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14453         DWConv2DMicrokernelTester()
14454           .input_width(input_width)
14455           .input_height(input_height)
14456           .kernel_height(5)
14457           .kernel_width(5)
14458           .subsampling(1)
14459           .padding_left(2)
14460           .padding_right(2)
14461           .padding_top(2)
14462           .padding_bottom(2)
14463           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc2);
14464       }
14465     }
14466   }
14467 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2,output_height_lt_2)14468   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2, output_height_lt_2) {
14469     TEST_REQUIRES_X86_SSE;
14470     for (size_t input_height = 1; input_height < 2; input_height++) {
14471       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14472         DWConv2DMicrokernelTester()
14473           .input_width(input_width)
14474           .input_height(input_height)
14475           .kernel_height(5)
14476           .kernel_width(5)
14477           .subsampling(1)
14478           .padding_left(2)
14479           .padding_right(2)
14480           .padding_top(2)
14481           .padding_bottom(2)
14482           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc2);
14483       }
14484     }
14485   }
14486 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2,output_height_gt_2)14487   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC2, output_height_gt_2) {
14488     TEST_REQUIRES_X86_SSE;
14489     for (size_t input_height = 3; input_height < 5; input_height++) {
14490       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14491         DWConv2DMicrokernelTester()
14492           .input_width(input_width)
14493           .input_height(input_height)
14494           .kernel_height(5)
14495           .kernel_width(5)
14496           .subsampling(1)
14497           .padding_left(2)
14498           .padding_right(2)
14499           .padding_top(2)
14500           .padding_bottom(2)
14501           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc2);
14502       }
14503     }
14504   }
14505 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
14506 
14507 
14508 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3,output_width_eq_4)14509   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3, output_width_eq_4) {
14510     TEST_REQUIRES_X86_SSE;
14511     DWConv2DMicrokernelTester()
14512       .input_width(4)
14513       .input_height(2)
14514       .kernel_height(5)
14515       .kernel_width(5)
14516       .subsampling(1)
14517       .padding_left(2)
14518       .padding_right(2)
14519       .padding_top(2)
14520       .padding_bottom(2)
14521       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc3);
14522   }
14523 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3,output_width_div_4)14524   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3, output_width_div_4) {
14525     TEST_REQUIRES_X86_SSE;
14526     for (size_t input_width = 8; input_width < 32; input_width += 4) {
14527       DWConv2DMicrokernelTester()
14528         .input_width(input_width)
14529         .input_height(2)
14530         .kernel_height(5)
14531         .kernel_width(5)
14532         .subsampling(1)
14533         .padding_left(2)
14534         .padding_right(2)
14535         .padding_top(2)
14536         .padding_bottom(2)
14537         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc3);
14538     }
14539   }
14540 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3,output_width_lt_4)14541   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3, output_width_lt_4) {
14542     TEST_REQUIRES_X86_SSE;
14543     for (size_t input_width = 1; input_width < 4; input_width++) {
14544       DWConv2DMicrokernelTester()
14545         .input_width(4)
14546         .input_height(2)
14547         .kernel_height(5)
14548         .kernel_width(5)
14549         .subsampling(1)
14550         .padding_left(2)
14551         .padding_right(2)
14552         .padding_top(2)
14553         .padding_bottom(2)
14554         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc3);
14555     }
14556   }
14557 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3,output_width_gt_4)14558   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3, output_width_gt_4) {
14559     TEST_REQUIRES_X86_SSE;
14560     for (size_t input_width = 5; input_width < 9; input_width++) {
14561       DWConv2DMicrokernelTester()
14562         .input_width(input_width)
14563         .input_height(2)
14564         .kernel_height(5)
14565         .kernel_width(5)
14566         .subsampling(1)
14567         .padding_left(2)
14568         .padding_right(2)
14569         .padding_top(2)
14570         .padding_bottom(2)
14571         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc3);
14572     }
14573   }
14574 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3,output_height_div_2)14575   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3, output_height_div_2) {
14576     TEST_REQUIRES_X86_SSE;
14577     for (size_t input_height = 4; input_height < 16; input_height += 2) {
14578       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14579         DWConv2DMicrokernelTester()
14580           .input_width(input_width)
14581           .input_height(input_height)
14582           .kernel_height(5)
14583           .kernel_width(5)
14584           .subsampling(1)
14585           .padding_left(2)
14586           .padding_right(2)
14587           .padding_top(2)
14588           .padding_bottom(2)
14589           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc3);
14590       }
14591     }
14592   }
14593 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3,output_height_lt_2)14594   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3, output_height_lt_2) {
14595     TEST_REQUIRES_X86_SSE;
14596     for (size_t input_height = 1; input_height < 2; input_height++) {
14597       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14598         DWConv2DMicrokernelTester()
14599           .input_width(input_width)
14600           .input_height(input_height)
14601           .kernel_height(5)
14602           .kernel_width(5)
14603           .subsampling(1)
14604           .padding_left(2)
14605           .padding_right(2)
14606           .padding_top(2)
14607           .padding_bottom(2)
14608           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc3);
14609       }
14610     }
14611   }
14612 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3,output_height_gt_2)14613   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_2X4_ACC3, output_height_gt_2) {
14614     TEST_REQUIRES_X86_SSE;
14615     for (size_t input_height = 3; input_height < 5; input_height++) {
14616       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14617         DWConv2DMicrokernelTester()
14618           .input_width(input_width)
14619           .input_height(input_height)
14620           .kernel_height(5)
14621           .kernel_width(5)
14622           .subsampling(1)
14623           .padding_left(2)
14624           .padding_right(2)
14625           .padding_top(2)
14626           .padding_bottom(2)
14627           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_2x4_acc3);
14628       }
14629     }
14630   }
14631 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
14632 
14633 
14634 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4,output_width_eq_4)14635   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4, output_width_eq_4) {
14636     TEST_REQUIRES_X86_SSE;
14637     DWConv2DMicrokernelTester()
14638       .input_width(4)
14639       .input_height(3)
14640       .kernel_height(5)
14641       .kernel_width(5)
14642       .subsampling(1)
14643       .padding_left(2)
14644       .padding_right(2)
14645       .padding_top(2)
14646       .padding_bottom(2)
14647       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4);
14648   }
14649 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4,output_width_div_4)14650   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4, output_width_div_4) {
14651     TEST_REQUIRES_X86_SSE;
14652     for (size_t input_width = 8; input_width < 32; input_width += 4) {
14653       DWConv2DMicrokernelTester()
14654         .input_width(input_width)
14655         .input_height(3)
14656         .kernel_height(5)
14657         .kernel_width(5)
14658         .subsampling(1)
14659         .padding_left(2)
14660         .padding_right(2)
14661         .padding_top(2)
14662         .padding_bottom(2)
14663         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4);
14664     }
14665   }
14666 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4,output_width_lt_4)14667   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4, output_width_lt_4) {
14668     TEST_REQUIRES_X86_SSE;
14669     for (size_t input_width = 1; input_width < 4; input_width++) {
14670       DWConv2DMicrokernelTester()
14671         .input_width(4)
14672         .input_height(3)
14673         .kernel_height(5)
14674         .kernel_width(5)
14675         .subsampling(1)
14676         .padding_left(2)
14677         .padding_right(2)
14678         .padding_top(2)
14679         .padding_bottom(2)
14680         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4);
14681     }
14682   }
14683 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4,output_width_gt_4)14684   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4, output_width_gt_4) {
14685     TEST_REQUIRES_X86_SSE;
14686     for (size_t input_width = 5; input_width < 9; input_width++) {
14687       DWConv2DMicrokernelTester()
14688         .input_width(input_width)
14689         .input_height(3)
14690         .kernel_height(5)
14691         .kernel_width(5)
14692         .subsampling(1)
14693         .padding_left(2)
14694         .padding_right(2)
14695         .padding_top(2)
14696         .padding_bottom(2)
14697         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4);
14698     }
14699   }
14700 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4,output_height_div_3)14701   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4, output_height_div_3) {
14702     TEST_REQUIRES_X86_SSE;
14703     for (size_t input_height = 6; input_height < 24; input_height += 3) {
14704       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14705         DWConv2DMicrokernelTester()
14706           .input_width(input_width)
14707           .input_height(input_height)
14708           .kernel_height(5)
14709           .kernel_width(5)
14710           .subsampling(1)
14711           .padding_left(2)
14712           .padding_right(2)
14713           .padding_top(2)
14714           .padding_bottom(2)
14715           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4);
14716       }
14717     }
14718   }
14719 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4,output_height_lt_3)14720   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4, output_height_lt_3) {
14721     TEST_REQUIRES_X86_SSE;
14722     for (size_t input_height = 1; input_height < 3; input_height++) {
14723       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14724         DWConv2DMicrokernelTester()
14725           .input_width(input_width)
14726           .input_height(input_height)
14727           .kernel_height(5)
14728           .kernel_width(5)
14729           .subsampling(1)
14730           .padding_left(2)
14731           .padding_right(2)
14732           .padding_top(2)
14733           .padding_bottom(2)
14734           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4);
14735       }
14736     }
14737   }
14738 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4,output_height_gt_3)14739   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4, output_height_gt_3) {
14740     TEST_REQUIRES_X86_SSE;
14741     for (size_t input_height = 4; input_height < 7; input_height++) {
14742       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14743         DWConv2DMicrokernelTester()
14744           .input_width(input_width)
14745           .input_height(input_height)
14746           .kernel_height(5)
14747           .kernel_width(5)
14748           .subsampling(1)
14749           .padding_left(2)
14750           .padding_right(2)
14751           .padding_top(2)
14752           .padding_bottom(2)
14753           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4);
14754       }
14755     }
14756   }
14757 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
14758 
14759 
14760 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2,output_width_eq_4)14761   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2, output_width_eq_4) {
14762     TEST_REQUIRES_X86_SSE;
14763     DWConv2DMicrokernelTester()
14764       .input_width(4)
14765       .input_height(3)
14766       .kernel_height(5)
14767       .kernel_width(5)
14768       .subsampling(1)
14769       .padding_left(2)
14770       .padding_right(2)
14771       .padding_top(2)
14772       .padding_bottom(2)
14773       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4_acc2);
14774   }
14775 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2,output_width_div_4)14776   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2, output_width_div_4) {
14777     TEST_REQUIRES_X86_SSE;
14778     for (size_t input_width = 8; input_width < 32; input_width += 4) {
14779       DWConv2DMicrokernelTester()
14780         .input_width(input_width)
14781         .input_height(3)
14782         .kernel_height(5)
14783         .kernel_width(5)
14784         .subsampling(1)
14785         .padding_left(2)
14786         .padding_right(2)
14787         .padding_top(2)
14788         .padding_bottom(2)
14789         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4_acc2);
14790     }
14791   }
14792 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2,output_width_lt_4)14793   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2, output_width_lt_4) {
14794     TEST_REQUIRES_X86_SSE;
14795     for (size_t input_width = 1; input_width < 4; input_width++) {
14796       DWConv2DMicrokernelTester()
14797         .input_width(4)
14798         .input_height(3)
14799         .kernel_height(5)
14800         .kernel_width(5)
14801         .subsampling(1)
14802         .padding_left(2)
14803         .padding_right(2)
14804         .padding_top(2)
14805         .padding_bottom(2)
14806         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4_acc2);
14807     }
14808   }
14809 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2,output_width_gt_4)14810   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2, output_width_gt_4) {
14811     TEST_REQUIRES_X86_SSE;
14812     for (size_t input_width = 5; input_width < 9; input_width++) {
14813       DWConv2DMicrokernelTester()
14814         .input_width(input_width)
14815         .input_height(3)
14816         .kernel_height(5)
14817         .kernel_width(5)
14818         .subsampling(1)
14819         .padding_left(2)
14820         .padding_right(2)
14821         .padding_top(2)
14822         .padding_bottom(2)
14823         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4_acc2);
14824     }
14825   }
14826 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2,output_height_div_3)14827   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2, output_height_div_3) {
14828     TEST_REQUIRES_X86_SSE;
14829     for (size_t input_height = 6; input_height < 24; input_height += 3) {
14830       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14831         DWConv2DMicrokernelTester()
14832           .input_width(input_width)
14833           .input_height(input_height)
14834           .kernel_height(5)
14835           .kernel_width(5)
14836           .subsampling(1)
14837           .padding_left(2)
14838           .padding_right(2)
14839           .padding_top(2)
14840           .padding_bottom(2)
14841           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4_acc2);
14842       }
14843     }
14844   }
14845 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2,output_height_lt_3)14846   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2, output_height_lt_3) {
14847     TEST_REQUIRES_X86_SSE;
14848     for (size_t input_height = 1; input_height < 3; input_height++) {
14849       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14850         DWConv2DMicrokernelTester()
14851           .input_width(input_width)
14852           .input_height(input_height)
14853           .kernel_height(5)
14854           .kernel_width(5)
14855           .subsampling(1)
14856           .padding_left(2)
14857           .padding_right(2)
14858           .padding_top(2)
14859           .padding_bottom(2)
14860           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4_acc2);
14861       }
14862     }
14863   }
14864 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2,output_height_gt_3)14865   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_3X4_ACC2, output_height_gt_3) {
14866     TEST_REQUIRES_X86_SSE;
14867     for (size_t input_height = 4; input_height < 7; input_height++) {
14868       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14869         DWConv2DMicrokernelTester()
14870           .input_width(input_width)
14871           .input_height(input_height)
14872           .kernel_height(5)
14873           .kernel_width(5)
14874           .subsampling(1)
14875           .padding_left(2)
14876           .padding_right(2)
14877           .padding_top(2)
14878           .padding_bottom(2)
14879           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_3x4_acc2);
14880       }
14881     }
14882   }
14883 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
14884 
14885 
14886 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4,output_width_eq_4)14887   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4, output_width_eq_4) {
14888     TEST_REQUIRES_X86_SSE;
14889     DWConv2DMicrokernelTester()
14890       .input_width(4)
14891       .input_height(4)
14892       .kernel_height(5)
14893       .kernel_width(5)
14894       .subsampling(1)
14895       .padding_left(2)
14896       .padding_right(2)
14897       .padding_top(2)
14898       .padding_bottom(2)
14899       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4);
14900   }
14901 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4,output_width_div_4)14902   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4, output_width_div_4) {
14903     TEST_REQUIRES_X86_SSE;
14904     for (size_t input_width = 8; input_width < 32; input_width += 4) {
14905       DWConv2DMicrokernelTester()
14906         .input_width(input_width)
14907         .input_height(4)
14908         .kernel_height(5)
14909         .kernel_width(5)
14910         .subsampling(1)
14911         .padding_left(2)
14912         .padding_right(2)
14913         .padding_top(2)
14914         .padding_bottom(2)
14915         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4);
14916     }
14917   }
14918 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4,output_width_lt_4)14919   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4, output_width_lt_4) {
14920     TEST_REQUIRES_X86_SSE;
14921     for (size_t input_width = 1; input_width < 4; input_width++) {
14922       DWConv2DMicrokernelTester()
14923         .input_width(4)
14924         .input_height(4)
14925         .kernel_height(5)
14926         .kernel_width(5)
14927         .subsampling(1)
14928         .padding_left(2)
14929         .padding_right(2)
14930         .padding_top(2)
14931         .padding_bottom(2)
14932         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4);
14933     }
14934   }
14935 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4,output_width_gt_4)14936   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4, output_width_gt_4) {
14937     TEST_REQUIRES_X86_SSE;
14938     for (size_t input_width = 5; input_width < 9; input_width++) {
14939       DWConv2DMicrokernelTester()
14940         .input_width(input_width)
14941         .input_height(4)
14942         .kernel_height(5)
14943         .kernel_width(5)
14944         .subsampling(1)
14945         .padding_left(2)
14946         .padding_right(2)
14947         .padding_top(2)
14948         .padding_bottom(2)
14949         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4);
14950     }
14951   }
14952 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4,output_height_div_4)14953   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4, output_height_div_4) {
14954     TEST_REQUIRES_X86_SSE;
14955     for (size_t input_height = 8; input_height < 32; input_height += 4) {
14956       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14957         DWConv2DMicrokernelTester()
14958           .input_width(input_width)
14959           .input_height(input_height)
14960           .kernel_height(5)
14961           .kernel_width(5)
14962           .subsampling(1)
14963           .padding_left(2)
14964           .padding_right(2)
14965           .padding_top(2)
14966           .padding_bottom(2)
14967           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4);
14968       }
14969     }
14970   }
14971 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4,output_height_lt_4)14972   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4, output_height_lt_4) {
14973     TEST_REQUIRES_X86_SSE;
14974     for (size_t input_height = 1; input_height < 4; input_height++) {
14975       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14976         DWConv2DMicrokernelTester()
14977           .input_width(input_width)
14978           .input_height(input_height)
14979           .kernel_height(5)
14980           .kernel_width(5)
14981           .subsampling(1)
14982           .padding_left(2)
14983           .padding_right(2)
14984           .padding_top(2)
14985           .padding_bottom(2)
14986           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4);
14987       }
14988     }
14989   }
14990 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4,output_height_gt_4)14991   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4, output_height_gt_4) {
14992     TEST_REQUIRES_X86_SSE;
14993     for (size_t input_height = 5; input_height < 9; input_height++) {
14994       for (size_t input_width = 1; input_width < 21; input_width += 3) {
14995         DWConv2DMicrokernelTester()
14996           .input_width(input_width)
14997           .input_height(input_height)
14998           .kernel_height(5)
14999           .kernel_width(5)
15000           .subsampling(1)
15001           .padding_left(2)
15002           .padding_right(2)
15003           .padding_top(2)
15004           .padding_bottom(2)
15005           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4);
15006       }
15007     }
15008   }
15009 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15010 
15011 
15012 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2,output_width_eq_4)15013   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2, output_width_eq_4) {
15014     TEST_REQUIRES_X86_SSE;
15015     DWConv2DMicrokernelTester()
15016       .input_width(4)
15017       .input_height(4)
15018       .kernel_height(5)
15019       .kernel_width(5)
15020       .subsampling(1)
15021       .padding_left(2)
15022       .padding_right(2)
15023       .padding_top(2)
15024       .padding_bottom(2)
15025       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4_acc2);
15026   }
15027 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2,output_width_div_4)15028   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2, output_width_div_4) {
15029     TEST_REQUIRES_X86_SSE;
15030     for (size_t input_width = 8; input_width < 32; input_width += 4) {
15031       DWConv2DMicrokernelTester()
15032         .input_width(input_width)
15033         .input_height(4)
15034         .kernel_height(5)
15035         .kernel_width(5)
15036         .subsampling(1)
15037         .padding_left(2)
15038         .padding_right(2)
15039         .padding_top(2)
15040         .padding_bottom(2)
15041         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4_acc2);
15042     }
15043   }
15044 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2,output_width_lt_4)15045   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2, output_width_lt_4) {
15046     TEST_REQUIRES_X86_SSE;
15047     for (size_t input_width = 1; input_width < 4; input_width++) {
15048       DWConv2DMicrokernelTester()
15049         .input_width(4)
15050         .input_height(4)
15051         .kernel_height(5)
15052         .kernel_width(5)
15053         .subsampling(1)
15054         .padding_left(2)
15055         .padding_right(2)
15056         .padding_top(2)
15057         .padding_bottom(2)
15058         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4_acc2);
15059     }
15060   }
15061 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2,output_width_gt_4)15062   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2, output_width_gt_4) {
15063     TEST_REQUIRES_X86_SSE;
15064     for (size_t input_width = 5; input_width < 9; input_width++) {
15065       DWConv2DMicrokernelTester()
15066         .input_width(input_width)
15067         .input_height(4)
15068         .kernel_height(5)
15069         .kernel_width(5)
15070         .subsampling(1)
15071         .padding_left(2)
15072         .padding_right(2)
15073         .padding_top(2)
15074         .padding_bottom(2)
15075         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4_acc2);
15076     }
15077   }
15078 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2,output_height_div_4)15079   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2, output_height_div_4) {
15080     TEST_REQUIRES_X86_SSE;
15081     for (size_t input_height = 8; input_height < 32; input_height += 4) {
15082       for (size_t input_width = 1; input_width < 21; input_width += 3) {
15083         DWConv2DMicrokernelTester()
15084           .input_width(input_width)
15085           .input_height(input_height)
15086           .kernel_height(5)
15087           .kernel_width(5)
15088           .subsampling(1)
15089           .padding_left(2)
15090           .padding_right(2)
15091           .padding_top(2)
15092           .padding_bottom(2)
15093           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4_acc2);
15094       }
15095     }
15096   }
15097 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2,output_height_lt_4)15098   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2, output_height_lt_4) {
15099     TEST_REQUIRES_X86_SSE;
15100     for (size_t input_height = 1; input_height < 4; input_height++) {
15101       for (size_t input_width = 1; input_width < 21; input_width += 3) {
15102         DWConv2DMicrokernelTester()
15103           .input_width(input_width)
15104           .input_height(input_height)
15105           .kernel_height(5)
15106           .kernel_width(5)
15107           .subsampling(1)
15108           .padding_left(2)
15109           .padding_right(2)
15110           .padding_top(2)
15111           .padding_bottom(2)
15112           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4_acc2);
15113       }
15114     }
15115   }
15116 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2,output_height_gt_4)15117   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_4X4_ACC2, output_height_gt_4) {
15118     TEST_REQUIRES_X86_SSE;
15119     for (size_t input_height = 5; input_height < 9; input_height++) {
15120       for (size_t input_width = 1; input_width < 21; input_width += 3) {
15121         DWConv2DMicrokernelTester()
15122           .input_width(input_width)
15123           .input_height(input_height)
15124           .kernel_height(5)
15125           .kernel_width(5)
15126           .subsampling(1)
15127           .padding_left(2)
15128           .padding_right(2)
15129           .padding_top(2)
15130           .padding_bottom(2)
15131           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_4x4_acc2);
15132       }
15133     }
15134   }
15135 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15136 
15137 
15138 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4,output_width_eq_4)15139   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4, output_width_eq_4) {
15140     TEST_REQUIRES_X86_SSE;
15141     DWConv2DMicrokernelTester()
15142       .input_width(4)
15143       .input_height(5)
15144       .kernel_height(5)
15145       .kernel_width(5)
15146       .subsampling(1)
15147       .padding_left(2)
15148       .padding_right(2)
15149       .padding_top(2)
15150       .padding_bottom(2)
15151       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_5x4);
15152   }
15153 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4,output_width_div_4)15154   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4, output_width_div_4) {
15155     TEST_REQUIRES_X86_SSE;
15156     for (size_t input_width = 8; input_width < 32; input_width += 4) {
15157       DWConv2DMicrokernelTester()
15158         .input_width(input_width)
15159         .input_height(5)
15160         .kernel_height(5)
15161         .kernel_width(5)
15162         .subsampling(1)
15163         .padding_left(2)
15164         .padding_right(2)
15165         .padding_top(2)
15166         .padding_bottom(2)
15167         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_5x4);
15168     }
15169   }
15170 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4,output_width_lt_4)15171   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4, output_width_lt_4) {
15172     TEST_REQUIRES_X86_SSE;
15173     for (size_t input_width = 1; input_width < 4; input_width++) {
15174       DWConv2DMicrokernelTester()
15175         .input_width(4)
15176         .input_height(5)
15177         .kernel_height(5)
15178         .kernel_width(5)
15179         .subsampling(1)
15180         .padding_left(2)
15181         .padding_right(2)
15182         .padding_top(2)
15183         .padding_bottom(2)
15184         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_5x4);
15185     }
15186   }
15187 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4,output_width_gt_4)15188   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4, output_width_gt_4) {
15189     TEST_REQUIRES_X86_SSE;
15190     for (size_t input_width = 5; input_width < 9; input_width++) {
15191       DWConv2DMicrokernelTester()
15192         .input_width(input_width)
15193         .input_height(5)
15194         .kernel_height(5)
15195         .kernel_width(5)
15196         .subsampling(1)
15197         .padding_left(2)
15198         .padding_right(2)
15199         .padding_top(2)
15200         .padding_bottom(2)
15201         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_5x4);
15202     }
15203   }
15204 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4,output_height_div_5)15205   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4, output_height_div_5) {
15206     TEST_REQUIRES_X86_SSE;
15207     for (size_t input_height = 10; input_height < 40; input_height += 5) {
15208       for (size_t input_width = 1; input_width < 21; input_width += 3) {
15209         DWConv2DMicrokernelTester()
15210           .input_width(input_width)
15211           .input_height(input_height)
15212           .kernel_height(5)
15213           .kernel_width(5)
15214           .subsampling(1)
15215           .padding_left(2)
15216           .padding_right(2)
15217           .padding_top(2)
15218           .padding_bottom(2)
15219           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_5x4);
15220       }
15221     }
15222   }
15223 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4,output_height_lt_5)15224   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4, output_height_lt_5) {
15225     TEST_REQUIRES_X86_SSE;
15226     for (size_t input_height = 1; input_height < 5; input_height++) {
15227       for (size_t input_width = 1; input_width < 21; input_width += 3) {
15228         DWConv2DMicrokernelTester()
15229           .input_width(input_width)
15230           .input_height(input_height)
15231           .kernel_height(5)
15232           .kernel_width(5)
15233           .subsampling(1)
15234           .padding_left(2)
15235           .padding_right(2)
15236           .padding_top(2)
15237           .padding_bottom(2)
15238           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_5x4);
15239       }
15240     }
15241   }
15242 
TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4,output_height_gt_5)15243   TEST(F32_DWCONV2D_CHW_5X5P2__SSE_5X4, output_height_gt_5) {
15244     TEST_REQUIRES_X86_SSE;
15245     for (size_t input_height = 6; input_height < 11; input_height++) {
15246       for (size_t input_width = 1; input_width < 21; input_width += 3) {
15247         DWConv2DMicrokernelTester()
15248           .input_width(input_width)
15249           .input_height(input_height)
15250           .kernel_height(5)
15251           .kernel_width(5)
15252           .subsampling(1)
15253           .padding_left(2)
15254           .padding_right(2)
15255           .padding_top(2)
15256           .padding_bottom(2)
15257           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__sse_5x4);
15258       }
15259     }
15260   }
15261 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15262 
15263 
15264 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4,output_width_eq_4)15265   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4, output_width_eq_4) {
15266     TEST_REQUIRES_X86_SSE;
15267     for (size_t input_width = 7; input_width < 9; input_width++) {
15268       DWConv2DMicrokernelTester()
15269         .input_width(input_width)
15270         .input_height(2)
15271         .kernel_height(5)
15272         .kernel_width(5)
15273         .subsampling(2)
15274         .padding_left(2)
15275         .padding_right(2)
15276         .padding_top(2)
15277         .padding_bottom(2)
15278         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4);
15279     }
15280   }
15281 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4,output_width_div_4)15282   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4, output_width_div_4) {
15283     TEST_REQUIRES_X86_SSE;
15284     for (size_t input_width = 16; input_width < 64; input_width += 8) {
15285       DWConv2DMicrokernelTester()
15286         .input_width(input_width)
15287         .input_height(2)
15288         .kernel_height(5)
15289         .kernel_width(5)
15290         .subsampling(2)
15291         .padding_left(2)
15292         .padding_right(2)
15293         .padding_top(2)
15294         .padding_bottom(2)
15295         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4);
15296     }
15297   }
15298 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4,output_width_lt_4)15299   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4, output_width_lt_4) {
15300     TEST_REQUIRES_X86_SSE;
15301     for (size_t input_width = 1; input_width < 7; input_width++) {
15302       DWConv2DMicrokernelTester()
15303         .input_width(8)
15304         .input_height(2)
15305         .kernel_height(5)
15306         .kernel_width(5)
15307         .subsampling(2)
15308         .padding_left(2)
15309         .padding_right(2)
15310         .padding_top(2)
15311         .padding_bottom(2)
15312         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4);
15313     }
15314   }
15315 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4,output_width_gt_4)15316   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4, output_width_gt_4) {
15317     TEST_REQUIRES_X86_SSE;
15318     for (size_t input_width = 9; input_width < 17; input_width++) {
15319       DWConv2DMicrokernelTester()
15320         .input_width(input_width)
15321         .input_height(2)
15322         .kernel_height(5)
15323         .kernel_width(5)
15324         .subsampling(2)
15325         .padding_left(2)
15326         .padding_right(2)
15327         .padding_top(2)
15328         .padding_bottom(2)
15329         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4);
15330     }
15331   }
15332 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4,output_height_eq_1)15333   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4, output_height_eq_1) {
15334     TEST_REQUIRES_X86_SSE;
15335     for (size_t input_height = 1; input_height < 3; input_height++) {
15336       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15337         DWConv2DMicrokernelTester()
15338           .input_width(input_width)
15339           .input_height(input_height)
15340           .kernel_height(5)
15341           .kernel_width(5)
15342           .subsampling(2)
15343           .padding_left(2)
15344           .padding_right(2)
15345           .padding_top(2)
15346           .padding_bottom(2)
15347           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4);
15348       }
15349     }
15350   }
15351 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4,output_height_gt_1)15352   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4, output_height_gt_1) {
15353     TEST_REQUIRES_X86_SSE;
15354     for (size_t input_height = 3; input_height < 5; input_height++) {
15355       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15356         DWConv2DMicrokernelTester()
15357           .input_width(input_width)
15358           .input_height(input_height)
15359           .kernel_height(5)
15360           .kernel_width(5)
15361           .subsampling(2)
15362           .padding_left(2)
15363           .padding_right(2)
15364           .padding_top(2)
15365           .padding_bottom(2)
15366           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4);
15367       }
15368     }
15369   }
15370 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4,padding_top_eq_1)15371   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4, padding_top_eq_1) {
15372     TEST_REQUIRES_X86_SSE;
15373     for (size_t input_height = 2; input_height < 8; input_height++) {
15374       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15375         DWConv2DMicrokernelTester()
15376           .input_width(input_width)
15377           .input_height(input_height)
15378           .kernel_height(5)
15379           .kernel_width(5)
15380           .subsampling(2)
15381           .padding_left(2)
15382           .padding_right(2)
15383           .padding_top(1)
15384           .padding_bottom(2)
15385           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4);
15386       }
15387     }
15388   }
15389 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15390 
15391 
15392 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2,output_width_eq_4)15393   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2, output_width_eq_4) {
15394     TEST_REQUIRES_X86_SSE;
15395     for (size_t input_width = 7; input_width < 9; input_width++) {
15396       DWConv2DMicrokernelTester()
15397         .input_width(input_width)
15398         .input_height(2)
15399         .kernel_height(5)
15400         .kernel_width(5)
15401         .subsampling(2)
15402         .padding_left(2)
15403         .padding_right(2)
15404         .padding_top(2)
15405         .padding_bottom(2)
15406         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc2);
15407     }
15408   }
15409 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2,output_width_div_4)15410   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2, output_width_div_4) {
15411     TEST_REQUIRES_X86_SSE;
15412     for (size_t input_width = 16; input_width < 64; input_width += 8) {
15413       DWConv2DMicrokernelTester()
15414         .input_width(input_width)
15415         .input_height(2)
15416         .kernel_height(5)
15417         .kernel_width(5)
15418         .subsampling(2)
15419         .padding_left(2)
15420         .padding_right(2)
15421         .padding_top(2)
15422         .padding_bottom(2)
15423         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc2);
15424     }
15425   }
15426 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2,output_width_lt_4)15427   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2, output_width_lt_4) {
15428     TEST_REQUIRES_X86_SSE;
15429     for (size_t input_width = 1; input_width < 7; input_width++) {
15430       DWConv2DMicrokernelTester()
15431         .input_width(8)
15432         .input_height(2)
15433         .kernel_height(5)
15434         .kernel_width(5)
15435         .subsampling(2)
15436         .padding_left(2)
15437         .padding_right(2)
15438         .padding_top(2)
15439         .padding_bottom(2)
15440         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc2);
15441     }
15442   }
15443 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2,output_width_gt_4)15444   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2, output_width_gt_4) {
15445     TEST_REQUIRES_X86_SSE;
15446     for (size_t input_width = 9; input_width < 17; input_width++) {
15447       DWConv2DMicrokernelTester()
15448         .input_width(input_width)
15449         .input_height(2)
15450         .kernel_height(5)
15451         .kernel_width(5)
15452         .subsampling(2)
15453         .padding_left(2)
15454         .padding_right(2)
15455         .padding_top(2)
15456         .padding_bottom(2)
15457         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc2);
15458     }
15459   }
15460 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2,output_height_eq_1)15461   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2, output_height_eq_1) {
15462     TEST_REQUIRES_X86_SSE;
15463     for (size_t input_height = 1; input_height < 3; input_height++) {
15464       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15465         DWConv2DMicrokernelTester()
15466           .input_width(input_width)
15467           .input_height(input_height)
15468           .kernel_height(5)
15469           .kernel_width(5)
15470           .subsampling(2)
15471           .padding_left(2)
15472           .padding_right(2)
15473           .padding_top(2)
15474           .padding_bottom(2)
15475           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc2);
15476       }
15477     }
15478   }
15479 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2,output_height_gt_1)15480   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2, output_height_gt_1) {
15481     TEST_REQUIRES_X86_SSE;
15482     for (size_t input_height = 3; input_height < 5; input_height++) {
15483       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15484         DWConv2DMicrokernelTester()
15485           .input_width(input_width)
15486           .input_height(input_height)
15487           .kernel_height(5)
15488           .kernel_width(5)
15489           .subsampling(2)
15490           .padding_left(2)
15491           .padding_right(2)
15492           .padding_top(2)
15493           .padding_bottom(2)
15494           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc2);
15495       }
15496     }
15497   }
15498 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2,padding_top_eq_1)15499   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC2, padding_top_eq_1) {
15500     TEST_REQUIRES_X86_SSE;
15501     for (size_t input_height = 2; input_height < 8; input_height++) {
15502       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15503         DWConv2DMicrokernelTester()
15504           .input_width(input_width)
15505           .input_height(input_height)
15506           .kernel_height(5)
15507           .kernel_width(5)
15508           .subsampling(2)
15509           .padding_left(2)
15510           .padding_right(2)
15511           .padding_top(1)
15512           .padding_bottom(2)
15513           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc2);
15514       }
15515     }
15516   }
15517 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15518 
15519 
15520 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3,output_width_eq_4)15521   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3, output_width_eq_4) {
15522     TEST_REQUIRES_X86_SSE;
15523     for (size_t input_width = 7; input_width < 9; input_width++) {
15524       DWConv2DMicrokernelTester()
15525         .input_width(input_width)
15526         .input_height(2)
15527         .kernel_height(5)
15528         .kernel_width(5)
15529         .subsampling(2)
15530         .padding_left(2)
15531         .padding_right(2)
15532         .padding_top(2)
15533         .padding_bottom(2)
15534         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc3);
15535     }
15536   }
15537 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3,output_width_div_4)15538   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3, output_width_div_4) {
15539     TEST_REQUIRES_X86_SSE;
15540     for (size_t input_width = 16; input_width < 64; input_width += 8) {
15541       DWConv2DMicrokernelTester()
15542         .input_width(input_width)
15543         .input_height(2)
15544         .kernel_height(5)
15545         .kernel_width(5)
15546         .subsampling(2)
15547         .padding_left(2)
15548         .padding_right(2)
15549         .padding_top(2)
15550         .padding_bottom(2)
15551         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc3);
15552     }
15553   }
15554 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3,output_width_lt_4)15555   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3, output_width_lt_4) {
15556     TEST_REQUIRES_X86_SSE;
15557     for (size_t input_width = 1; input_width < 7; input_width++) {
15558       DWConv2DMicrokernelTester()
15559         .input_width(8)
15560         .input_height(2)
15561         .kernel_height(5)
15562         .kernel_width(5)
15563         .subsampling(2)
15564         .padding_left(2)
15565         .padding_right(2)
15566         .padding_top(2)
15567         .padding_bottom(2)
15568         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc3);
15569     }
15570   }
15571 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3,output_width_gt_4)15572   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3, output_width_gt_4) {
15573     TEST_REQUIRES_X86_SSE;
15574     for (size_t input_width = 9; input_width < 17; input_width++) {
15575       DWConv2DMicrokernelTester()
15576         .input_width(input_width)
15577         .input_height(2)
15578         .kernel_height(5)
15579         .kernel_width(5)
15580         .subsampling(2)
15581         .padding_left(2)
15582         .padding_right(2)
15583         .padding_top(2)
15584         .padding_bottom(2)
15585         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc3);
15586     }
15587   }
15588 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3,output_height_eq_1)15589   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3, output_height_eq_1) {
15590     TEST_REQUIRES_X86_SSE;
15591     for (size_t input_height = 1; input_height < 3; input_height++) {
15592       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15593         DWConv2DMicrokernelTester()
15594           .input_width(input_width)
15595           .input_height(input_height)
15596           .kernel_height(5)
15597           .kernel_width(5)
15598           .subsampling(2)
15599           .padding_left(2)
15600           .padding_right(2)
15601           .padding_top(2)
15602           .padding_bottom(2)
15603           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc3);
15604       }
15605     }
15606   }
15607 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3,output_height_gt_1)15608   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3, output_height_gt_1) {
15609     TEST_REQUIRES_X86_SSE;
15610     for (size_t input_height = 3; input_height < 5; input_height++) {
15611       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15612         DWConv2DMicrokernelTester()
15613           .input_width(input_width)
15614           .input_height(input_height)
15615           .kernel_height(5)
15616           .kernel_width(5)
15617           .subsampling(2)
15618           .padding_left(2)
15619           .padding_right(2)
15620           .padding_top(2)
15621           .padding_bottom(2)
15622           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc3);
15623       }
15624     }
15625   }
15626 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3,padding_top_eq_1)15627   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC3, padding_top_eq_1) {
15628     TEST_REQUIRES_X86_SSE;
15629     for (size_t input_height = 2; input_height < 8; input_height++) {
15630       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15631         DWConv2DMicrokernelTester()
15632           .input_width(input_width)
15633           .input_height(input_height)
15634           .kernel_height(5)
15635           .kernel_width(5)
15636           .subsampling(2)
15637           .padding_left(2)
15638           .padding_right(2)
15639           .padding_top(1)
15640           .padding_bottom(2)
15641           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc3);
15642       }
15643     }
15644   }
15645 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15646 
15647 
15648 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4,output_width_eq_4)15649   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4, output_width_eq_4) {
15650     TEST_REQUIRES_X86_SSE;
15651     for (size_t input_width = 7; input_width < 9; input_width++) {
15652       DWConv2DMicrokernelTester()
15653         .input_width(input_width)
15654         .input_height(2)
15655         .kernel_height(5)
15656         .kernel_width(5)
15657         .subsampling(2)
15658         .padding_left(2)
15659         .padding_right(2)
15660         .padding_top(2)
15661         .padding_bottom(2)
15662         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc4);
15663     }
15664   }
15665 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4,output_width_div_4)15666   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4, output_width_div_4) {
15667     TEST_REQUIRES_X86_SSE;
15668     for (size_t input_width = 16; input_width < 64; input_width += 8) {
15669       DWConv2DMicrokernelTester()
15670         .input_width(input_width)
15671         .input_height(2)
15672         .kernel_height(5)
15673         .kernel_width(5)
15674         .subsampling(2)
15675         .padding_left(2)
15676         .padding_right(2)
15677         .padding_top(2)
15678         .padding_bottom(2)
15679         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc4);
15680     }
15681   }
15682 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4,output_width_lt_4)15683   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4, output_width_lt_4) {
15684     TEST_REQUIRES_X86_SSE;
15685     for (size_t input_width = 1; input_width < 7; input_width++) {
15686       DWConv2DMicrokernelTester()
15687         .input_width(8)
15688         .input_height(2)
15689         .kernel_height(5)
15690         .kernel_width(5)
15691         .subsampling(2)
15692         .padding_left(2)
15693         .padding_right(2)
15694         .padding_top(2)
15695         .padding_bottom(2)
15696         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc4);
15697     }
15698   }
15699 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4,output_width_gt_4)15700   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4, output_width_gt_4) {
15701     TEST_REQUIRES_X86_SSE;
15702     for (size_t input_width = 9; input_width < 17; input_width++) {
15703       DWConv2DMicrokernelTester()
15704         .input_width(input_width)
15705         .input_height(2)
15706         .kernel_height(5)
15707         .kernel_width(5)
15708         .subsampling(2)
15709         .padding_left(2)
15710         .padding_right(2)
15711         .padding_top(2)
15712         .padding_bottom(2)
15713         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc4);
15714     }
15715   }
15716 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4,output_height_eq_1)15717   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4, output_height_eq_1) {
15718     TEST_REQUIRES_X86_SSE;
15719     for (size_t input_height = 1; input_height < 3; input_height++) {
15720       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15721         DWConv2DMicrokernelTester()
15722           .input_width(input_width)
15723           .input_height(input_height)
15724           .kernel_height(5)
15725           .kernel_width(5)
15726           .subsampling(2)
15727           .padding_left(2)
15728           .padding_right(2)
15729           .padding_top(2)
15730           .padding_bottom(2)
15731           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc4);
15732       }
15733     }
15734   }
15735 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4,output_height_gt_1)15736   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4, output_height_gt_1) {
15737     TEST_REQUIRES_X86_SSE;
15738     for (size_t input_height = 3; input_height < 5; input_height++) {
15739       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15740         DWConv2DMicrokernelTester()
15741           .input_width(input_width)
15742           .input_height(input_height)
15743           .kernel_height(5)
15744           .kernel_width(5)
15745           .subsampling(2)
15746           .padding_left(2)
15747           .padding_right(2)
15748           .padding_top(2)
15749           .padding_bottom(2)
15750           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc4);
15751       }
15752     }
15753   }
15754 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4,padding_top_eq_1)15755   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC4, padding_top_eq_1) {
15756     TEST_REQUIRES_X86_SSE;
15757     for (size_t input_height = 2; input_height < 8; input_height++) {
15758       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15759         DWConv2DMicrokernelTester()
15760           .input_width(input_width)
15761           .input_height(input_height)
15762           .kernel_height(5)
15763           .kernel_width(5)
15764           .subsampling(2)
15765           .padding_left(2)
15766           .padding_right(2)
15767           .padding_top(1)
15768           .padding_bottom(2)
15769           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc4);
15770       }
15771     }
15772   }
15773 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15774 
15775 
15776 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5,output_width_eq_4)15777   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5, output_width_eq_4) {
15778     TEST_REQUIRES_X86_SSE;
15779     for (size_t input_width = 7; input_width < 9; input_width++) {
15780       DWConv2DMicrokernelTester()
15781         .input_width(input_width)
15782         .input_height(2)
15783         .kernel_height(5)
15784         .kernel_width(5)
15785         .subsampling(2)
15786         .padding_left(2)
15787         .padding_right(2)
15788         .padding_top(2)
15789         .padding_bottom(2)
15790         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc5);
15791     }
15792   }
15793 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5,output_width_div_4)15794   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5, output_width_div_4) {
15795     TEST_REQUIRES_X86_SSE;
15796     for (size_t input_width = 16; input_width < 64; input_width += 8) {
15797       DWConv2DMicrokernelTester()
15798         .input_width(input_width)
15799         .input_height(2)
15800         .kernel_height(5)
15801         .kernel_width(5)
15802         .subsampling(2)
15803         .padding_left(2)
15804         .padding_right(2)
15805         .padding_top(2)
15806         .padding_bottom(2)
15807         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc5);
15808     }
15809   }
15810 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5,output_width_lt_4)15811   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5, output_width_lt_4) {
15812     TEST_REQUIRES_X86_SSE;
15813     for (size_t input_width = 1; input_width < 7; input_width++) {
15814       DWConv2DMicrokernelTester()
15815         .input_width(8)
15816         .input_height(2)
15817         .kernel_height(5)
15818         .kernel_width(5)
15819         .subsampling(2)
15820         .padding_left(2)
15821         .padding_right(2)
15822         .padding_top(2)
15823         .padding_bottom(2)
15824         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc5);
15825     }
15826   }
15827 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5,output_width_gt_4)15828   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5, output_width_gt_4) {
15829     TEST_REQUIRES_X86_SSE;
15830     for (size_t input_width = 9; input_width < 17; input_width++) {
15831       DWConv2DMicrokernelTester()
15832         .input_width(input_width)
15833         .input_height(2)
15834         .kernel_height(5)
15835         .kernel_width(5)
15836         .subsampling(2)
15837         .padding_left(2)
15838         .padding_right(2)
15839         .padding_top(2)
15840         .padding_bottom(2)
15841         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc5);
15842     }
15843   }
15844 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5,output_height_eq_1)15845   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5, output_height_eq_1) {
15846     TEST_REQUIRES_X86_SSE;
15847     for (size_t input_height = 1; input_height < 3; input_height++) {
15848       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15849         DWConv2DMicrokernelTester()
15850           .input_width(input_width)
15851           .input_height(input_height)
15852           .kernel_height(5)
15853           .kernel_width(5)
15854           .subsampling(2)
15855           .padding_left(2)
15856           .padding_right(2)
15857           .padding_top(2)
15858           .padding_bottom(2)
15859           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc5);
15860       }
15861     }
15862   }
15863 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5,output_height_gt_1)15864   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5, output_height_gt_1) {
15865     TEST_REQUIRES_X86_SSE;
15866     for (size_t input_height = 3; input_height < 5; input_height++) {
15867       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15868         DWConv2DMicrokernelTester()
15869           .input_width(input_width)
15870           .input_height(input_height)
15871           .kernel_height(5)
15872           .kernel_width(5)
15873           .subsampling(2)
15874           .padding_left(2)
15875           .padding_right(2)
15876           .padding_top(2)
15877           .padding_bottom(2)
15878           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc5);
15879       }
15880     }
15881   }
15882 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5,padding_top_eq_1)15883   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_1X4_ACC5, padding_top_eq_1) {
15884     TEST_REQUIRES_X86_SSE;
15885     for (size_t input_height = 2; input_height < 8; input_height++) {
15886       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15887         DWConv2DMicrokernelTester()
15888           .input_width(input_width)
15889           .input_height(input_height)
15890           .kernel_height(5)
15891           .kernel_width(5)
15892           .subsampling(2)
15893           .padding_left(2)
15894           .padding_right(2)
15895           .padding_top(1)
15896           .padding_bottom(2)
15897           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_1x4_acc5);
15898       }
15899     }
15900   }
15901 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15902 
15903 
15904 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4,output_width_eq_4)15905   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4, output_width_eq_4) {
15906     TEST_REQUIRES_X86_SSE;
15907     for (size_t input_width = 7; input_width < 9; input_width++) {
15908       DWConv2DMicrokernelTester()
15909         .input_width(input_width)
15910         .input_height(4)
15911         .kernel_height(5)
15912         .kernel_width(5)
15913         .subsampling(2)
15914         .padding_left(2)
15915         .padding_right(2)
15916         .padding_top(2)
15917         .padding_bottom(2)
15918         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4);
15919     }
15920   }
15921 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4,output_width_div_4)15922   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4, output_width_div_4) {
15923     TEST_REQUIRES_X86_SSE;
15924     for (size_t input_width = 16; input_width < 64; input_width += 8) {
15925       DWConv2DMicrokernelTester()
15926         .input_width(input_width)
15927         .input_height(4)
15928         .kernel_height(5)
15929         .kernel_width(5)
15930         .subsampling(2)
15931         .padding_left(2)
15932         .padding_right(2)
15933         .padding_top(2)
15934         .padding_bottom(2)
15935         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4);
15936     }
15937   }
15938 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4,output_width_lt_4)15939   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4, output_width_lt_4) {
15940     TEST_REQUIRES_X86_SSE;
15941     for (size_t input_width = 1; input_width < 7; input_width++) {
15942       DWConv2DMicrokernelTester()
15943         .input_width(8)
15944         .input_height(4)
15945         .kernel_height(5)
15946         .kernel_width(5)
15947         .subsampling(2)
15948         .padding_left(2)
15949         .padding_right(2)
15950         .padding_top(2)
15951         .padding_bottom(2)
15952         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4);
15953     }
15954   }
15955 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4,output_width_gt_4)15956   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4, output_width_gt_4) {
15957     TEST_REQUIRES_X86_SSE;
15958     for (size_t input_width = 9; input_width < 17; input_width++) {
15959       DWConv2DMicrokernelTester()
15960         .input_width(input_width)
15961         .input_height(4)
15962         .kernel_height(5)
15963         .kernel_width(5)
15964         .subsampling(2)
15965         .padding_left(2)
15966         .padding_right(2)
15967         .padding_top(2)
15968         .padding_bottom(2)
15969         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4);
15970     }
15971   }
15972 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4,output_height_eq_2)15973   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4, output_height_eq_2) {
15974     TEST_REQUIRES_X86_SSE;
15975     for (size_t input_height = 3; input_height < 5; input_height++) {
15976       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15977         DWConv2DMicrokernelTester()
15978           .input_width(input_width)
15979           .input_height(input_height)
15980           .kernel_height(5)
15981           .kernel_width(5)
15982           .subsampling(2)
15983           .padding_left(2)
15984           .padding_right(2)
15985           .padding_top(2)
15986           .padding_bottom(2)
15987           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4);
15988       }
15989     }
15990   }
15991 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4,output_height_div_2)15992   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4, output_height_div_2) {
15993     TEST_REQUIRES_X86_SSE;
15994     for (size_t input_height = 8; input_height < 32; input_height += 4) {
15995       for (size_t input_width = 1; input_width < 41; input_width += 7) {
15996         DWConv2DMicrokernelTester()
15997           .input_width(input_width)
15998           .input_height(input_height)
15999           .kernel_height(5)
16000           .kernel_width(5)
16001           .subsampling(2)
16002           .padding_left(2)
16003           .padding_right(2)
16004           .padding_top(2)
16005           .padding_bottom(2)
16006           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4);
16007       }
16008     }
16009   }
16010 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4,output_height_lt_2)16011   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4, output_height_lt_2) {
16012     TEST_REQUIRES_X86_SSE;
16013     for (size_t input_height = 1; input_height < 3; input_height++) {
16014       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16015         DWConv2DMicrokernelTester()
16016           .input_width(input_width)
16017           .input_height(input_height)
16018           .kernel_height(5)
16019           .kernel_width(5)
16020           .subsampling(2)
16021           .padding_left(2)
16022           .padding_right(2)
16023           .padding_top(2)
16024           .padding_bottom(2)
16025           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4);
16026       }
16027     }
16028   }
16029 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4,output_height_gt_2)16030   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4, output_height_gt_2) {
16031     TEST_REQUIRES_X86_SSE;
16032     for (size_t input_height = 5; input_height < 9; input_height++) {
16033       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16034         DWConv2DMicrokernelTester()
16035           .input_width(input_width)
16036           .input_height(input_height)
16037           .kernel_height(5)
16038           .kernel_width(5)
16039           .subsampling(2)
16040           .padding_left(2)
16041           .padding_right(2)
16042           .padding_top(2)
16043           .padding_bottom(2)
16044           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4);
16045       }
16046     }
16047   }
16048 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4,padding_top_eq_1)16049   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4, padding_top_eq_1) {
16050     TEST_REQUIRES_X86_SSE;
16051     for (size_t input_height = 2; input_height < 14; input_height++) {
16052       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16053         DWConv2DMicrokernelTester()
16054           .input_width(input_width)
16055           .input_height(input_height)
16056           .kernel_height(5)
16057           .kernel_width(5)
16058           .subsampling(2)
16059           .padding_left(2)
16060           .padding_right(2)
16061           .padding_top(1)
16062           .padding_bottom(2)
16063           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4);
16064       }
16065     }
16066   }
16067 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
16068 
16069 
16070 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2,output_width_eq_4)16071   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2, output_width_eq_4) {
16072     TEST_REQUIRES_X86_SSE;
16073     for (size_t input_width = 7; input_width < 9; input_width++) {
16074       DWConv2DMicrokernelTester()
16075         .input_width(input_width)
16076         .input_height(4)
16077         .kernel_height(5)
16078         .kernel_width(5)
16079         .subsampling(2)
16080         .padding_left(2)
16081         .padding_right(2)
16082         .padding_top(2)
16083         .padding_bottom(2)
16084         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc2);
16085     }
16086   }
16087 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2,output_width_div_4)16088   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2, output_width_div_4) {
16089     TEST_REQUIRES_X86_SSE;
16090     for (size_t input_width = 16; input_width < 64; input_width += 8) {
16091       DWConv2DMicrokernelTester()
16092         .input_width(input_width)
16093         .input_height(4)
16094         .kernel_height(5)
16095         .kernel_width(5)
16096         .subsampling(2)
16097         .padding_left(2)
16098         .padding_right(2)
16099         .padding_top(2)
16100         .padding_bottom(2)
16101         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc2);
16102     }
16103   }
16104 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2,output_width_lt_4)16105   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2, output_width_lt_4) {
16106     TEST_REQUIRES_X86_SSE;
16107     for (size_t input_width = 1; input_width < 7; input_width++) {
16108       DWConv2DMicrokernelTester()
16109         .input_width(8)
16110         .input_height(4)
16111         .kernel_height(5)
16112         .kernel_width(5)
16113         .subsampling(2)
16114         .padding_left(2)
16115         .padding_right(2)
16116         .padding_top(2)
16117         .padding_bottom(2)
16118         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc2);
16119     }
16120   }
16121 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2,output_width_gt_4)16122   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2, output_width_gt_4) {
16123     TEST_REQUIRES_X86_SSE;
16124     for (size_t input_width = 9; input_width < 17; input_width++) {
16125       DWConv2DMicrokernelTester()
16126         .input_width(input_width)
16127         .input_height(4)
16128         .kernel_height(5)
16129         .kernel_width(5)
16130         .subsampling(2)
16131         .padding_left(2)
16132         .padding_right(2)
16133         .padding_top(2)
16134         .padding_bottom(2)
16135         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc2);
16136     }
16137   }
16138 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2,output_height_eq_2)16139   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2, output_height_eq_2) {
16140     TEST_REQUIRES_X86_SSE;
16141     for (size_t input_height = 3; input_height < 5; input_height++) {
16142       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16143         DWConv2DMicrokernelTester()
16144           .input_width(input_width)
16145           .input_height(input_height)
16146           .kernel_height(5)
16147           .kernel_width(5)
16148           .subsampling(2)
16149           .padding_left(2)
16150           .padding_right(2)
16151           .padding_top(2)
16152           .padding_bottom(2)
16153           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc2);
16154       }
16155     }
16156   }
16157 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2,output_height_div_2)16158   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2, output_height_div_2) {
16159     TEST_REQUIRES_X86_SSE;
16160     for (size_t input_height = 8; input_height < 32; input_height += 4) {
16161       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16162         DWConv2DMicrokernelTester()
16163           .input_width(input_width)
16164           .input_height(input_height)
16165           .kernel_height(5)
16166           .kernel_width(5)
16167           .subsampling(2)
16168           .padding_left(2)
16169           .padding_right(2)
16170           .padding_top(2)
16171           .padding_bottom(2)
16172           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc2);
16173       }
16174     }
16175   }
16176 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2,output_height_lt_2)16177   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2, output_height_lt_2) {
16178     TEST_REQUIRES_X86_SSE;
16179     for (size_t input_height = 1; input_height < 3; input_height++) {
16180       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16181         DWConv2DMicrokernelTester()
16182           .input_width(input_width)
16183           .input_height(input_height)
16184           .kernel_height(5)
16185           .kernel_width(5)
16186           .subsampling(2)
16187           .padding_left(2)
16188           .padding_right(2)
16189           .padding_top(2)
16190           .padding_bottom(2)
16191           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc2);
16192       }
16193     }
16194   }
16195 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2,output_height_gt_2)16196   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2, output_height_gt_2) {
16197     TEST_REQUIRES_X86_SSE;
16198     for (size_t input_height = 5; input_height < 9; input_height++) {
16199       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16200         DWConv2DMicrokernelTester()
16201           .input_width(input_width)
16202           .input_height(input_height)
16203           .kernel_height(5)
16204           .kernel_width(5)
16205           .subsampling(2)
16206           .padding_left(2)
16207           .padding_right(2)
16208           .padding_top(2)
16209           .padding_bottom(2)
16210           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc2);
16211       }
16212     }
16213   }
16214 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2,padding_top_eq_1)16215   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC2, padding_top_eq_1) {
16216     TEST_REQUIRES_X86_SSE;
16217     for (size_t input_height = 2; input_height < 14; input_height++) {
16218       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16219         DWConv2DMicrokernelTester()
16220           .input_width(input_width)
16221           .input_height(input_height)
16222           .kernel_height(5)
16223           .kernel_width(5)
16224           .subsampling(2)
16225           .padding_left(2)
16226           .padding_right(2)
16227           .padding_top(1)
16228           .padding_bottom(2)
16229           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc2);
16230       }
16231     }
16232   }
16233 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
16234 
16235 
16236 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3,output_width_eq_4)16237   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3, output_width_eq_4) {
16238     TEST_REQUIRES_X86_SSE;
16239     for (size_t input_width = 7; input_width < 9; input_width++) {
16240       DWConv2DMicrokernelTester()
16241         .input_width(input_width)
16242         .input_height(4)
16243         .kernel_height(5)
16244         .kernel_width(5)
16245         .subsampling(2)
16246         .padding_left(2)
16247         .padding_right(2)
16248         .padding_top(2)
16249         .padding_bottom(2)
16250         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc3);
16251     }
16252   }
16253 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3,output_width_div_4)16254   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3, output_width_div_4) {
16255     TEST_REQUIRES_X86_SSE;
16256     for (size_t input_width = 16; input_width < 64; input_width += 8) {
16257       DWConv2DMicrokernelTester()
16258         .input_width(input_width)
16259         .input_height(4)
16260         .kernel_height(5)
16261         .kernel_width(5)
16262         .subsampling(2)
16263         .padding_left(2)
16264         .padding_right(2)
16265         .padding_top(2)
16266         .padding_bottom(2)
16267         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc3);
16268     }
16269   }
16270 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3,output_width_lt_4)16271   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3, output_width_lt_4) {
16272     TEST_REQUIRES_X86_SSE;
16273     for (size_t input_width = 1; input_width < 7; input_width++) {
16274       DWConv2DMicrokernelTester()
16275         .input_width(8)
16276         .input_height(4)
16277         .kernel_height(5)
16278         .kernel_width(5)
16279         .subsampling(2)
16280         .padding_left(2)
16281         .padding_right(2)
16282         .padding_top(2)
16283         .padding_bottom(2)
16284         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc3);
16285     }
16286   }
16287 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3,output_width_gt_4)16288   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3, output_width_gt_4) {
16289     TEST_REQUIRES_X86_SSE;
16290     for (size_t input_width = 9; input_width < 17; input_width++) {
16291       DWConv2DMicrokernelTester()
16292         .input_width(input_width)
16293         .input_height(4)
16294         .kernel_height(5)
16295         .kernel_width(5)
16296         .subsampling(2)
16297         .padding_left(2)
16298         .padding_right(2)
16299         .padding_top(2)
16300         .padding_bottom(2)
16301         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc3);
16302     }
16303   }
16304 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3,output_height_eq_2)16305   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3, output_height_eq_2) {
16306     TEST_REQUIRES_X86_SSE;
16307     for (size_t input_height = 3; input_height < 5; input_height++) {
16308       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16309         DWConv2DMicrokernelTester()
16310           .input_width(input_width)
16311           .input_height(input_height)
16312           .kernel_height(5)
16313           .kernel_width(5)
16314           .subsampling(2)
16315           .padding_left(2)
16316           .padding_right(2)
16317           .padding_top(2)
16318           .padding_bottom(2)
16319           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc3);
16320       }
16321     }
16322   }
16323 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3,output_height_div_2)16324   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3, output_height_div_2) {
16325     TEST_REQUIRES_X86_SSE;
16326     for (size_t input_height = 8; input_height < 32; input_height += 4) {
16327       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16328         DWConv2DMicrokernelTester()
16329           .input_width(input_width)
16330           .input_height(input_height)
16331           .kernel_height(5)
16332           .kernel_width(5)
16333           .subsampling(2)
16334           .padding_left(2)
16335           .padding_right(2)
16336           .padding_top(2)
16337           .padding_bottom(2)
16338           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc3);
16339       }
16340     }
16341   }
16342 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3,output_height_lt_2)16343   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3, output_height_lt_2) {
16344     TEST_REQUIRES_X86_SSE;
16345     for (size_t input_height = 1; input_height < 3; input_height++) {
16346       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16347         DWConv2DMicrokernelTester()
16348           .input_width(input_width)
16349           .input_height(input_height)
16350           .kernel_height(5)
16351           .kernel_width(5)
16352           .subsampling(2)
16353           .padding_left(2)
16354           .padding_right(2)
16355           .padding_top(2)
16356           .padding_bottom(2)
16357           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc3);
16358       }
16359     }
16360   }
16361 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3,output_height_gt_2)16362   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3, output_height_gt_2) {
16363     TEST_REQUIRES_X86_SSE;
16364     for (size_t input_height = 5; input_height < 9; input_height++) {
16365       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16366         DWConv2DMicrokernelTester()
16367           .input_width(input_width)
16368           .input_height(input_height)
16369           .kernel_height(5)
16370           .kernel_width(5)
16371           .subsampling(2)
16372           .padding_left(2)
16373           .padding_right(2)
16374           .padding_top(2)
16375           .padding_bottom(2)
16376           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc3);
16377       }
16378     }
16379   }
16380 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3,padding_top_eq_1)16381   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_2X4_ACC3, padding_top_eq_1) {
16382     TEST_REQUIRES_X86_SSE;
16383     for (size_t input_height = 2; input_height < 14; input_height++) {
16384       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16385         DWConv2DMicrokernelTester()
16386           .input_width(input_width)
16387           .input_height(input_height)
16388           .kernel_height(5)
16389           .kernel_width(5)
16390           .subsampling(2)
16391           .padding_left(2)
16392           .padding_right(2)
16393           .padding_top(1)
16394           .padding_bottom(2)
16395           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_2x4_acc3);
16396       }
16397     }
16398   }
16399 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
16400 
16401 
16402 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4,output_width_eq_4)16403   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4, output_width_eq_4) {
16404     TEST_REQUIRES_X86_SSE;
16405     for (size_t input_width = 7; input_width < 9; input_width++) {
16406       DWConv2DMicrokernelTester()
16407         .input_width(input_width)
16408         .input_height(6)
16409         .kernel_height(5)
16410         .kernel_width(5)
16411         .subsampling(2)
16412         .padding_left(2)
16413         .padding_right(2)
16414         .padding_top(2)
16415         .padding_bottom(2)
16416         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4);
16417     }
16418   }
16419 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4,output_width_div_4)16420   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4, output_width_div_4) {
16421     TEST_REQUIRES_X86_SSE;
16422     for (size_t input_width = 16; input_width < 64; input_width += 8) {
16423       DWConv2DMicrokernelTester()
16424         .input_width(input_width)
16425         .input_height(6)
16426         .kernel_height(5)
16427         .kernel_width(5)
16428         .subsampling(2)
16429         .padding_left(2)
16430         .padding_right(2)
16431         .padding_top(2)
16432         .padding_bottom(2)
16433         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4);
16434     }
16435   }
16436 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4,output_width_lt_4)16437   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4, output_width_lt_4) {
16438     TEST_REQUIRES_X86_SSE;
16439     for (size_t input_width = 1; input_width < 7; input_width++) {
16440       DWConv2DMicrokernelTester()
16441         .input_width(8)
16442         .input_height(6)
16443         .kernel_height(5)
16444         .kernel_width(5)
16445         .subsampling(2)
16446         .padding_left(2)
16447         .padding_right(2)
16448         .padding_top(2)
16449         .padding_bottom(2)
16450         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4);
16451     }
16452   }
16453 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4,output_width_gt_4)16454   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4, output_width_gt_4) {
16455     TEST_REQUIRES_X86_SSE;
16456     for (size_t input_width = 9; input_width < 17; input_width++) {
16457       DWConv2DMicrokernelTester()
16458         .input_width(input_width)
16459         .input_height(6)
16460         .kernel_height(5)
16461         .kernel_width(5)
16462         .subsampling(2)
16463         .padding_left(2)
16464         .padding_right(2)
16465         .padding_top(2)
16466         .padding_bottom(2)
16467         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4);
16468     }
16469   }
16470 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4,output_height_eq_3)16471   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4, output_height_eq_3) {
16472     TEST_REQUIRES_X86_SSE;
16473     for (size_t input_height = 5; input_height < 7; input_height++) {
16474       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16475         DWConv2DMicrokernelTester()
16476           .input_width(input_width)
16477           .input_height(input_height)
16478           .kernel_height(5)
16479           .kernel_width(5)
16480           .subsampling(2)
16481           .padding_left(2)
16482           .padding_right(2)
16483           .padding_top(2)
16484           .padding_bottom(2)
16485           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4);
16486       }
16487     }
16488   }
16489 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4,output_height_div_3)16490   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4, output_height_div_3) {
16491     TEST_REQUIRES_X86_SSE;
16492     for (size_t input_height = 12; input_height < 48; input_height += 6) {
16493       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16494         DWConv2DMicrokernelTester()
16495           .input_width(input_width)
16496           .input_height(input_height)
16497           .kernel_height(5)
16498           .kernel_width(5)
16499           .subsampling(2)
16500           .padding_left(2)
16501           .padding_right(2)
16502           .padding_top(2)
16503           .padding_bottom(2)
16504           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4);
16505       }
16506     }
16507   }
16508 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4,output_height_lt_3)16509   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4, output_height_lt_3) {
16510     TEST_REQUIRES_X86_SSE;
16511     for (size_t input_height = 1; input_height < 5; input_height++) {
16512       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16513         DWConv2DMicrokernelTester()
16514           .input_width(input_width)
16515           .input_height(input_height)
16516           .kernel_height(5)
16517           .kernel_width(5)
16518           .subsampling(2)
16519           .padding_left(2)
16520           .padding_right(2)
16521           .padding_top(2)
16522           .padding_bottom(2)
16523           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4);
16524       }
16525     }
16526   }
16527 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4,output_height_gt_3)16528   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4, output_height_gt_3) {
16529     TEST_REQUIRES_X86_SSE;
16530     for (size_t input_height = 7; input_height < 13; input_height++) {
16531       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16532         DWConv2DMicrokernelTester()
16533           .input_width(input_width)
16534           .input_height(input_height)
16535           .kernel_height(5)
16536           .kernel_width(5)
16537           .subsampling(2)
16538           .padding_left(2)
16539           .padding_right(2)
16540           .padding_top(2)
16541           .padding_bottom(2)
16542           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4);
16543       }
16544     }
16545   }
16546 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4,padding_top_eq_1)16547   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4, padding_top_eq_1) {
16548     TEST_REQUIRES_X86_SSE;
16549     for (size_t input_height = 2; input_height < 20; input_height++) {
16550       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16551         DWConv2DMicrokernelTester()
16552           .input_width(input_width)
16553           .input_height(input_height)
16554           .kernel_height(5)
16555           .kernel_width(5)
16556           .subsampling(2)
16557           .padding_left(2)
16558           .padding_right(2)
16559           .padding_top(1)
16560           .padding_bottom(2)
16561           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4);
16562       }
16563     }
16564   }
16565 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
16566 
16567 
16568 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2,output_width_eq_4)16569   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2, output_width_eq_4) {
16570     TEST_REQUIRES_X86_SSE;
16571     for (size_t input_width = 7; input_width < 9; input_width++) {
16572       DWConv2DMicrokernelTester()
16573         .input_width(input_width)
16574         .input_height(6)
16575         .kernel_height(5)
16576         .kernel_width(5)
16577         .subsampling(2)
16578         .padding_left(2)
16579         .padding_right(2)
16580         .padding_top(2)
16581         .padding_bottom(2)
16582         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4_acc2);
16583     }
16584   }
16585 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2,output_width_div_4)16586   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2, output_width_div_4) {
16587     TEST_REQUIRES_X86_SSE;
16588     for (size_t input_width = 16; input_width < 64; input_width += 8) {
16589       DWConv2DMicrokernelTester()
16590         .input_width(input_width)
16591         .input_height(6)
16592         .kernel_height(5)
16593         .kernel_width(5)
16594         .subsampling(2)
16595         .padding_left(2)
16596         .padding_right(2)
16597         .padding_top(2)
16598         .padding_bottom(2)
16599         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4_acc2);
16600     }
16601   }
16602 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2,output_width_lt_4)16603   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2, output_width_lt_4) {
16604     TEST_REQUIRES_X86_SSE;
16605     for (size_t input_width = 1; input_width < 7; input_width++) {
16606       DWConv2DMicrokernelTester()
16607         .input_width(8)
16608         .input_height(6)
16609         .kernel_height(5)
16610         .kernel_width(5)
16611         .subsampling(2)
16612         .padding_left(2)
16613         .padding_right(2)
16614         .padding_top(2)
16615         .padding_bottom(2)
16616         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4_acc2);
16617     }
16618   }
16619 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2,output_width_gt_4)16620   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2, output_width_gt_4) {
16621     TEST_REQUIRES_X86_SSE;
16622     for (size_t input_width = 9; input_width < 17; input_width++) {
16623       DWConv2DMicrokernelTester()
16624         .input_width(input_width)
16625         .input_height(6)
16626         .kernel_height(5)
16627         .kernel_width(5)
16628         .subsampling(2)
16629         .padding_left(2)
16630         .padding_right(2)
16631         .padding_top(2)
16632         .padding_bottom(2)
16633         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4_acc2);
16634     }
16635   }
16636 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2,output_height_eq_3)16637   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2, output_height_eq_3) {
16638     TEST_REQUIRES_X86_SSE;
16639     for (size_t input_height = 5; input_height < 7; input_height++) {
16640       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16641         DWConv2DMicrokernelTester()
16642           .input_width(input_width)
16643           .input_height(input_height)
16644           .kernel_height(5)
16645           .kernel_width(5)
16646           .subsampling(2)
16647           .padding_left(2)
16648           .padding_right(2)
16649           .padding_top(2)
16650           .padding_bottom(2)
16651           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4_acc2);
16652       }
16653     }
16654   }
16655 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2,output_height_div_3)16656   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2, output_height_div_3) {
16657     TEST_REQUIRES_X86_SSE;
16658     for (size_t input_height = 12; input_height < 48; input_height += 6) {
16659       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16660         DWConv2DMicrokernelTester()
16661           .input_width(input_width)
16662           .input_height(input_height)
16663           .kernel_height(5)
16664           .kernel_width(5)
16665           .subsampling(2)
16666           .padding_left(2)
16667           .padding_right(2)
16668           .padding_top(2)
16669           .padding_bottom(2)
16670           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4_acc2);
16671       }
16672     }
16673   }
16674 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2,output_height_lt_3)16675   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2, output_height_lt_3) {
16676     TEST_REQUIRES_X86_SSE;
16677     for (size_t input_height = 1; input_height < 5; input_height++) {
16678       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16679         DWConv2DMicrokernelTester()
16680           .input_width(input_width)
16681           .input_height(input_height)
16682           .kernel_height(5)
16683           .kernel_width(5)
16684           .subsampling(2)
16685           .padding_left(2)
16686           .padding_right(2)
16687           .padding_top(2)
16688           .padding_bottom(2)
16689           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4_acc2);
16690       }
16691     }
16692   }
16693 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2,output_height_gt_3)16694   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2, output_height_gt_3) {
16695     TEST_REQUIRES_X86_SSE;
16696     for (size_t input_height = 7; input_height < 13; input_height++) {
16697       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16698         DWConv2DMicrokernelTester()
16699           .input_width(input_width)
16700           .input_height(input_height)
16701           .kernel_height(5)
16702           .kernel_width(5)
16703           .subsampling(2)
16704           .padding_left(2)
16705           .padding_right(2)
16706           .padding_top(2)
16707           .padding_bottom(2)
16708           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4_acc2);
16709       }
16710     }
16711   }
16712 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2,padding_top_eq_1)16713   TEST(F32_DWCONV2D_CHW_5X5S2P2__SSE_3X4_ACC2, padding_top_eq_1) {
16714     TEST_REQUIRES_X86_SSE;
16715     for (size_t input_height = 2; input_height < 20; input_height++) {
16716       for (size_t input_width = 1; input_width < 41; input_width += 7) {
16717         DWConv2DMicrokernelTester()
16718           .input_width(input_width)
16719           .input_height(input_height)
16720           .kernel_height(5)
16721           .kernel_width(5)
16722           .subsampling(2)
16723           .padding_left(2)
16724           .padding_right(2)
16725           .padding_top(1)
16726           .padding_bottom(2)
16727           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__sse_3x4_acc2);
16728       }
16729     }
16730   }
16731 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
16732 
16733 
16734 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_eq_4)16735   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_eq_4) {
16736     DWConv2DMicrokernelTester()
16737       .input_width(4)
16738       .input_height(1)
16739       .kernel_height(3)
16740       .kernel_width(3)
16741       .subsampling(1)
16742       .padding_left(1)
16743       .padding_right(1)
16744       .padding_top(1)
16745       .padding_bottom(1)
16746       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4);
16747   }
16748 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_div_4)16749   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_div_4) {
16750     for (size_t input_width = 8; input_width < 32; input_width += 4) {
16751       DWConv2DMicrokernelTester()
16752         .input_width(input_width)
16753         .input_height(1)
16754         .kernel_height(3)
16755         .kernel_width(3)
16756         .subsampling(1)
16757         .padding_left(1)
16758         .padding_right(1)
16759         .padding_top(1)
16760         .padding_bottom(1)
16761         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4);
16762     }
16763   }
16764 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_lt_4)16765   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_lt_4) {
16766     for (size_t input_width = 1; input_width < 4; input_width++) {
16767       DWConv2DMicrokernelTester()
16768         .input_width(4)
16769         .input_height(1)
16770         .kernel_height(3)
16771         .kernel_width(3)
16772         .subsampling(1)
16773         .padding_left(1)
16774         .padding_right(1)
16775         .padding_top(1)
16776         .padding_bottom(1)
16777         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4);
16778     }
16779   }
16780 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_gt_4)16781   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_gt_4) {
16782     for (size_t input_width = 5; input_width < 9; input_width++) {
16783       DWConv2DMicrokernelTester()
16784         .input_width(input_width)
16785         .input_height(1)
16786         .kernel_height(3)
16787         .kernel_width(3)
16788         .subsampling(1)
16789         .padding_left(1)
16790         .padding_right(1)
16791         .padding_top(1)
16792         .padding_bottom(1)
16793         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4);
16794     }
16795   }
16796 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4,output_height_gt_1)16797   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4, output_height_gt_1) {
16798     for (size_t input_height = 2; input_height < 3; input_height++) {
16799       for (size_t input_width = 1; input_width < 21; input_width += 3) {
16800         DWConv2DMicrokernelTester()
16801           .input_width(input_width)
16802           .input_height(input_height)
16803           .kernel_height(3)
16804           .kernel_width(3)
16805           .subsampling(1)
16806           .padding_left(1)
16807           .padding_right(1)
16808           .padding_top(1)
16809           .padding_bottom(1)
16810           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4);
16811       }
16812     }
16813   }
16814 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
16815 
16816 
16817 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_eq_4)16818   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_eq_4) {
16819     DWConv2DMicrokernelTester()
16820       .input_width(4)
16821       .input_height(1)
16822       .kernel_height(3)
16823       .kernel_width(3)
16824       .subsampling(1)
16825       .padding_left(1)
16826       .padding_right(1)
16827       .padding_top(1)
16828       .padding_bottom(1)
16829       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc2);
16830   }
16831 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_div_4)16832   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_div_4) {
16833     for (size_t input_width = 8; input_width < 32; input_width += 4) {
16834       DWConv2DMicrokernelTester()
16835         .input_width(input_width)
16836         .input_height(1)
16837         .kernel_height(3)
16838         .kernel_width(3)
16839         .subsampling(1)
16840         .padding_left(1)
16841         .padding_right(1)
16842         .padding_top(1)
16843         .padding_bottom(1)
16844         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc2);
16845     }
16846   }
16847 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_lt_4)16848   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_lt_4) {
16849     for (size_t input_width = 1; input_width < 4; input_width++) {
16850       DWConv2DMicrokernelTester()
16851         .input_width(4)
16852         .input_height(1)
16853         .kernel_height(3)
16854         .kernel_width(3)
16855         .subsampling(1)
16856         .padding_left(1)
16857         .padding_right(1)
16858         .padding_top(1)
16859         .padding_bottom(1)
16860         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc2);
16861     }
16862   }
16863 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_gt_4)16864   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_gt_4) {
16865     for (size_t input_width = 5; input_width < 9; input_width++) {
16866       DWConv2DMicrokernelTester()
16867         .input_width(input_width)
16868         .input_height(1)
16869         .kernel_height(3)
16870         .kernel_width(3)
16871         .subsampling(1)
16872         .padding_left(1)
16873         .padding_right(1)
16874         .padding_top(1)
16875         .padding_bottom(1)
16876         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc2);
16877     }
16878   }
16879 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_height_gt_1)16880   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_height_gt_1) {
16881     for (size_t input_height = 2; input_height < 3; input_height++) {
16882       for (size_t input_width = 1; input_width < 21; input_width += 3) {
16883         DWConv2DMicrokernelTester()
16884           .input_width(input_width)
16885           .input_height(input_height)
16886           .kernel_height(3)
16887           .kernel_width(3)
16888           .subsampling(1)
16889           .padding_left(1)
16890           .padding_right(1)
16891           .padding_top(1)
16892           .padding_bottom(1)
16893           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc2);
16894       }
16895     }
16896   }
16897 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
16898 
16899 
16900 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_eq_4)16901   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_eq_4) {
16902     DWConv2DMicrokernelTester()
16903       .input_width(4)
16904       .input_height(1)
16905       .kernel_height(3)
16906       .kernel_width(3)
16907       .subsampling(1)
16908       .padding_left(1)
16909       .padding_right(1)
16910       .padding_top(1)
16911       .padding_bottom(1)
16912       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc3);
16913   }
16914 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_div_4)16915   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_div_4) {
16916     for (size_t input_width = 8; input_width < 32; input_width += 4) {
16917       DWConv2DMicrokernelTester()
16918         .input_width(input_width)
16919         .input_height(1)
16920         .kernel_height(3)
16921         .kernel_width(3)
16922         .subsampling(1)
16923         .padding_left(1)
16924         .padding_right(1)
16925         .padding_top(1)
16926         .padding_bottom(1)
16927         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc3);
16928     }
16929   }
16930 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_lt_4)16931   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_lt_4) {
16932     for (size_t input_width = 1; input_width < 4; input_width++) {
16933       DWConv2DMicrokernelTester()
16934         .input_width(4)
16935         .input_height(1)
16936         .kernel_height(3)
16937         .kernel_width(3)
16938         .subsampling(1)
16939         .padding_left(1)
16940         .padding_right(1)
16941         .padding_top(1)
16942         .padding_bottom(1)
16943         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc3);
16944     }
16945   }
16946 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_gt_4)16947   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_gt_4) {
16948     for (size_t input_width = 5; input_width < 9; input_width++) {
16949       DWConv2DMicrokernelTester()
16950         .input_width(input_width)
16951         .input_height(1)
16952         .kernel_height(3)
16953         .kernel_width(3)
16954         .subsampling(1)
16955         .padding_left(1)
16956         .padding_right(1)
16957         .padding_top(1)
16958         .padding_bottom(1)
16959         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc3);
16960     }
16961   }
16962 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_height_gt_1)16963   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_height_gt_1) {
16964     for (size_t input_height = 2; input_height < 3; input_height++) {
16965       for (size_t input_width = 1; input_width < 21; input_width += 3) {
16966         DWConv2DMicrokernelTester()
16967           .input_width(input_width)
16968           .input_height(input_height)
16969           .kernel_height(3)
16970           .kernel_width(3)
16971           .subsampling(1)
16972           .padding_left(1)
16973           .padding_right(1)
16974           .padding_top(1)
16975           .padding_bottom(1)
16976           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc3);
16977       }
16978     }
16979   }
16980 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
16981 
16982 
16983 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_eq_4)16984   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_eq_4) {
16985     DWConv2DMicrokernelTester()
16986       .input_width(4)
16987       .input_height(1)
16988       .kernel_height(3)
16989       .kernel_width(3)
16990       .subsampling(1)
16991       .padding_left(1)
16992       .padding_right(1)
16993       .padding_top(1)
16994       .padding_bottom(1)
16995       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc4);
16996   }
16997 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_div_4)16998   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_div_4) {
16999     for (size_t input_width = 8; input_width < 32; input_width += 4) {
17000       DWConv2DMicrokernelTester()
17001         .input_width(input_width)
17002         .input_height(1)
17003         .kernel_height(3)
17004         .kernel_width(3)
17005         .subsampling(1)
17006         .padding_left(1)
17007         .padding_right(1)
17008         .padding_top(1)
17009         .padding_bottom(1)
17010         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc4);
17011     }
17012   }
17013 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_lt_4)17014   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_lt_4) {
17015     for (size_t input_width = 1; input_width < 4; input_width++) {
17016       DWConv2DMicrokernelTester()
17017         .input_width(4)
17018         .input_height(1)
17019         .kernel_height(3)
17020         .kernel_width(3)
17021         .subsampling(1)
17022         .padding_left(1)
17023         .padding_right(1)
17024         .padding_top(1)
17025         .padding_bottom(1)
17026         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc4);
17027     }
17028   }
17029 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_gt_4)17030   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_gt_4) {
17031     for (size_t input_width = 5; input_width < 9; input_width++) {
17032       DWConv2DMicrokernelTester()
17033         .input_width(input_width)
17034         .input_height(1)
17035         .kernel_height(3)
17036         .kernel_width(3)
17037         .subsampling(1)
17038         .padding_left(1)
17039         .padding_right(1)
17040         .padding_top(1)
17041         .padding_bottom(1)
17042         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc4);
17043     }
17044   }
17045 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_height_gt_1)17046   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_height_gt_1) {
17047     for (size_t input_height = 2; input_height < 3; input_height++) {
17048       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17049         DWConv2DMicrokernelTester()
17050           .input_width(input_width)
17051           .input_height(input_height)
17052           .kernel_height(3)
17053           .kernel_width(3)
17054           .subsampling(1)
17055           .padding_left(1)
17056           .padding_right(1)
17057           .padding_top(1)
17058           .padding_bottom(1)
17059           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_1x4_acc4);
17060       }
17061     }
17062   }
17063 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
17064 
17065 
17066 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_eq_4)17067   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_eq_4) {
17068     DWConv2DMicrokernelTester()
17069       .input_width(4)
17070       .input_height(2)
17071       .kernel_height(3)
17072       .kernel_width(3)
17073       .subsampling(1)
17074       .padding_left(1)
17075       .padding_right(1)
17076       .padding_top(1)
17077       .padding_bottom(1)
17078       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4);
17079   }
17080 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_div_4)17081   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_div_4) {
17082     for (size_t input_width = 8; input_width < 32; input_width += 4) {
17083       DWConv2DMicrokernelTester()
17084         .input_width(input_width)
17085         .input_height(2)
17086         .kernel_height(3)
17087         .kernel_width(3)
17088         .subsampling(1)
17089         .padding_left(1)
17090         .padding_right(1)
17091         .padding_top(1)
17092         .padding_bottom(1)
17093         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4);
17094     }
17095   }
17096 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_lt_4)17097   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_lt_4) {
17098     for (size_t input_width = 1; input_width < 4; input_width++) {
17099       DWConv2DMicrokernelTester()
17100         .input_width(4)
17101         .input_height(2)
17102         .kernel_height(3)
17103         .kernel_width(3)
17104         .subsampling(1)
17105         .padding_left(1)
17106         .padding_right(1)
17107         .padding_top(1)
17108         .padding_bottom(1)
17109         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4);
17110     }
17111   }
17112 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_gt_4)17113   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_gt_4) {
17114     for (size_t input_width = 5; input_width < 9; input_width++) {
17115       DWConv2DMicrokernelTester()
17116         .input_width(input_width)
17117         .input_height(2)
17118         .kernel_height(3)
17119         .kernel_width(3)
17120         .subsampling(1)
17121         .padding_left(1)
17122         .padding_right(1)
17123         .padding_top(1)
17124         .padding_bottom(1)
17125         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4);
17126     }
17127   }
17128 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_div_2)17129   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_div_2) {
17130     for (size_t input_height = 4; input_height < 16; input_height += 2) {
17131       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17132         DWConv2DMicrokernelTester()
17133           .input_width(input_width)
17134           .input_height(input_height)
17135           .kernel_height(3)
17136           .kernel_width(3)
17137           .subsampling(1)
17138           .padding_left(1)
17139           .padding_right(1)
17140           .padding_top(1)
17141           .padding_bottom(1)
17142           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4);
17143       }
17144     }
17145   }
17146 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_lt_2)17147   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_lt_2) {
17148     for (size_t input_height = 1; input_height < 2; input_height++) {
17149       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17150         DWConv2DMicrokernelTester()
17151           .input_width(input_width)
17152           .input_height(input_height)
17153           .kernel_height(3)
17154           .kernel_width(3)
17155           .subsampling(1)
17156           .padding_left(1)
17157           .padding_right(1)
17158           .padding_top(1)
17159           .padding_bottom(1)
17160           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4);
17161       }
17162     }
17163   }
17164 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_gt_2)17165   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_gt_2) {
17166     for (size_t input_height = 3; input_height < 5; input_height++) {
17167       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17168         DWConv2DMicrokernelTester()
17169           .input_width(input_width)
17170           .input_height(input_height)
17171           .kernel_height(3)
17172           .kernel_width(3)
17173           .subsampling(1)
17174           .padding_left(1)
17175           .padding_right(1)
17176           .padding_top(1)
17177           .padding_bottom(1)
17178           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4);
17179       }
17180     }
17181   }
17182 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
17183 
17184 
17185 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_eq_4)17186   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_eq_4) {
17187     DWConv2DMicrokernelTester()
17188       .input_width(4)
17189       .input_height(2)
17190       .kernel_height(3)
17191       .kernel_width(3)
17192       .subsampling(1)
17193       .padding_left(1)
17194       .padding_right(1)
17195       .padding_top(1)
17196       .padding_bottom(1)
17197       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4_acc2);
17198   }
17199 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_div_4)17200   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_div_4) {
17201     for (size_t input_width = 8; input_width < 32; input_width += 4) {
17202       DWConv2DMicrokernelTester()
17203         .input_width(input_width)
17204         .input_height(2)
17205         .kernel_height(3)
17206         .kernel_width(3)
17207         .subsampling(1)
17208         .padding_left(1)
17209         .padding_right(1)
17210         .padding_top(1)
17211         .padding_bottom(1)
17212         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4_acc2);
17213     }
17214   }
17215 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_lt_4)17216   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_lt_4) {
17217     for (size_t input_width = 1; input_width < 4; input_width++) {
17218       DWConv2DMicrokernelTester()
17219         .input_width(4)
17220         .input_height(2)
17221         .kernel_height(3)
17222         .kernel_width(3)
17223         .subsampling(1)
17224         .padding_left(1)
17225         .padding_right(1)
17226         .padding_top(1)
17227         .padding_bottom(1)
17228         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4_acc2);
17229     }
17230   }
17231 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_gt_4)17232   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_gt_4) {
17233     for (size_t input_width = 5; input_width < 9; input_width++) {
17234       DWConv2DMicrokernelTester()
17235         .input_width(input_width)
17236         .input_height(2)
17237         .kernel_height(3)
17238         .kernel_width(3)
17239         .subsampling(1)
17240         .padding_left(1)
17241         .padding_right(1)
17242         .padding_top(1)
17243         .padding_bottom(1)
17244         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4_acc2);
17245     }
17246   }
17247 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_div_2)17248   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_div_2) {
17249     for (size_t input_height = 4; input_height < 16; input_height += 2) {
17250       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17251         DWConv2DMicrokernelTester()
17252           .input_width(input_width)
17253           .input_height(input_height)
17254           .kernel_height(3)
17255           .kernel_width(3)
17256           .subsampling(1)
17257           .padding_left(1)
17258           .padding_right(1)
17259           .padding_top(1)
17260           .padding_bottom(1)
17261           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4_acc2);
17262       }
17263     }
17264   }
17265 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_lt_2)17266   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_lt_2) {
17267     for (size_t input_height = 1; input_height < 2; input_height++) {
17268       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17269         DWConv2DMicrokernelTester()
17270           .input_width(input_width)
17271           .input_height(input_height)
17272           .kernel_height(3)
17273           .kernel_width(3)
17274           .subsampling(1)
17275           .padding_left(1)
17276           .padding_right(1)
17277           .padding_top(1)
17278           .padding_bottom(1)
17279           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4_acc2);
17280       }
17281     }
17282   }
17283 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_gt_2)17284   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_gt_2) {
17285     for (size_t input_height = 3; input_height < 5; input_height++) {
17286       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17287         DWConv2DMicrokernelTester()
17288           .input_width(input_width)
17289           .input_height(input_height)
17290           .kernel_height(3)
17291           .kernel_width(3)
17292           .subsampling(1)
17293           .padding_left(1)
17294           .padding_right(1)
17295           .padding_top(1)
17296           .padding_bottom(1)
17297           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_2x4_acc2);
17298       }
17299     }
17300   }
17301 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
17302 
17303 
17304 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_eq_4)17305   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_eq_4) {
17306     DWConv2DMicrokernelTester()
17307       .input_width(4)
17308       .input_height(3)
17309       .kernel_height(3)
17310       .kernel_width(3)
17311       .subsampling(1)
17312       .padding_left(1)
17313       .padding_right(1)
17314       .padding_top(1)
17315       .padding_bottom(1)
17316       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_3x4);
17317   }
17318 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_div_4)17319   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_div_4) {
17320     for (size_t input_width = 8; input_width < 32; input_width += 4) {
17321       DWConv2DMicrokernelTester()
17322         .input_width(input_width)
17323         .input_height(3)
17324         .kernel_height(3)
17325         .kernel_width(3)
17326         .subsampling(1)
17327         .padding_left(1)
17328         .padding_right(1)
17329         .padding_top(1)
17330         .padding_bottom(1)
17331         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_3x4);
17332     }
17333   }
17334 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_lt_4)17335   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_lt_4) {
17336     for (size_t input_width = 1; input_width < 4; input_width++) {
17337       DWConv2DMicrokernelTester()
17338         .input_width(4)
17339         .input_height(3)
17340         .kernel_height(3)
17341         .kernel_width(3)
17342         .subsampling(1)
17343         .padding_left(1)
17344         .padding_right(1)
17345         .padding_top(1)
17346         .padding_bottom(1)
17347         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_3x4);
17348     }
17349   }
17350 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_gt_4)17351   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_gt_4) {
17352     for (size_t input_width = 5; input_width < 9; input_width++) {
17353       DWConv2DMicrokernelTester()
17354         .input_width(input_width)
17355         .input_height(3)
17356         .kernel_height(3)
17357         .kernel_width(3)
17358         .subsampling(1)
17359         .padding_left(1)
17360         .padding_right(1)
17361         .padding_top(1)
17362         .padding_bottom(1)
17363         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_3x4);
17364     }
17365   }
17366 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_div_3)17367   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_div_3) {
17368     for (size_t input_height = 6; input_height < 24; input_height += 3) {
17369       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17370         DWConv2DMicrokernelTester()
17371           .input_width(input_width)
17372           .input_height(input_height)
17373           .kernel_height(3)
17374           .kernel_width(3)
17375           .subsampling(1)
17376           .padding_left(1)
17377           .padding_right(1)
17378           .padding_top(1)
17379           .padding_bottom(1)
17380           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_3x4);
17381       }
17382     }
17383   }
17384 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_lt_3)17385   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_lt_3) {
17386     for (size_t input_height = 1; input_height < 3; input_height++) {
17387       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17388         DWConv2DMicrokernelTester()
17389           .input_width(input_width)
17390           .input_height(input_height)
17391           .kernel_height(3)
17392           .kernel_width(3)
17393           .subsampling(1)
17394           .padding_left(1)
17395           .padding_right(1)
17396           .padding_top(1)
17397           .padding_bottom(1)
17398           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_3x4);
17399       }
17400     }
17401   }
17402 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_gt_3)17403   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_gt_3) {
17404     for (size_t input_height = 4; input_height < 7; input_height++) {
17405       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17406         DWConv2DMicrokernelTester()
17407           .input_width(input_width)
17408           .input_height(input_height)
17409           .kernel_height(3)
17410           .kernel_width(3)
17411           .subsampling(1)
17412           .padding_left(1)
17413           .padding_right(1)
17414           .padding_top(1)
17415           .padding_bottom(1)
17416           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_3x4);
17417       }
17418     }
17419   }
17420 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
17421 
17422 
17423 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_width_eq_4)17424   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_width_eq_4) {
17425     DWConv2DMicrokernelTester()
17426       .input_width(4)
17427       .input_height(4)
17428       .kernel_height(3)
17429       .kernel_width(3)
17430       .subsampling(1)
17431       .padding_left(1)
17432       .padding_right(1)
17433       .padding_top(1)
17434       .padding_bottom(1)
17435       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_4x4);
17436   }
17437 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_width_div_4)17438   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_width_div_4) {
17439     for (size_t input_width = 8; input_width < 32; input_width += 4) {
17440       DWConv2DMicrokernelTester()
17441         .input_width(input_width)
17442         .input_height(4)
17443         .kernel_height(3)
17444         .kernel_width(3)
17445         .subsampling(1)
17446         .padding_left(1)
17447         .padding_right(1)
17448         .padding_top(1)
17449         .padding_bottom(1)
17450         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_4x4);
17451     }
17452   }
17453 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_width_lt_4)17454   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_width_lt_4) {
17455     for (size_t input_width = 1; input_width < 4; input_width++) {
17456       DWConv2DMicrokernelTester()
17457         .input_width(4)
17458         .input_height(4)
17459         .kernel_height(3)
17460         .kernel_width(3)
17461         .subsampling(1)
17462         .padding_left(1)
17463         .padding_right(1)
17464         .padding_top(1)
17465         .padding_bottom(1)
17466         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_4x4);
17467     }
17468   }
17469 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_width_gt_4)17470   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_width_gt_4) {
17471     for (size_t input_width = 5; input_width < 9; input_width++) {
17472       DWConv2DMicrokernelTester()
17473         .input_width(input_width)
17474         .input_height(4)
17475         .kernel_height(3)
17476         .kernel_width(3)
17477         .subsampling(1)
17478         .padding_left(1)
17479         .padding_right(1)
17480         .padding_top(1)
17481         .padding_bottom(1)
17482         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_4x4);
17483     }
17484   }
17485 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_height_div_4)17486   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_height_div_4) {
17487     for (size_t input_height = 8; input_height < 32; input_height += 4) {
17488       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17489         DWConv2DMicrokernelTester()
17490           .input_width(input_width)
17491           .input_height(input_height)
17492           .kernel_height(3)
17493           .kernel_width(3)
17494           .subsampling(1)
17495           .padding_left(1)
17496           .padding_right(1)
17497           .padding_top(1)
17498           .padding_bottom(1)
17499           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_4x4);
17500       }
17501     }
17502   }
17503 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_height_lt_4)17504   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_height_lt_4) {
17505     for (size_t input_height = 1; input_height < 4; input_height++) {
17506       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17507         DWConv2DMicrokernelTester()
17508           .input_width(input_width)
17509           .input_height(input_height)
17510           .kernel_height(3)
17511           .kernel_width(3)
17512           .subsampling(1)
17513           .padding_left(1)
17514           .padding_right(1)
17515           .padding_top(1)
17516           .padding_bottom(1)
17517           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_4x4);
17518       }
17519     }
17520   }
17521 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_height_gt_4)17522   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_height_gt_4) {
17523     for (size_t input_height = 5; input_height < 9; input_height++) {
17524       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17525         DWConv2DMicrokernelTester()
17526           .input_width(input_width)
17527           .input_height(input_height)
17528           .kernel_height(3)
17529           .kernel_width(3)
17530           .subsampling(1)
17531           .padding_left(1)
17532           .padding_right(1)
17533           .padding_top(1)
17534           .padding_bottom(1)
17535           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_4x4);
17536       }
17537     }
17538   }
17539 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
17540 
17541 
17542 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4,output_width_eq_4)17543   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4, output_width_eq_4) {
17544     DWConv2DMicrokernelTester()
17545       .input_width(4)
17546       .input_height(5)
17547       .kernel_height(3)
17548       .kernel_width(3)
17549       .subsampling(1)
17550       .padding_left(1)
17551       .padding_right(1)
17552       .padding_top(1)
17553       .padding_bottom(1)
17554       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_5x4);
17555   }
17556 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4,output_width_div_4)17557   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4, output_width_div_4) {
17558     for (size_t input_width = 8; input_width < 32; input_width += 4) {
17559       DWConv2DMicrokernelTester()
17560         .input_width(input_width)
17561         .input_height(5)
17562         .kernel_height(3)
17563         .kernel_width(3)
17564         .subsampling(1)
17565         .padding_left(1)
17566         .padding_right(1)
17567         .padding_top(1)
17568         .padding_bottom(1)
17569         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_5x4);
17570     }
17571   }
17572 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4,output_width_lt_4)17573   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4, output_width_lt_4) {
17574     for (size_t input_width = 1; input_width < 4; input_width++) {
17575       DWConv2DMicrokernelTester()
17576         .input_width(4)
17577         .input_height(5)
17578         .kernel_height(3)
17579         .kernel_width(3)
17580         .subsampling(1)
17581         .padding_left(1)
17582         .padding_right(1)
17583         .padding_top(1)
17584         .padding_bottom(1)
17585         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_5x4);
17586     }
17587   }
17588 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4,output_width_gt_4)17589   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4, output_width_gt_4) {
17590     for (size_t input_width = 5; input_width < 9; input_width++) {
17591       DWConv2DMicrokernelTester()
17592         .input_width(input_width)
17593         .input_height(5)
17594         .kernel_height(3)
17595         .kernel_width(3)
17596         .subsampling(1)
17597         .padding_left(1)
17598         .padding_right(1)
17599         .padding_top(1)
17600         .padding_bottom(1)
17601         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_5x4);
17602     }
17603   }
17604 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4,output_height_div_5)17605   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4, output_height_div_5) {
17606     for (size_t input_height = 10; input_height < 40; input_height += 5) {
17607       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17608         DWConv2DMicrokernelTester()
17609           .input_width(input_width)
17610           .input_height(input_height)
17611           .kernel_height(3)
17612           .kernel_width(3)
17613           .subsampling(1)
17614           .padding_left(1)
17615           .padding_right(1)
17616           .padding_top(1)
17617           .padding_bottom(1)
17618           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_5x4);
17619       }
17620     }
17621   }
17622 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4,output_height_lt_5)17623   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4, output_height_lt_5) {
17624     for (size_t input_height = 1; input_height < 5; input_height++) {
17625       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17626         DWConv2DMicrokernelTester()
17627           .input_width(input_width)
17628           .input_height(input_height)
17629           .kernel_height(3)
17630           .kernel_width(3)
17631           .subsampling(1)
17632           .padding_left(1)
17633           .padding_right(1)
17634           .padding_top(1)
17635           .padding_bottom(1)
17636           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_5x4);
17637       }
17638     }
17639   }
17640 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4,output_height_gt_5)17641   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_5X4, output_height_gt_5) {
17642     for (size_t input_height = 6; input_height < 11; input_height++) {
17643       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17644         DWConv2DMicrokernelTester()
17645           .input_width(input_width)
17646           .input_height(input_height)
17647           .kernel_height(3)
17648           .kernel_width(3)
17649           .subsampling(1)
17650           .padding_left(1)
17651           .padding_right(1)
17652           .padding_top(1)
17653           .padding_bottom(1)
17654           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_5x4);
17655       }
17656     }
17657   }
17658 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
17659 
17660 
17661 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4,output_width_eq_4)17662   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4, output_width_eq_4) {
17663     DWConv2DMicrokernelTester()
17664       .input_width(4)
17665       .input_height(6)
17666       .kernel_height(3)
17667       .kernel_width(3)
17668       .subsampling(1)
17669       .padding_left(1)
17670       .padding_right(1)
17671       .padding_top(1)
17672       .padding_bottom(1)
17673       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_6x4);
17674   }
17675 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4,output_width_div_4)17676   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4, output_width_div_4) {
17677     for (size_t input_width = 8; input_width < 32; input_width += 4) {
17678       DWConv2DMicrokernelTester()
17679         .input_width(input_width)
17680         .input_height(6)
17681         .kernel_height(3)
17682         .kernel_width(3)
17683         .subsampling(1)
17684         .padding_left(1)
17685         .padding_right(1)
17686         .padding_top(1)
17687         .padding_bottom(1)
17688         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_6x4);
17689     }
17690   }
17691 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4,output_width_lt_4)17692   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4, output_width_lt_4) {
17693     for (size_t input_width = 1; input_width < 4; input_width++) {
17694       DWConv2DMicrokernelTester()
17695         .input_width(4)
17696         .input_height(6)
17697         .kernel_height(3)
17698         .kernel_width(3)
17699         .subsampling(1)
17700         .padding_left(1)
17701         .padding_right(1)
17702         .padding_top(1)
17703         .padding_bottom(1)
17704         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_6x4);
17705     }
17706   }
17707 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4,output_width_gt_4)17708   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4, output_width_gt_4) {
17709     for (size_t input_width = 5; input_width < 9; input_width++) {
17710       DWConv2DMicrokernelTester()
17711         .input_width(input_width)
17712         .input_height(6)
17713         .kernel_height(3)
17714         .kernel_width(3)
17715         .subsampling(1)
17716         .padding_left(1)
17717         .padding_right(1)
17718         .padding_top(1)
17719         .padding_bottom(1)
17720         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_6x4);
17721     }
17722   }
17723 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4,output_height_div_6)17724   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4, output_height_div_6) {
17725     for (size_t input_height = 12; input_height < 48; input_height += 6) {
17726       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17727         DWConv2DMicrokernelTester()
17728           .input_width(input_width)
17729           .input_height(input_height)
17730           .kernel_height(3)
17731           .kernel_width(3)
17732           .subsampling(1)
17733           .padding_left(1)
17734           .padding_right(1)
17735           .padding_top(1)
17736           .padding_bottom(1)
17737           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_6x4);
17738       }
17739     }
17740   }
17741 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4,output_height_lt_6)17742   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4, output_height_lt_6) {
17743     for (size_t input_height = 1; input_height < 6; input_height++) {
17744       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17745         DWConv2DMicrokernelTester()
17746           .input_width(input_width)
17747           .input_height(input_height)
17748           .kernel_height(3)
17749           .kernel_width(3)
17750           .subsampling(1)
17751           .padding_left(1)
17752           .padding_right(1)
17753           .padding_top(1)
17754           .padding_bottom(1)
17755           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_6x4);
17756       }
17757     }
17758   }
17759 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4,output_height_gt_6)17760   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_LOADSPLAT_6X4, output_height_gt_6) {
17761     for (size_t input_height = 7; input_height < 13; input_height++) {
17762       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17763         DWConv2DMicrokernelTester()
17764           .input_width(input_width)
17765           .input_height(input_height)
17766           .kernel_height(3)
17767           .kernel_width(3)
17768           .subsampling(1)
17769           .padding_left(1)
17770           .padding_right(1)
17771           .padding_top(1)
17772           .padding_bottom(1)
17773           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_loadsplat_6x4);
17774       }
17775     }
17776   }
17777 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
17778 
17779 
17780 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4,output_width_eq_4)17781   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4, output_width_eq_4) {
17782     DWConv2DMicrokernelTester()
17783       .input_width(4)
17784       .input_height(1)
17785       .kernel_height(3)
17786       .kernel_width(3)
17787       .subsampling(1)
17788       .padding_left(1)
17789       .padding_right(1)
17790       .padding_top(1)
17791       .padding_bottom(1)
17792       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4);
17793   }
17794 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4,output_width_div_4)17795   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4, output_width_div_4) {
17796     for (size_t input_width = 8; input_width < 32; input_width += 4) {
17797       DWConv2DMicrokernelTester()
17798         .input_width(input_width)
17799         .input_height(1)
17800         .kernel_height(3)
17801         .kernel_width(3)
17802         .subsampling(1)
17803         .padding_left(1)
17804         .padding_right(1)
17805         .padding_top(1)
17806         .padding_bottom(1)
17807         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4);
17808     }
17809   }
17810 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4,output_width_lt_4)17811   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4, output_width_lt_4) {
17812     for (size_t input_width = 1; input_width < 4; input_width++) {
17813       DWConv2DMicrokernelTester()
17814         .input_width(4)
17815         .input_height(1)
17816         .kernel_height(3)
17817         .kernel_width(3)
17818         .subsampling(1)
17819         .padding_left(1)
17820         .padding_right(1)
17821         .padding_top(1)
17822         .padding_bottom(1)
17823         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4);
17824     }
17825   }
17826 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4,output_width_gt_4)17827   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4, output_width_gt_4) {
17828     for (size_t input_width = 5; input_width < 9; input_width++) {
17829       DWConv2DMicrokernelTester()
17830         .input_width(input_width)
17831         .input_height(1)
17832         .kernel_height(3)
17833         .kernel_width(3)
17834         .subsampling(1)
17835         .padding_left(1)
17836         .padding_right(1)
17837         .padding_top(1)
17838         .padding_bottom(1)
17839         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4);
17840     }
17841   }
17842 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4,output_height_gt_1)17843   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4, output_height_gt_1) {
17844     for (size_t input_height = 2; input_height < 3; input_height++) {
17845       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17846         DWConv2DMicrokernelTester()
17847           .input_width(input_width)
17848           .input_height(input_height)
17849           .kernel_height(3)
17850           .kernel_width(3)
17851           .subsampling(1)
17852           .padding_left(1)
17853           .padding_right(1)
17854           .padding_top(1)
17855           .padding_bottom(1)
17856           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4);
17857       }
17858     }
17859   }
17860 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
17861 
17862 
17863 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_eq_4)17864   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_eq_4) {
17865     DWConv2DMicrokernelTester()
17866       .input_width(4)
17867       .input_height(1)
17868       .kernel_height(3)
17869       .kernel_width(3)
17870       .subsampling(1)
17871       .padding_left(1)
17872       .padding_right(1)
17873       .padding_top(1)
17874       .padding_bottom(1)
17875       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc2);
17876   }
17877 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_div_4)17878   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_div_4) {
17879     for (size_t input_width = 8; input_width < 32; input_width += 4) {
17880       DWConv2DMicrokernelTester()
17881         .input_width(input_width)
17882         .input_height(1)
17883         .kernel_height(3)
17884         .kernel_width(3)
17885         .subsampling(1)
17886         .padding_left(1)
17887         .padding_right(1)
17888         .padding_top(1)
17889         .padding_bottom(1)
17890         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc2);
17891     }
17892   }
17893 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_lt_4)17894   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_lt_4) {
17895     for (size_t input_width = 1; input_width < 4; input_width++) {
17896       DWConv2DMicrokernelTester()
17897         .input_width(4)
17898         .input_height(1)
17899         .kernel_height(3)
17900         .kernel_width(3)
17901         .subsampling(1)
17902         .padding_left(1)
17903         .padding_right(1)
17904         .padding_top(1)
17905         .padding_bottom(1)
17906         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc2);
17907     }
17908   }
17909 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_gt_4)17910   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_gt_4) {
17911     for (size_t input_width = 5; input_width < 9; input_width++) {
17912       DWConv2DMicrokernelTester()
17913         .input_width(input_width)
17914         .input_height(1)
17915         .kernel_height(3)
17916         .kernel_width(3)
17917         .subsampling(1)
17918         .padding_left(1)
17919         .padding_right(1)
17920         .padding_top(1)
17921         .padding_bottom(1)
17922         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc2);
17923     }
17924   }
17925 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_height_gt_1)17926   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_height_gt_1) {
17927     for (size_t input_height = 2; input_height < 3; input_height++) {
17928       for (size_t input_width = 1; input_width < 21; input_width += 3) {
17929         DWConv2DMicrokernelTester()
17930           .input_width(input_width)
17931           .input_height(input_height)
17932           .kernel_height(3)
17933           .kernel_width(3)
17934           .subsampling(1)
17935           .padding_left(1)
17936           .padding_right(1)
17937           .padding_top(1)
17938           .padding_bottom(1)
17939           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc2);
17940       }
17941     }
17942   }
17943 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
17944 
17945 
17946 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_eq_4)17947   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_eq_4) {
17948     DWConv2DMicrokernelTester()
17949       .input_width(4)
17950       .input_height(1)
17951       .kernel_height(3)
17952       .kernel_width(3)
17953       .subsampling(1)
17954       .padding_left(1)
17955       .padding_right(1)
17956       .padding_top(1)
17957       .padding_bottom(1)
17958       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc3);
17959   }
17960 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_div_4)17961   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_div_4) {
17962     for (size_t input_width = 8; input_width < 32; input_width += 4) {
17963       DWConv2DMicrokernelTester()
17964         .input_width(input_width)
17965         .input_height(1)
17966         .kernel_height(3)
17967         .kernel_width(3)
17968         .subsampling(1)
17969         .padding_left(1)
17970         .padding_right(1)
17971         .padding_top(1)
17972         .padding_bottom(1)
17973         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc3);
17974     }
17975   }
17976 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_lt_4)17977   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_lt_4) {
17978     for (size_t input_width = 1; input_width < 4; input_width++) {
17979       DWConv2DMicrokernelTester()
17980         .input_width(4)
17981         .input_height(1)
17982         .kernel_height(3)
17983         .kernel_width(3)
17984         .subsampling(1)
17985         .padding_left(1)
17986         .padding_right(1)
17987         .padding_top(1)
17988         .padding_bottom(1)
17989         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc3);
17990     }
17991   }
17992 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_gt_4)17993   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_gt_4) {
17994     for (size_t input_width = 5; input_width < 9; input_width++) {
17995       DWConv2DMicrokernelTester()
17996         .input_width(input_width)
17997         .input_height(1)
17998         .kernel_height(3)
17999         .kernel_width(3)
18000         .subsampling(1)
18001         .padding_left(1)
18002         .padding_right(1)
18003         .padding_top(1)
18004         .padding_bottom(1)
18005         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc3);
18006     }
18007   }
18008 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_height_gt_1)18009   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_height_gt_1) {
18010     for (size_t input_height = 2; input_height < 3; input_height++) {
18011       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18012         DWConv2DMicrokernelTester()
18013           .input_width(input_width)
18014           .input_height(input_height)
18015           .kernel_height(3)
18016           .kernel_width(3)
18017           .subsampling(1)
18018           .padding_left(1)
18019           .padding_right(1)
18020           .padding_top(1)
18021           .padding_bottom(1)
18022           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc3);
18023       }
18024     }
18025   }
18026 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
18027 
18028 
18029 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_eq_4)18030   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_eq_4) {
18031     DWConv2DMicrokernelTester()
18032       .input_width(4)
18033       .input_height(1)
18034       .kernel_height(3)
18035       .kernel_width(3)
18036       .subsampling(1)
18037       .padding_left(1)
18038       .padding_right(1)
18039       .padding_top(1)
18040       .padding_bottom(1)
18041       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc4);
18042   }
18043 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_div_4)18044   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_div_4) {
18045     for (size_t input_width = 8; input_width < 32; input_width += 4) {
18046       DWConv2DMicrokernelTester()
18047         .input_width(input_width)
18048         .input_height(1)
18049         .kernel_height(3)
18050         .kernel_width(3)
18051         .subsampling(1)
18052         .padding_left(1)
18053         .padding_right(1)
18054         .padding_top(1)
18055         .padding_bottom(1)
18056         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc4);
18057     }
18058   }
18059 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_lt_4)18060   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_lt_4) {
18061     for (size_t input_width = 1; input_width < 4; input_width++) {
18062       DWConv2DMicrokernelTester()
18063         .input_width(4)
18064         .input_height(1)
18065         .kernel_height(3)
18066         .kernel_width(3)
18067         .subsampling(1)
18068         .padding_left(1)
18069         .padding_right(1)
18070         .padding_top(1)
18071         .padding_bottom(1)
18072         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc4);
18073     }
18074   }
18075 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_gt_4)18076   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_gt_4) {
18077     for (size_t input_width = 5; input_width < 9; input_width++) {
18078       DWConv2DMicrokernelTester()
18079         .input_width(input_width)
18080         .input_height(1)
18081         .kernel_height(3)
18082         .kernel_width(3)
18083         .subsampling(1)
18084         .padding_left(1)
18085         .padding_right(1)
18086         .padding_top(1)
18087         .padding_bottom(1)
18088         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc4);
18089     }
18090   }
18091 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_height_gt_1)18092   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_height_gt_1) {
18093     for (size_t input_height = 2; input_height < 3; input_height++) {
18094       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18095         DWConv2DMicrokernelTester()
18096           .input_width(input_width)
18097           .input_height(input_height)
18098           .kernel_height(3)
18099           .kernel_width(3)
18100           .subsampling(1)
18101           .padding_left(1)
18102           .padding_right(1)
18103           .padding_top(1)
18104           .padding_bottom(1)
18105           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_1x4_acc4);
18106       }
18107     }
18108   }
18109 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
18110 
18111 
18112 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4,output_width_eq_4)18113   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4, output_width_eq_4) {
18114     DWConv2DMicrokernelTester()
18115       .input_width(4)
18116       .input_height(2)
18117       .kernel_height(3)
18118       .kernel_width(3)
18119       .subsampling(1)
18120       .padding_left(1)
18121       .padding_right(1)
18122       .padding_top(1)
18123       .padding_bottom(1)
18124       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4);
18125   }
18126 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4,output_width_div_4)18127   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4, output_width_div_4) {
18128     for (size_t input_width = 8; input_width < 32; input_width += 4) {
18129       DWConv2DMicrokernelTester()
18130         .input_width(input_width)
18131         .input_height(2)
18132         .kernel_height(3)
18133         .kernel_width(3)
18134         .subsampling(1)
18135         .padding_left(1)
18136         .padding_right(1)
18137         .padding_top(1)
18138         .padding_bottom(1)
18139         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4);
18140     }
18141   }
18142 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4,output_width_lt_4)18143   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4, output_width_lt_4) {
18144     for (size_t input_width = 1; input_width < 4; input_width++) {
18145       DWConv2DMicrokernelTester()
18146         .input_width(4)
18147         .input_height(2)
18148         .kernel_height(3)
18149         .kernel_width(3)
18150         .subsampling(1)
18151         .padding_left(1)
18152         .padding_right(1)
18153         .padding_top(1)
18154         .padding_bottom(1)
18155         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4);
18156     }
18157   }
18158 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4,output_width_gt_4)18159   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4, output_width_gt_4) {
18160     for (size_t input_width = 5; input_width < 9; input_width++) {
18161       DWConv2DMicrokernelTester()
18162         .input_width(input_width)
18163         .input_height(2)
18164         .kernel_height(3)
18165         .kernel_width(3)
18166         .subsampling(1)
18167         .padding_left(1)
18168         .padding_right(1)
18169         .padding_top(1)
18170         .padding_bottom(1)
18171         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4);
18172     }
18173   }
18174 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4,output_height_div_2)18175   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4, output_height_div_2) {
18176     for (size_t input_height = 4; input_height < 16; input_height += 2) {
18177       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18178         DWConv2DMicrokernelTester()
18179           .input_width(input_width)
18180           .input_height(input_height)
18181           .kernel_height(3)
18182           .kernel_width(3)
18183           .subsampling(1)
18184           .padding_left(1)
18185           .padding_right(1)
18186           .padding_top(1)
18187           .padding_bottom(1)
18188           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4);
18189       }
18190     }
18191   }
18192 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4,output_height_lt_2)18193   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4, output_height_lt_2) {
18194     for (size_t input_height = 1; input_height < 2; input_height++) {
18195       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18196         DWConv2DMicrokernelTester()
18197           .input_width(input_width)
18198           .input_height(input_height)
18199           .kernel_height(3)
18200           .kernel_width(3)
18201           .subsampling(1)
18202           .padding_left(1)
18203           .padding_right(1)
18204           .padding_top(1)
18205           .padding_bottom(1)
18206           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4);
18207       }
18208     }
18209   }
18210 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4,output_height_gt_2)18211   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4, output_height_gt_2) {
18212     for (size_t input_height = 3; input_height < 5; input_height++) {
18213       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18214         DWConv2DMicrokernelTester()
18215           .input_width(input_width)
18216           .input_height(input_height)
18217           .kernel_height(3)
18218           .kernel_width(3)
18219           .subsampling(1)
18220           .padding_left(1)
18221           .padding_right(1)
18222           .padding_top(1)
18223           .padding_bottom(1)
18224           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4);
18225       }
18226     }
18227   }
18228 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
18229 
18230 
18231 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_eq_4)18232   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_eq_4) {
18233     DWConv2DMicrokernelTester()
18234       .input_width(4)
18235       .input_height(2)
18236       .kernel_height(3)
18237       .kernel_width(3)
18238       .subsampling(1)
18239       .padding_left(1)
18240       .padding_right(1)
18241       .padding_top(1)
18242       .padding_bottom(1)
18243       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4_acc2);
18244   }
18245 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_div_4)18246   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_div_4) {
18247     for (size_t input_width = 8; input_width < 32; input_width += 4) {
18248       DWConv2DMicrokernelTester()
18249         .input_width(input_width)
18250         .input_height(2)
18251         .kernel_height(3)
18252         .kernel_width(3)
18253         .subsampling(1)
18254         .padding_left(1)
18255         .padding_right(1)
18256         .padding_top(1)
18257         .padding_bottom(1)
18258         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4_acc2);
18259     }
18260   }
18261 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_lt_4)18262   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_lt_4) {
18263     for (size_t input_width = 1; input_width < 4; input_width++) {
18264       DWConv2DMicrokernelTester()
18265         .input_width(4)
18266         .input_height(2)
18267         .kernel_height(3)
18268         .kernel_width(3)
18269         .subsampling(1)
18270         .padding_left(1)
18271         .padding_right(1)
18272         .padding_top(1)
18273         .padding_bottom(1)
18274         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4_acc2);
18275     }
18276   }
18277 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_gt_4)18278   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_gt_4) {
18279     for (size_t input_width = 5; input_width < 9; input_width++) {
18280       DWConv2DMicrokernelTester()
18281         .input_width(input_width)
18282         .input_height(2)
18283         .kernel_height(3)
18284         .kernel_width(3)
18285         .subsampling(1)
18286         .padding_left(1)
18287         .padding_right(1)
18288         .padding_top(1)
18289         .padding_bottom(1)
18290         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4_acc2);
18291     }
18292   }
18293 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_div_2)18294   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_div_2) {
18295     for (size_t input_height = 4; input_height < 16; input_height += 2) {
18296       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18297         DWConv2DMicrokernelTester()
18298           .input_width(input_width)
18299           .input_height(input_height)
18300           .kernel_height(3)
18301           .kernel_width(3)
18302           .subsampling(1)
18303           .padding_left(1)
18304           .padding_right(1)
18305           .padding_top(1)
18306           .padding_bottom(1)
18307           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4_acc2);
18308       }
18309     }
18310   }
18311 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_lt_2)18312   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_lt_2) {
18313     for (size_t input_height = 1; input_height < 2; input_height++) {
18314       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18315         DWConv2DMicrokernelTester()
18316           .input_width(input_width)
18317           .input_height(input_height)
18318           .kernel_height(3)
18319           .kernel_width(3)
18320           .subsampling(1)
18321           .padding_left(1)
18322           .padding_right(1)
18323           .padding_top(1)
18324           .padding_bottom(1)
18325           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4_acc2);
18326       }
18327     }
18328   }
18329 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_gt_2)18330   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_gt_2) {
18331     for (size_t input_height = 3; input_height < 5; input_height++) {
18332       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18333         DWConv2DMicrokernelTester()
18334           .input_width(input_width)
18335           .input_height(input_height)
18336           .kernel_height(3)
18337           .kernel_width(3)
18338           .subsampling(1)
18339           .padding_left(1)
18340           .padding_right(1)
18341           .padding_top(1)
18342           .padding_bottom(1)
18343           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_2x4_acc2);
18344       }
18345     }
18346   }
18347 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
18348 
18349 
18350 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4,output_width_eq_4)18351   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4, output_width_eq_4) {
18352     DWConv2DMicrokernelTester()
18353       .input_width(4)
18354       .input_height(3)
18355       .kernel_height(3)
18356       .kernel_width(3)
18357       .subsampling(1)
18358       .padding_left(1)
18359       .padding_right(1)
18360       .padding_top(1)
18361       .padding_bottom(1)
18362       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_3x4);
18363   }
18364 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4,output_width_div_4)18365   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4, output_width_div_4) {
18366     for (size_t input_width = 8; input_width < 32; input_width += 4) {
18367       DWConv2DMicrokernelTester()
18368         .input_width(input_width)
18369         .input_height(3)
18370         .kernel_height(3)
18371         .kernel_width(3)
18372         .subsampling(1)
18373         .padding_left(1)
18374         .padding_right(1)
18375         .padding_top(1)
18376         .padding_bottom(1)
18377         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_3x4);
18378     }
18379   }
18380 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4,output_width_lt_4)18381   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4, output_width_lt_4) {
18382     for (size_t input_width = 1; input_width < 4; input_width++) {
18383       DWConv2DMicrokernelTester()
18384         .input_width(4)
18385         .input_height(3)
18386         .kernel_height(3)
18387         .kernel_width(3)
18388         .subsampling(1)
18389         .padding_left(1)
18390         .padding_right(1)
18391         .padding_top(1)
18392         .padding_bottom(1)
18393         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_3x4);
18394     }
18395   }
18396 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4,output_width_gt_4)18397   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4, output_width_gt_4) {
18398     for (size_t input_width = 5; input_width < 9; input_width++) {
18399       DWConv2DMicrokernelTester()
18400         .input_width(input_width)
18401         .input_height(3)
18402         .kernel_height(3)
18403         .kernel_width(3)
18404         .subsampling(1)
18405         .padding_left(1)
18406         .padding_right(1)
18407         .padding_top(1)
18408         .padding_bottom(1)
18409         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_3x4);
18410     }
18411   }
18412 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4,output_height_div_3)18413   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4, output_height_div_3) {
18414     for (size_t input_height = 6; input_height < 24; input_height += 3) {
18415       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18416         DWConv2DMicrokernelTester()
18417           .input_width(input_width)
18418           .input_height(input_height)
18419           .kernel_height(3)
18420           .kernel_width(3)
18421           .subsampling(1)
18422           .padding_left(1)
18423           .padding_right(1)
18424           .padding_top(1)
18425           .padding_bottom(1)
18426           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_3x4);
18427       }
18428     }
18429   }
18430 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4,output_height_lt_3)18431   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4, output_height_lt_3) {
18432     for (size_t input_height = 1; input_height < 3; input_height++) {
18433       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18434         DWConv2DMicrokernelTester()
18435           .input_width(input_width)
18436           .input_height(input_height)
18437           .kernel_height(3)
18438           .kernel_width(3)
18439           .subsampling(1)
18440           .padding_left(1)
18441           .padding_right(1)
18442           .padding_top(1)
18443           .padding_bottom(1)
18444           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_3x4);
18445       }
18446     }
18447   }
18448 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4,output_height_gt_3)18449   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_3X4, output_height_gt_3) {
18450     for (size_t input_height = 4; input_height < 7; input_height++) {
18451       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18452         DWConv2DMicrokernelTester()
18453           .input_width(input_width)
18454           .input_height(input_height)
18455           .kernel_height(3)
18456           .kernel_width(3)
18457           .subsampling(1)
18458           .padding_left(1)
18459           .padding_right(1)
18460           .padding_top(1)
18461           .padding_bottom(1)
18462           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_3x4);
18463       }
18464     }
18465   }
18466 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
18467 
18468 
18469 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4,output_width_eq_4)18470   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4, output_width_eq_4) {
18471     DWConv2DMicrokernelTester()
18472       .input_width(4)
18473       .input_height(4)
18474       .kernel_height(3)
18475       .kernel_width(3)
18476       .subsampling(1)
18477       .padding_left(1)
18478       .padding_right(1)
18479       .padding_top(1)
18480       .padding_bottom(1)
18481       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_4x4);
18482   }
18483 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4,output_width_div_4)18484   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4, output_width_div_4) {
18485     for (size_t input_width = 8; input_width < 32; input_width += 4) {
18486       DWConv2DMicrokernelTester()
18487         .input_width(input_width)
18488         .input_height(4)
18489         .kernel_height(3)
18490         .kernel_width(3)
18491         .subsampling(1)
18492         .padding_left(1)
18493         .padding_right(1)
18494         .padding_top(1)
18495         .padding_bottom(1)
18496         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_4x4);
18497     }
18498   }
18499 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4,output_width_lt_4)18500   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4, output_width_lt_4) {
18501     for (size_t input_width = 1; input_width < 4; input_width++) {
18502       DWConv2DMicrokernelTester()
18503         .input_width(4)
18504         .input_height(4)
18505         .kernel_height(3)
18506         .kernel_width(3)
18507         .subsampling(1)
18508         .padding_left(1)
18509         .padding_right(1)
18510         .padding_top(1)
18511         .padding_bottom(1)
18512         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_4x4);
18513     }
18514   }
18515 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4,output_width_gt_4)18516   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4, output_width_gt_4) {
18517     for (size_t input_width = 5; input_width < 9; input_width++) {
18518       DWConv2DMicrokernelTester()
18519         .input_width(input_width)
18520         .input_height(4)
18521         .kernel_height(3)
18522         .kernel_width(3)
18523         .subsampling(1)
18524         .padding_left(1)
18525         .padding_right(1)
18526         .padding_top(1)
18527         .padding_bottom(1)
18528         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_4x4);
18529     }
18530   }
18531 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4,output_height_div_4)18532   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4, output_height_div_4) {
18533     for (size_t input_height = 8; input_height < 32; input_height += 4) {
18534       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18535         DWConv2DMicrokernelTester()
18536           .input_width(input_width)
18537           .input_height(input_height)
18538           .kernel_height(3)
18539           .kernel_width(3)
18540           .subsampling(1)
18541           .padding_left(1)
18542           .padding_right(1)
18543           .padding_top(1)
18544           .padding_bottom(1)
18545           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_4x4);
18546       }
18547     }
18548   }
18549 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4,output_height_lt_4)18550   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4, output_height_lt_4) {
18551     for (size_t input_height = 1; input_height < 4; input_height++) {
18552       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18553         DWConv2DMicrokernelTester()
18554           .input_width(input_width)
18555           .input_height(input_height)
18556           .kernel_height(3)
18557           .kernel_width(3)
18558           .subsampling(1)
18559           .padding_left(1)
18560           .padding_right(1)
18561           .padding_top(1)
18562           .padding_bottom(1)
18563           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_4x4);
18564       }
18565     }
18566   }
18567 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4,output_height_gt_4)18568   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_4X4, output_height_gt_4) {
18569     for (size_t input_height = 5; input_height < 9; input_height++) {
18570       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18571         DWConv2DMicrokernelTester()
18572           .input_width(input_width)
18573           .input_height(input_height)
18574           .kernel_height(3)
18575           .kernel_width(3)
18576           .subsampling(1)
18577           .padding_left(1)
18578           .padding_right(1)
18579           .padding_top(1)
18580           .padding_bottom(1)
18581           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_4x4);
18582       }
18583     }
18584   }
18585 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
18586 
18587 
18588 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4,output_width_eq_4)18589   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4, output_width_eq_4) {
18590     DWConv2DMicrokernelTester()
18591       .input_width(4)
18592       .input_height(5)
18593       .kernel_height(3)
18594       .kernel_width(3)
18595       .subsampling(1)
18596       .padding_left(1)
18597       .padding_right(1)
18598       .padding_top(1)
18599       .padding_bottom(1)
18600       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_5x4);
18601   }
18602 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4,output_width_div_4)18603   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4, output_width_div_4) {
18604     for (size_t input_width = 8; input_width < 32; input_width += 4) {
18605       DWConv2DMicrokernelTester()
18606         .input_width(input_width)
18607         .input_height(5)
18608         .kernel_height(3)
18609         .kernel_width(3)
18610         .subsampling(1)
18611         .padding_left(1)
18612         .padding_right(1)
18613         .padding_top(1)
18614         .padding_bottom(1)
18615         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_5x4);
18616     }
18617   }
18618 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4,output_width_lt_4)18619   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4, output_width_lt_4) {
18620     for (size_t input_width = 1; input_width < 4; input_width++) {
18621       DWConv2DMicrokernelTester()
18622         .input_width(4)
18623         .input_height(5)
18624         .kernel_height(3)
18625         .kernel_width(3)
18626         .subsampling(1)
18627         .padding_left(1)
18628         .padding_right(1)
18629         .padding_top(1)
18630         .padding_bottom(1)
18631         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_5x4);
18632     }
18633   }
18634 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4,output_width_gt_4)18635   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4, output_width_gt_4) {
18636     for (size_t input_width = 5; input_width < 9; input_width++) {
18637       DWConv2DMicrokernelTester()
18638         .input_width(input_width)
18639         .input_height(5)
18640         .kernel_height(3)
18641         .kernel_width(3)
18642         .subsampling(1)
18643         .padding_left(1)
18644         .padding_right(1)
18645         .padding_top(1)
18646         .padding_bottom(1)
18647         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_5x4);
18648     }
18649   }
18650 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4,output_height_div_5)18651   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4, output_height_div_5) {
18652     for (size_t input_height = 10; input_height < 40; input_height += 5) {
18653       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18654         DWConv2DMicrokernelTester()
18655           .input_width(input_width)
18656           .input_height(input_height)
18657           .kernel_height(3)
18658           .kernel_width(3)
18659           .subsampling(1)
18660           .padding_left(1)
18661           .padding_right(1)
18662           .padding_top(1)
18663           .padding_bottom(1)
18664           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_5x4);
18665       }
18666     }
18667   }
18668 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4,output_height_lt_5)18669   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4, output_height_lt_5) {
18670     for (size_t input_height = 1; input_height < 5; input_height++) {
18671       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18672         DWConv2DMicrokernelTester()
18673           .input_width(input_width)
18674           .input_height(input_height)
18675           .kernel_height(3)
18676           .kernel_width(3)
18677           .subsampling(1)
18678           .padding_left(1)
18679           .padding_right(1)
18680           .padding_top(1)
18681           .padding_bottom(1)
18682           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_5x4);
18683       }
18684     }
18685   }
18686 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4,output_height_gt_5)18687   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_5X4, output_height_gt_5) {
18688     for (size_t input_height = 6; input_height < 11; input_height++) {
18689       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18690         DWConv2DMicrokernelTester()
18691           .input_width(input_width)
18692           .input_height(input_height)
18693           .kernel_height(3)
18694           .kernel_width(3)
18695           .subsampling(1)
18696           .padding_left(1)
18697           .padding_right(1)
18698           .padding_top(1)
18699           .padding_bottom(1)
18700           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_5x4);
18701       }
18702     }
18703   }
18704 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
18705 
18706 
18707 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4,output_width_eq_4)18708   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4, output_width_eq_4) {
18709     DWConv2DMicrokernelTester()
18710       .input_width(4)
18711       .input_height(6)
18712       .kernel_height(3)
18713       .kernel_width(3)
18714       .subsampling(1)
18715       .padding_left(1)
18716       .padding_right(1)
18717       .padding_top(1)
18718       .padding_bottom(1)
18719       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_6x4);
18720   }
18721 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4,output_width_div_4)18722   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4, output_width_div_4) {
18723     for (size_t input_width = 8; input_width < 32; input_width += 4) {
18724       DWConv2DMicrokernelTester()
18725         .input_width(input_width)
18726         .input_height(6)
18727         .kernel_height(3)
18728         .kernel_width(3)
18729         .subsampling(1)
18730         .padding_left(1)
18731         .padding_right(1)
18732         .padding_top(1)
18733         .padding_bottom(1)
18734         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_6x4);
18735     }
18736   }
18737 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4,output_width_lt_4)18738   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4, output_width_lt_4) {
18739     for (size_t input_width = 1; input_width < 4; input_width++) {
18740       DWConv2DMicrokernelTester()
18741         .input_width(4)
18742         .input_height(6)
18743         .kernel_height(3)
18744         .kernel_width(3)
18745         .subsampling(1)
18746         .padding_left(1)
18747         .padding_right(1)
18748         .padding_top(1)
18749         .padding_bottom(1)
18750         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_6x4);
18751     }
18752   }
18753 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4,output_width_gt_4)18754   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4, output_width_gt_4) {
18755     for (size_t input_width = 5; input_width < 9; input_width++) {
18756       DWConv2DMicrokernelTester()
18757         .input_width(input_width)
18758         .input_height(6)
18759         .kernel_height(3)
18760         .kernel_width(3)
18761         .subsampling(1)
18762         .padding_left(1)
18763         .padding_right(1)
18764         .padding_top(1)
18765         .padding_bottom(1)
18766         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_6x4);
18767     }
18768   }
18769 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4,output_height_div_6)18770   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4, output_height_div_6) {
18771     for (size_t input_height = 12; input_height < 48; input_height += 6) {
18772       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18773         DWConv2DMicrokernelTester()
18774           .input_width(input_width)
18775           .input_height(input_height)
18776           .kernel_height(3)
18777           .kernel_width(3)
18778           .subsampling(1)
18779           .padding_left(1)
18780           .padding_right(1)
18781           .padding_top(1)
18782           .padding_bottom(1)
18783           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_6x4);
18784       }
18785     }
18786   }
18787 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4,output_height_lt_6)18788   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4, output_height_lt_6) {
18789     for (size_t input_height = 1; input_height < 6; input_height++) {
18790       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18791         DWConv2DMicrokernelTester()
18792           .input_width(input_width)
18793           .input_height(input_height)
18794           .kernel_height(3)
18795           .kernel_width(3)
18796           .subsampling(1)
18797           .padding_left(1)
18798           .padding_right(1)
18799           .padding_top(1)
18800           .padding_bottom(1)
18801           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_6x4);
18802       }
18803     }
18804   }
18805 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4,output_height_gt_6)18806   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_ARM_SPLAT_6X4, output_height_gt_6) {
18807     for (size_t input_height = 7; input_height < 13; input_height++) {
18808       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18809         DWConv2DMicrokernelTester()
18810           .input_width(input_width)
18811           .input_height(input_height)
18812           .kernel_height(3)
18813           .kernel_width(3)
18814           .subsampling(1)
18815           .padding_left(1)
18816           .padding_right(1)
18817           .padding_top(1)
18818           .padding_bottom(1)
18819           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_arm_splat_6x4);
18820       }
18821     }
18822   }
18823 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
18824 
18825 
18826 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4,output_width_eq_4)18827   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4, output_width_eq_4) {
18828     DWConv2DMicrokernelTester()
18829       .input_width(4)
18830       .input_height(1)
18831       .kernel_height(3)
18832       .kernel_width(3)
18833       .subsampling(1)
18834       .padding_left(1)
18835       .padding_right(1)
18836       .padding_top(1)
18837       .padding_bottom(1)
18838       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4);
18839   }
18840 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4,output_width_div_4)18841   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4, output_width_div_4) {
18842     for (size_t input_width = 8; input_width < 32; input_width += 4) {
18843       DWConv2DMicrokernelTester()
18844         .input_width(input_width)
18845         .input_height(1)
18846         .kernel_height(3)
18847         .kernel_width(3)
18848         .subsampling(1)
18849         .padding_left(1)
18850         .padding_right(1)
18851         .padding_top(1)
18852         .padding_bottom(1)
18853         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4);
18854     }
18855   }
18856 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4,output_width_lt_4)18857   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4, output_width_lt_4) {
18858     for (size_t input_width = 1; input_width < 4; input_width++) {
18859       DWConv2DMicrokernelTester()
18860         .input_width(4)
18861         .input_height(1)
18862         .kernel_height(3)
18863         .kernel_width(3)
18864         .subsampling(1)
18865         .padding_left(1)
18866         .padding_right(1)
18867         .padding_top(1)
18868         .padding_bottom(1)
18869         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4);
18870     }
18871   }
18872 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4,output_width_gt_4)18873   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4, output_width_gt_4) {
18874     for (size_t input_width = 5; input_width < 9; input_width++) {
18875       DWConv2DMicrokernelTester()
18876         .input_width(input_width)
18877         .input_height(1)
18878         .kernel_height(3)
18879         .kernel_width(3)
18880         .subsampling(1)
18881         .padding_left(1)
18882         .padding_right(1)
18883         .padding_top(1)
18884         .padding_bottom(1)
18885         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4);
18886     }
18887   }
18888 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4,output_height_gt_1)18889   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4, output_height_gt_1) {
18890     for (size_t input_height = 2; input_height < 3; input_height++) {
18891       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18892         DWConv2DMicrokernelTester()
18893           .input_width(input_width)
18894           .input_height(input_height)
18895           .kernel_height(3)
18896           .kernel_width(3)
18897           .subsampling(1)
18898           .padding_left(1)
18899           .padding_right(1)
18900           .padding_top(1)
18901           .padding_bottom(1)
18902           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4);
18903       }
18904     }
18905   }
18906 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
18907 
18908 
18909 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_eq_4)18910   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_eq_4) {
18911     DWConv2DMicrokernelTester()
18912       .input_width(4)
18913       .input_height(1)
18914       .kernel_height(3)
18915       .kernel_width(3)
18916       .subsampling(1)
18917       .padding_left(1)
18918       .padding_right(1)
18919       .padding_top(1)
18920       .padding_bottom(1)
18921       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc2);
18922   }
18923 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_div_4)18924   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_div_4) {
18925     for (size_t input_width = 8; input_width < 32; input_width += 4) {
18926       DWConv2DMicrokernelTester()
18927         .input_width(input_width)
18928         .input_height(1)
18929         .kernel_height(3)
18930         .kernel_width(3)
18931         .subsampling(1)
18932         .padding_left(1)
18933         .padding_right(1)
18934         .padding_top(1)
18935         .padding_bottom(1)
18936         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc2);
18937     }
18938   }
18939 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_lt_4)18940   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_lt_4) {
18941     for (size_t input_width = 1; input_width < 4; input_width++) {
18942       DWConv2DMicrokernelTester()
18943         .input_width(4)
18944         .input_height(1)
18945         .kernel_height(3)
18946         .kernel_width(3)
18947         .subsampling(1)
18948         .padding_left(1)
18949         .padding_right(1)
18950         .padding_top(1)
18951         .padding_bottom(1)
18952         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc2);
18953     }
18954   }
18955 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_gt_4)18956   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_gt_4) {
18957     for (size_t input_width = 5; input_width < 9; input_width++) {
18958       DWConv2DMicrokernelTester()
18959         .input_width(input_width)
18960         .input_height(1)
18961         .kernel_height(3)
18962         .kernel_width(3)
18963         .subsampling(1)
18964         .padding_left(1)
18965         .padding_right(1)
18966         .padding_top(1)
18967         .padding_bottom(1)
18968         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc2);
18969     }
18970   }
18971 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_height_gt_1)18972   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_height_gt_1) {
18973     for (size_t input_height = 2; input_height < 3; input_height++) {
18974       for (size_t input_width = 1; input_width < 21; input_width += 3) {
18975         DWConv2DMicrokernelTester()
18976           .input_width(input_width)
18977           .input_height(input_height)
18978           .kernel_height(3)
18979           .kernel_width(3)
18980           .subsampling(1)
18981           .padding_left(1)
18982           .padding_right(1)
18983           .padding_top(1)
18984           .padding_bottom(1)
18985           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc2);
18986       }
18987     }
18988   }
18989 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
18990 
18991 
18992 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_eq_4)18993   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_eq_4) {
18994     DWConv2DMicrokernelTester()
18995       .input_width(4)
18996       .input_height(1)
18997       .kernel_height(3)
18998       .kernel_width(3)
18999       .subsampling(1)
19000       .padding_left(1)
19001       .padding_right(1)
19002       .padding_top(1)
19003       .padding_bottom(1)
19004       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc3);
19005   }
19006 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_div_4)19007   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_div_4) {
19008     for (size_t input_width = 8; input_width < 32; input_width += 4) {
19009       DWConv2DMicrokernelTester()
19010         .input_width(input_width)
19011         .input_height(1)
19012         .kernel_height(3)
19013         .kernel_width(3)
19014         .subsampling(1)
19015         .padding_left(1)
19016         .padding_right(1)
19017         .padding_top(1)
19018         .padding_bottom(1)
19019         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc3);
19020     }
19021   }
19022 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_lt_4)19023   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_lt_4) {
19024     for (size_t input_width = 1; input_width < 4; input_width++) {
19025       DWConv2DMicrokernelTester()
19026         .input_width(4)
19027         .input_height(1)
19028         .kernel_height(3)
19029         .kernel_width(3)
19030         .subsampling(1)
19031         .padding_left(1)
19032         .padding_right(1)
19033         .padding_top(1)
19034         .padding_bottom(1)
19035         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc3);
19036     }
19037   }
19038 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_gt_4)19039   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_gt_4) {
19040     for (size_t input_width = 5; input_width < 9; input_width++) {
19041       DWConv2DMicrokernelTester()
19042         .input_width(input_width)
19043         .input_height(1)
19044         .kernel_height(3)
19045         .kernel_width(3)
19046         .subsampling(1)
19047         .padding_left(1)
19048         .padding_right(1)
19049         .padding_top(1)
19050         .padding_bottom(1)
19051         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc3);
19052     }
19053   }
19054 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_height_gt_1)19055   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_height_gt_1) {
19056     for (size_t input_height = 2; input_height < 3; input_height++) {
19057       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19058         DWConv2DMicrokernelTester()
19059           .input_width(input_width)
19060           .input_height(input_height)
19061           .kernel_height(3)
19062           .kernel_width(3)
19063           .subsampling(1)
19064           .padding_left(1)
19065           .padding_right(1)
19066           .padding_top(1)
19067           .padding_bottom(1)
19068           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc3);
19069       }
19070     }
19071   }
19072 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
19073 
19074 
19075 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_eq_4)19076   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_eq_4) {
19077     DWConv2DMicrokernelTester()
19078       .input_width(4)
19079       .input_height(1)
19080       .kernel_height(3)
19081       .kernel_width(3)
19082       .subsampling(1)
19083       .padding_left(1)
19084       .padding_right(1)
19085       .padding_top(1)
19086       .padding_bottom(1)
19087       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc4);
19088   }
19089 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_div_4)19090   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_div_4) {
19091     for (size_t input_width = 8; input_width < 32; input_width += 4) {
19092       DWConv2DMicrokernelTester()
19093         .input_width(input_width)
19094         .input_height(1)
19095         .kernel_height(3)
19096         .kernel_width(3)
19097         .subsampling(1)
19098         .padding_left(1)
19099         .padding_right(1)
19100         .padding_top(1)
19101         .padding_bottom(1)
19102         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc4);
19103     }
19104   }
19105 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_lt_4)19106   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_lt_4) {
19107     for (size_t input_width = 1; input_width < 4; input_width++) {
19108       DWConv2DMicrokernelTester()
19109         .input_width(4)
19110         .input_height(1)
19111         .kernel_height(3)
19112         .kernel_width(3)
19113         .subsampling(1)
19114         .padding_left(1)
19115         .padding_right(1)
19116         .padding_top(1)
19117         .padding_bottom(1)
19118         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc4);
19119     }
19120   }
19121 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_gt_4)19122   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_gt_4) {
19123     for (size_t input_width = 5; input_width < 9; input_width++) {
19124       DWConv2DMicrokernelTester()
19125         .input_width(input_width)
19126         .input_height(1)
19127         .kernel_height(3)
19128         .kernel_width(3)
19129         .subsampling(1)
19130         .padding_left(1)
19131         .padding_right(1)
19132         .padding_top(1)
19133         .padding_bottom(1)
19134         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc4);
19135     }
19136   }
19137 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_height_gt_1)19138   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_height_gt_1) {
19139     for (size_t input_height = 2; input_height < 3; input_height++) {
19140       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19141         DWConv2DMicrokernelTester()
19142           .input_width(input_width)
19143           .input_height(input_height)
19144           .kernel_height(3)
19145           .kernel_width(3)
19146           .subsampling(1)
19147           .padding_left(1)
19148           .padding_right(1)
19149           .padding_top(1)
19150           .padding_bottom(1)
19151           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_1x4_acc4);
19152       }
19153     }
19154   }
19155 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
19156 
19157 
19158 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4,output_width_eq_4)19159   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4, output_width_eq_4) {
19160     DWConv2DMicrokernelTester()
19161       .input_width(4)
19162       .input_height(2)
19163       .kernel_height(3)
19164       .kernel_width(3)
19165       .subsampling(1)
19166       .padding_left(1)
19167       .padding_right(1)
19168       .padding_top(1)
19169       .padding_bottom(1)
19170       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4);
19171   }
19172 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4,output_width_div_4)19173   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4, output_width_div_4) {
19174     for (size_t input_width = 8; input_width < 32; input_width += 4) {
19175       DWConv2DMicrokernelTester()
19176         .input_width(input_width)
19177         .input_height(2)
19178         .kernel_height(3)
19179         .kernel_width(3)
19180         .subsampling(1)
19181         .padding_left(1)
19182         .padding_right(1)
19183         .padding_top(1)
19184         .padding_bottom(1)
19185         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4);
19186     }
19187   }
19188 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4,output_width_lt_4)19189   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4, output_width_lt_4) {
19190     for (size_t input_width = 1; input_width < 4; input_width++) {
19191       DWConv2DMicrokernelTester()
19192         .input_width(4)
19193         .input_height(2)
19194         .kernel_height(3)
19195         .kernel_width(3)
19196         .subsampling(1)
19197         .padding_left(1)
19198         .padding_right(1)
19199         .padding_top(1)
19200         .padding_bottom(1)
19201         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4);
19202     }
19203   }
19204 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4,output_width_gt_4)19205   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4, output_width_gt_4) {
19206     for (size_t input_width = 5; input_width < 9; input_width++) {
19207       DWConv2DMicrokernelTester()
19208         .input_width(input_width)
19209         .input_height(2)
19210         .kernel_height(3)
19211         .kernel_width(3)
19212         .subsampling(1)
19213         .padding_left(1)
19214         .padding_right(1)
19215         .padding_top(1)
19216         .padding_bottom(1)
19217         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4);
19218     }
19219   }
19220 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4,output_height_div_2)19221   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4, output_height_div_2) {
19222     for (size_t input_height = 4; input_height < 16; input_height += 2) {
19223       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19224         DWConv2DMicrokernelTester()
19225           .input_width(input_width)
19226           .input_height(input_height)
19227           .kernel_height(3)
19228           .kernel_width(3)
19229           .subsampling(1)
19230           .padding_left(1)
19231           .padding_right(1)
19232           .padding_top(1)
19233           .padding_bottom(1)
19234           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4);
19235       }
19236     }
19237   }
19238 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4,output_height_lt_2)19239   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4, output_height_lt_2) {
19240     for (size_t input_height = 1; input_height < 2; input_height++) {
19241       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19242         DWConv2DMicrokernelTester()
19243           .input_width(input_width)
19244           .input_height(input_height)
19245           .kernel_height(3)
19246           .kernel_width(3)
19247           .subsampling(1)
19248           .padding_left(1)
19249           .padding_right(1)
19250           .padding_top(1)
19251           .padding_bottom(1)
19252           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4);
19253       }
19254     }
19255   }
19256 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4,output_height_gt_2)19257   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4, output_height_gt_2) {
19258     for (size_t input_height = 3; input_height < 5; input_height++) {
19259       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19260         DWConv2DMicrokernelTester()
19261           .input_width(input_width)
19262           .input_height(input_height)
19263           .kernel_height(3)
19264           .kernel_width(3)
19265           .subsampling(1)
19266           .padding_left(1)
19267           .padding_right(1)
19268           .padding_top(1)
19269           .padding_bottom(1)
19270           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4);
19271       }
19272     }
19273   }
19274 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
19275 
19276 
19277 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_eq_4)19278   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_eq_4) {
19279     DWConv2DMicrokernelTester()
19280       .input_width(4)
19281       .input_height(2)
19282       .kernel_height(3)
19283       .kernel_width(3)
19284       .subsampling(1)
19285       .padding_left(1)
19286       .padding_right(1)
19287       .padding_top(1)
19288       .padding_bottom(1)
19289       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4_acc2);
19290   }
19291 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_div_4)19292   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_div_4) {
19293     for (size_t input_width = 8; input_width < 32; input_width += 4) {
19294       DWConv2DMicrokernelTester()
19295         .input_width(input_width)
19296         .input_height(2)
19297         .kernel_height(3)
19298         .kernel_width(3)
19299         .subsampling(1)
19300         .padding_left(1)
19301         .padding_right(1)
19302         .padding_top(1)
19303         .padding_bottom(1)
19304         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4_acc2);
19305     }
19306   }
19307 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_lt_4)19308   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_lt_4) {
19309     for (size_t input_width = 1; input_width < 4; input_width++) {
19310       DWConv2DMicrokernelTester()
19311         .input_width(4)
19312         .input_height(2)
19313         .kernel_height(3)
19314         .kernel_width(3)
19315         .subsampling(1)
19316         .padding_left(1)
19317         .padding_right(1)
19318         .padding_top(1)
19319         .padding_bottom(1)
19320         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4_acc2);
19321     }
19322   }
19323 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_gt_4)19324   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_gt_4) {
19325     for (size_t input_width = 5; input_width < 9; input_width++) {
19326       DWConv2DMicrokernelTester()
19327         .input_width(input_width)
19328         .input_height(2)
19329         .kernel_height(3)
19330         .kernel_width(3)
19331         .subsampling(1)
19332         .padding_left(1)
19333         .padding_right(1)
19334         .padding_top(1)
19335         .padding_bottom(1)
19336         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4_acc2);
19337     }
19338   }
19339 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_div_2)19340   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_div_2) {
19341     for (size_t input_height = 4; input_height < 16; input_height += 2) {
19342       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19343         DWConv2DMicrokernelTester()
19344           .input_width(input_width)
19345           .input_height(input_height)
19346           .kernel_height(3)
19347           .kernel_width(3)
19348           .subsampling(1)
19349           .padding_left(1)
19350           .padding_right(1)
19351           .padding_top(1)
19352           .padding_bottom(1)
19353           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4_acc2);
19354       }
19355     }
19356   }
19357 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_lt_2)19358   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_lt_2) {
19359     for (size_t input_height = 1; input_height < 2; input_height++) {
19360       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19361         DWConv2DMicrokernelTester()
19362           .input_width(input_width)
19363           .input_height(input_height)
19364           .kernel_height(3)
19365           .kernel_width(3)
19366           .subsampling(1)
19367           .padding_left(1)
19368           .padding_right(1)
19369           .padding_top(1)
19370           .padding_bottom(1)
19371           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4_acc2);
19372       }
19373     }
19374   }
19375 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_gt_2)19376   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_gt_2) {
19377     for (size_t input_height = 3; input_height < 5; input_height++) {
19378       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19379         DWConv2DMicrokernelTester()
19380           .input_width(input_width)
19381           .input_height(input_height)
19382           .kernel_height(3)
19383           .kernel_width(3)
19384           .subsampling(1)
19385           .padding_left(1)
19386           .padding_right(1)
19387           .padding_top(1)
19388           .padding_bottom(1)
19389           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_2x4_acc2);
19390       }
19391     }
19392   }
19393 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
19394 
19395 
19396 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4,output_width_eq_4)19397   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4, output_width_eq_4) {
19398     DWConv2DMicrokernelTester()
19399       .input_width(4)
19400       .input_height(3)
19401       .kernel_height(3)
19402       .kernel_width(3)
19403       .subsampling(1)
19404       .padding_left(1)
19405       .padding_right(1)
19406       .padding_top(1)
19407       .padding_bottom(1)
19408       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_3x4);
19409   }
19410 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4,output_width_div_4)19411   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4, output_width_div_4) {
19412     for (size_t input_width = 8; input_width < 32; input_width += 4) {
19413       DWConv2DMicrokernelTester()
19414         .input_width(input_width)
19415         .input_height(3)
19416         .kernel_height(3)
19417         .kernel_width(3)
19418         .subsampling(1)
19419         .padding_left(1)
19420         .padding_right(1)
19421         .padding_top(1)
19422         .padding_bottom(1)
19423         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_3x4);
19424     }
19425   }
19426 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4,output_width_lt_4)19427   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4, output_width_lt_4) {
19428     for (size_t input_width = 1; input_width < 4; input_width++) {
19429       DWConv2DMicrokernelTester()
19430         .input_width(4)
19431         .input_height(3)
19432         .kernel_height(3)
19433         .kernel_width(3)
19434         .subsampling(1)
19435         .padding_left(1)
19436         .padding_right(1)
19437         .padding_top(1)
19438         .padding_bottom(1)
19439         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_3x4);
19440     }
19441   }
19442 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4,output_width_gt_4)19443   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4, output_width_gt_4) {
19444     for (size_t input_width = 5; input_width < 9; input_width++) {
19445       DWConv2DMicrokernelTester()
19446         .input_width(input_width)
19447         .input_height(3)
19448         .kernel_height(3)
19449         .kernel_width(3)
19450         .subsampling(1)
19451         .padding_left(1)
19452         .padding_right(1)
19453         .padding_top(1)
19454         .padding_bottom(1)
19455         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_3x4);
19456     }
19457   }
19458 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4,output_height_div_3)19459   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4, output_height_div_3) {
19460     for (size_t input_height = 6; input_height < 24; input_height += 3) {
19461       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19462         DWConv2DMicrokernelTester()
19463           .input_width(input_width)
19464           .input_height(input_height)
19465           .kernel_height(3)
19466           .kernel_width(3)
19467           .subsampling(1)
19468           .padding_left(1)
19469           .padding_right(1)
19470           .padding_top(1)
19471           .padding_bottom(1)
19472           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_3x4);
19473       }
19474     }
19475   }
19476 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4,output_height_lt_3)19477   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4, output_height_lt_3) {
19478     for (size_t input_height = 1; input_height < 3; input_height++) {
19479       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19480         DWConv2DMicrokernelTester()
19481           .input_width(input_width)
19482           .input_height(input_height)
19483           .kernel_height(3)
19484           .kernel_width(3)
19485           .subsampling(1)
19486           .padding_left(1)
19487           .padding_right(1)
19488           .padding_top(1)
19489           .padding_bottom(1)
19490           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_3x4);
19491       }
19492     }
19493   }
19494 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4,output_height_gt_3)19495   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_3X4, output_height_gt_3) {
19496     for (size_t input_height = 4; input_height < 7; input_height++) {
19497       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19498         DWConv2DMicrokernelTester()
19499           .input_width(input_width)
19500           .input_height(input_height)
19501           .kernel_height(3)
19502           .kernel_width(3)
19503           .subsampling(1)
19504           .padding_left(1)
19505           .padding_right(1)
19506           .padding_top(1)
19507           .padding_bottom(1)
19508           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_3x4);
19509       }
19510     }
19511   }
19512 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
19513 
19514 
19515 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4,output_width_eq_4)19516   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4, output_width_eq_4) {
19517     DWConv2DMicrokernelTester()
19518       .input_width(4)
19519       .input_height(4)
19520       .kernel_height(3)
19521       .kernel_width(3)
19522       .subsampling(1)
19523       .padding_left(1)
19524       .padding_right(1)
19525       .padding_top(1)
19526       .padding_bottom(1)
19527       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_4x4);
19528   }
19529 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4,output_width_div_4)19530   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4, output_width_div_4) {
19531     for (size_t input_width = 8; input_width < 32; input_width += 4) {
19532       DWConv2DMicrokernelTester()
19533         .input_width(input_width)
19534         .input_height(4)
19535         .kernel_height(3)
19536         .kernel_width(3)
19537         .subsampling(1)
19538         .padding_left(1)
19539         .padding_right(1)
19540         .padding_top(1)
19541         .padding_bottom(1)
19542         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_4x4);
19543     }
19544   }
19545 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4,output_width_lt_4)19546   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4, output_width_lt_4) {
19547     for (size_t input_width = 1; input_width < 4; input_width++) {
19548       DWConv2DMicrokernelTester()
19549         .input_width(4)
19550         .input_height(4)
19551         .kernel_height(3)
19552         .kernel_width(3)
19553         .subsampling(1)
19554         .padding_left(1)
19555         .padding_right(1)
19556         .padding_top(1)
19557         .padding_bottom(1)
19558         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_4x4);
19559     }
19560   }
19561 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4,output_width_gt_4)19562   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4, output_width_gt_4) {
19563     for (size_t input_width = 5; input_width < 9; input_width++) {
19564       DWConv2DMicrokernelTester()
19565         .input_width(input_width)
19566         .input_height(4)
19567         .kernel_height(3)
19568         .kernel_width(3)
19569         .subsampling(1)
19570         .padding_left(1)
19571         .padding_right(1)
19572         .padding_top(1)
19573         .padding_bottom(1)
19574         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_4x4);
19575     }
19576   }
19577 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4,output_height_div_4)19578   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4, output_height_div_4) {
19579     for (size_t input_height = 8; input_height < 32; input_height += 4) {
19580       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19581         DWConv2DMicrokernelTester()
19582           .input_width(input_width)
19583           .input_height(input_height)
19584           .kernel_height(3)
19585           .kernel_width(3)
19586           .subsampling(1)
19587           .padding_left(1)
19588           .padding_right(1)
19589           .padding_top(1)
19590           .padding_bottom(1)
19591           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_4x4);
19592       }
19593     }
19594   }
19595 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4,output_height_lt_4)19596   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4, output_height_lt_4) {
19597     for (size_t input_height = 1; input_height < 4; input_height++) {
19598       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19599         DWConv2DMicrokernelTester()
19600           .input_width(input_width)
19601           .input_height(input_height)
19602           .kernel_height(3)
19603           .kernel_width(3)
19604           .subsampling(1)
19605           .padding_left(1)
19606           .padding_right(1)
19607           .padding_top(1)
19608           .padding_bottom(1)
19609           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_4x4);
19610       }
19611     }
19612   }
19613 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4,output_height_gt_4)19614   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_4X4, output_height_gt_4) {
19615     for (size_t input_height = 5; input_height < 9; input_height++) {
19616       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19617         DWConv2DMicrokernelTester()
19618           .input_width(input_width)
19619           .input_height(input_height)
19620           .kernel_height(3)
19621           .kernel_width(3)
19622           .subsampling(1)
19623           .padding_left(1)
19624           .padding_right(1)
19625           .padding_top(1)
19626           .padding_bottom(1)
19627           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_4x4);
19628       }
19629     }
19630   }
19631 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
19632 
19633 
19634 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4,output_width_eq_4)19635   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4, output_width_eq_4) {
19636     DWConv2DMicrokernelTester()
19637       .input_width(4)
19638       .input_height(5)
19639       .kernel_height(3)
19640       .kernel_width(3)
19641       .subsampling(1)
19642       .padding_left(1)
19643       .padding_right(1)
19644       .padding_top(1)
19645       .padding_bottom(1)
19646       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_5x4);
19647   }
19648 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4,output_width_div_4)19649   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4, output_width_div_4) {
19650     for (size_t input_width = 8; input_width < 32; input_width += 4) {
19651       DWConv2DMicrokernelTester()
19652         .input_width(input_width)
19653         .input_height(5)
19654         .kernel_height(3)
19655         .kernel_width(3)
19656         .subsampling(1)
19657         .padding_left(1)
19658         .padding_right(1)
19659         .padding_top(1)
19660         .padding_bottom(1)
19661         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_5x4);
19662     }
19663   }
19664 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4,output_width_lt_4)19665   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4, output_width_lt_4) {
19666     for (size_t input_width = 1; input_width < 4; input_width++) {
19667       DWConv2DMicrokernelTester()
19668         .input_width(4)
19669         .input_height(5)
19670         .kernel_height(3)
19671         .kernel_width(3)
19672         .subsampling(1)
19673         .padding_left(1)
19674         .padding_right(1)
19675         .padding_top(1)
19676         .padding_bottom(1)
19677         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_5x4);
19678     }
19679   }
19680 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4,output_width_gt_4)19681   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4, output_width_gt_4) {
19682     for (size_t input_width = 5; input_width < 9; input_width++) {
19683       DWConv2DMicrokernelTester()
19684         .input_width(input_width)
19685         .input_height(5)
19686         .kernel_height(3)
19687         .kernel_width(3)
19688         .subsampling(1)
19689         .padding_left(1)
19690         .padding_right(1)
19691         .padding_top(1)
19692         .padding_bottom(1)
19693         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_5x4);
19694     }
19695   }
19696 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4,output_height_div_5)19697   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4, output_height_div_5) {
19698     for (size_t input_height = 10; input_height < 40; input_height += 5) {
19699       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19700         DWConv2DMicrokernelTester()
19701           .input_width(input_width)
19702           .input_height(input_height)
19703           .kernel_height(3)
19704           .kernel_width(3)
19705           .subsampling(1)
19706           .padding_left(1)
19707           .padding_right(1)
19708           .padding_top(1)
19709           .padding_bottom(1)
19710           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_5x4);
19711       }
19712     }
19713   }
19714 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4,output_height_lt_5)19715   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4, output_height_lt_5) {
19716     for (size_t input_height = 1; input_height < 5; input_height++) {
19717       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19718         DWConv2DMicrokernelTester()
19719           .input_width(input_width)
19720           .input_height(input_height)
19721           .kernel_height(3)
19722           .kernel_width(3)
19723           .subsampling(1)
19724           .padding_left(1)
19725           .padding_right(1)
19726           .padding_top(1)
19727           .padding_bottom(1)
19728           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_5x4);
19729       }
19730     }
19731   }
19732 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4,output_height_gt_5)19733   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_5X4, output_height_gt_5) {
19734     for (size_t input_height = 6; input_height < 11; input_height++) {
19735       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19736         DWConv2DMicrokernelTester()
19737           .input_width(input_width)
19738           .input_height(input_height)
19739           .kernel_height(3)
19740           .kernel_width(3)
19741           .subsampling(1)
19742           .padding_left(1)
19743           .padding_right(1)
19744           .padding_top(1)
19745           .padding_bottom(1)
19746           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_5x4);
19747       }
19748     }
19749   }
19750 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
19751 
19752 
19753 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4,output_width_eq_4)19754   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4, output_width_eq_4) {
19755     DWConv2DMicrokernelTester()
19756       .input_width(4)
19757       .input_height(6)
19758       .kernel_height(3)
19759       .kernel_width(3)
19760       .subsampling(1)
19761       .padding_left(1)
19762       .padding_right(1)
19763       .padding_top(1)
19764       .padding_bottom(1)
19765       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_6x4);
19766   }
19767 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4,output_width_div_4)19768   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4, output_width_div_4) {
19769     for (size_t input_width = 8; input_width < 32; input_width += 4) {
19770       DWConv2DMicrokernelTester()
19771         .input_width(input_width)
19772         .input_height(6)
19773         .kernel_height(3)
19774         .kernel_width(3)
19775         .subsampling(1)
19776         .padding_left(1)
19777         .padding_right(1)
19778         .padding_top(1)
19779         .padding_bottom(1)
19780         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_6x4);
19781     }
19782   }
19783 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4,output_width_lt_4)19784   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4, output_width_lt_4) {
19785     for (size_t input_width = 1; input_width < 4; input_width++) {
19786       DWConv2DMicrokernelTester()
19787         .input_width(4)
19788         .input_height(6)
19789         .kernel_height(3)
19790         .kernel_width(3)
19791         .subsampling(1)
19792         .padding_left(1)
19793         .padding_right(1)
19794         .padding_top(1)
19795         .padding_bottom(1)
19796         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_6x4);
19797     }
19798   }
19799 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4,output_width_gt_4)19800   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4, output_width_gt_4) {
19801     for (size_t input_width = 5; input_width < 9; input_width++) {
19802       DWConv2DMicrokernelTester()
19803         .input_width(input_width)
19804         .input_height(6)
19805         .kernel_height(3)
19806         .kernel_width(3)
19807         .subsampling(1)
19808         .padding_left(1)
19809         .padding_right(1)
19810         .padding_top(1)
19811         .padding_bottom(1)
19812         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_6x4);
19813     }
19814   }
19815 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4,output_height_div_6)19816   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4, output_height_div_6) {
19817     for (size_t input_height = 12; input_height < 48; input_height += 6) {
19818       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19819         DWConv2DMicrokernelTester()
19820           .input_width(input_width)
19821           .input_height(input_height)
19822           .kernel_height(3)
19823           .kernel_width(3)
19824           .subsampling(1)
19825           .padding_left(1)
19826           .padding_right(1)
19827           .padding_top(1)
19828           .padding_bottom(1)
19829           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_6x4);
19830       }
19831     }
19832   }
19833 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4,output_height_lt_6)19834   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4, output_height_lt_6) {
19835     for (size_t input_height = 1; input_height < 6; input_height++) {
19836       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19837         DWConv2DMicrokernelTester()
19838           .input_width(input_width)
19839           .input_height(input_height)
19840           .kernel_height(3)
19841           .kernel_width(3)
19842           .subsampling(1)
19843           .padding_left(1)
19844           .padding_right(1)
19845           .padding_top(1)
19846           .padding_bottom(1)
19847           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_6x4);
19848       }
19849     }
19850   }
19851 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4,output_height_gt_6)19852   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_LOADSPLAT_6X4, output_height_gt_6) {
19853     for (size_t input_height = 7; input_height < 13; input_height++) {
19854       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19855         DWConv2DMicrokernelTester()
19856           .input_width(input_width)
19857           .input_height(input_height)
19858           .kernel_height(3)
19859           .kernel_width(3)
19860           .subsampling(1)
19861           .padding_left(1)
19862           .padding_right(1)
19863           .padding_top(1)
19864           .padding_bottom(1)
19865           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_loadsplat_6x4);
19866       }
19867     }
19868   }
19869 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
19870 
19871 
19872 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4,output_width_eq_4)19873   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4, output_width_eq_4) {
19874     DWConv2DMicrokernelTester()
19875       .input_width(4)
19876       .input_height(1)
19877       .kernel_height(3)
19878       .kernel_width(3)
19879       .subsampling(1)
19880       .padding_left(1)
19881       .padding_right(1)
19882       .padding_top(1)
19883       .padding_bottom(1)
19884       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4);
19885   }
19886 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4,output_width_div_4)19887   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4, output_width_div_4) {
19888     for (size_t input_width = 8; input_width < 32; input_width += 4) {
19889       DWConv2DMicrokernelTester()
19890         .input_width(input_width)
19891         .input_height(1)
19892         .kernel_height(3)
19893         .kernel_width(3)
19894         .subsampling(1)
19895         .padding_left(1)
19896         .padding_right(1)
19897         .padding_top(1)
19898         .padding_bottom(1)
19899         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4);
19900     }
19901   }
19902 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4,output_width_lt_4)19903   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4, output_width_lt_4) {
19904     for (size_t input_width = 1; input_width < 4; input_width++) {
19905       DWConv2DMicrokernelTester()
19906         .input_width(4)
19907         .input_height(1)
19908         .kernel_height(3)
19909         .kernel_width(3)
19910         .subsampling(1)
19911         .padding_left(1)
19912         .padding_right(1)
19913         .padding_top(1)
19914         .padding_bottom(1)
19915         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4);
19916     }
19917   }
19918 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4,output_width_gt_4)19919   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4, output_width_gt_4) {
19920     for (size_t input_width = 5; input_width < 9; input_width++) {
19921       DWConv2DMicrokernelTester()
19922         .input_width(input_width)
19923         .input_height(1)
19924         .kernel_height(3)
19925         .kernel_width(3)
19926         .subsampling(1)
19927         .padding_left(1)
19928         .padding_right(1)
19929         .padding_top(1)
19930         .padding_bottom(1)
19931         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4);
19932     }
19933   }
19934 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4,output_height_gt_1)19935   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4, output_height_gt_1) {
19936     for (size_t input_height = 2; input_height < 3; input_height++) {
19937       for (size_t input_width = 1; input_width < 21; input_width += 3) {
19938         DWConv2DMicrokernelTester()
19939           .input_width(input_width)
19940           .input_height(input_height)
19941           .kernel_height(3)
19942           .kernel_width(3)
19943           .subsampling(1)
19944           .padding_left(1)
19945           .padding_right(1)
19946           .padding_top(1)
19947           .padding_bottom(1)
19948           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4);
19949       }
19950     }
19951   }
19952 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
19953 
19954 
19955 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_eq_4)19956   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_eq_4) {
19957     DWConv2DMicrokernelTester()
19958       .input_width(4)
19959       .input_height(1)
19960       .kernel_height(3)
19961       .kernel_width(3)
19962       .subsampling(1)
19963       .padding_left(1)
19964       .padding_right(1)
19965       .padding_top(1)
19966       .padding_bottom(1)
19967       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc2);
19968   }
19969 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_div_4)19970   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_div_4) {
19971     for (size_t input_width = 8; input_width < 32; input_width += 4) {
19972       DWConv2DMicrokernelTester()
19973         .input_width(input_width)
19974         .input_height(1)
19975         .kernel_height(3)
19976         .kernel_width(3)
19977         .subsampling(1)
19978         .padding_left(1)
19979         .padding_right(1)
19980         .padding_top(1)
19981         .padding_bottom(1)
19982         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc2);
19983     }
19984   }
19985 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_lt_4)19986   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_lt_4) {
19987     for (size_t input_width = 1; input_width < 4; input_width++) {
19988       DWConv2DMicrokernelTester()
19989         .input_width(4)
19990         .input_height(1)
19991         .kernel_height(3)
19992         .kernel_width(3)
19993         .subsampling(1)
19994         .padding_left(1)
19995         .padding_right(1)
19996         .padding_top(1)
19997         .padding_bottom(1)
19998         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc2);
19999     }
20000   }
20001 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_gt_4)20002   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_gt_4) {
20003     for (size_t input_width = 5; input_width < 9; input_width++) {
20004       DWConv2DMicrokernelTester()
20005         .input_width(input_width)
20006         .input_height(1)
20007         .kernel_height(3)
20008         .kernel_width(3)
20009         .subsampling(1)
20010         .padding_left(1)
20011         .padding_right(1)
20012         .padding_top(1)
20013         .padding_bottom(1)
20014         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc2);
20015     }
20016   }
20017 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC2,output_height_gt_1)20018   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC2, output_height_gt_1) {
20019     for (size_t input_height = 2; input_height < 3; input_height++) {
20020       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20021         DWConv2DMicrokernelTester()
20022           .input_width(input_width)
20023           .input_height(input_height)
20024           .kernel_height(3)
20025           .kernel_width(3)
20026           .subsampling(1)
20027           .padding_left(1)
20028           .padding_right(1)
20029           .padding_top(1)
20030           .padding_bottom(1)
20031           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc2);
20032       }
20033     }
20034   }
20035 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
20036 
20037 
20038 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_eq_4)20039   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_eq_4) {
20040     DWConv2DMicrokernelTester()
20041       .input_width(4)
20042       .input_height(1)
20043       .kernel_height(3)
20044       .kernel_width(3)
20045       .subsampling(1)
20046       .padding_left(1)
20047       .padding_right(1)
20048       .padding_top(1)
20049       .padding_bottom(1)
20050       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc3);
20051   }
20052 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_div_4)20053   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_div_4) {
20054     for (size_t input_width = 8; input_width < 32; input_width += 4) {
20055       DWConv2DMicrokernelTester()
20056         .input_width(input_width)
20057         .input_height(1)
20058         .kernel_height(3)
20059         .kernel_width(3)
20060         .subsampling(1)
20061         .padding_left(1)
20062         .padding_right(1)
20063         .padding_top(1)
20064         .padding_bottom(1)
20065         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc3);
20066     }
20067   }
20068 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_lt_4)20069   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_lt_4) {
20070     for (size_t input_width = 1; input_width < 4; input_width++) {
20071       DWConv2DMicrokernelTester()
20072         .input_width(4)
20073         .input_height(1)
20074         .kernel_height(3)
20075         .kernel_width(3)
20076         .subsampling(1)
20077         .padding_left(1)
20078         .padding_right(1)
20079         .padding_top(1)
20080         .padding_bottom(1)
20081         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc3);
20082     }
20083   }
20084 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_gt_4)20085   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_gt_4) {
20086     for (size_t input_width = 5; input_width < 9; input_width++) {
20087       DWConv2DMicrokernelTester()
20088         .input_width(input_width)
20089         .input_height(1)
20090         .kernel_height(3)
20091         .kernel_width(3)
20092         .subsampling(1)
20093         .padding_left(1)
20094         .padding_right(1)
20095         .padding_top(1)
20096         .padding_bottom(1)
20097         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc3);
20098     }
20099   }
20100 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC3,output_height_gt_1)20101   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC3, output_height_gt_1) {
20102     for (size_t input_height = 2; input_height < 3; input_height++) {
20103       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20104         DWConv2DMicrokernelTester()
20105           .input_width(input_width)
20106           .input_height(input_height)
20107           .kernel_height(3)
20108           .kernel_width(3)
20109           .subsampling(1)
20110           .padding_left(1)
20111           .padding_right(1)
20112           .padding_top(1)
20113           .padding_bottom(1)
20114           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc3);
20115       }
20116     }
20117   }
20118 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
20119 
20120 
20121 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_eq_4)20122   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_eq_4) {
20123     DWConv2DMicrokernelTester()
20124       .input_width(4)
20125       .input_height(1)
20126       .kernel_height(3)
20127       .kernel_width(3)
20128       .subsampling(1)
20129       .padding_left(1)
20130       .padding_right(1)
20131       .padding_top(1)
20132       .padding_bottom(1)
20133       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc4);
20134   }
20135 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_div_4)20136   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_div_4) {
20137     for (size_t input_width = 8; input_width < 32; input_width += 4) {
20138       DWConv2DMicrokernelTester()
20139         .input_width(input_width)
20140         .input_height(1)
20141         .kernel_height(3)
20142         .kernel_width(3)
20143         .subsampling(1)
20144         .padding_left(1)
20145         .padding_right(1)
20146         .padding_top(1)
20147         .padding_bottom(1)
20148         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc4);
20149     }
20150   }
20151 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_lt_4)20152   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_lt_4) {
20153     for (size_t input_width = 1; input_width < 4; input_width++) {
20154       DWConv2DMicrokernelTester()
20155         .input_width(4)
20156         .input_height(1)
20157         .kernel_height(3)
20158         .kernel_width(3)
20159         .subsampling(1)
20160         .padding_left(1)
20161         .padding_right(1)
20162         .padding_top(1)
20163         .padding_bottom(1)
20164         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc4);
20165     }
20166   }
20167 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_gt_4)20168   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_gt_4) {
20169     for (size_t input_width = 5; input_width < 9; input_width++) {
20170       DWConv2DMicrokernelTester()
20171         .input_width(input_width)
20172         .input_height(1)
20173         .kernel_height(3)
20174         .kernel_width(3)
20175         .subsampling(1)
20176         .padding_left(1)
20177         .padding_right(1)
20178         .padding_top(1)
20179         .padding_bottom(1)
20180         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc4);
20181     }
20182   }
20183 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC4,output_height_gt_1)20184   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_1X4_ACC4, output_height_gt_1) {
20185     for (size_t input_height = 2; input_height < 3; input_height++) {
20186       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20187         DWConv2DMicrokernelTester()
20188           .input_width(input_width)
20189           .input_height(input_height)
20190           .kernel_height(3)
20191           .kernel_width(3)
20192           .subsampling(1)
20193           .padding_left(1)
20194           .padding_right(1)
20195           .padding_top(1)
20196           .padding_bottom(1)
20197           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_1x4_acc4);
20198       }
20199     }
20200   }
20201 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
20202 
20203 
20204 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4,output_width_eq_4)20205   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4, output_width_eq_4) {
20206     DWConv2DMicrokernelTester()
20207       .input_width(4)
20208       .input_height(2)
20209       .kernel_height(3)
20210       .kernel_width(3)
20211       .subsampling(1)
20212       .padding_left(1)
20213       .padding_right(1)
20214       .padding_top(1)
20215       .padding_bottom(1)
20216       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4);
20217   }
20218 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4,output_width_div_4)20219   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4, output_width_div_4) {
20220     for (size_t input_width = 8; input_width < 32; input_width += 4) {
20221       DWConv2DMicrokernelTester()
20222         .input_width(input_width)
20223         .input_height(2)
20224         .kernel_height(3)
20225         .kernel_width(3)
20226         .subsampling(1)
20227         .padding_left(1)
20228         .padding_right(1)
20229         .padding_top(1)
20230         .padding_bottom(1)
20231         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4);
20232     }
20233   }
20234 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4,output_width_lt_4)20235   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4, output_width_lt_4) {
20236     for (size_t input_width = 1; input_width < 4; input_width++) {
20237       DWConv2DMicrokernelTester()
20238         .input_width(4)
20239         .input_height(2)
20240         .kernel_height(3)
20241         .kernel_width(3)
20242         .subsampling(1)
20243         .padding_left(1)
20244         .padding_right(1)
20245         .padding_top(1)
20246         .padding_bottom(1)
20247         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4);
20248     }
20249   }
20250 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4,output_width_gt_4)20251   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4, output_width_gt_4) {
20252     for (size_t input_width = 5; input_width < 9; input_width++) {
20253       DWConv2DMicrokernelTester()
20254         .input_width(input_width)
20255         .input_height(2)
20256         .kernel_height(3)
20257         .kernel_width(3)
20258         .subsampling(1)
20259         .padding_left(1)
20260         .padding_right(1)
20261         .padding_top(1)
20262         .padding_bottom(1)
20263         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4);
20264     }
20265   }
20266 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4,output_height_div_2)20267   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4, output_height_div_2) {
20268     for (size_t input_height = 4; input_height < 16; input_height += 2) {
20269       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20270         DWConv2DMicrokernelTester()
20271           .input_width(input_width)
20272           .input_height(input_height)
20273           .kernel_height(3)
20274           .kernel_width(3)
20275           .subsampling(1)
20276           .padding_left(1)
20277           .padding_right(1)
20278           .padding_top(1)
20279           .padding_bottom(1)
20280           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4);
20281       }
20282     }
20283   }
20284 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4,output_height_lt_2)20285   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4, output_height_lt_2) {
20286     for (size_t input_height = 1; input_height < 2; input_height++) {
20287       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20288         DWConv2DMicrokernelTester()
20289           .input_width(input_width)
20290           .input_height(input_height)
20291           .kernel_height(3)
20292           .kernel_width(3)
20293           .subsampling(1)
20294           .padding_left(1)
20295           .padding_right(1)
20296           .padding_top(1)
20297           .padding_bottom(1)
20298           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4);
20299       }
20300     }
20301   }
20302 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4,output_height_gt_2)20303   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4, output_height_gt_2) {
20304     for (size_t input_height = 3; input_height < 5; input_height++) {
20305       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20306         DWConv2DMicrokernelTester()
20307           .input_width(input_width)
20308           .input_height(input_height)
20309           .kernel_height(3)
20310           .kernel_width(3)
20311           .subsampling(1)
20312           .padding_left(1)
20313           .padding_right(1)
20314           .padding_top(1)
20315           .padding_bottom(1)
20316           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4);
20317       }
20318     }
20319   }
20320 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
20321 
20322 
20323 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_eq_4)20324   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_eq_4) {
20325     DWConv2DMicrokernelTester()
20326       .input_width(4)
20327       .input_height(2)
20328       .kernel_height(3)
20329       .kernel_width(3)
20330       .subsampling(1)
20331       .padding_left(1)
20332       .padding_right(1)
20333       .padding_top(1)
20334       .padding_bottom(1)
20335       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4_acc2);
20336   }
20337 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_div_4)20338   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_div_4) {
20339     for (size_t input_width = 8; input_width < 32; input_width += 4) {
20340       DWConv2DMicrokernelTester()
20341         .input_width(input_width)
20342         .input_height(2)
20343         .kernel_height(3)
20344         .kernel_width(3)
20345         .subsampling(1)
20346         .padding_left(1)
20347         .padding_right(1)
20348         .padding_top(1)
20349         .padding_bottom(1)
20350         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4_acc2);
20351     }
20352   }
20353 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_lt_4)20354   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_lt_4) {
20355     for (size_t input_width = 1; input_width < 4; input_width++) {
20356       DWConv2DMicrokernelTester()
20357         .input_width(4)
20358         .input_height(2)
20359         .kernel_height(3)
20360         .kernel_width(3)
20361         .subsampling(1)
20362         .padding_left(1)
20363         .padding_right(1)
20364         .padding_top(1)
20365         .padding_bottom(1)
20366         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4_acc2);
20367     }
20368   }
20369 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_gt_4)20370   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_gt_4) {
20371     for (size_t input_width = 5; input_width < 9; input_width++) {
20372       DWConv2DMicrokernelTester()
20373         .input_width(input_width)
20374         .input_height(2)
20375         .kernel_height(3)
20376         .kernel_width(3)
20377         .subsampling(1)
20378         .padding_left(1)
20379         .padding_right(1)
20380         .padding_top(1)
20381         .padding_bottom(1)
20382         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4_acc2);
20383     }
20384   }
20385 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_div_2)20386   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_div_2) {
20387     for (size_t input_height = 4; input_height < 16; input_height += 2) {
20388       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20389         DWConv2DMicrokernelTester()
20390           .input_width(input_width)
20391           .input_height(input_height)
20392           .kernel_height(3)
20393           .kernel_width(3)
20394           .subsampling(1)
20395           .padding_left(1)
20396           .padding_right(1)
20397           .padding_top(1)
20398           .padding_bottom(1)
20399           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4_acc2);
20400       }
20401     }
20402   }
20403 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_lt_2)20404   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_lt_2) {
20405     for (size_t input_height = 1; input_height < 2; input_height++) {
20406       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20407         DWConv2DMicrokernelTester()
20408           .input_width(input_width)
20409           .input_height(input_height)
20410           .kernel_height(3)
20411           .kernel_width(3)
20412           .subsampling(1)
20413           .padding_left(1)
20414           .padding_right(1)
20415           .padding_top(1)
20416           .padding_bottom(1)
20417           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4_acc2);
20418       }
20419     }
20420   }
20421 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_gt_2)20422   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_gt_2) {
20423     for (size_t input_height = 3; input_height < 5; input_height++) {
20424       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20425         DWConv2DMicrokernelTester()
20426           .input_width(input_width)
20427           .input_height(input_height)
20428           .kernel_height(3)
20429           .kernel_width(3)
20430           .subsampling(1)
20431           .padding_left(1)
20432           .padding_right(1)
20433           .padding_top(1)
20434           .padding_bottom(1)
20435           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_2x4_acc2);
20436       }
20437     }
20438   }
20439 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
20440 
20441 
20442 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4,output_width_eq_4)20443   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4, output_width_eq_4) {
20444     DWConv2DMicrokernelTester()
20445       .input_width(4)
20446       .input_height(3)
20447       .kernel_height(3)
20448       .kernel_width(3)
20449       .subsampling(1)
20450       .padding_left(1)
20451       .padding_right(1)
20452       .padding_top(1)
20453       .padding_bottom(1)
20454       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_3x4);
20455   }
20456 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4,output_width_div_4)20457   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4, output_width_div_4) {
20458     for (size_t input_width = 8; input_width < 32; input_width += 4) {
20459       DWConv2DMicrokernelTester()
20460         .input_width(input_width)
20461         .input_height(3)
20462         .kernel_height(3)
20463         .kernel_width(3)
20464         .subsampling(1)
20465         .padding_left(1)
20466         .padding_right(1)
20467         .padding_top(1)
20468         .padding_bottom(1)
20469         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_3x4);
20470     }
20471   }
20472 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4,output_width_lt_4)20473   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4, output_width_lt_4) {
20474     for (size_t input_width = 1; input_width < 4; input_width++) {
20475       DWConv2DMicrokernelTester()
20476         .input_width(4)
20477         .input_height(3)
20478         .kernel_height(3)
20479         .kernel_width(3)
20480         .subsampling(1)
20481         .padding_left(1)
20482         .padding_right(1)
20483         .padding_top(1)
20484         .padding_bottom(1)
20485         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_3x4);
20486     }
20487   }
20488 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4,output_width_gt_4)20489   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4, output_width_gt_4) {
20490     for (size_t input_width = 5; input_width < 9; input_width++) {
20491       DWConv2DMicrokernelTester()
20492         .input_width(input_width)
20493         .input_height(3)
20494         .kernel_height(3)
20495         .kernel_width(3)
20496         .subsampling(1)
20497         .padding_left(1)
20498         .padding_right(1)
20499         .padding_top(1)
20500         .padding_bottom(1)
20501         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_3x4);
20502     }
20503   }
20504 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4,output_height_div_3)20505   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4, output_height_div_3) {
20506     for (size_t input_height = 6; input_height < 24; input_height += 3) {
20507       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20508         DWConv2DMicrokernelTester()
20509           .input_width(input_width)
20510           .input_height(input_height)
20511           .kernel_height(3)
20512           .kernel_width(3)
20513           .subsampling(1)
20514           .padding_left(1)
20515           .padding_right(1)
20516           .padding_top(1)
20517           .padding_bottom(1)
20518           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_3x4);
20519       }
20520     }
20521   }
20522 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4,output_height_lt_3)20523   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4, output_height_lt_3) {
20524     for (size_t input_height = 1; input_height < 3; input_height++) {
20525       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20526         DWConv2DMicrokernelTester()
20527           .input_width(input_width)
20528           .input_height(input_height)
20529           .kernel_height(3)
20530           .kernel_width(3)
20531           .subsampling(1)
20532           .padding_left(1)
20533           .padding_right(1)
20534           .padding_top(1)
20535           .padding_bottom(1)
20536           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_3x4);
20537       }
20538     }
20539   }
20540 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4,output_height_gt_3)20541   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_3X4, output_height_gt_3) {
20542     for (size_t input_height = 4; input_height < 7; input_height++) {
20543       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20544         DWConv2DMicrokernelTester()
20545           .input_width(input_width)
20546           .input_height(input_height)
20547           .kernel_height(3)
20548           .kernel_width(3)
20549           .subsampling(1)
20550           .padding_left(1)
20551           .padding_right(1)
20552           .padding_top(1)
20553           .padding_bottom(1)
20554           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_3x4);
20555       }
20556     }
20557   }
20558 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
20559 
20560 
20561 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4,output_width_eq_4)20562   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4, output_width_eq_4) {
20563     DWConv2DMicrokernelTester()
20564       .input_width(4)
20565       .input_height(4)
20566       .kernel_height(3)
20567       .kernel_width(3)
20568       .subsampling(1)
20569       .padding_left(1)
20570       .padding_right(1)
20571       .padding_top(1)
20572       .padding_bottom(1)
20573       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_4x4);
20574   }
20575 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4,output_width_div_4)20576   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4, output_width_div_4) {
20577     for (size_t input_width = 8; input_width < 32; input_width += 4) {
20578       DWConv2DMicrokernelTester()
20579         .input_width(input_width)
20580         .input_height(4)
20581         .kernel_height(3)
20582         .kernel_width(3)
20583         .subsampling(1)
20584         .padding_left(1)
20585         .padding_right(1)
20586         .padding_top(1)
20587         .padding_bottom(1)
20588         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_4x4);
20589     }
20590   }
20591 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4,output_width_lt_4)20592   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4, output_width_lt_4) {
20593     for (size_t input_width = 1; input_width < 4; input_width++) {
20594       DWConv2DMicrokernelTester()
20595         .input_width(4)
20596         .input_height(4)
20597         .kernel_height(3)
20598         .kernel_width(3)
20599         .subsampling(1)
20600         .padding_left(1)
20601         .padding_right(1)
20602         .padding_top(1)
20603         .padding_bottom(1)
20604         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_4x4);
20605     }
20606   }
20607 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4,output_width_gt_4)20608   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4, output_width_gt_4) {
20609     for (size_t input_width = 5; input_width < 9; input_width++) {
20610       DWConv2DMicrokernelTester()
20611         .input_width(input_width)
20612         .input_height(4)
20613         .kernel_height(3)
20614         .kernel_width(3)
20615         .subsampling(1)
20616         .padding_left(1)
20617         .padding_right(1)
20618         .padding_top(1)
20619         .padding_bottom(1)
20620         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_4x4);
20621     }
20622   }
20623 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4,output_height_div_4)20624   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4, output_height_div_4) {
20625     for (size_t input_height = 8; input_height < 32; input_height += 4) {
20626       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20627         DWConv2DMicrokernelTester()
20628           .input_width(input_width)
20629           .input_height(input_height)
20630           .kernel_height(3)
20631           .kernel_width(3)
20632           .subsampling(1)
20633           .padding_left(1)
20634           .padding_right(1)
20635           .padding_top(1)
20636           .padding_bottom(1)
20637           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_4x4);
20638       }
20639     }
20640   }
20641 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4,output_height_lt_4)20642   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4, output_height_lt_4) {
20643     for (size_t input_height = 1; input_height < 4; input_height++) {
20644       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20645         DWConv2DMicrokernelTester()
20646           .input_width(input_width)
20647           .input_height(input_height)
20648           .kernel_height(3)
20649           .kernel_width(3)
20650           .subsampling(1)
20651           .padding_left(1)
20652           .padding_right(1)
20653           .padding_top(1)
20654           .padding_bottom(1)
20655           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_4x4);
20656       }
20657     }
20658   }
20659 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4,output_height_gt_4)20660   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_4X4, output_height_gt_4) {
20661     for (size_t input_height = 5; input_height < 9; input_height++) {
20662       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20663         DWConv2DMicrokernelTester()
20664           .input_width(input_width)
20665           .input_height(input_height)
20666           .kernel_height(3)
20667           .kernel_width(3)
20668           .subsampling(1)
20669           .padding_left(1)
20670           .padding_right(1)
20671           .padding_top(1)
20672           .padding_bottom(1)
20673           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_4x4);
20674       }
20675     }
20676   }
20677 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
20678 
20679 
20680 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4,output_width_eq_4)20681   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4, output_width_eq_4) {
20682     DWConv2DMicrokernelTester()
20683       .input_width(4)
20684       .input_height(5)
20685       .kernel_height(3)
20686       .kernel_width(3)
20687       .subsampling(1)
20688       .padding_left(1)
20689       .padding_right(1)
20690       .padding_top(1)
20691       .padding_bottom(1)
20692       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_5x4);
20693   }
20694 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4,output_width_div_4)20695   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4, output_width_div_4) {
20696     for (size_t input_width = 8; input_width < 32; input_width += 4) {
20697       DWConv2DMicrokernelTester()
20698         .input_width(input_width)
20699         .input_height(5)
20700         .kernel_height(3)
20701         .kernel_width(3)
20702         .subsampling(1)
20703         .padding_left(1)
20704         .padding_right(1)
20705         .padding_top(1)
20706         .padding_bottom(1)
20707         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_5x4);
20708     }
20709   }
20710 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4,output_width_lt_4)20711   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4, output_width_lt_4) {
20712     for (size_t input_width = 1; input_width < 4; input_width++) {
20713       DWConv2DMicrokernelTester()
20714         .input_width(4)
20715         .input_height(5)
20716         .kernel_height(3)
20717         .kernel_width(3)
20718         .subsampling(1)
20719         .padding_left(1)
20720         .padding_right(1)
20721         .padding_top(1)
20722         .padding_bottom(1)
20723         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_5x4);
20724     }
20725   }
20726 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4,output_width_gt_4)20727   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4, output_width_gt_4) {
20728     for (size_t input_width = 5; input_width < 9; input_width++) {
20729       DWConv2DMicrokernelTester()
20730         .input_width(input_width)
20731         .input_height(5)
20732         .kernel_height(3)
20733         .kernel_width(3)
20734         .subsampling(1)
20735         .padding_left(1)
20736         .padding_right(1)
20737         .padding_top(1)
20738         .padding_bottom(1)
20739         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_5x4);
20740     }
20741   }
20742 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4,output_height_div_5)20743   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4, output_height_div_5) {
20744     for (size_t input_height = 10; input_height < 40; input_height += 5) {
20745       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20746         DWConv2DMicrokernelTester()
20747           .input_width(input_width)
20748           .input_height(input_height)
20749           .kernel_height(3)
20750           .kernel_width(3)
20751           .subsampling(1)
20752           .padding_left(1)
20753           .padding_right(1)
20754           .padding_top(1)
20755           .padding_bottom(1)
20756           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_5x4);
20757       }
20758     }
20759   }
20760 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4,output_height_lt_5)20761   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4, output_height_lt_5) {
20762     for (size_t input_height = 1; input_height < 5; input_height++) {
20763       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20764         DWConv2DMicrokernelTester()
20765           .input_width(input_width)
20766           .input_height(input_height)
20767           .kernel_height(3)
20768           .kernel_width(3)
20769           .subsampling(1)
20770           .padding_left(1)
20771           .padding_right(1)
20772           .padding_top(1)
20773           .padding_bottom(1)
20774           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_5x4);
20775       }
20776     }
20777   }
20778 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4,output_height_gt_5)20779   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_5X4, output_height_gt_5) {
20780     for (size_t input_height = 6; input_height < 11; input_height++) {
20781       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20782         DWConv2DMicrokernelTester()
20783           .input_width(input_width)
20784           .input_height(input_height)
20785           .kernel_height(3)
20786           .kernel_width(3)
20787           .subsampling(1)
20788           .padding_left(1)
20789           .padding_right(1)
20790           .padding_top(1)
20791           .padding_bottom(1)
20792           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_5x4);
20793       }
20794     }
20795   }
20796 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
20797 
20798 
20799 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4,output_width_eq_4)20800   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4, output_width_eq_4) {
20801     DWConv2DMicrokernelTester()
20802       .input_width(4)
20803       .input_height(6)
20804       .kernel_height(3)
20805       .kernel_width(3)
20806       .subsampling(1)
20807       .padding_left(1)
20808       .padding_right(1)
20809       .padding_top(1)
20810       .padding_bottom(1)
20811       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_6x4);
20812   }
20813 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4,output_width_div_4)20814   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4, output_width_div_4) {
20815     for (size_t input_width = 8; input_width < 32; input_width += 4) {
20816       DWConv2DMicrokernelTester()
20817         .input_width(input_width)
20818         .input_height(6)
20819         .kernel_height(3)
20820         .kernel_width(3)
20821         .subsampling(1)
20822         .padding_left(1)
20823         .padding_right(1)
20824         .padding_top(1)
20825         .padding_bottom(1)
20826         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_6x4);
20827     }
20828   }
20829 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4,output_width_lt_4)20830   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4, output_width_lt_4) {
20831     for (size_t input_width = 1; input_width < 4; input_width++) {
20832       DWConv2DMicrokernelTester()
20833         .input_width(4)
20834         .input_height(6)
20835         .kernel_height(3)
20836         .kernel_width(3)
20837         .subsampling(1)
20838         .padding_left(1)
20839         .padding_right(1)
20840         .padding_top(1)
20841         .padding_bottom(1)
20842         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_6x4);
20843     }
20844   }
20845 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4,output_width_gt_4)20846   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4, output_width_gt_4) {
20847     for (size_t input_width = 5; input_width < 9; input_width++) {
20848       DWConv2DMicrokernelTester()
20849         .input_width(input_width)
20850         .input_height(6)
20851         .kernel_height(3)
20852         .kernel_width(3)
20853         .subsampling(1)
20854         .padding_left(1)
20855         .padding_right(1)
20856         .padding_top(1)
20857         .padding_bottom(1)
20858         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_6x4);
20859     }
20860   }
20861 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4,output_height_div_6)20862   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4, output_height_div_6) {
20863     for (size_t input_height = 12; input_height < 48; input_height += 6) {
20864       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20865         DWConv2DMicrokernelTester()
20866           .input_width(input_width)
20867           .input_height(input_height)
20868           .kernel_height(3)
20869           .kernel_width(3)
20870           .subsampling(1)
20871           .padding_left(1)
20872           .padding_right(1)
20873           .padding_top(1)
20874           .padding_bottom(1)
20875           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_6x4);
20876       }
20877     }
20878   }
20879 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4,output_height_lt_6)20880   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4, output_height_lt_6) {
20881     for (size_t input_height = 1; input_height < 6; input_height++) {
20882       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20883         DWConv2DMicrokernelTester()
20884           .input_width(input_width)
20885           .input_height(input_height)
20886           .kernel_height(3)
20887           .kernel_width(3)
20888           .subsampling(1)
20889           .padding_left(1)
20890           .padding_right(1)
20891           .padding_top(1)
20892           .padding_bottom(1)
20893           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_6x4);
20894       }
20895     }
20896   }
20897 
TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4,output_height_gt_6)20898   TEST(F32_DWCONV2D_CHW_3X3P1__WASMSIMD_X86_SPLAT_6X4, output_height_gt_6) {
20899     for (size_t input_height = 7; input_height < 13; input_height++) {
20900       for (size_t input_width = 1; input_width < 21; input_width += 3) {
20901         DWConv2DMicrokernelTester()
20902           .input_width(input_width)
20903           .input_height(input_height)
20904           .kernel_height(3)
20905           .kernel_width(3)
20906           .subsampling(1)
20907           .padding_left(1)
20908           .padding_right(1)
20909           .padding_top(1)
20910           .padding_bottom(1)
20911           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__wasmsimd_x86_splat_6x4);
20912       }
20913     }
20914   }
20915 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
20916 
20917 
20918 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_eq_4)20919   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_eq_4) {
20920     for (size_t input_width = 7; input_width < 9; input_width++) {
20921       DWConv2DMicrokernelTester()
20922         .input_width(input_width)
20923         .input_height(2)
20924         .kernel_height(3)
20925         .kernel_width(3)
20926         .subsampling(2)
20927         .padding_left(1)
20928         .padding_right(1)
20929         .padding_top(1)
20930         .padding_bottom(1)
20931         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4);
20932     }
20933   }
20934 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_div_4)20935   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_div_4) {
20936     for (size_t input_width = 16; input_width < 64; input_width += 8) {
20937       DWConv2DMicrokernelTester()
20938         .input_width(input_width)
20939         .input_height(2)
20940         .kernel_height(3)
20941         .kernel_width(3)
20942         .subsampling(2)
20943         .padding_left(1)
20944         .padding_right(1)
20945         .padding_top(1)
20946         .padding_bottom(1)
20947         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4);
20948     }
20949   }
20950 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_lt_4)20951   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_lt_4) {
20952     for (size_t input_width = 1; input_width < 7; input_width++) {
20953       DWConv2DMicrokernelTester()
20954         .input_width(8)
20955         .input_height(2)
20956         .kernel_height(3)
20957         .kernel_width(3)
20958         .subsampling(2)
20959         .padding_left(1)
20960         .padding_right(1)
20961         .padding_top(1)
20962         .padding_bottom(1)
20963         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4);
20964     }
20965   }
20966 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_gt_4)20967   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_gt_4) {
20968     for (size_t input_width = 9; input_width < 17; input_width++) {
20969       DWConv2DMicrokernelTester()
20970         .input_width(input_width)
20971         .input_height(2)
20972         .kernel_height(3)
20973         .kernel_width(3)
20974         .subsampling(2)
20975         .padding_left(1)
20976         .padding_right(1)
20977         .padding_top(1)
20978         .padding_bottom(1)
20979         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4);
20980     }
20981   }
20982 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4,output_height_eq_1)20983   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4, output_height_eq_1) {
20984     for (size_t input_height = 1; input_height < 3; input_height++) {
20985       for (size_t input_width = 1; input_width < 41; input_width += 7) {
20986         DWConv2DMicrokernelTester()
20987           .input_width(input_width)
20988           .input_height(input_height)
20989           .kernel_height(3)
20990           .kernel_width(3)
20991           .subsampling(2)
20992           .padding_left(1)
20993           .padding_right(1)
20994           .padding_top(1)
20995           .padding_bottom(1)
20996           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4);
20997       }
20998     }
20999   }
21000 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4,output_height_gt_1)21001   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4, output_height_gt_1) {
21002     for (size_t input_height = 3; input_height < 5; input_height++) {
21003       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21004         DWConv2DMicrokernelTester()
21005           .input_width(input_width)
21006           .input_height(input_height)
21007           .kernel_height(3)
21008           .kernel_width(3)
21009           .subsampling(2)
21010           .padding_left(1)
21011           .padding_right(1)
21012           .padding_top(1)
21013           .padding_bottom(1)
21014           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4);
21015       }
21016     }
21017   }
21018 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4,padding_top_eq_1)21019   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4, padding_top_eq_1) {
21020     for (size_t input_height = 2; input_height < 8; input_height++) {
21021       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21022         DWConv2DMicrokernelTester()
21023           .input_width(input_width)
21024           .input_height(input_height)
21025           .kernel_height(3)
21026           .kernel_width(3)
21027           .subsampling(2)
21028           .padding_left(1)
21029           .padding_right(1)
21030           .padding_top(0)
21031           .padding_bottom(1)
21032           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4);
21033       }
21034     }
21035   }
21036 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
21037 
21038 
21039 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_eq_4)21040   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_eq_4) {
21041     for (size_t input_width = 7; input_width < 9; input_width++) {
21042       DWConv2DMicrokernelTester()
21043         .input_width(input_width)
21044         .input_height(2)
21045         .kernel_height(3)
21046         .kernel_width(3)
21047         .subsampling(2)
21048         .padding_left(1)
21049         .padding_right(1)
21050         .padding_top(1)
21051         .padding_bottom(1)
21052         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc2);
21053     }
21054   }
21055 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_div_4)21056   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_div_4) {
21057     for (size_t input_width = 16; input_width < 64; input_width += 8) {
21058       DWConv2DMicrokernelTester()
21059         .input_width(input_width)
21060         .input_height(2)
21061         .kernel_height(3)
21062         .kernel_width(3)
21063         .subsampling(2)
21064         .padding_left(1)
21065         .padding_right(1)
21066         .padding_top(1)
21067         .padding_bottom(1)
21068         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc2);
21069     }
21070   }
21071 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_lt_4)21072   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_lt_4) {
21073     for (size_t input_width = 1; input_width < 7; input_width++) {
21074       DWConv2DMicrokernelTester()
21075         .input_width(8)
21076         .input_height(2)
21077         .kernel_height(3)
21078         .kernel_width(3)
21079         .subsampling(2)
21080         .padding_left(1)
21081         .padding_right(1)
21082         .padding_top(1)
21083         .padding_bottom(1)
21084         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc2);
21085     }
21086   }
21087 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_gt_4)21088   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_gt_4) {
21089     for (size_t input_width = 9; input_width < 17; input_width++) {
21090       DWConv2DMicrokernelTester()
21091         .input_width(input_width)
21092         .input_height(2)
21093         .kernel_height(3)
21094         .kernel_width(3)
21095         .subsampling(2)
21096         .padding_left(1)
21097         .padding_right(1)
21098         .padding_top(1)
21099         .padding_bottom(1)
21100         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc2);
21101     }
21102   }
21103 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_height_eq_1)21104   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_height_eq_1) {
21105     for (size_t input_height = 1; input_height < 3; input_height++) {
21106       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21107         DWConv2DMicrokernelTester()
21108           .input_width(input_width)
21109           .input_height(input_height)
21110           .kernel_height(3)
21111           .kernel_width(3)
21112           .subsampling(2)
21113           .padding_left(1)
21114           .padding_right(1)
21115           .padding_top(1)
21116           .padding_bottom(1)
21117           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc2);
21118       }
21119     }
21120   }
21121 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_height_gt_1)21122   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_height_gt_1) {
21123     for (size_t input_height = 3; input_height < 5; input_height++) {
21124       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21125         DWConv2DMicrokernelTester()
21126           .input_width(input_width)
21127           .input_height(input_height)
21128           .kernel_height(3)
21129           .kernel_width(3)
21130           .subsampling(2)
21131           .padding_left(1)
21132           .padding_right(1)
21133           .padding_top(1)
21134           .padding_bottom(1)
21135           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc2);
21136       }
21137     }
21138   }
21139 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,padding_top_eq_1)21140   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, padding_top_eq_1) {
21141     for (size_t input_height = 2; input_height < 8; input_height++) {
21142       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21143         DWConv2DMicrokernelTester()
21144           .input_width(input_width)
21145           .input_height(input_height)
21146           .kernel_height(3)
21147           .kernel_width(3)
21148           .subsampling(2)
21149           .padding_left(1)
21150           .padding_right(1)
21151           .padding_top(0)
21152           .padding_bottom(1)
21153           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc2);
21154       }
21155     }
21156   }
21157 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
21158 
21159 
21160 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_eq_4)21161   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_eq_4) {
21162     for (size_t input_width = 7; input_width < 9; input_width++) {
21163       DWConv2DMicrokernelTester()
21164         .input_width(input_width)
21165         .input_height(2)
21166         .kernel_height(3)
21167         .kernel_width(3)
21168         .subsampling(2)
21169         .padding_left(1)
21170         .padding_right(1)
21171         .padding_top(1)
21172         .padding_bottom(1)
21173         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc3);
21174     }
21175   }
21176 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_div_4)21177   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_div_4) {
21178     for (size_t input_width = 16; input_width < 64; input_width += 8) {
21179       DWConv2DMicrokernelTester()
21180         .input_width(input_width)
21181         .input_height(2)
21182         .kernel_height(3)
21183         .kernel_width(3)
21184         .subsampling(2)
21185         .padding_left(1)
21186         .padding_right(1)
21187         .padding_top(1)
21188         .padding_bottom(1)
21189         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc3);
21190     }
21191   }
21192 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_lt_4)21193   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_lt_4) {
21194     for (size_t input_width = 1; input_width < 7; input_width++) {
21195       DWConv2DMicrokernelTester()
21196         .input_width(8)
21197         .input_height(2)
21198         .kernel_height(3)
21199         .kernel_width(3)
21200         .subsampling(2)
21201         .padding_left(1)
21202         .padding_right(1)
21203         .padding_top(1)
21204         .padding_bottom(1)
21205         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc3);
21206     }
21207   }
21208 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_gt_4)21209   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_gt_4) {
21210     for (size_t input_width = 9; input_width < 17; input_width++) {
21211       DWConv2DMicrokernelTester()
21212         .input_width(input_width)
21213         .input_height(2)
21214         .kernel_height(3)
21215         .kernel_width(3)
21216         .subsampling(2)
21217         .padding_left(1)
21218         .padding_right(1)
21219         .padding_top(1)
21220         .padding_bottom(1)
21221         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc3);
21222     }
21223   }
21224 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_height_eq_1)21225   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_height_eq_1) {
21226     for (size_t input_height = 1; input_height < 3; input_height++) {
21227       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21228         DWConv2DMicrokernelTester()
21229           .input_width(input_width)
21230           .input_height(input_height)
21231           .kernel_height(3)
21232           .kernel_width(3)
21233           .subsampling(2)
21234           .padding_left(1)
21235           .padding_right(1)
21236           .padding_top(1)
21237           .padding_bottom(1)
21238           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc3);
21239       }
21240     }
21241   }
21242 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_height_gt_1)21243   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_height_gt_1) {
21244     for (size_t input_height = 3; input_height < 5; input_height++) {
21245       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21246         DWConv2DMicrokernelTester()
21247           .input_width(input_width)
21248           .input_height(input_height)
21249           .kernel_height(3)
21250           .kernel_width(3)
21251           .subsampling(2)
21252           .padding_left(1)
21253           .padding_right(1)
21254           .padding_top(1)
21255           .padding_bottom(1)
21256           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc3);
21257       }
21258     }
21259   }
21260 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,padding_top_eq_1)21261   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, padding_top_eq_1) {
21262     for (size_t input_height = 2; input_height < 8; input_height++) {
21263       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21264         DWConv2DMicrokernelTester()
21265           .input_width(input_width)
21266           .input_height(input_height)
21267           .kernel_height(3)
21268           .kernel_width(3)
21269           .subsampling(2)
21270           .padding_left(1)
21271           .padding_right(1)
21272           .padding_top(0)
21273           .padding_bottom(1)
21274           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc3);
21275       }
21276     }
21277   }
21278 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
21279 
21280 
21281 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_eq_4)21282   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_eq_4) {
21283     for (size_t input_width = 7; input_width < 9; input_width++) {
21284       DWConv2DMicrokernelTester()
21285         .input_width(input_width)
21286         .input_height(2)
21287         .kernel_height(3)
21288         .kernel_width(3)
21289         .subsampling(2)
21290         .padding_left(1)
21291         .padding_right(1)
21292         .padding_top(1)
21293         .padding_bottom(1)
21294         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc4);
21295     }
21296   }
21297 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_div_4)21298   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_div_4) {
21299     for (size_t input_width = 16; input_width < 64; input_width += 8) {
21300       DWConv2DMicrokernelTester()
21301         .input_width(input_width)
21302         .input_height(2)
21303         .kernel_height(3)
21304         .kernel_width(3)
21305         .subsampling(2)
21306         .padding_left(1)
21307         .padding_right(1)
21308         .padding_top(1)
21309         .padding_bottom(1)
21310         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc4);
21311     }
21312   }
21313 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_lt_4)21314   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_lt_4) {
21315     for (size_t input_width = 1; input_width < 7; input_width++) {
21316       DWConv2DMicrokernelTester()
21317         .input_width(8)
21318         .input_height(2)
21319         .kernel_height(3)
21320         .kernel_width(3)
21321         .subsampling(2)
21322         .padding_left(1)
21323         .padding_right(1)
21324         .padding_top(1)
21325         .padding_bottom(1)
21326         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc4);
21327     }
21328   }
21329 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_gt_4)21330   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_gt_4) {
21331     for (size_t input_width = 9; input_width < 17; input_width++) {
21332       DWConv2DMicrokernelTester()
21333         .input_width(input_width)
21334         .input_height(2)
21335         .kernel_height(3)
21336         .kernel_width(3)
21337         .subsampling(2)
21338         .padding_left(1)
21339         .padding_right(1)
21340         .padding_top(1)
21341         .padding_bottom(1)
21342         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc4);
21343     }
21344   }
21345 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_height_eq_1)21346   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_height_eq_1) {
21347     for (size_t input_height = 1; input_height < 3; input_height++) {
21348       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21349         DWConv2DMicrokernelTester()
21350           .input_width(input_width)
21351           .input_height(input_height)
21352           .kernel_height(3)
21353           .kernel_width(3)
21354           .subsampling(2)
21355           .padding_left(1)
21356           .padding_right(1)
21357           .padding_top(1)
21358           .padding_bottom(1)
21359           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc4);
21360       }
21361     }
21362   }
21363 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_height_gt_1)21364   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_height_gt_1) {
21365     for (size_t input_height = 3; input_height < 5; input_height++) {
21366       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21367         DWConv2DMicrokernelTester()
21368           .input_width(input_width)
21369           .input_height(input_height)
21370           .kernel_height(3)
21371           .kernel_width(3)
21372           .subsampling(2)
21373           .padding_left(1)
21374           .padding_right(1)
21375           .padding_top(1)
21376           .padding_bottom(1)
21377           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc4);
21378       }
21379     }
21380   }
21381 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,padding_top_eq_1)21382   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, padding_top_eq_1) {
21383     for (size_t input_height = 2; input_height < 8; input_height++) {
21384       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21385         DWConv2DMicrokernelTester()
21386           .input_width(input_width)
21387           .input_height(input_height)
21388           .kernel_height(3)
21389           .kernel_width(3)
21390           .subsampling(2)
21391           .padding_left(1)
21392           .padding_right(1)
21393           .padding_top(0)
21394           .padding_bottom(1)
21395           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_1x4_acc4);
21396       }
21397     }
21398   }
21399 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
21400 
21401 
21402 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_eq_4)21403   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_eq_4) {
21404     for (size_t input_width = 7; input_width < 9; input_width++) {
21405       DWConv2DMicrokernelTester()
21406         .input_width(input_width)
21407         .input_height(4)
21408         .kernel_height(3)
21409         .kernel_width(3)
21410         .subsampling(2)
21411         .padding_left(1)
21412         .padding_right(1)
21413         .padding_top(1)
21414         .padding_bottom(1)
21415         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4);
21416     }
21417   }
21418 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_div_4)21419   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_div_4) {
21420     for (size_t input_width = 16; input_width < 64; input_width += 8) {
21421       DWConv2DMicrokernelTester()
21422         .input_width(input_width)
21423         .input_height(4)
21424         .kernel_height(3)
21425         .kernel_width(3)
21426         .subsampling(2)
21427         .padding_left(1)
21428         .padding_right(1)
21429         .padding_top(1)
21430         .padding_bottom(1)
21431         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4);
21432     }
21433   }
21434 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_lt_4)21435   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_lt_4) {
21436     for (size_t input_width = 1; input_width < 7; input_width++) {
21437       DWConv2DMicrokernelTester()
21438         .input_width(8)
21439         .input_height(4)
21440         .kernel_height(3)
21441         .kernel_width(3)
21442         .subsampling(2)
21443         .padding_left(1)
21444         .padding_right(1)
21445         .padding_top(1)
21446         .padding_bottom(1)
21447         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4);
21448     }
21449   }
21450 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_gt_4)21451   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_gt_4) {
21452     for (size_t input_width = 9; input_width < 17; input_width++) {
21453       DWConv2DMicrokernelTester()
21454         .input_width(input_width)
21455         .input_height(4)
21456         .kernel_height(3)
21457         .kernel_width(3)
21458         .subsampling(2)
21459         .padding_left(1)
21460         .padding_right(1)
21461         .padding_top(1)
21462         .padding_bottom(1)
21463         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4);
21464     }
21465   }
21466 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_eq_2)21467   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_eq_2) {
21468     for (size_t input_height = 3; input_height < 5; input_height++) {
21469       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21470         DWConv2DMicrokernelTester()
21471           .input_width(input_width)
21472           .input_height(input_height)
21473           .kernel_height(3)
21474           .kernel_width(3)
21475           .subsampling(2)
21476           .padding_left(1)
21477           .padding_right(1)
21478           .padding_top(1)
21479           .padding_bottom(1)
21480           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4);
21481       }
21482     }
21483   }
21484 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_div_2)21485   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_div_2) {
21486     for (size_t input_height = 8; input_height < 32; input_height += 4) {
21487       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21488         DWConv2DMicrokernelTester()
21489           .input_width(input_width)
21490           .input_height(input_height)
21491           .kernel_height(3)
21492           .kernel_width(3)
21493           .subsampling(2)
21494           .padding_left(1)
21495           .padding_right(1)
21496           .padding_top(1)
21497           .padding_bottom(1)
21498           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4);
21499       }
21500     }
21501   }
21502 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_lt_2)21503   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_lt_2) {
21504     for (size_t input_height = 1; input_height < 3; input_height++) {
21505       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21506         DWConv2DMicrokernelTester()
21507           .input_width(input_width)
21508           .input_height(input_height)
21509           .kernel_height(3)
21510           .kernel_width(3)
21511           .subsampling(2)
21512           .padding_left(1)
21513           .padding_right(1)
21514           .padding_top(1)
21515           .padding_bottom(1)
21516           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4);
21517       }
21518     }
21519   }
21520 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_gt_2)21521   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_gt_2) {
21522     for (size_t input_height = 5; input_height < 9; input_height++) {
21523       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21524         DWConv2DMicrokernelTester()
21525           .input_width(input_width)
21526           .input_height(input_height)
21527           .kernel_height(3)
21528           .kernel_width(3)
21529           .subsampling(2)
21530           .padding_left(1)
21531           .padding_right(1)
21532           .padding_top(1)
21533           .padding_bottom(1)
21534           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4);
21535       }
21536     }
21537   }
21538 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4,padding_top_eq_1)21539   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4, padding_top_eq_1) {
21540     for (size_t input_height = 2; input_height < 14; input_height++) {
21541       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21542         DWConv2DMicrokernelTester()
21543           .input_width(input_width)
21544           .input_height(input_height)
21545           .kernel_height(3)
21546           .kernel_width(3)
21547           .subsampling(2)
21548           .padding_left(1)
21549           .padding_right(1)
21550           .padding_top(0)
21551           .padding_bottom(1)
21552           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4);
21553       }
21554     }
21555   }
21556 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
21557 
21558 
21559 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_eq_4)21560   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_eq_4) {
21561     for (size_t input_width = 7; input_width < 9; input_width++) {
21562       DWConv2DMicrokernelTester()
21563         .input_width(input_width)
21564         .input_height(4)
21565         .kernel_height(3)
21566         .kernel_width(3)
21567         .subsampling(2)
21568         .padding_left(1)
21569         .padding_right(1)
21570         .padding_top(1)
21571         .padding_bottom(1)
21572         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4_acc2);
21573     }
21574   }
21575 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_div_4)21576   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_div_4) {
21577     for (size_t input_width = 16; input_width < 64; input_width += 8) {
21578       DWConv2DMicrokernelTester()
21579         .input_width(input_width)
21580         .input_height(4)
21581         .kernel_height(3)
21582         .kernel_width(3)
21583         .subsampling(2)
21584         .padding_left(1)
21585         .padding_right(1)
21586         .padding_top(1)
21587         .padding_bottom(1)
21588         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4_acc2);
21589     }
21590   }
21591 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_lt_4)21592   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_lt_4) {
21593     for (size_t input_width = 1; input_width < 7; input_width++) {
21594       DWConv2DMicrokernelTester()
21595         .input_width(8)
21596         .input_height(4)
21597         .kernel_height(3)
21598         .kernel_width(3)
21599         .subsampling(2)
21600         .padding_left(1)
21601         .padding_right(1)
21602         .padding_top(1)
21603         .padding_bottom(1)
21604         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4_acc2);
21605     }
21606   }
21607 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_gt_4)21608   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_gt_4) {
21609     for (size_t input_width = 9; input_width < 17; input_width++) {
21610       DWConv2DMicrokernelTester()
21611         .input_width(input_width)
21612         .input_height(4)
21613         .kernel_height(3)
21614         .kernel_width(3)
21615         .subsampling(2)
21616         .padding_left(1)
21617         .padding_right(1)
21618         .padding_top(1)
21619         .padding_bottom(1)
21620         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4_acc2);
21621     }
21622   }
21623 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_eq_2)21624   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_eq_2) {
21625     for (size_t input_height = 3; input_height < 5; input_height++) {
21626       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21627         DWConv2DMicrokernelTester()
21628           .input_width(input_width)
21629           .input_height(input_height)
21630           .kernel_height(3)
21631           .kernel_width(3)
21632           .subsampling(2)
21633           .padding_left(1)
21634           .padding_right(1)
21635           .padding_top(1)
21636           .padding_bottom(1)
21637           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4_acc2);
21638       }
21639     }
21640   }
21641 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_div_2)21642   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_div_2) {
21643     for (size_t input_height = 8; input_height < 32; input_height += 4) {
21644       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21645         DWConv2DMicrokernelTester()
21646           .input_width(input_width)
21647           .input_height(input_height)
21648           .kernel_height(3)
21649           .kernel_width(3)
21650           .subsampling(2)
21651           .padding_left(1)
21652           .padding_right(1)
21653           .padding_top(1)
21654           .padding_bottom(1)
21655           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4_acc2);
21656       }
21657     }
21658   }
21659 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_lt_2)21660   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_lt_2) {
21661     for (size_t input_height = 1; input_height < 3; input_height++) {
21662       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21663         DWConv2DMicrokernelTester()
21664           .input_width(input_width)
21665           .input_height(input_height)
21666           .kernel_height(3)
21667           .kernel_width(3)
21668           .subsampling(2)
21669           .padding_left(1)
21670           .padding_right(1)
21671           .padding_top(1)
21672           .padding_bottom(1)
21673           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4_acc2);
21674       }
21675     }
21676   }
21677 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_gt_2)21678   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_gt_2) {
21679     for (size_t input_height = 5; input_height < 9; input_height++) {
21680       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21681         DWConv2DMicrokernelTester()
21682           .input_width(input_width)
21683           .input_height(input_height)
21684           .kernel_height(3)
21685           .kernel_width(3)
21686           .subsampling(2)
21687           .padding_left(1)
21688           .padding_right(1)
21689           .padding_top(1)
21690           .padding_bottom(1)
21691           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4_acc2);
21692       }
21693     }
21694   }
21695 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,padding_top_eq_1)21696   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, padding_top_eq_1) {
21697     for (size_t input_height = 2; input_height < 14; input_height++) {
21698       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21699         DWConv2DMicrokernelTester()
21700           .input_width(input_width)
21701           .input_height(input_height)
21702           .kernel_height(3)
21703           .kernel_width(3)
21704           .subsampling(2)
21705           .padding_left(1)
21706           .padding_right(1)
21707           .padding_top(0)
21708           .padding_bottom(1)
21709           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_2x4_acc2);
21710       }
21711     }
21712   }
21713 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
21714 
21715 
21716 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_eq_4)21717   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_eq_4) {
21718     for (size_t input_width = 7; input_width < 9; input_width++) {
21719       DWConv2DMicrokernelTester()
21720         .input_width(input_width)
21721         .input_height(6)
21722         .kernel_height(3)
21723         .kernel_width(3)
21724         .subsampling(2)
21725         .padding_left(1)
21726         .padding_right(1)
21727         .padding_top(1)
21728         .padding_bottom(1)
21729         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_3x4);
21730     }
21731   }
21732 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_div_4)21733   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_div_4) {
21734     for (size_t input_width = 16; input_width < 64; input_width += 8) {
21735       DWConv2DMicrokernelTester()
21736         .input_width(input_width)
21737         .input_height(6)
21738         .kernel_height(3)
21739         .kernel_width(3)
21740         .subsampling(2)
21741         .padding_left(1)
21742         .padding_right(1)
21743         .padding_top(1)
21744         .padding_bottom(1)
21745         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_3x4);
21746     }
21747   }
21748 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_lt_4)21749   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_lt_4) {
21750     for (size_t input_width = 1; input_width < 7; input_width++) {
21751       DWConv2DMicrokernelTester()
21752         .input_width(8)
21753         .input_height(6)
21754         .kernel_height(3)
21755         .kernel_width(3)
21756         .subsampling(2)
21757         .padding_left(1)
21758         .padding_right(1)
21759         .padding_top(1)
21760         .padding_bottom(1)
21761         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_3x4);
21762     }
21763   }
21764 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_gt_4)21765   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_gt_4) {
21766     for (size_t input_width = 9; input_width < 17; input_width++) {
21767       DWConv2DMicrokernelTester()
21768         .input_width(input_width)
21769         .input_height(6)
21770         .kernel_height(3)
21771         .kernel_width(3)
21772         .subsampling(2)
21773         .padding_left(1)
21774         .padding_right(1)
21775         .padding_top(1)
21776         .padding_bottom(1)
21777         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_3x4);
21778     }
21779   }
21780 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_eq_3)21781   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_eq_3) {
21782     for (size_t input_height = 5; input_height < 7; input_height++) {
21783       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21784         DWConv2DMicrokernelTester()
21785           .input_width(input_width)
21786           .input_height(input_height)
21787           .kernel_height(3)
21788           .kernel_width(3)
21789           .subsampling(2)
21790           .padding_left(1)
21791           .padding_right(1)
21792           .padding_top(1)
21793           .padding_bottom(1)
21794           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_3x4);
21795       }
21796     }
21797   }
21798 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_div_3)21799   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_div_3) {
21800     for (size_t input_height = 12; input_height < 48; input_height += 6) {
21801       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21802         DWConv2DMicrokernelTester()
21803           .input_width(input_width)
21804           .input_height(input_height)
21805           .kernel_height(3)
21806           .kernel_width(3)
21807           .subsampling(2)
21808           .padding_left(1)
21809           .padding_right(1)
21810           .padding_top(1)
21811           .padding_bottom(1)
21812           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_3x4);
21813       }
21814     }
21815   }
21816 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_lt_3)21817   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_lt_3) {
21818     for (size_t input_height = 1; input_height < 5; input_height++) {
21819       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21820         DWConv2DMicrokernelTester()
21821           .input_width(input_width)
21822           .input_height(input_height)
21823           .kernel_height(3)
21824           .kernel_width(3)
21825           .subsampling(2)
21826           .padding_left(1)
21827           .padding_right(1)
21828           .padding_top(1)
21829           .padding_bottom(1)
21830           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_3x4);
21831       }
21832     }
21833   }
21834 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_gt_3)21835   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_gt_3) {
21836     for (size_t input_height = 7; input_height < 13; input_height++) {
21837       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21838         DWConv2DMicrokernelTester()
21839           .input_width(input_width)
21840           .input_height(input_height)
21841           .kernel_height(3)
21842           .kernel_width(3)
21843           .subsampling(2)
21844           .padding_left(1)
21845           .padding_right(1)
21846           .padding_top(1)
21847           .padding_bottom(1)
21848           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_3x4);
21849       }
21850     }
21851   }
21852 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4,padding_top_eq_1)21853   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_3X4, padding_top_eq_1) {
21854     for (size_t input_height = 2; input_height < 20; input_height++) {
21855       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21856         DWConv2DMicrokernelTester()
21857           .input_width(input_width)
21858           .input_height(input_height)
21859           .kernel_height(3)
21860           .kernel_width(3)
21861           .subsampling(2)
21862           .padding_left(1)
21863           .padding_right(1)
21864           .padding_top(0)
21865           .padding_bottom(1)
21866           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_3x4);
21867       }
21868     }
21869   }
21870 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
21871 
21872 
21873 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_width_eq_4)21874   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_width_eq_4) {
21875     for (size_t input_width = 7; input_width < 9; input_width++) {
21876       DWConv2DMicrokernelTester()
21877         .input_width(input_width)
21878         .input_height(8)
21879         .kernel_height(3)
21880         .kernel_width(3)
21881         .subsampling(2)
21882         .padding_left(1)
21883         .padding_right(1)
21884         .padding_top(1)
21885         .padding_bottom(1)
21886         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_4x4);
21887     }
21888   }
21889 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_width_div_4)21890   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_width_div_4) {
21891     for (size_t input_width = 16; input_width < 64; input_width += 8) {
21892       DWConv2DMicrokernelTester()
21893         .input_width(input_width)
21894         .input_height(8)
21895         .kernel_height(3)
21896         .kernel_width(3)
21897         .subsampling(2)
21898         .padding_left(1)
21899         .padding_right(1)
21900         .padding_top(1)
21901         .padding_bottom(1)
21902         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_4x4);
21903     }
21904   }
21905 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_width_lt_4)21906   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_width_lt_4) {
21907     for (size_t input_width = 1; input_width < 7; input_width++) {
21908       DWConv2DMicrokernelTester()
21909         .input_width(8)
21910         .input_height(8)
21911         .kernel_height(3)
21912         .kernel_width(3)
21913         .subsampling(2)
21914         .padding_left(1)
21915         .padding_right(1)
21916         .padding_top(1)
21917         .padding_bottom(1)
21918         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_4x4);
21919     }
21920   }
21921 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_width_gt_4)21922   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_width_gt_4) {
21923     for (size_t input_width = 9; input_width < 17; input_width++) {
21924       DWConv2DMicrokernelTester()
21925         .input_width(input_width)
21926         .input_height(8)
21927         .kernel_height(3)
21928         .kernel_width(3)
21929         .subsampling(2)
21930         .padding_left(1)
21931         .padding_right(1)
21932         .padding_top(1)
21933         .padding_bottom(1)
21934         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_4x4);
21935     }
21936   }
21937 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_height_eq_4)21938   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_height_eq_4) {
21939     for (size_t input_height = 7; input_height < 9; input_height++) {
21940       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21941         DWConv2DMicrokernelTester()
21942           .input_width(input_width)
21943           .input_height(input_height)
21944           .kernel_height(3)
21945           .kernel_width(3)
21946           .subsampling(2)
21947           .padding_left(1)
21948           .padding_right(1)
21949           .padding_top(1)
21950           .padding_bottom(1)
21951           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_4x4);
21952       }
21953     }
21954   }
21955 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_height_div_4)21956   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_height_div_4) {
21957     for (size_t input_height = 16; input_height < 64; input_height += 8) {
21958       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21959         DWConv2DMicrokernelTester()
21960           .input_width(input_width)
21961           .input_height(input_height)
21962           .kernel_height(3)
21963           .kernel_width(3)
21964           .subsampling(2)
21965           .padding_left(1)
21966           .padding_right(1)
21967           .padding_top(1)
21968           .padding_bottom(1)
21969           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_4x4);
21970       }
21971     }
21972   }
21973 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_height_lt_4)21974   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_height_lt_4) {
21975     for (size_t input_height = 1; input_height < 7; input_height++) {
21976       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21977         DWConv2DMicrokernelTester()
21978           .input_width(input_width)
21979           .input_height(input_height)
21980           .kernel_height(3)
21981           .kernel_width(3)
21982           .subsampling(2)
21983           .padding_left(1)
21984           .padding_right(1)
21985           .padding_top(1)
21986           .padding_bottom(1)
21987           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_4x4);
21988       }
21989     }
21990   }
21991 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4,output_height_gt_4)21992   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4, output_height_gt_4) {
21993     for (size_t input_height = 9; input_height < 17; input_height++) {
21994       for (size_t input_width = 1; input_width < 41; input_width += 7) {
21995         DWConv2DMicrokernelTester()
21996           .input_width(input_width)
21997           .input_height(input_height)
21998           .kernel_height(3)
21999           .kernel_width(3)
22000           .subsampling(2)
22001           .padding_left(1)
22002           .padding_right(1)
22003           .padding_top(1)
22004           .padding_bottom(1)
22005           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_4x4);
22006       }
22007     }
22008   }
22009 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4,padding_top_eq_1)22010   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_LOADSPLAT_4X4, padding_top_eq_1) {
22011     for (size_t input_height = 2; input_height < 26; input_height++) {
22012       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22013         DWConv2DMicrokernelTester()
22014           .input_width(input_width)
22015           .input_height(input_height)
22016           .kernel_height(3)
22017           .kernel_width(3)
22018           .subsampling(2)
22019           .padding_left(1)
22020           .padding_right(1)
22021           .padding_top(0)
22022           .padding_bottom(1)
22023           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_loadsplat_4x4);
22024       }
22025     }
22026   }
22027 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22028 
22029 
22030 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4,output_width_eq_4)22031   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4, output_width_eq_4) {
22032     for (size_t input_width = 7; input_width < 9; input_width++) {
22033       DWConv2DMicrokernelTester()
22034         .input_width(input_width)
22035         .input_height(2)
22036         .kernel_height(3)
22037         .kernel_width(3)
22038         .subsampling(2)
22039         .padding_left(1)
22040         .padding_right(1)
22041         .padding_top(1)
22042         .padding_bottom(1)
22043         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4);
22044     }
22045   }
22046 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4,output_width_div_4)22047   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4, output_width_div_4) {
22048     for (size_t input_width = 16; input_width < 64; input_width += 8) {
22049       DWConv2DMicrokernelTester()
22050         .input_width(input_width)
22051         .input_height(2)
22052         .kernel_height(3)
22053         .kernel_width(3)
22054         .subsampling(2)
22055         .padding_left(1)
22056         .padding_right(1)
22057         .padding_top(1)
22058         .padding_bottom(1)
22059         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4);
22060     }
22061   }
22062 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4,output_width_lt_4)22063   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4, output_width_lt_4) {
22064     for (size_t input_width = 1; input_width < 7; input_width++) {
22065       DWConv2DMicrokernelTester()
22066         .input_width(8)
22067         .input_height(2)
22068         .kernel_height(3)
22069         .kernel_width(3)
22070         .subsampling(2)
22071         .padding_left(1)
22072         .padding_right(1)
22073         .padding_top(1)
22074         .padding_bottom(1)
22075         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4);
22076     }
22077   }
22078 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4,output_width_gt_4)22079   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4, output_width_gt_4) {
22080     for (size_t input_width = 9; input_width < 17; input_width++) {
22081       DWConv2DMicrokernelTester()
22082         .input_width(input_width)
22083         .input_height(2)
22084         .kernel_height(3)
22085         .kernel_width(3)
22086         .subsampling(2)
22087         .padding_left(1)
22088         .padding_right(1)
22089         .padding_top(1)
22090         .padding_bottom(1)
22091         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4);
22092     }
22093   }
22094 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4,output_height_eq_1)22095   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4, output_height_eq_1) {
22096     for (size_t input_height = 1; input_height < 3; input_height++) {
22097       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22098         DWConv2DMicrokernelTester()
22099           .input_width(input_width)
22100           .input_height(input_height)
22101           .kernel_height(3)
22102           .kernel_width(3)
22103           .subsampling(2)
22104           .padding_left(1)
22105           .padding_right(1)
22106           .padding_top(1)
22107           .padding_bottom(1)
22108           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4);
22109       }
22110     }
22111   }
22112 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4,output_height_gt_1)22113   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4, output_height_gt_1) {
22114     for (size_t input_height = 3; input_height < 5; input_height++) {
22115       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22116         DWConv2DMicrokernelTester()
22117           .input_width(input_width)
22118           .input_height(input_height)
22119           .kernel_height(3)
22120           .kernel_width(3)
22121           .subsampling(2)
22122           .padding_left(1)
22123           .padding_right(1)
22124           .padding_top(1)
22125           .padding_bottom(1)
22126           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4);
22127       }
22128     }
22129   }
22130 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4,padding_top_eq_1)22131   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4, padding_top_eq_1) {
22132     for (size_t input_height = 2; input_height < 8; input_height++) {
22133       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22134         DWConv2DMicrokernelTester()
22135           .input_width(input_width)
22136           .input_height(input_height)
22137           .kernel_height(3)
22138           .kernel_width(3)
22139           .subsampling(2)
22140           .padding_left(1)
22141           .padding_right(1)
22142           .padding_top(0)
22143           .padding_bottom(1)
22144           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4);
22145       }
22146     }
22147   }
22148 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22149 
22150 
22151 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_eq_4)22152   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_eq_4) {
22153     for (size_t input_width = 7; input_width < 9; input_width++) {
22154       DWConv2DMicrokernelTester()
22155         .input_width(input_width)
22156         .input_height(2)
22157         .kernel_height(3)
22158         .kernel_width(3)
22159         .subsampling(2)
22160         .padding_left(1)
22161         .padding_right(1)
22162         .padding_top(1)
22163         .padding_bottom(1)
22164         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc2);
22165     }
22166   }
22167 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_div_4)22168   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_div_4) {
22169     for (size_t input_width = 16; input_width < 64; input_width += 8) {
22170       DWConv2DMicrokernelTester()
22171         .input_width(input_width)
22172         .input_height(2)
22173         .kernel_height(3)
22174         .kernel_width(3)
22175         .subsampling(2)
22176         .padding_left(1)
22177         .padding_right(1)
22178         .padding_top(1)
22179         .padding_bottom(1)
22180         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc2);
22181     }
22182   }
22183 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_lt_4)22184   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_lt_4) {
22185     for (size_t input_width = 1; input_width < 7; input_width++) {
22186       DWConv2DMicrokernelTester()
22187         .input_width(8)
22188         .input_height(2)
22189         .kernel_height(3)
22190         .kernel_width(3)
22191         .subsampling(2)
22192         .padding_left(1)
22193         .padding_right(1)
22194         .padding_top(1)
22195         .padding_bottom(1)
22196         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc2);
22197     }
22198   }
22199 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_gt_4)22200   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_gt_4) {
22201     for (size_t input_width = 9; input_width < 17; input_width++) {
22202       DWConv2DMicrokernelTester()
22203         .input_width(input_width)
22204         .input_height(2)
22205         .kernel_height(3)
22206         .kernel_width(3)
22207         .subsampling(2)
22208         .padding_left(1)
22209         .padding_right(1)
22210         .padding_top(1)
22211         .padding_bottom(1)
22212         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc2);
22213     }
22214   }
22215 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_height_eq_1)22216   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_height_eq_1) {
22217     for (size_t input_height = 1; input_height < 3; input_height++) {
22218       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22219         DWConv2DMicrokernelTester()
22220           .input_width(input_width)
22221           .input_height(input_height)
22222           .kernel_height(3)
22223           .kernel_width(3)
22224           .subsampling(2)
22225           .padding_left(1)
22226           .padding_right(1)
22227           .padding_top(1)
22228           .padding_bottom(1)
22229           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc2);
22230       }
22231     }
22232   }
22233 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_height_gt_1)22234   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_height_gt_1) {
22235     for (size_t input_height = 3; input_height < 5; input_height++) {
22236       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22237         DWConv2DMicrokernelTester()
22238           .input_width(input_width)
22239           .input_height(input_height)
22240           .kernel_height(3)
22241           .kernel_width(3)
22242           .subsampling(2)
22243           .padding_left(1)
22244           .padding_right(1)
22245           .padding_top(1)
22246           .padding_bottom(1)
22247           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc2);
22248       }
22249     }
22250   }
22251 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2,padding_top_eq_1)22252   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC2, padding_top_eq_1) {
22253     for (size_t input_height = 2; input_height < 8; input_height++) {
22254       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22255         DWConv2DMicrokernelTester()
22256           .input_width(input_width)
22257           .input_height(input_height)
22258           .kernel_height(3)
22259           .kernel_width(3)
22260           .subsampling(2)
22261           .padding_left(1)
22262           .padding_right(1)
22263           .padding_top(0)
22264           .padding_bottom(1)
22265           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc2);
22266       }
22267     }
22268   }
22269 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22270 
22271 
22272 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_eq_4)22273   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_eq_4) {
22274     for (size_t input_width = 7; input_width < 9; input_width++) {
22275       DWConv2DMicrokernelTester()
22276         .input_width(input_width)
22277         .input_height(2)
22278         .kernel_height(3)
22279         .kernel_width(3)
22280         .subsampling(2)
22281         .padding_left(1)
22282         .padding_right(1)
22283         .padding_top(1)
22284         .padding_bottom(1)
22285         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc3);
22286     }
22287   }
22288 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_div_4)22289   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_div_4) {
22290     for (size_t input_width = 16; input_width < 64; input_width += 8) {
22291       DWConv2DMicrokernelTester()
22292         .input_width(input_width)
22293         .input_height(2)
22294         .kernel_height(3)
22295         .kernel_width(3)
22296         .subsampling(2)
22297         .padding_left(1)
22298         .padding_right(1)
22299         .padding_top(1)
22300         .padding_bottom(1)
22301         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc3);
22302     }
22303   }
22304 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_lt_4)22305   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_lt_4) {
22306     for (size_t input_width = 1; input_width < 7; input_width++) {
22307       DWConv2DMicrokernelTester()
22308         .input_width(8)
22309         .input_height(2)
22310         .kernel_height(3)
22311         .kernel_width(3)
22312         .subsampling(2)
22313         .padding_left(1)
22314         .padding_right(1)
22315         .padding_top(1)
22316         .padding_bottom(1)
22317         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc3);
22318     }
22319   }
22320 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_gt_4)22321   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_gt_4) {
22322     for (size_t input_width = 9; input_width < 17; input_width++) {
22323       DWConv2DMicrokernelTester()
22324         .input_width(input_width)
22325         .input_height(2)
22326         .kernel_height(3)
22327         .kernel_width(3)
22328         .subsampling(2)
22329         .padding_left(1)
22330         .padding_right(1)
22331         .padding_top(1)
22332         .padding_bottom(1)
22333         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc3);
22334     }
22335   }
22336 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_height_eq_1)22337   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_height_eq_1) {
22338     for (size_t input_height = 1; input_height < 3; input_height++) {
22339       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22340         DWConv2DMicrokernelTester()
22341           .input_width(input_width)
22342           .input_height(input_height)
22343           .kernel_height(3)
22344           .kernel_width(3)
22345           .subsampling(2)
22346           .padding_left(1)
22347           .padding_right(1)
22348           .padding_top(1)
22349           .padding_bottom(1)
22350           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc3);
22351       }
22352     }
22353   }
22354 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_height_gt_1)22355   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_height_gt_1) {
22356     for (size_t input_height = 3; input_height < 5; input_height++) {
22357       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22358         DWConv2DMicrokernelTester()
22359           .input_width(input_width)
22360           .input_height(input_height)
22361           .kernel_height(3)
22362           .kernel_width(3)
22363           .subsampling(2)
22364           .padding_left(1)
22365           .padding_right(1)
22366           .padding_top(1)
22367           .padding_bottom(1)
22368           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc3);
22369       }
22370     }
22371   }
22372 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3,padding_top_eq_1)22373   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC3, padding_top_eq_1) {
22374     for (size_t input_height = 2; input_height < 8; input_height++) {
22375       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22376         DWConv2DMicrokernelTester()
22377           .input_width(input_width)
22378           .input_height(input_height)
22379           .kernel_height(3)
22380           .kernel_width(3)
22381           .subsampling(2)
22382           .padding_left(1)
22383           .padding_right(1)
22384           .padding_top(0)
22385           .padding_bottom(1)
22386           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc3);
22387       }
22388     }
22389   }
22390 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22391 
22392 
22393 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_eq_4)22394   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_eq_4) {
22395     for (size_t input_width = 7; input_width < 9; input_width++) {
22396       DWConv2DMicrokernelTester()
22397         .input_width(input_width)
22398         .input_height(2)
22399         .kernel_height(3)
22400         .kernel_width(3)
22401         .subsampling(2)
22402         .padding_left(1)
22403         .padding_right(1)
22404         .padding_top(1)
22405         .padding_bottom(1)
22406         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc4);
22407     }
22408   }
22409 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_div_4)22410   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_div_4) {
22411     for (size_t input_width = 16; input_width < 64; input_width += 8) {
22412       DWConv2DMicrokernelTester()
22413         .input_width(input_width)
22414         .input_height(2)
22415         .kernel_height(3)
22416         .kernel_width(3)
22417         .subsampling(2)
22418         .padding_left(1)
22419         .padding_right(1)
22420         .padding_top(1)
22421         .padding_bottom(1)
22422         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc4);
22423     }
22424   }
22425 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_lt_4)22426   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_lt_4) {
22427     for (size_t input_width = 1; input_width < 7; input_width++) {
22428       DWConv2DMicrokernelTester()
22429         .input_width(8)
22430         .input_height(2)
22431         .kernel_height(3)
22432         .kernel_width(3)
22433         .subsampling(2)
22434         .padding_left(1)
22435         .padding_right(1)
22436         .padding_top(1)
22437         .padding_bottom(1)
22438         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc4);
22439     }
22440   }
22441 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_gt_4)22442   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_gt_4) {
22443     for (size_t input_width = 9; input_width < 17; input_width++) {
22444       DWConv2DMicrokernelTester()
22445         .input_width(input_width)
22446         .input_height(2)
22447         .kernel_height(3)
22448         .kernel_width(3)
22449         .subsampling(2)
22450         .padding_left(1)
22451         .padding_right(1)
22452         .padding_top(1)
22453         .padding_bottom(1)
22454         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc4);
22455     }
22456   }
22457 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_height_eq_1)22458   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_height_eq_1) {
22459     for (size_t input_height = 1; input_height < 3; input_height++) {
22460       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22461         DWConv2DMicrokernelTester()
22462           .input_width(input_width)
22463           .input_height(input_height)
22464           .kernel_height(3)
22465           .kernel_width(3)
22466           .subsampling(2)
22467           .padding_left(1)
22468           .padding_right(1)
22469           .padding_top(1)
22470           .padding_bottom(1)
22471           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc4);
22472       }
22473     }
22474   }
22475 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_height_gt_1)22476   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_height_gt_1) {
22477     for (size_t input_height = 3; input_height < 5; input_height++) {
22478       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22479         DWConv2DMicrokernelTester()
22480           .input_width(input_width)
22481           .input_height(input_height)
22482           .kernel_height(3)
22483           .kernel_width(3)
22484           .subsampling(2)
22485           .padding_left(1)
22486           .padding_right(1)
22487           .padding_top(1)
22488           .padding_bottom(1)
22489           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc4);
22490       }
22491     }
22492   }
22493 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4,padding_top_eq_1)22494   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_1X4_ACC4, padding_top_eq_1) {
22495     for (size_t input_height = 2; input_height < 8; input_height++) {
22496       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22497         DWConv2DMicrokernelTester()
22498           .input_width(input_width)
22499           .input_height(input_height)
22500           .kernel_height(3)
22501           .kernel_width(3)
22502           .subsampling(2)
22503           .padding_left(1)
22504           .padding_right(1)
22505           .padding_top(0)
22506           .padding_bottom(1)
22507           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_1x4_acc4);
22508       }
22509     }
22510   }
22511 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22512 
22513 
22514 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4,output_width_eq_4)22515   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4, output_width_eq_4) {
22516     for (size_t input_width = 7; input_width < 9; input_width++) {
22517       DWConv2DMicrokernelTester()
22518         .input_width(input_width)
22519         .input_height(4)
22520         .kernel_height(3)
22521         .kernel_width(3)
22522         .subsampling(2)
22523         .padding_left(1)
22524         .padding_right(1)
22525         .padding_top(1)
22526         .padding_bottom(1)
22527         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4);
22528     }
22529   }
22530 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4,output_width_div_4)22531   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4, output_width_div_4) {
22532     for (size_t input_width = 16; input_width < 64; input_width += 8) {
22533       DWConv2DMicrokernelTester()
22534         .input_width(input_width)
22535         .input_height(4)
22536         .kernel_height(3)
22537         .kernel_width(3)
22538         .subsampling(2)
22539         .padding_left(1)
22540         .padding_right(1)
22541         .padding_top(1)
22542         .padding_bottom(1)
22543         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4);
22544     }
22545   }
22546 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4,output_width_lt_4)22547   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4, output_width_lt_4) {
22548     for (size_t input_width = 1; input_width < 7; input_width++) {
22549       DWConv2DMicrokernelTester()
22550         .input_width(8)
22551         .input_height(4)
22552         .kernel_height(3)
22553         .kernel_width(3)
22554         .subsampling(2)
22555         .padding_left(1)
22556         .padding_right(1)
22557         .padding_top(1)
22558         .padding_bottom(1)
22559         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4);
22560     }
22561   }
22562 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4,output_width_gt_4)22563   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4, output_width_gt_4) {
22564     for (size_t input_width = 9; input_width < 17; input_width++) {
22565       DWConv2DMicrokernelTester()
22566         .input_width(input_width)
22567         .input_height(4)
22568         .kernel_height(3)
22569         .kernel_width(3)
22570         .subsampling(2)
22571         .padding_left(1)
22572         .padding_right(1)
22573         .padding_top(1)
22574         .padding_bottom(1)
22575         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4);
22576     }
22577   }
22578 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4,output_height_eq_2)22579   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4, output_height_eq_2) {
22580     for (size_t input_height = 3; input_height < 5; input_height++) {
22581       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22582         DWConv2DMicrokernelTester()
22583           .input_width(input_width)
22584           .input_height(input_height)
22585           .kernel_height(3)
22586           .kernel_width(3)
22587           .subsampling(2)
22588           .padding_left(1)
22589           .padding_right(1)
22590           .padding_top(1)
22591           .padding_bottom(1)
22592           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4);
22593       }
22594     }
22595   }
22596 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4,output_height_div_2)22597   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4, output_height_div_2) {
22598     for (size_t input_height = 8; input_height < 32; input_height += 4) {
22599       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22600         DWConv2DMicrokernelTester()
22601           .input_width(input_width)
22602           .input_height(input_height)
22603           .kernel_height(3)
22604           .kernel_width(3)
22605           .subsampling(2)
22606           .padding_left(1)
22607           .padding_right(1)
22608           .padding_top(1)
22609           .padding_bottom(1)
22610           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4);
22611       }
22612     }
22613   }
22614 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4,output_height_lt_2)22615   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4, output_height_lt_2) {
22616     for (size_t input_height = 1; input_height < 3; input_height++) {
22617       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22618         DWConv2DMicrokernelTester()
22619           .input_width(input_width)
22620           .input_height(input_height)
22621           .kernel_height(3)
22622           .kernel_width(3)
22623           .subsampling(2)
22624           .padding_left(1)
22625           .padding_right(1)
22626           .padding_top(1)
22627           .padding_bottom(1)
22628           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4);
22629       }
22630     }
22631   }
22632 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4,output_height_gt_2)22633   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4, output_height_gt_2) {
22634     for (size_t input_height = 5; input_height < 9; input_height++) {
22635       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22636         DWConv2DMicrokernelTester()
22637           .input_width(input_width)
22638           .input_height(input_height)
22639           .kernel_height(3)
22640           .kernel_width(3)
22641           .subsampling(2)
22642           .padding_left(1)
22643           .padding_right(1)
22644           .padding_top(1)
22645           .padding_bottom(1)
22646           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4);
22647       }
22648     }
22649   }
22650 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4,padding_top_eq_1)22651   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4, padding_top_eq_1) {
22652     for (size_t input_height = 2; input_height < 14; input_height++) {
22653       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22654         DWConv2DMicrokernelTester()
22655           .input_width(input_width)
22656           .input_height(input_height)
22657           .kernel_height(3)
22658           .kernel_width(3)
22659           .subsampling(2)
22660           .padding_left(1)
22661           .padding_right(1)
22662           .padding_top(0)
22663           .padding_bottom(1)
22664           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4);
22665       }
22666     }
22667   }
22668 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22669 
22670 
22671 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_eq_4)22672   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_eq_4) {
22673     for (size_t input_width = 7; input_width < 9; input_width++) {
22674       DWConv2DMicrokernelTester()
22675         .input_width(input_width)
22676         .input_height(4)
22677         .kernel_height(3)
22678         .kernel_width(3)
22679         .subsampling(2)
22680         .padding_left(1)
22681         .padding_right(1)
22682         .padding_top(1)
22683         .padding_bottom(1)
22684         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4_acc2);
22685     }
22686   }
22687 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_div_4)22688   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_div_4) {
22689     for (size_t input_width = 16; input_width < 64; input_width += 8) {
22690       DWConv2DMicrokernelTester()
22691         .input_width(input_width)
22692         .input_height(4)
22693         .kernel_height(3)
22694         .kernel_width(3)
22695         .subsampling(2)
22696         .padding_left(1)
22697         .padding_right(1)
22698         .padding_top(1)
22699         .padding_bottom(1)
22700         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4_acc2);
22701     }
22702   }
22703 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_lt_4)22704   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_lt_4) {
22705     for (size_t input_width = 1; input_width < 7; input_width++) {
22706       DWConv2DMicrokernelTester()
22707         .input_width(8)
22708         .input_height(4)
22709         .kernel_height(3)
22710         .kernel_width(3)
22711         .subsampling(2)
22712         .padding_left(1)
22713         .padding_right(1)
22714         .padding_top(1)
22715         .padding_bottom(1)
22716         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4_acc2);
22717     }
22718   }
22719 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_gt_4)22720   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_gt_4) {
22721     for (size_t input_width = 9; input_width < 17; input_width++) {
22722       DWConv2DMicrokernelTester()
22723         .input_width(input_width)
22724         .input_height(4)
22725         .kernel_height(3)
22726         .kernel_width(3)
22727         .subsampling(2)
22728         .padding_left(1)
22729         .padding_right(1)
22730         .padding_top(1)
22731         .padding_bottom(1)
22732         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4_acc2);
22733     }
22734   }
22735 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_eq_2)22736   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_eq_2) {
22737     for (size_t input_height = 3; input_height < 5; input_height++) {
22738       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22739         DWConv2DMicrokernelTester()
22740           .input_width(input_width)
22741           .input_height(input_height)
22742           .kernel_height(3)
22743           .kernel_width(3)
22744           .subsampling(2)
22745           .padding_left(1)
22746           .padding_right(1)
22747           .padding_top(1)
22748           .padding_bottom(1)
22749           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4_acc2);
22750       }
22751     }
22752   }
22753 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_div_2)22754   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_div_2) {
22755     for (size_t input_height = 8; input_height < 32; input_height += 4) {
22756       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22757         DWConv2DMicrokernelTester()
22758           .input_width(input_width)
22759           .input_height(input_height)
22760           .kernel_height(3)
22761           .kernel_width(3)
22762           .subsampling(2)
22763           .padding_left(1)
22764           .padding_right(1)
22765           .padding_top(1)
22766           .padding_bottom(1)
22767           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4_acc2);
22768       }
22769     }
22770   }
22771 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_lt_2)22772   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_lt_2) {
22773     for (size_t input_height = 1; input_height < 3; input_height++) {
22774       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22775         DWConv2DMicrokernelTester()
22776           .input_width(input_width)
22777           .input_height(input_height)
22778           .kernel_height(3)
22779           .kernel_width(3)
22780           .subsampling(2)
22781           .padding_left(1)
22782           .padding_right(1)
22783           .padding_top(1)
22784           .padding_bottom(1)
22785           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4_acc2);
22786       }
22787     }
22788   }
22789 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_gt_2)22790   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_gt_2) {
22791     for (size_t input_height = 5; input_height < 9; input_height++) {
22792       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22793         DWConv2DMicrokernelTester()
22794           .input_width(input_width)
22795           .input_height(input_height)
22796           .kernel_height(3)
22797           .kernel_width(3)
22798           .subsampling(2)
22799           .padding_left(1)
22800           .padding_right(1)
22801           .padding_top(1)
22802           .padding_bottom(1)
22803           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4_acc2);
22804       }
22805     }
22806   }
22807 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2,padding_top_eq_1)22808   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_2X4_ACC2, padding_top_eq_1) {
22809     for (size_t input_height = 2; input_height < 14; input_height++) {
22810       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22811         DWConv2DMicrokernelTester()
22812           .input_width(input_width)
22813           .input_height(input_height)
22814           .kernel_height(3)
22815           .kernel_width(3)
22816           .subsampling(2)
22817           .padding_left(1)
22818           .padding_right(1)
22819           .padding_top(0)
22820           .padding_bottom(1)
22821           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_2x4_acc2);
22822       }
22823     }
22824   }
22825 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22826 
22827 
22828 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4,output_width_eq_4)22829   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4, output_width_eq_4) {
22830     for (size_t input_width = 7; input_width < 9; input_width++) {
22831       DWConv2DMicrokernelTester()
22832         .input_width(input_width)
22833         .input_height(6)
22834         .kernel_height(3)
22835         .kernel_width(3)
22836         .subsampling(2)
22837         .padding_left(1)
22838         .padding_right(1)
22839         .padding_top(1)
22840         .padding_bottom(1)
22841         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_3x4);
22842     }
22843   }
22844 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4,output_width_div_4)22845   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4, output_width_div_4) {
22846     for (size_t input_width = 16; input_width < 64; input_width += 8) {
22847       DWConv2DMicrokernelTester()
22848         .input_width(input_width)
22849         .input_height(6)
22850         .kernel_height(3)
22851         .kernel_width(3)
22852         .subsampling(2)
22853         .padding_left(1)
22854         .padding_right(1)
22855         .padding_top(1)
22856         .padding_bottom(1)
22857         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_3x4);
22858     }
22859   }
22860 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4,output_width_lt_4)22861   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4, output_width_lt_4) {
22862     for (size_t input_width = 1; input_width < 7; input_width++) {
22863       DWConv2DMicrokernelTester()
22864         .input_width(8)
22865         .input_height(6)
22866         .kernel_height(3)
22867         .kernel_width(3)
22868         .subsampling(2)
22869         .padding_left(1)
22870         .padding_right(1)
22871         .padding_top(1)
22872         .padding_bottom(1)
22873         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_3x4);
22874     }
22875   }
22876 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4,output_width_gt_4)22877   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4, output_width_gt_4) {
22878     for (size_t input_width = 9; input_width < 17; input_width++) {
22879       DWConv2DMicrokernelTester()
22880         .input_width(input_width)
22881         .input_height(6)
22882         .kernel_height(3)
22883         .kernel_width(3)
22884         .subsampling(2)
22885         .padding_left(1)
22886         .padding_right(1)
22887         .padding_top(1)
22888         .padding_bottom(1)
22889         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_3x4);
22890     }
22891   }
22892 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4,output_height_eq_3)22893   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4, output_height_eq_3) {
22894     for (size_t input_height = 5; input_height < 7; input_height++) {
22895       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22896         DWConv2DMicrokernelTester()
22897           .input_width(input_width)
22898           .input_height(input_height)
22899           .kernel_height(3)
22900           .kernel_width(3)
22901           .subsampling(2)
22902           .padding_left(1)
22903           .padding_right(1)
22904           .padding_top(1)
22905           .padding_bottom(1)
22906           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_3x4);
22907       }
22908     }
22909   }
22910 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4,output_height_div_3)22911   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4, output_height_div_3) {
22912     for (size_t input_height = 12; input_height < 48; input_height += 6) {
22913       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22914         DWConv2DMicrokernelTester()
22915           .input_width(input_width)
22916           .input_height(input_height)
22917           .kernel_height(3)
22918           .kernel_width(3)
22919           .subsampling(2)
22920           .padding_left(1)
22921           .padding_right(1)
22922           .padding_top(1)
22923           .padding_bottom(1)
22924           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_3x4);
22925       }
22926     }
22927   }
22928 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4,output_height_lt_3)22929   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4, output_height_lt_3) {
22930     for (size_t input_height = 1; input_height < 5; input_height++) {
22931       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22932         DWConv2DMicrokernelTester()
22933           .input_width(input_width)
22934           .input_height(input_height)
22935           .kernel_height(3)
22936           .kernel_width(3)
22937           .subsampling(2)
22938           .padding_left(1)
22939           .padding_right(1)
22940           .padding_top(1)
22941           .padding_bottom(1)
22942           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_3x4);
22943       }
22944     }
22945   }
22946 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4,output_height_gt_3)22947   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4, output_height_gt_3) {
22948     for (size_t input_height = 7; input_height < 13; input_height++) {
22949       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22950         DWConv2DMicrokernelTester()
22951           .input_width(input_width)
22952           .input_height(input_height)
22953           .kernel_height(3)
22954           .kernel_width(3)
22955           .subsampling(2)
22956           .padding_left(1)
22957           .padding_right(1)
22958           .padding_top(1)
22959           .padding_bottom(1)
22960           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_3x4);
22961       }
22962     }
22963   }
22964 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4,padding_top_eq_1)22965   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_3X4, padding_top_eq_1) {
22966     for (size_t input_height = 2; input_height < 20; input_height++) {
22967       for (size_t input_width = 1; input_width < 41; input_width += 7) {
22968         DWConv2DMicrokernelTester()
22969           .input_width(input_width)
22970           .input_height(input_height)
22971           .kernel_height(3)
22972           .kernel_width(3)
22973           .subsampling(2)
22974           .padding_left(1)
22975           .padding_right(1)
22976           .padding_top(0)
22977           .padding_bottom(1)
22978           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_3x4);
22979       }
22980     }
22981   }
22982 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22983 
22984 
22985 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4,output_width_eq_4)22986   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4, output_width_eq_4) {
22987     for (size_t input_width = 7; input_width < 9; input_width++) {
22988       DWConv2DMicrokernelTester()
22989         .input_width(input_width)
22990         .input_height(8)
22991         .kernel_height(3)
22992         .kernel_width(3)
22993         .subsampling(2)
22994         .padding_left(1)
22995         .padding_right(1)
22996         .padding_top(1)
22997         .padding_bottom(1)
22998         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_4x4);
22999     }
23000   }
23001 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4,output_width_div_4)23002   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4, output_width_div_4) {
23003     for (size_t input_width = 16; input_width < 64; input_width += 8) {
23004       DWConv2DMicrokernelTester()
23005         .input_width(input_width)
23006         .input_height(8)
23007         .kernel_height(3)
23008         .kernel_width(3)
23009         .subsampling(2)
23010         .padding_left(1)
23011         .padding_right(1)
23012         .padding_top(1)
23013         .padding_bottom(1)
23014         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_4x4);
23015     }
23016   }
23017 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4,output_width_lt_4)23018   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4, output_width_lt_4) {
23019     for (size_t input_width = 1; input_width < 7; input_width++) {
23020       DWConv2DMicrokernelTester()
23021         .input_width(8)
23022         .input_height(8)
23023         .kernel_height(3)
23024         .kernel_width(3)
23025         .subsampling(2)
23026         .padding_left(1)
23027         .padding_right(1)
23028         .padding_top(1)
23029         .padding_bottom(1)
23030         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_4x4);
23031     }
23032   }
23033 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4,output_width_gt_4)23034   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4, output_width_gt_4) {
23035     for (size_t input_width = 9; input_width < 17; input_width++) {
23036       DWConv2DMicrokernelTester()
23037         .input_width(input_width)
23038         .input_height(8)
23039         .kernel_height(3)
23040         .kernel_width(3)
23041         .subsampling(2)
23042         .padding_left(1)
23043         .padding_right(1)
23044         .padding_top(1)
23045         .padding_bottom(1)
23046         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_4x4);
23047     }
23048   }
23049 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4,output_height_eq_4)23050   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4, output_height_eq_4) {
23051     for (size_t input_height = 7; input_height < 9; input_height++) {
23052       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23053         DWConv2DMicrokernelTester()
23054           .input_width(input_width)
23055           .input_height(input_height)
23056           .kernel_height(3)
23057           .kernel_width(3)
23058           .subsampling(2)
23059           .padding_left(1)
23060           .padding_right(1)
23061           .padding_top(1)
23062           .padding_bottom(1)
23063           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_4x4);
23064       }
23065     }
23066   }
23067 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4,output_height_div_4)23068   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4, output_height_div_4) {
23069     for (size_t input_height = 16; input_height < 64; input_height += 8) {
23070       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23071         DWConv2DMicrokernelTester()
23072           .input_width(input_width)
23073           .input_height(input_height)
23074           .kernel_height(3)
23075           .kernel_width(3)
23076           .subsampling(2)
23077           .padding_left(1)
23078           .padding_right(1)
23079           .padding_top(1)
23080           .padding_bottom(1)
23081           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_4x4);
23082       }
23083     }
23084   }
23085 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4,output_height_lt_4)23086   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4, output_height_lt_4) {
23087     for (size_t input_height = 1; input_height < 7; input_height++) {
23088       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23089         DWConv2DMicrokernelTester()
23090           .input_width(input_width)
23091           .input_height(input_height)
23092           .kernel_height(3)
23093           .kernel_width(3)
23094           .subsampling(2)
23095           .padding_left(1)
23096           .padding_right(1)
23097           .padding_top(1)
23098           .padding_bottom(1)
23099           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_4x4);
23100       }
23101     }
23102   }
23103 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4,output_height_gt_4)23104   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4, output_height_gt_4) {
23105     for (size_t input_height = 9; input_height < 17; input_height++) {
23106       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23107         DWConv2DMicrokernelTester()
23108           .input_width(input_width)
23109           .input_height(input_height)
23110           .kernel_height(3)
23111           .kernel_width(3)
23112           .subsampling(2)
23113           .padding_left(1)
23114           .padding_right(1)
23115           .padding_top(1)
23116           .padding_bottom(1)
23117           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_4x4);
23118       }
23119     }
23120   }
23121 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4,padding_top_eq_1)23122   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_ARM_SPLAT_4X4, padding_top_eq_1) {
23123     for (size_t input_height = 2; input_height < 26; input_height++) {
23124       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23125         DWConv2DMicrokernelTester()
23126           .input_width(input_width)
23127           .input_height(input_height)
23128           .kernel_height(3)
23129           .kernel_width(3)
23130           .subsampling(2)
23131           .padding_left(1)
23132           .padding_right(1)
23133           .padding_top(0)
23134           .padding_bottom(1)
23135           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_arm_splat_4x4);
23136       }
23137     }
23138   }
23139 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23140 
23141 
23142 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4,output_width_eq_4)23143   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4, output_width_eq_4) {
23144     for (size_t input_width = 7; input_width < 9; input_width++) {
23145       DWConv2DMicrokernelTester()
23146         .input_width(input_width)
23147         .input_height(2)
23148         .kernel_height(3)
23149         .kernel_width(3)
23150         .subsampling(2)
23151         .padding_left(1)
23152         .padding_right(1)
23153         .padding_top(1)
23154         .padding_bottom(1)
23155         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4);
23156     }
23157   }
23158 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4,output_width_div_4)23159   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4, output_width_div_4) {
23160     for (size_t input_width = 16; input_width < 64; input_width += 8) {
23161       DWConv2DMicrokernelTester()
23162         .input_width(input_width)
23163         .input_height(2)
23164         .kernel_height(3)
23165         .kernel_width(3)
23166         .subsampling(2)
23167         .padding_left(1)
23168         .padding_right(1)
23169         .padding_top(1)
23170         .padding_bottom(1)
23171         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4);
23172     }
23173   }
23174 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4,output_width_lt_4)23175   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4, output_width_lt_4) {
23176     for (size_t input_width = 1; input_width < 7; input_width++) {
23177       DWConv2DMicrokernelTester()
23178         .input_width(8)
23179         .input_height(2)
23180         .kernel_height(3)
23181         .kernel_width(3)
23182         .subsampling(2)
23183         .padding_left(1)
23184         .padding_right(1)
23185         .padding_top(1)
23186         .padding_bottom(1)
23187         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4);
23188     }
23189   }
23190 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4,output_width_gt_4)23191   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4, output_width_gt_4) {
23192     for (size_t input_width = 9; input_width < 17; input_width++) {
23193       DWConv2DMicrokernelTester()
23194         .input_width(input_width)
23195         .input_height(2)
23196         .kernel_height(3)
23197         .kernel_width(3)
23198         .subsampling(2)
23199         .padding_left(1)
23200         .padding_right(1)
23201         .padding_top(1)
23202         .padding_bottom(1)
23203         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4);
23204     }
23205   }
23206 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4,output_height_eq_1)23207   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4, output_height_eq_1) {
23208     for (size_t input_height = 1; input_height < 3; input_height++) {
23209       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23210         DWConv2DMicrokernelTester()
23211           .input_width(input_width)
23212           .input_height(input_height)
23213           .kernel_height(3)
23214           .kernel_width(3)
23215           .subsampling(2)
23216           .padding_left(1)
23217           .padding_right(1)
23218           .padding_top(1)
23219           .padding_bottom(1)
23220           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4);
23221       }
23222     }
23223   }
23224 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4,output_height_gt_1)23225   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4, output_height_gt_1) {
23226     for (size_t input_height = 3; input_height < 5; input_height++) {
23227       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23228         DWConv2DMicrokernelTester()
23229           .input_width(input_width)
23230           .input_height(input_height)
23231           .kernel_height(3)
23232           .kernel_width(3)
23233           .subsampling(2)
23234           .padding_left(1)
23235           .padding_right(1)
23236           .padding_top(1)
23237           .padding_bottom(1)
23238           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4);
23239       }
23240     }
23241   }
23242 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4,padding_top_eq_1)23243   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4, padding_top_eq_1) {
23244     for (size_t input_height = 2; input_height < 8; input_height++) {
23245       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23246         DWConv2DMicrokernelTester()
23247           .input_width(input_width)
23248           .input_height(input_height)
23249           .kernel_height(3)
23250           .kernel_width(3)
23251           .subsampling(2)
23252           .padding_left(1)
23253           .padding_right(1)
23254           .padding_top(0)
23255           .padding_bottom(1)
23256           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4);
23257       }
23258     }
23259   }
23260 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23261 
23262 
23263 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_eq_4)23264   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_eq_4) {
23265     for (size_t input_width = 7; input_width < 9; input_width++) {
23266       DWConv2DMicrokernelTester()
23267         .input_width(input_width)
23268         .input_height(2)
23269         .kernel_height(3)
23270         .kernel_width(3)
23271         .subsampling(2)
23272         .padding_left(1)
23273         .padding_right(1)
23274         .padding_top(1)
23275         .padding_bottom(1)
23276         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc2);
23277     }
23278   }
23279 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_div_4)23280   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_div_4) {
23281     for (size_t input_width = 16; input_width < 64; input_width += 8) {
23282       DWConv2DMicrokernelTester()
23283         .input_width(input_width)
23284         .input_height(2)
23285         .kernel_height(3)
23286         .kernel_width(3)
23287         .subsampling(2)
23288         .padding_left(1)
23289         .padding_right(1)
23290         .padding_top(1)
23291         .padding_bottom(1)
23292         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc2);
23293     }
23294   }
23295 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_lt_4)23296   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_lt_4) {
23297     for (size_t input_width = 1; input_width < 7; input_width++) {
23298       DWConv2DMicrokernelTester()
23299         .input_width(8)
23300         .input_height(2)
23301         .kernel_height(3)
23302         .kernel_width(3)
23303         .subsampling(2)
23304         .padding_left(1)
23305         .padding_right(1)
23306         .padding_top(1)
23307         .padding_bottom(1)
23308         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc2);
23309     }
23310   }
23311 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_gt_4)23312   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_gt_4) {
23313     for (size_t input_width = 9; input_width < 17; input_width++) {
23314       DWConv2DMicrokernelTester()
23315         .input_width(input_width)
23316         .input_height(2)
23317         .kernel_height(3)
23318         .kernel_width(3)
23319         .subsampling(2)
23320         .padding_left(1)
23321         .padding_right(1)
23322         .padding_top(1)
23323         .padding_bottom(1)
23324         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc2);
23325     }
23326   }
23327 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_height_eq_1)23328   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_height_eq_1) {
23329     for (size_t input_height = 1; input_height < 3; input_height++) {
23330       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23331         DWConv2DMicrokernelTester()
23332           .input_width(input_width)
23333           .input_height(input_height)
23334           .kernel_height(3)
23335           .kernel_width(3)
23336           .subsampling(2)
23337           .padding_left(1)
23338           .padding_right(1)
23339           .padding_top(1)
23340           .padding_bottom(1)
23341           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc2);
23342       }
23343     }
23344   }
23345 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_height_gt_1)23346   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_height_gt_1) {
23347     for (size_t input_height = 3; input_height < 5; input_height++) {
23348       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23349         DWConv2DMicrokernelTester()
23350           .input_width(input_width)
23351           .input_height(input_height)
23352           .kernel_height(3)
23353           .kernel_width(3)
23354           .subsampling(2)
23355           .padding_left(1)
23356           .padding_right(1)
23357           .padding_top(1)
23358           .padding_bottom(1)
23359           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc2);
23360       }
23361     }
23362   }
23363 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,padding_top_eq_1)23364   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, padding_top_eq_1) {
23365     for (size_t input_height = 2; input_height < 8; input_height++) {
23366       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23367         DWConv2DMicrokernelTester()
23368           .input_width(input_width)
23369           .input_height(input_height)
23370           .kernel_height(3)
23371           .kernel_width(3)
23372           .subsampling(2)
23373           .padding_left(1)
23374           .padding_right(1)
23375           .padding_top(0)
23376           .padding_bottom(1)
23377           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc2);
23378       }
23379     }
23380   }
23381 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23382 
23383 
23384 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_eq_4)23385   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_eq_4) {
23386     for (size_t input_width = 7; input_width < 9; input_width++) {
23387       DWConv2DMicrokernelTester()
23388         .input_width(input_width)
23389         .input_height(2)
23390         .kernel_height(3)
23391         .kernel_width(3)
23392         .subsampling(2)
23393         .padding_left(1)
23394         .padding_right(1)
23395         .padding_top(1)
23396         .padding_bottom(1)
23397         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc3);
23398     }
23399   }
23400 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_div_4)23401   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_div_4) {
23402     for (size_t input_width = 16; input_width < 64; input_width += 8) {
23403       DWConv2DMicrokernelTester()
23404         .input_width(input_width)
23405         .input_height(2)
23406         .kernel_height(3)
23407         .kernel_width(3)
23408         .subsampling(2)
23409         .padding_left(1)
23410         .padding_right(1)
23411         .padding_top(1)
23412         .padding_bottom(1)
23413         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc3);
23414     }
23415   }
23416 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_lt_4)23417   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_lt_4) {
23418     for (size_t input_width = 1; input_width < 7; input_width++) {
23419       DWConv2DMicrokernelTester()
23420         .input_width(8)
23421         .input_height(2)
23422         .kernel_height(3)
23423         .kernel_width(3)
23424         .subsampling(2)
23425         .padding_left(1)
23426         .padding_right(1)
23427         .padding_top(1)
23428         .padding_bottom(1)
23429         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc3);
23430     }
23431   }
23432 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_gt_4)23433   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_gt_4) {
23434     for (size_t input_width = 9; input_width < 17; input_width++) {
23435       DWConv2DMicrokernelTester()
23436         .input_width(input_width)
23437         .input_height(2)
23438         .kernel_height(3)
23439         .kernel_width(3)
23440         .subsampling(2)
23441         .padding_left(1)
23442         .padding_right(1)
23443         .padding_top(1)
23444         .padding_bottom(1)
23445         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc3);
23446     }
23447   }
23448 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_height_eq_1)23449   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_height_eq_1) {
23450     for (size_t input_height = 1; input_height < 3; input_height++) {
23451       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23452         DWConv2DMicrokernelTester()
23453           .input_width(input_width)
23454           .input_height(input_height)
23455           .kernel_height(3)
23456           .kernel_width(3)
23457           .subsampling(2)
23458           .padding_left(1)
23459           .padding_right(1)
23460           .padding_top(1)
23461           .padding_bottom(1)
23462           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc3);
23463       }
23464     }
23465   }
23466 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_height_gt_1)23467   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_height_gt_1) {
23468     for (size_t input_height = 3; input_height < 5; input_height++) {
23469       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23470         DWConv2DMicrokernelTester()
23471           .input_width(input_width)
23472           .input_height(input_height)
23473           .kernel_height(3)
23474           .kernel_width(3)
23475           .subsampling(2)
23476           .padding_left(1)
23477           .padding_right(1)
23478           .padding_top(1)
23479           .padding_bottom(1)
23480           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc3);
23481       }
23482     }
23483   }
23484 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,padding_top_eq_1)23485   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, padding_top_eq_1) {
23486     for (size_t input_height = 2; input_height < 8; input_height++) {
23487       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23488         DWConv2DMicrokernelTester()
23489           .input_width(input_width)
23490           .input_height(input_height)
23491           .kernel_height(3)
23492           .kernel_width(3)
23493           .subsampling(2)
23494           .padding_left(1)
23495           .padding_right(1)
23496           .padding_top(0)
23497           .padding_bottom(1)
23498           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc3);
23499       }
23500     }
23501   }
23502 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23503 
23504 
23505 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_eq_4)23506   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_eq_4) {
23507     for (size_t input_width = 7; input_width < 9; input_width++) {
23508       DWConv2DMicrokernelTester()
23509         .input_width(input_width)
23510         .input_height(2)
23511         .kernel_height(3)
23512         .kernel_width(3)
23513         .subsampling(2)
23514         .padding_left(1)
23515         .padding_right(1)
23516         .padding_top(1)
23517         .padding_bottom(1)
23518         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc4);
23519     }
23520   }
23521 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_div_4)23522   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_div_4) {
23523     for (size_t input_width = 16; input_width < 64; input_width += 8) {
23524       DWConv2DMicrokernelTester()
23525         .input_width(input_width)
23526         .input_height(2)
23527         .kernel_height(3)
23528         .kernel_width(3)
23529         .subsampling(2)
23530         .padding_left(1)
23531         .padding_right(1)
23532         .padding_top(1)
23533         .padding_bottom(1)
23534         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc4);
23535     }
23536   }
23537 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_lt_4)23538   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_lt_4) {
23539     for (size_t input_width = 1; input_width < 7; input_width++) {
23540       DWConv2DMicrokernelTester()
23541         .input_width(8)
23542         .input_height(2)
23543         .kernel_height(3)
23544         .kernel_width(3)
23545         .subsampling(2)
23546         .padding_left(1)
23547         .padding_right(1)
23548         .padding_top(1)
23549         .padding_bottom(1)
23550         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc4);
23551     }
23552   }
23553 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_gt_4)23554   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_gt_4) {
23555     for (size_t input_width = 9; input_width < 17; input_width++) {
23556       DWConv2DMicrokernelTester()
23557         .input_width(input_width)
23558         .input_height(2)
23559         .kernel_height(3)
23560         .kernel_width(3)
23561         .subsampling(2)
23562         .padding_left(1)
23563         .padding_right(1)
23564         .padding_top(1)
23565         .padding_bottom(1)
23566         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc4);
23567     }
23568   }
23569 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_height_eq_1)23570   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_height_eq_1) {
23571     for (size_t input_height = 1; input_height < 3; input_height++) {
23572       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23573         DWConv2DMicrokernelTester()
23574           .input_width(input_width)
23575           .input_height(input_height)
23576           .kernel_height(3)
23577           .kernel_width(3)
23578           .subsampling(2)
23579           .padding_left(1)
23580           .padding_right(1)
23581           .padding_top(1)
23582           .padding_bottom(1)
23583           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc4);
23584       }
23585     }
23586   }
23587 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_height_gt_1)23588   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_height_gt_1) {
23589     for (size_t input_height = 3; input_height < 5; input_height++) {
23590       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23591         DWConv2DMicrokernelTester()
23592           .input_width(input_width)
23593           .input_height(input_height)
23594           .kernel_height(3)
23595           .kernel_width(3)
23596           .subsampling(2)
23597           .padding_left(1)
23598           .padding_right(1)
23599           .padding_top(1)
23600           .padding_bottom(1)
23601           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc4);
23602       }
23603     }
23604   }
23605 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,padding_top_eq_1)23606   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, padding_top_eq_1) {
23607     for (size_t input_height = 2; input_height < 8; input_height++) {
23608       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23609         DWConv2DMicrokernelTester()
23610           .input_width(input_width)
23611           .input_height(input_height)
23612           .kernel_height(3)
23613           .kernel_width(3)
23614           .subsampling(2)
23615           .padding_left(1)
23616           .padding_right(1)
23617           .padding_top(0)
23618           .padding_bottom(1)
23619           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_1x4_acc4);
23620       }
23621     }
23622   }
23623 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23624 
23625 
23626 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4,output_width_eq_4)23627   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4, output_width_eq_4) {
23628     for (size_t input_width = 7; input_width < 9; input_width++) {
23629       DWConv2DMicrokernelTester()
23630         .input_width(input_width)
23631         .input_height(4)
23632         .kernel_height(3)
23633         .kernel_width(3)
23634         .subsampling(2)
23635         .padding_left(1)
23636         .padding_right(1)
23637         .padding_top(1)
23638         .padding_bottom(1)
23639         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4);
23640     }
23641   }
23642 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4,output_width_div_4)23643   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4, output_width_div_4) {
23644     for (size_t input_width = 16; input_width < 64; input_width += 8) {
23645       DWConv2DMicrokernelTester()
23646         .input_width(input_width)
23647         .input_height(4)
23648         .kernel_height(3)
23649         .kernel_width(3)
23650         .subsampling(2)
23651         .padding_left(1)
23652         .padding_right(1)
23653         .padding_top(1)
23654         .padding_bottom(1)
23655         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4);
23656     }
23657   }
23658 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4,output_width_lt_4)23659   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4, output_width_lt_4) {
23660     for (size_t input_width = 1; input_width < 7; input_width++) {
23661       DWConv2DMicrokernelTester()
23662         .input_width(8)
23663         .input_height(4)
23664         .kernel_height(3)
23665         .kernel_width(3)
23666         .subsampling(2)
23667         .padding_left(1)
23668         .padding_right(1)
23669         .padding_top(1)
23670         .padding_bottom(1)
23671         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4);
23672     }
23673   }
23674 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4,output_width_gt_4)23675   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4, output_width_gt_4) {
23676     for (size_t input_width = 9; input_width < 17; input_width++) {
23677       DWConv2DMicrokernelTester()
23678         .input_width(input_width)
23679         .input_height(4)
23680         .kernel_height(3)
23681         .kernel_width(3)
23682         .subsampling(2)
23683         .padding_left(1)
23684         .padding_right(1)
23685         .padding_top(1)
23686         .padding_bottom(1)
23687         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4);
23688     }
23689   }
23690 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4,output_height_eq_2)23691   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4, output_height_eq_2) {
23692     for (size_t input_height = 3; input_height < 5; input_height++) {
23693       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23694         DWConv2DMicrokernelTester()
23695           .input_width(input_width)
23696           .input_height(input_height)
23697           .kernel_height(3)
23698           .kernel_width(3)
23699           .subsampling(2)
23700           .padding_left(1)
23701           .padding_right(1)
23702           .padding_top(1)
23703           .padding_bottom(1)
23704           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4);
23705       }
23706     }
23707   }
23708 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4,output_height_div_2)23709   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4, output_height_div_2) {
23710     for (size_t input_height = 8; input_height < 32; input_height += 4) {
23711       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23712         DWConv2DMicrokernelTester()
23713           .input_width(input_width)
23714           .input_height(input_height)
23715           .kernel_height(3)
23716           .kernel_width(3)
23717           .subsampling(2)
23718           .padding_left(1)
23719           .padding_right(1)
23720           .padding_top(1)
23721           .padding_bottom(1)
23722           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4);
23723       }
23724     }
23725   }
23726 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4,output_height_lt_2)23727   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4, output_height_lt_2) {
23728     for (size_t input_height = 1; input_height < 3; input_height++) {
23729       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23730         DWConv2DMicrokernelTester()
23731           .input_width(input_width)
23732           .input_height(input_height)
23733           .kernel_height(3)
23734           .kernel_width(3)
23735           .subsampling(2)
23736           .padding_left(1)
23737           .padding_right(1)
23738           .padding_top(1)
23739           .padding_bottom(1)
23740           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4);
23741       }
23742     }
23743   }
23744 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4,output_height_gt_2)23745   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4, output_height_gt_2) {
23746     for (size_t input_height = 5; input_height < 9; input_height++) {
23747       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23748         DWConv2DMicrokernelTester()
23749           .input_width(input_width)
23750           .input_height(input_height)
23751           .kernel_height(3)
23752           .kernel_width(3)
23753           .subsampling(2)
23754           .padding_left(1)
23755           .padding_right(1)
23756           .padding_top(1)
23757           .padding_bottom(1)
23758           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4);
23759       }
23760     }
23761   }
23762 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4,padding_top_eq_1)23763   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4, padding_top_eq_1) {
23764     for (size_t input_height = 2; input_height < 14; input_height++) {
23765       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23766         DWConv2DMicrokernelTester()
23767           .input_width(input_width)
23768           .input_height(input_height)
23769           .kernel_height(3)
23770           .kernel_width(3)
23771           .subsampling(2)
23772           .padding_left(1)
23773           .padding_right(1)
23774           .padding_top(0)
23775           .padding_bottom(1)
23776           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4);
23777       }
23778     }
23779   }
23780 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23781 
23782 
23783 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_eq_4)23784   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_eq_4) {
23785     for (size_t input_width = 7; input_width < 9; input_width++) {
23786       DWConv2DMicrokernelTester()
23787         .input_width(input_width)
23788         .input_height(4)
23789         .kernel_height(3)
23790         .kernel_width(3)
23791         .subsampling(2)
23792         .padding_left(1)
23793         .padding_right(1)
23794         .padding_top(1)
23795         .padding_bottom(1)
23796         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4_acc2);
23797     }
23798   }
23799 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_div_4)23800   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_div_4) {
23801     for (size_t input_width = 16; input_width < 64; input_width += 8) {
23802       DWConv2DMicrokernelTester()
23803         .input_width(input_width)
23804         .input_height(4)
23805         .kernel_height(3)
23806         .kernel_width(3)
23807         .subsampling(2)
23808         .padding_left(1)
23809         .padding_right(1)
23810         .padding_top(1)
23811         .padding_bottom(1)
23812         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4_acc2);
23813     }
23814   }
23815 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_lt_4)23816   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_lt_4) {
23817     for (size_t input_width = 1; input_width < 7; input_width++) {
23818       DWConv2DMicrokernelTester()
23819         .input_width(8)
23820         .input_height(4)
23821         .kernel_height(3)
23822         .kernel_width(3)
23823         .subsampling(2)
23824         .padding_left(1)
23825         .padding_right(1)
23826         .padding_top(1)
23827         .padding_bottom(1)
23828         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4_acc2);
23829     }
23830   }
23831 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_gt_4)23832   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_gt_4) {
23833     for (size_t input_width = 9; input_width < 17; input_width++) {
23834       DWConv2DMicrokernelTester()
23835         .input_width(input_width)
23836         .input_height(4)
23837         .kernel_height(3)
23838         .kernel_width(3)
23839         .subsampling(2)
23840         .padding_left(1)
23841         .padding_right(1)
23842         .padding_top(1)
23843         .padding_bottom(1)
23844         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4_acc2);
23845     }
23846   }
23847 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_eq_2)23848   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_eq_2) {
23849     for (size_t input_height = 3; input_height < 5; input_height++) {
23850       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23851         DWConv2DMicrokernelTester()
23852           .input_width(input_width)
23853           .input_height(input_height)
23854           .kernel_height(3)
23855           .kernel_width(3)
23856           .subsampling(2)
23857           .padding_left(1)
23858           .padding_right(1)
23859           .padding_top(1)
23860           .padding_bottom(1)
23861           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4_acc2);
23862       }
23863     }
23864   }
23865 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_div_2)23866   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_div_2) {
23867     for (size_t input_height = 8; input_height < 32; input_height += 4) {
23868       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23869         DWConv2DMicrokernelTester()
23870           .input_width(input_width)
23871           .input_height(input_height)
23872           .kernel_height(3)
23873           .kernel_width(3)
23874           .subsampling(2)
23875           .padding_left(1)
23876           .padding_right(1)
23877           .padding_top(1)
23878           .padding_bottom(1)
23879           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4_acc2);
23880       }
23881     }
23882   }
23883 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_lt_2)23884   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_lt_2) {
23885     for (size_t input_height = 1; input_height < 3; input_height++) {
23886       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23887         DWConv2DMicrokernelTester()
23888           .input_width(input_width)
23889           .input_height(input_height)
23890           .kernel_height(3)
23891           .kernel_width(3)
23892           .subsampling(2)
23893           .padding_left(1)
23894           .padding_right(1)
23895           .padding_top(1)
23896           .padding_bottom(1)
23897           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4_acc2);
23898       }
23899     }
23900   }
23901 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_gt_2)23902   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_gt_2) {
23903     for (size_t input_height = 5; input_height < 9; input_height++) {
23904       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23905         DWConv2DMicrokernelTester()
23906           .input_width(input_width)
23907           .input_height(input_height)
23908           .kernel_height(3)
23909           .kernel_width(3)
23910           .subsampling(2)
23911           .padding_left(1)
23912           .padding_right(1)
23913           .padding_top(1)
23914           .padding_bottom(1)
23915           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4_acc2);
23916       }
23917     }
23918   }
23919 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,padding_top_eq_1)23920   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, padding_top_eq_1) {
23921     for (size_t input_height = 2; input_height < 14; input_height++) {
23922       for (size_t input_width = 1; input_width < 41; input_width += 7) {
23923         DWConv2DMicrokernelTester()
23924           .input_width(input_width)
23925           .input_height(input_height)
23926           .kernel_height(3)
23927           .kernel_width(3)
23928           .subsampling(2)
23929           .padding_left(1)
23930           .padding_right(1)
23931           .padding_top(0)
23932           .padding_bottom(1)
23933           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_2x4_acc2);
23934       }
23935     }
23936   }
23937 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23938 
23939 
23940 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4,output_width_eq_4)23941   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4, output_width_eq_4) {
23942     for (size_t input_width = 7; input_width < 9; input_width++) {
23943       DWConv2DMicrokernelTester()
23944         .input_width(input_width)
23945         .input_height(6)
23946         .kernel_height(3)
23947         .kernel_width(3)
23948         .subsampling(2)
23949         .padding_left(1)
23950         .padding_right(1)
23951         .padding_top(1)
23952         .padding_bottom(1)
23953         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_3x4);
23954     }
23955   }
23956 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4,output_width_div_4)23957   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4, output_width_div_4) {
23958     for (size_t input_width = 16; input_width < 64; input_width += 8) {
23959       DWConv2DMicrokernelTester()
23960         .input_width(input_width)
23961         .input_height(6)
23962         .kernel_height(3)
23963         .kernel_width(3)
23964         .subsampling(2)
23965         .padding_left(1)
23966         .padding_right(1)
23967         .padding_top(1)
23968         .padding_bottom(1)
23969         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_3x4);
23970     }
23971   }
23972 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4,output_width_lt_4)23973   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4, output_width_lt_4) {
23974     for (size_t input_width = 1; input_width < 7; input_width++) {
23975       DWConv2DMicrokernelTester()
23976         .input_width(8)
23977         .input_height(6)
23978         .kernel_height(3)
23979         .kernel_width(3)
23980         .subsampling(2)
23981         .padding_left(1)
23982         .padding_right(1)
23983         .padding_top(1)
23984         .padding_bottom(1)
23985         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_3x4);
23986     }
23987   }
23988 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4,output_width_gt_4)23989   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4, output_width_gt_4) {
23990     for (size_t input_width = 9; input_width < 17; input_width++) {
23991       DWConv2DMicrokernelTester()
23992         .input_width(input_width)
23993         .input_height(6)
23994         .kernel_height(3)
23995         .kernel_width(3)
23996         .subsampling(2)
23997         .padding_left(1)
23998         .padding_right(1)
23999         .padding_top(1)
24000         .padding_bottom(1)
24001         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_3x4);
24002     }
24003   }
24004 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4,output_height_eq_3)24005   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4, output_height_eq_3) {
24006     for (size_t input_height = 5; input_height < 7; input_height++) {
24007       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24008         DWConv2DMicrokernelTester()
24009           .input_width(input_width)
24010           .input_height(input_height)
24011           .kernel_height(3)
24012           .kernel_width(3)
24013           .subsampling(2)
24014           .padding_left(1)
24015           .padding_right(1)
24016           .padding_top(1)
24017           .padding_bottom(1)
24018           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_3x4);
24019       }
24020     }
24021   }
24022 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4,output_height_div_3)24023   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4, output_height_div_3) {
24024     for (size_t input_height = 12; input_height < 48; input_height += 6) {
24025       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24026         DWConv2DMicrokernelTester()
24027           .input_width(input_width)
24028           .input_height(input_height)
24029           .kernel_height(3)
24030           .kernel_width(3)
24031           .subsampling(2)
24032           .padding_left(1)
24033           .padding_right(1)
24034           .padding_top(1)
24035           .padding_bottom(1)
24036           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_3x4);
24037       }
24038     }
24039   }
24040 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4,output_height_lt_3)24041   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4, output_height_lt_3) {
24042     for (size_t input_height = 1; input_height < 5; input_height++) {
24043       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24044         DWConv2DMicrokernelTester()
24045           .input_width(input_width)
24046           .input_height(input_height)
24047           .kernel_height(3)
24048           .kernel_width(3)
24049           .subsampling(2)
24050           .padding_left(1)
24051           .padding_right(1)
24052           .padding_top(1)
24053           .padding_bottom(1)
24054           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_3x4);
24055       }
24056     }
24057   }
24058 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4,output_height_gt_3)24059   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4, output_height_gt_3) {
24060     for (size_t input_height = 7; input_height < 13; input_height++) {
24061       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24062         DWConv2DMicrokernelTester()
24063           .input_width(input_width)
24064           .input_height(input_height)
24065           .kernel_height(3)
24066           .kernel_width(3)
24067           .subsampling(2)
24068           .padding_left(1)
24069           .padding_right(1)
24070           .padding_top(1)
24071           .padding_bottom(1)
24072           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_3x4);
24073       }
24074     }
24075   }
24076 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4,padding_top_eq_1)24077   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_3X4, padding_top_eq_1) {
24078     for (size_t input_height = 2; input_height < 20; input_height++) {
24079       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24080         DWConv2DMicrokernelTester()
24081           .input_width(input_width)
24082           .input_height(input_height)
24083           .kernel_height(3)
24084           .kernel_width(3)
24085           .subsampling(2)
24086           .padding_left(1)
24087           .padding_right(1)
24088           .padding_top(0)
24089           .padding_bottom(1)
24090           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_3x4);
24091       }
24092     }
24093   }
24094 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24095 
24096 
24097 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4,output_width_eq_4)24098   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4, output_width_eq_4) {
24099     for (size_t input_width = 7; input_width < 9; input_width++) {
24100       DWConv2DMicrokernelTester()
24101         .input_width(input_width)
24102         .input_height(8)
24103         .kernel_height(3)
24104         .kernel_width(3)
24105         .subsampling(2)
24106         .padding_left(1)
24107         .padding_right(1)
24108         .padding_top(1)
24109         .padding_bottom(1)
24110         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_4x4);
24111     }
24112   }
24113 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4,output_width_div_4)24114   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4, output_width_div_4) {
24115     for (size_t input_width = 16; input_width < 64; input_width += 8) {
24116       DWConv2DMicrokernelTester()
24117         .input_width(input_width)
24118         .input_height(8)
24119         .kernel_height(3)
24120         .kernel_width(3)
24121         .subsampling(2)
24122         .padding_left(1)
24123         .padding_right(1)
24124         .padding_top(1)
24125         .padding_bottom(1)
24126         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_4x4);
24127     }
24128   }
24129 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4,output_width_lt_4)24130   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4, output_width_lt_4) {
24131     for (size_t input_width = 1; input_width < 7; input_width++) {
24132       DWConv2DMicrokernelTester()
24133         .input_width(8)
24134         .input_height(8)
24135         .kernel_height(3)
24136         .kernel_width(3)
24137         .subsampling(2)
24138         .padding_left(1)
24139         .padding_right(1)
24140         .padding_top(1)
24141         .padding_bottom(1)
24142         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_4x4);
24143     }
24144   }
24145 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4,output_width_gt_4)24146   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4, output_width_gt_4) {
24147     for (size_t input_width = 9; input_width < 17; input_width++) {
24148       DWConv2DMicrokernelTester()
24149         .input_width(input_width)
24150         .input_height(8)
24151         .kernel_height(3)
24152         .kernel_width(3)
24153         .subsampling(2)
24154         .padding_left(1)
24155         .padding_right(1)
24156         .padding_top(1)
24157         .padding_bottom(1)
24158         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_4x4);
24159     }
24160   }
24161 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4,output_height_eq_4)24162   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4, output_height_eq_4) {
24163     for (size_t input_height = 7; input_height < 9; input_height++) {
24164       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24165         DWConv2DMicrokernelTester()
24166           .input_width(input_width)
24167           .input_height(input_height)
24168           .kernel_height(3)
24169           .kernel_width(3)
24170           .subsampling(2)
24171           .padding_left(1)
24172           .padding_right(1)
24173           .padding_top(1)
24174           .padding_bottom(1)
24175           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_4x4);
24176       }
24177     }
24178   }
24179 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4,output_height_div_4)24180   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4, output_height_div_4) {
24181     for (size_t input_height = 16; input_height < 64; input_height += 8) {
24182       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24183         DWConv2DMicrokernelTester()
24184           .input_width(input_width)
24185           .input_height(input_height)
24186           .kernel_height(3)
24187           .kernel_width(3)
24188           .subsampling(2)
24189           .padding_left(1)
24190           .padding_right(1)
24191           .padding_top(1)
24192           .padding_bottom(1)
24193           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_4x4);
24194       }
24195     }
24196   }
24197 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4,output_height_lt_4)24198   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4, output_height_lt_4) {
24199     for (size_t input_height = 1; input_height < 7; input_height++) {
24200       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24201         DWConv2DMicrokernelTester()
24202           .input_width(input_width)
24203           .input_height(input_height)
24204           .kernel_height(3)
24205           .kernel_width(3)
24206           .subsampling(2)
24207           .padding_left(1)
24208           .padding_right(1)
24209           .padding_top(1)
24210           .padding_bottom(1)
24211           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_4x4);
24212       }
24213     }
24214   }
24215 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4,output_height_gt_4)24216   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4, output_height_gt_4) {
24217     for (size_t input_height = 9; input_height < 17; input_height++) {
24218       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24219         DWConv2DMicrokernelTester()
24220           .input_width(input_width)
24221           .input_height(input_height)
24222           .kernel_height(3)
24223           .kernel_width(3)
24224           .subsampling(2)
24225           .padding_left(1)
24226           .padding_right(1)
24227           .padding_top(1)
24228           .padding_bottom(1)
24229           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_4x4);
24230       }
24231     }
24232   }
24233 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4,padding_top_eq_1)24234   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_LOADSPLAT_4X4, padding_top_eq_1) {
24235     for (size_t input_height = 2; input_height < 26; input_height++) {
24236       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24237         DWConv2DMicrokernelTester()
24238           .input_width(input_width)
24239           .input_height(input_height)
24240           .kernel_height(3)
24241           .kernel_width(3)
24242           .subsampling(2)
24243           .padding_left(1)
24244           .padding_right(1)
24245           .padding_top(0)
24246           .padding_bottom(1)
24247           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_loadsplat_4x4);
24248       }
24249     }
24250   }
24251 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24252 
24253 
24254 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4,output_width_eq_4)24255   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4, output_width_eq_4) {
24256     for (size_t input_width = 7; input_width < 9; input_width++) {
24257       DWConv2DMicrokernelTester()
24258         .input_width(input_width)
24259         .input_height(2)
24260         .kernel_height(3)
24261         .kernel_width(3)
24262         .subsampling(2)
24263         .padding_left(1)
24264         .padding_right(1)
24265         .padding_top(1)
24266         .padding_bottom(1)
24267         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4);
24268     }
24269   }
24270 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4,output_width_div_4)24271   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4, output_width_div_4) {
24272     for (size_t input_width = 16; input_width < 64; input_width += 8) {
24273       DWConv2DMicrokernelTester()
24274         .input_width(input_width)
24275         .input_height(2)
24276         .kernel_height(3)
24277         .kernel_width(3)
24278         .subsampling(2)
24279         .padding_left(1)
24280         .padding_right(1)
24281         .padding_top(1)
24282         .padding_bottom(1)
24283         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4);
24284     }
24285   }
24286 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4,output_width_lt_4)24287   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4, output_width_lt_4) {
24288     for (size_t input_width = 1; input_width < 7; input_width++) {
24289       DWConv2DMicrokernelTester()
24290         .input_width(8)
24291         .input_height(2)
24292         .kernel_height(3)
24293         .kernel_width(3)
24294         .subsampling(2)
24295         .padding_left(1)
24296         .padding_right(1)
24297         .padding_top(1)
24298         .padding_bottom(1)
24299         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4);
24300     }
24301   }
24302 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4,output_width_gt_4)24303   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4, output_width_gt_4) {
24304     for (size_t input_width = 9; input_width < 17; input_width++) {
24305       DWConv2DMicrokernelTester()
24306         .input_width(input_width)
24307         .input_height(2)
24308         .kernel_height(3)
24309         .kernel_width(3)
24310         .subsampling(2)
24311         .padding_left(1)
24312         .padding_right(1)
24313         .padding_top(1)
24314         .padding_bottom(1)
24315         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4);
24316     }
24317   }
24318 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4,output_height_eq_1)24319   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4, output_height_eq_1) {
24320     for (size_t input_height = 1; input_height < 3; input_height++) {
24321       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24322         DWConv2DMicrokernelTester()
24323           .input_width(input_width)
24324           .input_height(input_height)
24325           .kernel_height(3)
24326           .kernel_width(3)
24327           .subsampling(2)
24328           .padding_left(1)
24329           .padding_right(1)
24330           .padding_top(1)
24331           .padding_bottom(1)
24332           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4);
24333       }
24334     }
24335   }
24336 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4,output_height_gt_1)24337   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4, output_height_gt_1) {
24338     for (size_t input_height = 3; input_height < 5; input_height++) {
24339       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24340         DWConv2DMicrokernelTester()
24341           .input_width(input_width)
24342           .input_height(input_height)
24343           .kernel_height(3)
24344           .kernel_width(3)
24345           .subsampling(2)
24346           .padding_left(1)
24347           .padding_right(1)
24348           .padding_top(1)
24349           .padding_bottom(1)
24350           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4);
24351       }
24352     }
24353   }
24354 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4,padding_top_eq_1)24355   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4, padding_top_eq_1) {
24356     for (size_t input_height = 2; input_height < 8; input_height++) {
24357       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24358         DWConv2DMicrokernelTester()
24359           .input_width(input_width)
24360           .input_height(input_height)
24361           .kernel_height(3)
24362           .kernel_width(3)
24363           .subsampling(2)
24364           .padding_left(1)
24365           .padding_right(1)
24366           .padding_top(0)
24367           .padding_bottom(1)
24368           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4);
24369       }
24370     }
24371   }
24372 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24373 
24374 
24375 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_eq_4)24376   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_eq_4) {
24377     for (size_t input_width = 7; input_width < 9; input_width++) {
24378       DWConv2DMicrokernelTester()
24379         .input_width(input_width)
24380         .input_height(2)
24381         .kernel_height(3)
24382         .kernel_width(3)
24383         .subsampling(2)
24384         .padding_left(1)
24385         .padding_right(1)
24386         .padding_top(1)
24387         .padding_bottom(1)
24388         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc2);
24389     }
24390   }
24391 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_div_4)24392   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_div_4) {
24393     for (size_t input_width = 16; input_width < 64; input_width += 8) {
24394       DWConv2DMicrokernelTester()
24395         .input_width(input_width)
24396         .input_height(2)
24397         .kernel_height(3)
24398         .kernel_width(3)
24399         .subsampling(2)
24400         .padding_left(1)
24401         .padding_right(1)
24402         .padding_top(1)
24403         .padding_bottom(1)
24404         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc2);
24405     }
24406   }
24407 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_lt_4)24408   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_lt_4) {
24409     for (size_t input_width = 1; input_width < 7; input_width++) {
24410       DWConv2DMicrokernelTester()
24411         .input_width(8)
24412         .input_height(2)
24413         .kernel_height(3)
24414         .kernel_width(3)
24415         .subsampling(2)
24416         .padding_left(1)
24417         .padding_right(1)
24418         .padding_top(1)
24419         .padding_bottom(1)
24420         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc2);
24421     }
24422   }
24423 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_gt_4)24424   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_gt_4) {
24425     for (size_t input_width = 9; input_width < 17; input_width++) {
24426       DWConv2DMicrokernelTester()
24427         .input_width(input_width)
24428         .input_height(2)
24429         .kernel_height(3)
24430         .kernel_width(3)
24431         .subsampling(2)
24432         .padding_left(1)
24433         .padding_right(1)
24434         .padding_top(1)
24435         .padding_bottom(1)
24436         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc2);
24437     }
24438   }
24439 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2,output_height_eq_1)24440   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2, output_height_eq_1) {
24441     for (size_t input_height = 1; input_height < 3; input_height++) {
24442       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24443         DWConv2DMicrokernelTester()
24444           .input_width(input_width)
24445           .input_height(input_height)
24446           .kernel_height(3)
24447           .kernel_width(3)
24448           .subsampling(2)
24449           .padding_left(1)
24450           .padding_right(1)
24451           .padding_top(1)
24452           .padding_bottom(1)
24453           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc2);
24454       }
24455     }
24456   }
24457 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2,output_height_gt_1)24458   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2, output_height_gt_1) {
24459     for (size_t input_height = 3; input_height < 5; input_height++) {
24460       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24461         DWConv2DMicrokernelTester()
24462           .input_width(input_width)
24463           .input_height(input_height)
24464           .kernel_height(3)
24465           .kernel_width(3)
24466           .subsampling(2)
24467           .padding_left(1)
24468           .padding_right(1)
24469           .padding_top(1)
24470           .padding_bottom(1)
24471           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc2);
24472       }
24473     }
24474   }
24475 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2,padding_top_eq_1)24476   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC2, padding_top_eq_1) {
24477     for (size_t input_height = 2; input_height < 8; input_height++) {
24478       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24479         DWConv2DMicrokernelTester()
24480           .input_width(input_width)
24481           .input_height(input_height)
24482           .kernel_height(3)
24483           .kernel_width(3)
24484           .subsampling(2)
24485           .padding_left(1)
24486           .padding_right(1)
24487           .padding_top(0)
24488           .padding_bottom(1)
24489           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc2);
24490       }
24491     }
24492   }
24493 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24494 
24495 
24496 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_eq_4)24497   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_eq_4) {
24498     for (size_t input_width = 7; input_width < 9; input_width++) {
24499       DWConv2DMicrokernelTester()
24500         .input_width(input_width)
24501         .input_height(2)
24502         .kernel_height(3)
24503         .kernel_width(3)
24504         .subsampling(2)
24505         .padding_left(1)
24506         .padding_right(1)
24507         .padding_top(1)
24508         .padding_bottom(1)
24509         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc3);
24510     }
24511   }
24512 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_div_4)24513   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_div_4) {
24514     for (size_t input_width = 16; input_width < 64; input_width += 8) {
24515       DWConv2DMicrokernelTester()
24516         .input_width(input_width)
24517         .input_height(2)
24518         .kernel_height(3)
24519         .kernel_width(3)
24520         .subsampling(2)
24521         .padding_left(1)
24522         .padding_right(1)
24523         .padding_top(1)
24524         .padding_bottom(1)
24525         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc3);
24526     }
24527   }
24528 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_lt_4)24529   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_lt_4) {
24530     for (size_t input_width = 1; input_width < 7; input_width++) {
24531       DWConv2DMicrokernelTester()
24532         .input_width(8)
24533         .input_height(2)
24534         .kernel_height(3)
24535         .kernel_width(3)
24536         .subsampling(2)
24537         .padding_left(1)
24538         .padding_right(1)
24539         .padding_top(1)
24540         .padding_bottom(1)
24541         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc3);
24542     }
24543   }
24544 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_gt_4)24545   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_gt_4) {
24546     for (size_t input_width = 9; input_width < 17; input_width++) {
24547       DWConv2DMicrokernelTester()
24548         .input_width(input_width)
24549         .input_height(2)
24550         .kernel_height(3)
24551         .kernel_width(3)
24552         .subsampling(2)
24553         .padding_left(1)
24554         .padding_right(1)
24555         .padding_top(1)
24556         .padding_bottom(1)
24557         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc3);
24558     }
24559   }
24560 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3,output_height_eq_1)24561   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3, output_height_eq_1) {
24562     for (size_t input_height = 1; input_height < 3; input_height++) {
24563       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24564         DWConv2DMicrokernelTester()
24565           .input_width(input_width)
24566           .input_height(input_height)
24567           .kernel_height(3)
24568           .kernel_width(3)
24569           .subsampling(2)
24570           .padding_left(1)
24571           .padding_right(1)
24572           .padding_top(1)
24573           .padding_bottom(1)
24574           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc3);
24575       }
24576     }
24577   }
24578 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3,output_height_gt_1)24579   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3, output_height_gt_1) {
24580     for (size_t input_height = 3; input_height < 5; input_height++) {
24581       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24582         DWConv2DMicrokernelTester()
24583           .input_width(input_width)
24584           .input_height(input_height)
24585           .kernel_height(3)
24586           .kernel_width(3)
24587           .subsampling(2)
24588           .padding_left(1)
24589           .padding_right(1)
24590           .padding_top(1)
24591           .padding_bottom(1)
24592           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc3);
24593       }
24594     }
24595   }
24596 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3,padding_top_eq_1)24597   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC3, padding_top_eq_1) {
24598     for (size_t input_height = 2; input_height < 8; input_height++) {
24599       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24600         DWConv2DMicrokernelTester()
24601           .input_width(input_width)
24602           .input_height(input_height)
24603           .kernel_height(3)
24604           .kernel_width(3)
24605           .subsampling(2)
24606           .padding_left(1)
24607           .padding_right(1)
24608           .padding_top(0)
24609           .padding_bottom(1)
24610           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc3);
24611       }
24612     }
24613   }
24614 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24615 
24616 
24617 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_eq_4)24618   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_eq_4) {
24619     for (size_t input_width = 7; input_width < 9; input_width++) {
24620       DWConv2DMicrokernelTester()
24621         .input_width(input_width)
24622         .input_height(2)
24623         .kernel_height(3)
24624         .kernel_width(3)
24625         .subsampling(2)
24626         .padding_left(1)
24627         .padding_right(1)
24628         .padding_top(1)
24629         .padding_bottom(1)
24630         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc4);
24631     }
24632   }
24633 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_div_4)24634   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_div_4) {
24635     for (size_t input_width = 16; input_width < 64; input_width += 8) {
24636       DWConv2DMicrokernelTester()
24637         .input_width(input_width)
24638         .input_height(2)
24639         .kernel_height(3)
24640         .kernel_width(3)
24641         .subsampling(2)
24642         .padding_left(1)
24643         .padding_right(1)
24644         .padding_top(1)
24645         .padding_bottom(1)
24646         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc4);
24647     }
24648   }
24649 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_lt_4)24650   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_lt_4) {
24651     for (size_t input_width = 1; input_width < 7; input_width++) {
24652       DWConv2DMicrokernelTester()
24653         .input_width(8)
24654         .input_height(2)
24655         .kernel_height(3)
24656         .kernel_width(3)
24657         .subsampling(2)
24658         .padding_left(1)
24659         .padding_right(1)
24660         .padding_top(1)
24661         .padding_bottom(1)
24662         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc4);
24663     }
24664   }
24665 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_gt_4)24666   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_gt_4) {
24667     for (size_t input_width = 9; input_width < 17; input_width++) {
24668       DWConv2DMicrokernelTester()
24669         .input_width(input_width)
24670         .input_height(2)
24671         .kernel_height(3)
24672         .kernel_width(3)
24673         .subsampling(2)
24674         .padding_left(1)
24675         .padding_right(1)
24676         .padding_top(1)
24677         .padding_bottom(1)
24678         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc4);
24679     }
24680   }
24681 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4,output_height_eq_1)24682   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4, output_height_eq_1) {
24683     for (size_t input_height = 1; input_height < 3; input_height++) {
24684       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24685         DWConv2DMicrokernelTester()
24686           .input_width(input_width)
24687           .input_height(input_height)
24688           .kernel_height(3)
24689           .kernel_width(3)
24690           .subsampling(2)
24691           .padding_left(1)
24692           .padding_right(1)
24693           .padding_top(1)
24694           .padding_bottom(1)
24695           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc4);
24696       }
24697     }
24698   }
24699 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4,output_height_gt_1)24700   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4, output_height_gt_1) {
24701     for (size_t input_height = 3; input_height < 5; input_height++) {
24702       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24703         DWConv2DMicrokernelTester()
24704           .input_width(input_width)
24705           .input_height(input_height)
24706           .kernel_height(3)
24707           .kernel_width(3)
24708           .subsampling(2)
24709           .padding_left(1)
24710           .padding_right(1)
24711           .padding_top(1)
24712           .padding_bottom(1)
24713           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc4);
24714       }
24715     }
24716   }
24717 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4,padding_top_eq_1)24718   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_1X4_ACC4, padding_top_eq_1) {
24719     for (size_t input_height = 2; input_height < 8; input_height++) {
24720       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24721         DWConv2DMicrokernelTester()
24722           .input_width(input_width)
24723           .input_height(input_height)
24724           .kernel_height(3)
24725           .kernel_width(3)
24726           .subsampling(2)
24727           .padding_left(1)
24728           .padding_right(1)
24729           .padding_top(0)
24730           .padding_bottom(1)
24731           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_1x4_acc4);
24732       }
24733     }
24734   }
24735 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24736 
24737 
24738 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4,output_width_eq_4)24739   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4, output_width_eq_4) {
24740     for (size_t input_width = 7; input_width < 9; input_width++) {
24741       DWConv2DMicrokernelTester()
24742         .input_width(input_width)
24743         .input_height(4)
24744         .kernel_height(3)
24745         .kernel_width(3)
24746         .subsampling(2)
24747         .padding_left(1)
24748         .padding_right(1)
24749         .padding_top(1)
24750         .padding_bottom(1)
24751         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4);
24752     }
24753   }
24754 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4,output_width_div_4)24755   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4, output_width_div_4) {
24756     for (size_t input_width = 16; input_width < 64; input_width += 8) {
24757       DWConv2DMicrokernelTester()
24758         .input_width(input_width)
24759         .input_height(4)
24760         .kernel_height(3)
24761         .kernel_width(3)
24762         .subsampling(2)
24763         .padding_left(1)
24764         .padding_right(1)
24765         .padding_top(1)
24766         .padding_bottom(1)
24767         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4);
24768     }
24769   }
24770 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4,output_width_lt_4)24771   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4, output_width_lt_4) {
24772     for (size_t input_width = 1; input_width < 7; input_width++) {
24773       DWConv2DMicrokernelTester()
24774         .input_width(8)
24775         .input_height(4)
24776         .kernel_height(3)
24777         .kernel_width(3)
24778         .subsampling(2)
24779         .padding_left(1)
24780         .padding_right(1)
24781         .padding_top(1)
24782         .padding_bottom(1)
24783         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4);
24784     }
24785   }
24786 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4,output_width_gt_4)24787   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4, output_width_gt_4) {
24788     for (size_t input_width = 9; input_width < 17; input_width++) {
24789       DWConv2DMicrokernelTester()
24790         .input_width(input_width)
24791         .input_height(4)
24792         .kernel_height(3)
24793         .kernel_width(3)
24794         .subsampling(2)
24795         .padding_left(1)
24796         .padding_right(1)
24797         .padding_top(1)
24798         .padding_bottom(1)
24799         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4);
24800     }
24801   }
24802 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4,output_height_eq_2)24803   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4, output_height_eq_2) {
24804     for (size_t input_height = 3; input_height < 5; input_height++) {
24805       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24806         DWConv2DMicrokernelTester()
24807           .input_width(input_width)
24808           .input_height(input_height)
24809           .kernel_height(3)
24810           .kernel_width(3)
24811           .subsampling(2)
24812           .padding_left(1)
24813           .padding_right(1)
24814           .padding_top(1)
24815           .padding_bottom(1)
24816           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4);
24817       }
24818     }
24819   }
24820 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4,output_height_div_2)24821   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4, output_height_div_2) {
24822     for (size_t input_height = 8; input_height < 32; input_height += 4) {
24823       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24824         DWConv2DMicrokernelTester()
24825           .input_width(input_width)
24826           .input_height(input_height)
24827           .kernel_height(3)
24828           .kernel_width(3)
24829           .subsampling(2)
24830           .padding_left(1)
24831           .padding_right(1)
24832           .padding_top(1)
24833           .padding_bottom(1)
24834           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4);
24835       }
24836     }
24837   }
24838 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4,output_height_lt_2)24839   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4, output_height_lt_2) {
24840     for (size_t input_height = 1; input_height < 3; input_height++) {
24841       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24842         DWConv2DMicrokernelTester()
24843           .input_width(input_width)
24844           .input_height(input_height)
24845           .kernel_height(3)
24846           .kernel_width(3)
24847           .subsampling(2)
24848           .padding_left(1)
24849           .padding_right(1)
24850           .padding_top(1)
24851           .padding_bottom(1)
24852           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4);
24853       }
24854     }
24855   }
24856 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4,output_height_gt_2)24857   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4, output_height_gt_2) {
24858     for (size_t input_height = 5; input_height < 9; input_height++) {
24859       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24860         DWConv2DMicrokernelTester()
24861           .input_width(input_width)
24862           .input_height(input_height)
24863           .kernel_height(3)
24864           .kernel_width(3)
24865           .subsampling(2)
24866           .padding_left(1)
24867           .padding_right(1)
24868           .padding_top(1)
24869           .padding_bottom(1)
24870           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4);
24871       }
24872     }
24873   }
24874 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4,padding_top_eq_1)24875   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4, padding_top_eq_1) {
24876     for (size_t input_height = 2; input_height < 14; input_height++) {
24877       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24878         DWConv2DMicrokernelTester()
24879           .input_width(input_width)
24880           .input_height(input_height)
24881           .kernel_height(3)
24882           .kernel_width(3)
24883           .subsampling(2)
24884           .padding_left(1)
24885           .padding_right(1)
24886           .padding_top(0)
24887           .padding_bottom(1)
24888           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4);
24889       }
24890     }
24891   }
24892 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24893 
24894 
24895 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_eq_4)24896   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_eq_4) {
24897     for (size_t input_width = 7; input_width < 9; input_width++) {
24898       DWConv2DMicrokernelTester()
24899         .input_width(input_width)
24900         .input_height(4)
24901         .kernel_height(3)
24902         .kernel_width(3)
24903         .subsampling(2)
24904         .padding_left(1)
24905         .padding_right(1)
24906         .padding_top(1)
24907         .padding_bottom(1)
24908         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4_acc2);
24909     }
24910   }
24911 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_div_4)24912   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_div_4) {
24913     for (size_t input_width = 16; input_width < 64; input_width += 8) {
24914       DWConv2DMicrokernelTester()
24915         .input_width(input_width)
24916         .input_height(4)
24917         .kernel_height(3)
24918         .kernel_width(3)
24919         .subsampling(2)
24920         .padding_left(1)
24921         .padding_right(1)
24922         .padding_top(1)
24923         .padding_bottom(1)
24924         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4_acc2);
24925     }
24926   }
24927 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_lt_4)24928   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_lt_4) {
24929     for (size_t input_width = 1; input_width < 7; input_width++) {
24930       DWConv2DMicrokernelTester()
24931         .input_width(8)
24932         .input_height(4)
24933         .kernel_height(3)
24934         .kernel_width(3)
24935         .subsampling(2)
24936         .padding_left(1)
24937         .padding_right(1)
24938         .padding_top(1)
24939         .padding_bottom(1)
24940         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4_acc2);
24941     }
24942   }
24943 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_gt_4)24944   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_gt_4) {
24945     for (size_t input_width = 9; input_width < 17; input_width++) {
24946       DWConv2DMicrokernelTester()
24947         .input_width(input_width)
24948         .input_height(4)
24949         .kernel_height(3)
24950         .kernel_width(3)
24951         .subsampling(2)
24952         .padding_left(1)
24953         .padding_right(1)
24954         .padding_top(1)
24955         .padding_bottom(1)
24956         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4_acc2);
24957     }
24958   }
24959 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_eq_2)24960   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_eq_2) {
24961     for (size_t input_height = 3; input_height < 5; input_height++) {
24962       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24963         DWConv2DMicrokernelTester()
24964           .input_width(input_width)
24965           .input_height(input_height)
24966           .kernel_height(3)
24967           .kernel_width(3)
24968           .subsampling(2)
24969           .padding_left(1)
24970           .padding_right(1)
24971           .padding_top(1)
24972           .padding_bottom(1)
24973           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4_acc2);
24974       }
24975     }
24976   }
24977 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_div_2)24978   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_div_2) {
24979     for (size_t input_height = 8; input_height < 32; input_height += 4) {
24980       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24981         DWConv2DMicrokernelTester()
24982           .input_width(input_width)
24983           .input_height(input_height)
24984           .kernel_height(3)
24985           .kernel_width(3)
24986           .subsampling(2)
24987           .padding_left(1)
24988           .padding_right(1)
24989           .padding_top(1)
24990           .padding_bottom(1)
24991           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4_acc2);
24992       }
24993     }
24994   }
24995 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_lt_2)24996   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_lt_2) {
24997     for (size_t input_height = 1; input_height < 3; input_height++) {
24998       for (size_t input_width = 1; input_width < 41; input_width += 7) {
24999         DWConv2DMicrokernelTester()
25000           .input_width(input_width)
25001           .input_height(input_height)
25002           .kernel_height(3)
25003           .kernel_width(3)
25004           .subsampling(2)
25005           .padding_left(1)
25006           .padding_right(1)
25007           .padding_top(1)
25008           .padding_bottom(1)
25009           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4_acc2);
25010       }
25011     }
25012   }
25013 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_gt_2)25014   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_gt_2) {
25015     for (size_t input_height = 5; input_height < 9; input_height++) {
25016       for (size_t input_width = 1; input_width < 41; input_width += 7) {
25017         DWConv2DMicrokernelTester()
25018           .input_width(input_width)
25019           .input_height(input_height)
25020           .kernel_height(3)
25021           .kernel_width(3)
25022           .subsampling(2)
25023           .padding_left(1)
25024           .padding_right(1)
25025           .padding_top(1)
25026           .padding_bottom(1)
25027           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4_acc2);
25028       }
25029     }
25030   }
25031 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2,padding_top_eq_1)25032   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_2X4_ACC2, padding_top_eq_1) {
25033     for (size_t input_height = 2; input_height < 14; input_height++) {
25034       for (size_t input_width = 1; input_width < 41; input_width += 7) {
25035         DWConv2DMicrokernelTester()
25036           .input_width(input_width)
25037           .input_height(input_height)
25038           .kernel_height(3)
25039           .kernel_width(3)
25040           .subsampling(2)
25041           .padding_left(1)
25042           .padding_right(1)
25043           .padding_top(0)
25044           .padding_bottom(1)
25045           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_2x4_acc2);
25046       }
25047     }
25048   }
25049 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25050 
25051 
25052 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4,output_width_eq_4)25053   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4, output_width_eq_4) {
25054     for (size_t input_width = 7; input_width < 9; input_width++) {
25055       DWConv2DMicrokernelTester()
25056         .input_width(input_width)
25057         .input_height(6)
25058         .kernel_height(3)
25059         .kernel_width(3)
25060         .subsampling(2)
25061         .padding_left(1)
25062         .padding_right(1)
25063         .padding_top(1)
25064         .padding_bottom(1)
25065         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_3x4);
25066     }
25067   }
25068 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4,output_width_div_4)25069   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4, output_width_div_4) {
25070     for (size_t input_width = 16; input_width < 64; input_width += 8) {
25071       DWConv2DMicrokernelTester()
25072         .input_width(input_width)
25073         .input_height(6)
25074         .kernel_height(3)
25075         .kernel_width(3)
25076         .subsampling(2)
25077         .padding_left(1)
25078         .padding_right(1)
25079         .padding_top(1)
25080         .padding_bottom(1)
25081         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_3x4);
25082     }
25083   }
25084 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4,output_width_lt_4)25085   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4, output_width_lt_4) {
25086     for (size_t input_width = 1; input_width < 7; input_width++) {
25087       DWConv2DMicrokernelTester()
25088         .input_width(8)
25089         .input_height(6)
25090         .kernel_height(3)
25091         .kernel_width(3)
25092         .subsampling(2)
25093         .padding_left(1)
25094         .padding_right(1)
25095         .padding_top(1)
25096         .padding_bottom(1)
25097         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_3x4);
25098     }
25099   }
25100 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4,output_width_gt_4)25101   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4, output_width_gt_4) {
25102     for (size_t input_width = 9; input_width < 17; input_width++) {
25103       DWConv2DMicrokernelTester()
25104         .input_width(input_width)
25105         .input_height(6)
25106         .kernel_height(3)
25107         .kernel_width(3)
25108         .subsampling(2)
25109         .padding_left(1)
25110         .padding_right(1)
25111         .padding_top(1)
25112         .padding_bottom(1)
25113         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_3x4);
25114     }
25115   }
25116 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4,output_height_eq_3)25117   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4, output_height_eq_3) {
25118     for (size_t input_height = 5; input_height < 7; input_height++) {
25119       for (size_t input_width = 1; input_width < 41; input_width += 7) {
25120         DWConv2DMicrokernelTester()
25121           .input_width(input_width)
25122           .input_height(input_height)
25123           .kernel_height(3)
25124           .kernel_width(3)
25125           .subsampling(2)
25126           .padding_left(1)
25127           .padding_right(1)
25128           .padding_top(1)
25129           .padding_bottom(1)
25130           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_3x4);
25131       }
25132     }
25133   }
25134 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4,output_height_div_3)25135   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4, output_height_div_3) {
25136     for (size_t input_height = 12; input_height < 48; input_height += 6) {
25137       for (size_t input_width = 1; input_width < 41; input_width += 7) {
25138         DWConv2DMicrokernelTester()
25139           .input_width(input_width)
25140           .input_height(input_height)
25141           .kernel_height(3)
25142           .kernel_width(3)
25143           .subsampling(2)
25144           .padding_left(1)
25145           .padding_right(1)
25146           .padding_top(1)
25147           .padding_bottom(1)
25148           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_3x4);
25149       }
25150     }
25151   }
25152 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4,output_height_lt_3)25153   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4, output_height_lt_3) {
25154     for (size_t input_height = 1; input_height < 5; input_height++) {
25155       for (size_t input_width = 1; input_width < 41; input_width += 7) {
25156         DWConv2DMicrokernelTester()
25157           .input_width(input_width)
25158           .input_height(input_height)
25159           .kernel_height(3)
25160           .kernel_width(3)
25161           .subsampling(2)
25162           .padding_left(1)
25163           .padding_right(1)
25164           .padding_top(1)
25165           .padding_bottom(1)
25166           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_3x4);
25167       }
25168     }
25169   }
25170 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4,output_height_gt_3)25171   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4, output_height_gt_3) {
25172     for (size_t input_height = 7; input_height < 13; input_height++) {
25173       for (size_t input_width = 1; input_width < 41; input_width += 7) {
25174         DWConv2DMicrokernelTester()
25175           .input_width(input_width)
25176           .input_height(input_height)
25177           .kernel_height(3)
25178           .kernel_width(3)
25179           .subsampling(2)
25180           .padding_left(1)
25181           .padding_right(1)
25182           .padding_top(1)
25183           .padding_bottom(1)
25184           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_3x4);
25185       }
25186     }
25187   }
25188 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4,padding_top_eq_1)25189   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_3X4, padding_top_eq_1) {
25190     for (size_t input_height = 2; input_height < 20; input_height++) {
25191       for (size_t input_width = 1; input_width < 41; input_width += 7) {
25192         DWConv2DMicrokernelTester()
25193           .input_width(input_width)
25194           .input_height(input_height)
25195           .kernel_height(3)
25196           .kernel_width(3)
25197           .subsampling(2)
25198           .padding_left(1)
25199           .padding_right(1)
25200           .padding_top(0)
25201           .padding_bottom(1)
25202           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_3x4);
25203       }
25204     }
25205   }
25206 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25207 
25208 
25209 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4,output_width_eq_4)25210   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4, output_width_eq_4) {
25211     for (size_t input_width = 7; input_width < 9; input_width++) {
25212       DWConv2DMicrokernelTester()
25213         .input_width(input_width)
25214         .input_height(8)
25215         .kernel_height(3)
25216         .kernel_width(3)
25217         .subsampling(2)
25218         .padding_left(1)
25219         .padding_right(1)
25220         .padding_top(1)
25221         .padding_bottom(1)
25222         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_4x4);
25223     }
25224   }
25225 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4,output_width_div_4)25226   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4, output_width_div_4) {
25227     for (size_t input_width = 16; input_width < 64; input_width += 8) {
25228       DWConv2DMicrokernelTester()
25229         .input_width(input_width)
25230         .input_height(8)
25231         .kernel_height(3)
25232         .kernel_width(3)
25233         .subsampling(2)
25234         .padding_left(1)
25235         .padding_right(1)
25236         .padding_top(1)
25237         .padding_bottom(1)
25238         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_4x4);
25239     }
25240   }
25241 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4,output_width_lt_4)25242   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4, output_width_lt_4) {
25243     for (size_t input_width = 1; input_width < 7; input_width++) {
25244       DWConv2DMicrokernelTester()
25245         .input_width(8)
25246         .input_height(8)
25247         .kernel_height(3)
25248         .kernel_width(3)
25249         .subsampling(2)
25250         .padding_left(1)
25251         .padding_right(1)
25252         .padding_top(1)
25253         .padding_bottom(1)
25254         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_4x4);
25255     }
25256   }
25257 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4,output_width_gt_4)25258   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4, output_width_gt_4) {
25259     for (size_t input_width = 9; input_width < 17; input_width++) {
25260       DWConv2DMicrokernelTester()
25261         .input_width(input_width)
25262         .input_height(8)
25263         .kernel_height(3)
25264         .kernel_width(3)
25265         .subsampling(2)
25266         .padding_left(1)
25267         .padding_right(1)
25268         .padding_top(1)
25269         .padding_bottom(1)
25270         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_4x4);
25271     }
25272   }
25273 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4,output_height_eq_4)25274   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4, output_height_eq_4) {
25275     for (size_t input_height = 7; input_height < 9; input_height++) {
25276       for (size_t input_width = 1; input_width < 41; input_width += 7) {
25277         DWConv2DMicrokernelTester()
25278           .input_width(input_width)
25279           .input_height(input_height)
25280           .kernel_height(3)
25281           .kernel_width(3)
25282           .subsampling(2)
25283           .padding_left(1)
25284           .padding_right(1)
25285           .padding_top(1)
25286           .padding_bottom(1)
25287           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_4x4);
25288       }
25289     }
25290   }
25291 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4,output_height_div_4)25292   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4, output_height_div_4) {
25293     for (size_t input_height = 16; input_height < 64; input_height += 8) {
25294       for (size_t input_width = 1; input_width < 41; input_width += 7) {
25295         DWConv2DMicrokernelTester()
25296           .input_width(input_width)
25297           .input_height(input_height)
25298           .kernel_height(3)
25299           .kernel_width(3)
25300           .subsampling(2)
25301           .padding_left(1)
25302           .padding_right(1)
25303           .padding_top(1)
25304           .padding_bottom(1)
25305           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_4x4);
25306       }
25307     }
25308   }
25309 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4,output_height_lt_4)25310   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4, output_height_lt_4) {
25311     for (size_t input_height = 1; input_height < 7; input_height++) {
25312       for (size_t input_width = 1; input_width < 41; input_width += 7) {
25313         DWConv2DMicrokernelTester()
25314           .input_width(input_width)
25315           .input_height(input_height)
25316           .kernel_height(3)
25317           .kernel_width(3)
25318           .subsampling(2)
25319           .padding_left(1)
25320           .padding_right(1)
25321           .padding_top(1)
25322           .padding_bottom(1)
25323           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_4x4);
25324       }
25325     }
25326   }
25327 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4,output_height_gt_4)25328   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4, output_height_gt_4) {
25329     for (size_t input_height = 9; input_height < 17; input_height++) {
25330       for (size_t input_width = 1; input_width < 41; input_width += 7) {
25331         DWConv2DMicrokernelTester()
25332           .input_width(input_width)
25333           .input_height(input_height)
25334           .kernel_height(3)
25335           .kernel_width(3)
25336           .subsampling(2)
25337           .padding_left(1)
25338           .padding_right(1)
25339           .padding_top(1)
25340           .padding_bottom(1)
25341           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_4x4);
25342       }
25343     }
25344   }
25345 
TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4,padding_top_eq_1)25346   TEST(F32_DWCONV2D_CHW_3X3S2P1__WASMSIMD_X86_SPLAT_4X4, padding_top_eq_1) {
25347     for (size_t input_height = 2; input_height < 26; input_height++) {
25348       for (size_t input_width = 1; input_width < 41; input_width += 7) {
25349         DWConv2DMicrokernelTester()
25350           .input_width(input_width)
25351           .input_height(input_height)
25352           .kernel_height(3)
25353           .kernel_width(3)
25354           .subsampling(2)
25355           .padding_left(1)
25356           .padding_right(1)
25357           .padding_top(0)
25358           .padding_bottom(1)
25359           .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__wasmsimd_x86_splat_4x4);
25360       }
25361     }
25362   }
25363 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25364 
25365 
25366 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_eq_4)25367   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_eq_4) {
25368     DWConv2DMicrokernelTester()
25369       .input_width(4)
25370       .input_height(1)
25371       .kernel_height(5)
25372       .kernel_width(5)
25373       .subsampling(1)
25374       .padding_left(2)
25375       .padding_right(2)
25376       .padding_top(2)
25377       .padding_bottom(2)
25378       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4);
25379   }
25380 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_div_4)25381   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_div_4) {
25382     for (size_t input_width = 8; input_width < 32; input_width += 4) {
25383       DWConv2DMicrokernelTester()
25384         .input_width(input_width)
25385         .input_height(1)
25386         .kernel_height(5)
25387         .kernel_width(5)
25388         .subsampling(1)
25389         .padding_left(2)
25390         .padding_right(2)
25391         .padding_top(2)
25392         .padding_bottom(2)
25393         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4);
25394     }
25395   }
25396 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_lt_4)25397   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_lt_4) {
25398     for (size_t input_width = 1; input_width < 4; input_width++) {
25399       DWConv2DMicrokernelTester()
25400         .input_width(4)
25401         .input_height(1)
25402         .kernel_height(5)
25403         .kernel_width(5)
25404         .subsampling(1)
25405         .padding_left(2)
25406         .padding_right(2)
25407         .padding_top(2)
25408         .padding_bottom(2)
25409         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4);
25410     }
25411   }
25412 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_gt_4)25413   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_gt_4) {
25414     for (size_t input_width = 5; input_width < 9; input_width++) {
25415       DWConv2DMicrokernelTester()
25416         .input_width(input_width)
25417         .input_height(1)
25418         .kernel_height(5)
25419         .kernel_width(5)
25420         .subsampling(1)
25421         .padding_left(2)
25422         .padding_right(2)
25423         .padding_top(2)
25424         .padding_bottom(2)
25425         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4);
25426     }
25427   }
25428 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4,output_height_gt_1)25429   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4, output_height_gt_1) {
25430     for (size_t input_height = 2; input_height < 3; input_height++) {
25431       for (size_t input_width = 1; input_width < 21; input_width += 3) {
25432         DWConv2DMicrokernelTester()
25433           .input_width(input_width)
25434           .input_height(input_height)
25435           .kernel_height(5)
25436           .kernel_width(5)
25437           .subsampling(1)
25438           .padding_left(2)
25439           .padding_right(2)
25440           .padding_top(2)
25441           .padding_bottom(2)
25442           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4);
25443       }
25444     }
25445   }
25446 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25447 
25448 
25449 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_eq_4)25450   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_eq_4) {
25451     DWConv2DMicrokernelTester()
25452       .input_width(4)
25453       .input_height(1)
25454       .kernel_height(5)
25455       .kernel_width(5)
25456       .subsampling(1)
25457       .padding_left(2)
25458       .padding_right(2)
25459       .padding_top(2)
25460       .padding_bottom(2)
25461       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc2);
25462   }
25463 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_div_4)25464   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_div_4) {
25465     for (size_t input_width = 8; input_width < 32; input_width += 4) {
25466       DWConv2DMicrokernelTester()
25467         .input_width(input_width)
25468         .input_height(1)
25469         .kernel_height(5)
25470         .kernel_width(5)
25471         .subsampling(1)
25472         .padding_left(2)
25473         .padding_right(2)
25474         .padding_top(2)
25475         .padding_bottom(2)
25476         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc2);
25477     }
25478   }
25479 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_lt_4)25480   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_lt_4) {
25481     for (size_t input_width = 1; input_width < 4; input_width++) {
25482       DWConv2DMicrokernelTester()
25483         .input_width(4)
25484         .input_height(1)
25485         .kernel_height(5)
25486         .kernel_width(5)
25487         .subsampling(1)
25488         .padding_left(2)
25489         .padding_right(2)
25490         .padding_top(2)
25491         .padding_bottom(2)
25492         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc2);
25493     }
25494   }
25495 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_gt_4)25496   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_gt_4) {
25497     for (size_t input_width = 5; input_width < 9; input_width++) {
25498       DWConv2DMicrokernelTester()
25499         .input_width(input_width)
25500         .input_height(1)
25501         .kernel_height(5)
25502         .kernel_width(5)
25503         .subsampling(1)
25504         .padding_left(2)
25505         .padding_right(2)
25506         .padding_top(2)
25507         .padding_bottom(2)
25508         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc2);
25509     }
25510   }
25511 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_height_gt_1)25512   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_height_gt_1) {
25513     for (size_t input_height = 2; input_height < 3; input_height++) {
25514       for (size_t input_width = 1; input_width < 21; input_width += 3) {
25515         DWConv2DMicrokernelTester()
25516           .input_width(input_width)
25517           .input_height(input_height)
25518           .kernel_height(5)
25519           .kernel_width(5)
25520           .subsampling(1)
25521           .padding_left(2)
25522           .padding_right(2)
25523           .padding_top(2)
25524           .padding_bottom(2)
25525           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc2);
25526       }
25527     }
25528   }
25529 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25530 
25531 
25532 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_eq_4)25533   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_eq_4) {
25534     DWConv2DMicrokernelTester()
25535       .input_width(4)
25536       .input_height(1)
25537       .kernel_height(5)
25538       .kernel_width(5)
25539       .subsampling(1)
25540       .padding_left(2)
25541       .padding_right(2)
25542       .padding_top(2)
25543       .padding_bottom(2)
25544       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc3);
25545   }
25546 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_div_4)25547   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_div_4) {
25548     for (size_t input_width = 8; input_width < 32; input_width += 4) {
25549       DWConv2DMicrokernelTester()
25550         .input_width(input_width)
25551         .input_height(1)
25552         .kernel_height(5)
25553         .kernel_width(5)
25554         .subsampling(1)
25555         .padding_left(2)
25556         .padding_right(2)
25557         .padding_top(2)
25558         .padding_bottom(2)
25559         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc3);
25560     }
25561   }
25562 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_lt_4)25563   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_lt_4) {
25564     for (size_t input_width = 1; input_width < 4; input_width++) {
25565       DWConv2DMicrokernelTester()
25566         .input_width(4)
25567         .input_height(1)
25568         .kernel_height(5)
25569         .kernel_width(5)
25570         .subsampling(1)
25571         .padding_left(2)
25572         .padding_right(2)
25573         .padding_top(2)
25574         .padding_bottom(2)
25575         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc3);
25576     }
25577   }
25578 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_gt_4)25579   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_gt_4) {
25580     for (size_t input_width = 5; input_width < 9; input_width++) {
25581       DWConv2DMicrokernelTester()
25582         .input_width(input_width)
25583         .input_height(1)
25584         .kernel_height(5)
25585         .kernel_width(5)
25586         .subsampling(1)
25587         .padding_left(2)
25588         .padding_right(2)
25589         .padding_top(2)
25590         .padding_bottom(2)
25591         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc3);
25592     }
25593   }
25594 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_height_gt_1)25595   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_height_gt_1) {
25596     for (size_t input_height = 2; input_height < 3; input_height++) {
25597       for (size_t input_width = 1; input_width < 21; input_width += 3) {
25598         DWConv2DMicrokernelTester()
25599           .input_width(input_width)
25600           .input_height(input_height)
25601           .kernel_height(5)
25602           .kernel_width(5)
25603           .subsampling(1)
25604           .padding_left(2)
25605           .padding_right(2)
25606           .padding_top(2)
25607           .padding_bottom(2)
25608           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc3);
25609       }
25610     }
25611   }
25612 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25613 
25614 
25615 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_eq_4)25616   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_eq_4) {
25617     DWConv2DMicrokernelTester()
25618       .input_width(4)
25619       .input_height(1)
25620       .kernel_height(5)
25621       .kernel_width(5)
25622       .subsampling(1)
25623       .padding_left(2)
25624       .padding_right(2)
25625       .padding_top(2)
25626       .padding_bottom(2)
25627       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc4);
25628   }
25629 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_div_4)25630   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_div_4) {
25631     for (size_t input_width = 8; input_width < 32; input_width += 4) {
25632       DWConv2DMicrokernelTester()
25633         .input_width(input_width)
25634         .input_height(1)
25635         .kernel_height(5)
25636         .kernel_width(5)
25637         .subsampling(1)
25638         .padding_left(2)
25639         .padding_right(2)
25640         .padding_top(2)
25641         .padding_bottom(2)
25642         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc4);
25643     }
25644   }
25645 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_lt_4)25646   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_lt_4) {
25647     for (size_t input_width = 1; input_width < 4; input_width++) {
25648       DWConv2DMicrokernelTester()
25649         .input_width(4)
25650         .input_height(1)
25651         .kernel_height(5)
25652         .kernel_width(5)
25653         .subsampling(1)
25654         .padding_left(2)
25655         .padding_right(2)
25656         .padding_top(2)
25657         .padding_bottom(2)
25658         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc4);
25659     }
25660   }
25661 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_gt_4)25662   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_gt_4) {
25663     for (size_t input_width = 5; input_width < 9; input_width++) {
25664       DWConv2DMicrokernelTester()
25665         .input_width(input_width)
25666         .input_height(1)
25667         .kernel_height(5)
25668         .kernel_width(5)
25669         .subsampling(1)
25670         .padding_left(2)
25671         .padding_right(2)
25672         .padding_top(2)
25673         .padding_bottom(2)
25674         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc4);
25675     }
25676   }
25677 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_height_gt_1)25678   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_height_gt_1) {
25679     for (size_t input_height = 2; input_height < 3; input_height++) {
25680       for (size_t input_width = 1; input_width < 21; input_width += 3) {
25681         DWConv2DMicrokernelTester()
25682           .input_width(input_width)
25683           .input_height(input_height)
25684           .kernel_height(5)
25685           .kernel_width(5)
25686           .subsampling(1)
25687           .padding_left(2)
25688           .padding_right(2)
25689           .padding_top(2)
25690           .padding_bottom(2)
25691           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc4);
25692       }
25693     }
25694   }
25695 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25696 
25697 
25698 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5,output_width_eq_4)25699   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5, output_width_eq_4) {
25700     DWConv2DMicrokernelTester()
25701       .input_width(4)
25702       .input_height(1)
25703       .kernel_height(5)
25704       .kernel_width(5)
25705       .subsampling(1)
25706       .padding_left(2)
25707       .padding_right(2)
25708       .padding_top(2)
25709       .padding_bottom(2)
25710       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc5);
25711   }
25712 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5,output_width_div_4)25713   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5, output_width_div_4) {
25714     for (size_t input_width = 8; input_width < 32; input_width += 4) {
25715       DWConv2DMicrokernelTester()
25716         .input_width(input_width)
25717         .input_height(1)
25718         .kernel_height(5)
25719         .kernel_width(5)
25720         .subsampling(1)
25721         .padding_left(2)
25722         .padding_right(2)
25723         .padding_top(2)
25724         .padding_bottom(2)
25725         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc5);
25726     }
25727   }
25728 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5,output_width_lt_4)25729   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5, output_width_lt_4) {
25730     for (size_t input_width = 1; input_width < 4; input_width++) {
25731       DWConv2DMicrokernelTester()
25732         .input_width(4)
25733         .input_height(1)
25734         .kernel_height(5)
25735         .kernel_width(5)
25736         .subsampling(1)
25737         .padding_left(2)
25738         .padding_right(2)
25739         .padding_top(2)
25740         .padding_bottom(2)
25741         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc5);
25742     }
25743   }
25744 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5,output_width_gt_4)25745   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5, output_width_gt_4) {
25746     for (size_t input_width = 5; input_width < 9; input_width++) {
25747       DWConv2DMicrokernelTester()
25748         .input_width(input_width)
25749         .input_height(1)
25750         .kernel_height(5)
25751         .kernel_width(5)
25752         .subsampling(1)
25753         .padding_left(2)
25754         .padding_right(2)
25755         .padding_top(2)
25756         .padding_bottom(2)
25757         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc5);
25758     }
25759   }
25760 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5,output_height_gt_1)25761   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5, output_height_gt_1) {
25762     for (size_t input_height = 2; input_height < 3; input_height++) {
25763       for (size_t input_width = 1; input_width < 21; input_width += 3) {
25764         DWConv2DMicrokernelTester()
25765           .input_width(input_width)
25766           .input_height(input_height)
25767           .kernel_height(5)
25768           .kernel_width(5)
25769           .subsampling(1)
25770           .padding_left(2)
25771           .padding_right(2)
25772           .padding_top(2)
25773           .padding_bottom(2)
25774           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_1x4_acc5);
25775       }
25776     }
25777   }
25778 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25779 
25780 
25781 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_eq_4)25782   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_eq_4) {
25783     DWConv2DMicrokernelTester()
25784       .input_width(4)
25785       .input_height(2)
25786       .kernel_height(5)
25787       .kernel_width(5)
25788       .subsampling(1)
25789       .padding_left(2)
25790       .padding_right(2)
25791       .padding_top(2)
25792       .padding_bottom(2)
25793       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4);
25794   }
25795 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_div_4)25796   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_div_4) {
25797     for (size_t input_width = 8; input_width < 32; input_width += 4) {
25798       DWConv2DMicrokernelTester()
25799         .input_width(input_width)
25800         .input_height(2)
25801         .kernel_height(5)
25802         .kernel_width(5)
25803         .subsampling(1)
25804         .padding_left(2)
25805         .padding_right(2)
25806         .padding_top(2)
25807         .padding_bottom(2)
25808         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4);
25809     }
25810   }
25811 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_lt_4)25812   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_lt_4) {
25813     for (size_t input_width = 1; input_width < 4; input_width++) {
25814       DWConv2DMicrokernelTester()
25815         .input_width(4)
25816         .input_height(2)
25817         .kernel_height(5)
25818         .kernel_width(5)
25819         .subsampling(1)
25820         .padding_left(2)
25821         .padding_right(2)
25822         .padding_top(2)
25823         .padding_bottom(2)
25824         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4);
25825     }
25826   }
25827 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_gt_4)25828   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_gt_4) {
25829     for (size_t input_width = 5; input_width < 9; input_width++) {
25830       DWConv2DMicrokernelTester()
25831         .input_width(input_width)
25832         .input_height(2)
25833         .kernel_height(5)
25834         .kernel_width(5)
25835         .subsampling(1)
25836         .padding_left(2)
25837         .padding_right(2)
25838         .padding_top(2)
25839         .padding_bottom(2)
25840         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4);
25841     }
25842   }
25843 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_div_2)25844   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_div_2) {
25845     for (size_t input_height = 4; input_height < 16; input_height += 2) {
25846       for (size_t input_width = 1; input_width < 21; input_width += 3) {
25847         DWConv2DMicrokernelTester()
25848           .input_width(input_width)
25849           .input_height(input_height)
25850           .kernel_height(5)
25851           .kernel_width(5)
25852           .subsampling(1)
25853           .padding_left(2)
25854           .padding_right(2)
25855           .padding_top(2)
25856           .padding_bottom(2)
25857           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4);
25858       }
25859     }
25860   }
25861 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_lt_2)25862   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_lt_2) {
25863     for (size_t input_height = 1; input_height < 2; input_height++) {
25864       for (size_t input_width = 1; input_width < 21; input_width += 3) {
25865         DWConv2DMicrokernelTester()
25866           .input_width(input_width)
25867           .input_height(input_height)
25868           .kernel_height(5)
25869           .kernel_width(5)
25870           .subsampling(1)
25871           .padding_left(2)
25872           .padding_right(2)
25873           .padding_top(2)
25874           .padding_bottom(2)
25875           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4);
25876       }
25877     }
25878   }
25879 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_gt_2)25880   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_gt_2) {
25881     for (size_t input_height = 3; input_height < 5; input_height++) {
25882       for (size_t input_width = 1; input_width < 21; input_width += 3) {
25883         DWConv2DMicrokernelTester()
25884           .input_width(input_width)
25885           .input_height(input_height)
25886           .kernel_height(5)
25887           .kernel_width(5)
25888           .subsampling(1)
25889           .padding_left(2)
25890           .padding_right(2)
25891           .padding_top(2)
25892           .padding_bottom(2)
25893           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4);
25894       }
25895     }
25896   }
25897 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25898 
25899 
25900 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_eq_4)25901   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_eq_4) {
25902     DWConv2DMicrokernelTester()
25903       .input_width(4)
25904       .input_height(2)
25905       .kernel_height(5)
25906       .kernel_width(5)
25907       .subsampling(1)
25908       .padding_left(2)
25909       .padding_right(2)
25910       .padding_top(2)
25911       .padding_bottom(2)
25912       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc2);
25913   }
25914 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_div_4)25915   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_div_4) {
25916     for (size_t input_width = 8; input_width < 32; input_width += 4) {
25917       DWConv2DMicrokernelTester()
25918         .input_width(input_width)
25919         .input_height(2)
25920         .kernel_height(5)
25921         .kernel_width(5)
25922         .subsampling(1)
25923         .padding_left(2)
25924         .padding_right(2)
25925         .padding_top(2)
25926         .padding_bottom(2)
25927         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc2);
25928     }
25929   }
25930 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_lt_4)25931   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_lt_4) {
25932     for (size_t input_width = 1; input_width < 4; input_width++) {
25933       DWConv2DMicrokernelTester()
25934         .input_width(4)
25935         .input_height(2)
25936         .kernel_height(5)
25937         .kernel_width(5)
25938         .subsampling(1)
25939         .padding_left(2)
25940         .padding_right(2)
25941         .padding_top(2)
25942         .padding_bottom(2)
25943         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc2);
25944     }
25945   }
25946 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_gt_4)25947   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_gt_4) {
25948     for (size_t input_width = 5; input_width < 9; input_width++) {
25949       DWConv2DMicrokernelTester()
25950         .input_width(input_width)
25951         .input_height(2)
25952         .kernel_height(5)
25953         .kernel_width(5)
25954         .subsampling(1)
25955         .padding_left(2)
25956         .padding_right(2)
25957         .padding_top(2)
25958         .padding_bottom(2)
25959         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc2);
25960     }
25961   }
25962 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_div_2)25963   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_div_2) {
25964     for (size_t input_height = 4; input_height < 16; input_height += 2) {
25965       for (size_t input_width = 1; input_width < 21; input_width += 3) {
25966         DWConv2DMicrokernelTester()
25967           .input_width(input_width)
25968           .input_height(input_height)
25969           .kernel_height(5)
25970           .kernel_width(5)
25971           .subsampling(1)
25972           .padding_left(2)
25973           .padding_right(2)
25974           .padding_top(2)
25975           .padding_bottom(2)
25976           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc2);
25977       }
25978     }
25979   }
25980 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_lt_2)25981   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_lt_2) {
25982     for (size_t input_height = 1; input_height < 2; input_height++) {
25983       for (size_t input_width = 1; input_width < 21; input_width += 3) {
25984         DWConv2DMicrokernelTester()
25985           .input_width(input_width)
25986           .input_height(input_height)
25987           .kernel_height(5)
25988           .kernel_width(5)
25989           .subsampling(1)
25990           .padding_left(2)
25991           .padding_right(2)
25992           .padding_top(2)
25993           .padding_bottom(2)
25994           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc2);
25995       }
25996     }
25997   }
25998 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_gt_2)25999   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_gt_2) {
26000     for (size_t input_height = 3; input_height < 5; input_height++) {
26001       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26002         DWConv2DMicrokernelTester()
26003           .input_width(input_width)
26004           .input_height(input_height)
26005           .kernel_height(5)
26006           .kernel_width(5)
26007           .subsampling(1)
26008           .padding_left(2)
26009           .padding_right(2)
26010           .padding_top(2)
26011           .padding_bottom(2)
26012           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc2);
26013       }
26014     }
26015   }
26016 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26017 
26018 
26019 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_width_eq_4)26020   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_width_eq_4) {
26021     DWConv2DMicrokernelTester()
26022       .input_width(4)
26023       .input_height(2)
26024       .kernel_height(5)
26025       .kernel_width(5)
26026       .subsampling(1)
26027       .padding_left(2)
26028       .padding_right(2)
26029       .padding_top(2)
26030       .padding_bottom(2)
26031       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc3);
26032   }
26033 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_width_div_4)26034   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_width_div_4) {
26035     for (size_t input_width = 8; input_width < 32; input_width += 4) {
26036       DWConv2DMicrokernelTester()
26037         .input_width(input_width)
26038         .input_height(2)
26039         .kernel_height(5)
26040         .kernel_width(5)
26041         .subsampling(1)
26042         .padding_left(2)
26043         .padding_right(2)
26044         .padding_top(2)
26045         .padding_bottom(2)
26046         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc3);
26047     }
26048   }
26049 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_width_lt_4)26050   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_width_lt_4) {
26051     for (size_t input_width = 1; input_width < 4; input_width++) {
26052       DWConv2DMicrokernelTester()
26053         .input_width(4)
26054         .input_height(2)
26055         .kernel_height(5)
26056         .kernel_width(5)
26057         .subsampling(1)
26058         .padding_left(2)
26059         .padding_right(2)
26060         .padding_top(2)
26061         .padding_bottom(2)
26062         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc3);
26063     }
26064   }
26065 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_width_gt_4)26066   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_width_gt_4) {
26067     for (size_t input_width = 5; input_width < 9; input_width++) {
26068       DWConv2DMicrokernelTester()
26069         .input_width(input_width)
26070         .input_height(2)
26071         .kernel_height(5)
26072         .kernel_width(5)
26073         .subsampling(1)
26074         .padding_left(2)
26075         .padding_right(2)
26076         .padding_top(2)
26077         .padding_bottom(2)
26078         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc3);
26079     }
26080   }
26081 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_height_div_2)26082   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_height_div_2) {
26083     for (size_t input_height = 4; input_height < 16; input_height += 2) {
26084       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26085         DWConv2DMicrokernelTester()
26086           .input_width(input_width)
26087           .input_height(input_height)
26088           .kernel_height(5)
26089           .kernel_width(5)
26090           .subsampling(1)
26091           .padding_left(2)
26092           .padding_right(2)
26093           .padding_top(2)
26094           .padding_bottom(2)
26095           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc3);
26096       }
26097     }
26098   }
26099 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_height_lt_2)26100   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_height_lt_2) {
26101     for (size_t input_height = 1; input_height < 2; input_height++) {
26102       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26103         DWConv2DMicrokernelTester()
26104           .input_width(input_width)
26105           .input_height(input_height)
26106           .kernel_height(5)
26107           .kernel_width(5)
26108           .subsampling(1)
26109           .padding_left(2)
26110           .padding_right(2)
26111           .padding_top(2)
26112           .padding_bottom(2)
26113           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc3);
26114       }
26115     }
26116   }
26117 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_height_gt_2)26118   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_height_gt_2) {
26119     for (size_t input_height = 3; input_height < 5; input_height++) {
26120       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26121         DWConv2DMicrokernelTester()
26122           .input_width(input_width)
26123           .input_height(input_height)
26124           .kernel_height(5)
26125           .kernel_width(5)
26126           .subsampling(1)
26127           .padding_left(2)
26128           .padding_right(2)
26129           .padding_top(2)
26130           .padding_bottom(2)
26131           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_2x4_acc3);
26132       }
26133     }
26134   }
26135 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26136 
26137 
26138 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_eq_4)26139   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_eq_4) {
26140     DWConv2DMicrokernelTester()
26141       .input_width(4)
26142       .input_height(3)
26143       .kernel_height(5)
26144       .kernel_width(5)
26145       .subsampling(1)
26146       .padding_left(2)
26147       .padding_right(2)
26148       .padding_top(2)
26149       .padding_bottom(2)
26150       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4);
26151   }
26152 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_div_4)26153   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_div_4) {
26154     for (size_t input_width = 8; input_width < 32; input_width += 4) {
26155       DWConv2DMicrokernelTester()
26156         .input_width(input_width)
26157         .input_height(3)
26158         .kernel_height(5)
26159         .kernel_width(5)
26160         .subsampling(1)
26161         .padding_left(2)
26162         .padding_right(2)
26163         .padding_top(2)
26164         .padding_bottom(2)
26165         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4);
26166     }
26167   }
26168 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_lt_4)26169   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_lt_4) {
26170     for (size_t input_width = 1; input_width < 4; input_width++) {
26171       DWConv2DMicrokernelTester()
26172         .input_width(4)
26173         .input_height(3)
26174         .kernel_height(5)
26175         .kernel_width(5)
26176         .subsampling(1)
26177         .padding_left(2)
26178         .padding_right(2)
26179         .padding_top(2)
26180         .padding_bottom(2)
26181         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4);
26182     }
26183   }
26184 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_gt_4)26185   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_gt_4) {
26186     for (size_t input_width = 5; input_width < 9; input_width++) {
26187       DWConv2DMicrokernelTester()
26188         .input_width(input_width)
26189         .input_height(3)
26190         .kernel_height(5)
26191         .kernel_width(5)
26192         .subsampling(1)
26193         .padding_left(2)
26194         .padding_right(2)
26195         .padding_top(2)
26196         .padding_bottom(2)
26197         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4);
26198     }
26199   }
26200 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_div_3)26201   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_div_3) {
26202     for (size_t input_height = 6; input_height < 24; input_height += 3) {
26203       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26204         DWConv2DMicrokernelTester()
26205           .input_width(input_width)
26206           .input_height(input_height)
26207           .kernel_height(5)
26208           .kernel_width(5)
26209           .subsampling(1)
26210           .padding_left(2)
26211           .padding_right(2)
26212           .padding_top(2)
26213           .padding_bottom(2)
26214           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4);
26215       }
26216     }
26217   }
26218 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_lt_3)26219   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_lt_3) {
26220     for (size_t input_height = 1; input_height < 3; input_height++) {
26221       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26222         DWConv2DMicrokernelTester()
26223           .input_width(input_width)
26224           .input_height(input_height)
26225           .kernel_height(5)
26226           .kernel_width(5)
26227           .subsampling(1)
26228           .padding_left(2)
26229           .padding_right(2)
26230           .padding_top(2)
26231           .padding_bottom(2)
26232           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4);
26233       }
26234     }
26235   }
26236 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_gt_3)26237   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_gt_3) {
26238     for (size_t input_height = 4; input_height < 7; input_height++) {
26239       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26240         DWConv2DMicrokernelTester()
26241           .input_width(input_width)
26242           .input_height(input_height)
26243           .kernel_height(5)
26244           .kernel_width(5)
26245           .subsampling(1)
26246           .padding_left(2)
26247           .padding_right(2)
26248           .padding_top(2)
26249           .padding_bottom(2)
26250           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4);
26251       }
26252     }
26253   }
26254 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26255 
26256 
26257 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_width_eq_4)26258   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_width_eq_4) {
26259     DWConv2DMicrokernelTester()
26260       .input_width(4)
26261       .input_height(3)
26262       .kernel_height(5)
26263       .kernel_width(5)
26264       .subsampling(1)
26265       .padding_left(2)
26266       .padding_right(2)
26267       .padding_top(2)
26268       .padding_bottom(2)
26269       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4_acc2);
26270   }
26271 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_width_div_4)26272   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_width_div_4) {
26273     for (size_t input_width = 8; input_width < 32; input_width += 4) {
26274       DWConv2DMicrokernelTester()
26275         .input_width(input_width)
26276         .input_height(3)
26277         .kernel_height(5)
26278         .kernel_width(5)
26279         .subsampling(1)
26280         .padding_left(2)
26281         .padding_right(2)
26282         .padding_top(2)
26283         .padding_bottom(2)
26284         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4_acc2);
26285     }
26286   }
26287 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_width_lt_4)26288   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_width_lt_4) {
26289     for (size_t input_width = 1; input_width < 4; input_width++) {
26290       DWConv2DMicrokernelTester()
26291         .input_width(4)
26292         .input_height(3)
26293         .kernel_height(5)
26294         .kernel_width(5)
26295         .subsampling(1)
26296         .padding_left(2)
26297         .padding_right(2)
26298         .padding_top(2)
26299         .padding_bottom(2)
26300         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4_acc2);
26301     }
26302   }
26303 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_width_gt_4)26304   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_width_gt_4) {
26305     for (size_t input_width = 5; input_width < 9; input_width++) {
26306       DWConv2DMicrokernelTester()
26307         .input_width(input_width)
26308         .input_height(3)
26309         .kernel_height(5)
26310         .kernel_width(5)
26311         .subsampling(1)
26312         .padding_left(2)
26313         .padding_right(2)
26314         .padding_top(2)
26315         .padding_bottom(2)
26316         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4_acc2);
26317     }
26318   }
26319 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_height_div_3)26320   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_height_div_3) {
26321     for (size_t input_height = 6; input_height < 24; input_height += 3) {
26322       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26323         DWConv2DMicrokernelTester()
26324           .input_width(input_width)
26325           .input_height(input_height)
26326           .kernel_height(5)
26327           .kernel_width(5)
26328           .subsampling(1)
26329           .padding_left(2)
26330           .padding_right(2)
26331           .padding_top(2)
26332           .padding_bottom(2)
26333           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4_acc2);
26334       }
26335     }
26336   }
26337 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_height_lt_3)26338   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_height_lt_3) {
26339     for (size_t input_height = 1; input_height < 3; input_height++) {
26340       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26341         DWConv2DMicrokernelTester()
26342           .input_width(input_width)
26343           .input_height(input_height)
26344           .kernel_height(5)
26345           .kernel_width(5)
26346           .subsampling(1)
26347           .padding_left(2)
26348           .padding_right(2)
26349           .padding_top(2)
26350           .padding_bottom(2)
26351           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4_acc2);
26352       }
26353     }
26354   }
26355 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_height_gt_3)26356   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_height_gt_3) {
26357     for (size_t input_height = 4; input_height < 7; input_height++) {
26358       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26359         DWConv2DMicrokernelTester()
26360           .input_width(input_width)
26361           .input_height(input_height)
26362           .kernel_height(5)
26363           .kernel_width(5)
26364           .subsampling(1)
26365           .padding_left(2)
26366           .padding_right(2)
26367           .padding_top(2)
26368           .padding_bottom(2)
26369           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_3x4_acc2);
26370       }
26371     }
26372   }
26373 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26374 
26375 
26376 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4,output_width_eq_4)26377   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4, output_width_eq_4) {
26378     DWConv2DMicrokernelTester()
26379       .input_width(4)
26380       .input_height(4)
26381       .kernel_height(5)
26382       .kernel_width(5)
26383       .subsampling(1)
26384       .padding_left(2)
26385       .padding_right(2)
26386       .padding_top(2)
26387       .padding_bottom(2)
26388       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4);
26389   }
26390 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4,output_width_div_4)26391   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4, output_width_div_4) {
26392     for (size_t input_width = 8; input_width < 32; input_width += 4) {
26393       DWConv2DMicrokernelTester()
26394         .input_width(input_width)
26395         .input_height(4)
26396         .kernel_height(5)
26397         .kernel_width(5)
26398         .subsampling(1)
26399         .padding_left(2)
26400         .padding_right(2)
26401         .padding_top(2)
26402         .padding_bottom(2)
26403         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4);
26404     }
26405   }
26406 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4,output_width_lt_4)26407   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4, output_width_lt_4) {
26408     for (size_t input_width = 1; input_width < 4; input_width++) {
26409       DWConv2DMicrokernelTester()
26410         .input_width(4)
26411         .input_height(4)
26412         .kernel_height(5)
26413         .kernel_width(5)
26414         .subsampling(1)
26415         .padding_left(2)
26416         .padding_right(2)
26417         .padding_top(2)
26418         .padding_bottom(2)
26419         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4);
26420     }
26421   }
26422 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4,output_width_gt_4)26423   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4, output_width_gt_4) {
26424     for (size_t input_width = 5; input_width < 9; input_width++) {
26425       DWConv2DMicrokernelTester()
26426         .input_width(input_width)
26427         .input_height(4)
26428         .kernel_height(5)
26429         .kernel_width(5)
26430         .subsampling(1)
26431         .padding_left(2)
26432         .padding_right(2)
26433         .padding_top(2)
26434         .padding_bottom(2)
26435         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4);
26436     }
26437   }
26438 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4,output_height_div_4)26439   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4, output_height_div_4) {
26440     for (size_t input_height = 8; input_height < 32; input_height += 4) {
26441       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26442         DWConv2DMicrokernelTester()
26443           .input_width(input_width)
26444           .input_height(input_height)
26445           .kernel_height(5)
26446           .kernel_width(5)
26447           .subsampling(1)
26448           .padding_left(2)
26449           .padding_right(2)
26450           .padding_top(2)
26451           .padding_bottom(2)
26452           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4);
26453       }
26454     }
26455   }
26456 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4,output_height_lt_4)26457   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4, output_height_lt_4) {
26458     for (size_t input_height = 1; input_height < 4; input_height++) {
26459       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26460         DWConv2DMicrokernelTester()
26461           .input_width(input_width)
26462           .input_height(input_height)
26463           .kernel_height(5)
26464           .kernel_width(5)
26465           .subsampling(1)
26466           .padding_left(2)
26467           .padding_right(2)
26468           .padding_top(2)
26469           .padding_bottom(2)
26470           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4);
26471       }
26472     }
26473   }
26474 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4,output_height_gt_4)26475   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4, output_height_gt_4) {
26476     for (size_t input_height = 5; input_height < 9; input_height++) {
26477       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26478         DWConv2DMicrokernelTester()
26479           .input_width(input_width)
26480           .input_height(input_height)
26481           .kernel_height(5)
26482           .kernel_width(5)
26483           .subsampling(1)
26484           .padding_left(2)
26485           .padding_right(2)
26486           .padding_top(2)
26487           .padding_bottom(2)
26488           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4);
26489       }
26490     }
26491   }
26492 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26493 
26494 
26495 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2,output_width_eq_4)26496   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2, output_width_eq_4) {
26497     DWConv2DMicrokernelTester()
26498       .input_width(4)
26499       .input_height(4)
26500       .kernel_height(5)
26501       .kernel_width(5)
26502       .subsampling(1)
26503       .padding_left(2)
26504       .padding_right(2)
26505       .padding_top(2)
26506       .padding_bottom(2)
26507       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4_acc2);
26508   }
26509 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2,output_width_div_4)26510   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2, output_width_div_4) {
26511     for (size_t input_width = 8; input_width < 32; input_width += 4) {
26512       DWConv2DMicrokernelTester()
26513         .input_width(input_width)
26514         .input_height(4)
26515         .kernel_height(5)
26516         .kernel_width(5)
26517         .subsampling(1)
26518         .padding_left(2)
26519         .padding_right(2)
26520         .padding_top(2)
26521         .padding_bottom(2)
26522         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4_acc2);
26523     }
26524   }
26525 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2,output_width_lt_4)26526   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2, output_width_lt_4) {
26527     for (size_t input_width = 1; input_width < 4; input_width++) {
26528       DWConv2DMicrokernelTester()
26529         .input_width(4)
26530         .input_height(4)
26531         .kernel_height(5)
26532         .kernel_width(5)
26533         .subsampling(1)
26534         .padding_left(2)
26535         .padding_right(2)
26536         .padding_top(2)
26537         .padding_bottom(2)
26538         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4_acc2);
26539     }
26540   }
26541 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2,output_width_gt_4)26542   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2, output_width_gt_4) {
26543     for (size_t input_width = 5; input_width < 9; input_width++) {
26544       DWConv2DMicrokernelTester()
26545         .input_width(input_width)
26546         .input_height(4)
26547         .kernel_height(5)
26548         .kernel_width(5)
26549         .subsampling(1)
26550         .padding_left(2)
26551         .padding_right(2)
26552         .padding_top(2)
26553         .padding_bottom(2)
26554         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4_acc2);
26555     }
26556   }
26557 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2,output_height_div_4)26558   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2, output_height_div_4) {
26559     for (size_t input_height = 8; input_height < 32; input_height += 4) {
26560       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26561         DWConv2DMicrokernelTester()
26562           .input_width(input_width)
26563           .input_height(input_height)
26564           .kernel_height(5)
26565           .kernel_width(5)
26566           .subsampling(1)
26567           .padding_left(2)
26568           .padding_right(2)
26569           .padding_top(2)
26570           .padding_bottom(2)
26571           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4_acc2);
26572       }
26573     }
26574   }
26575 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2,output_height_lt_4)26576   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2, output_height_lt_4) {
26577     for (size_t input_height = 1; input_height < 4; input_height++) {
26578       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26579         DWConv2DMicrokernelTester()
26580           .input_width(input_width)
26581           .input_height(input_height)
26582           .kernel_height(5)
26583           .kernel_width(5)
26584           .subsampling(1)
26585           .padding_left(2)
26586           .padding_right(2)
26587           .padding_top(2)
26588           .padding_bottom(2)
26589           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4_acc2);
26590       }
26591     }
26592   }
26593 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2,output_height_gt_4)26594   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_4X4_ACC2, output_height_gt_4) {
26595     for (size_t input_height = 5; input_height < 9; input_height++) {
26596       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26597         DWConv2DMicrokernelTester()
26598           .input_width(input_width)
26599           .input_height(input_height)
26600           .kernel_height(5)
26601           .kernel_width(5)
26602           .subsampling(1)
26603           .padding_left(2)
26604           .padding_right(2)
26605           .padding_top(2)
26606           .padding_bottom(2)
26607           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_4x4_acc2);
26608       }
26609     }
26610   }
26611 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26612 
26613 
26614 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4,output_width_eq_4)26615   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4, output_width_eq_4) {
26616     DWConv2DMicrokernelTester()
26617       .input_width(4)
26618       .input_height(5)
26619       .kernel_height(5)
26620       .kernel_width(5)
26621       .subsampling(1)
26622       .padding_left(2)
26623       .padding_right(2)
26624       .padding_top(2)
26625       .padding_bottom(2)
26626       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_5x4);
26627   }
26628 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4,output_width_div_4)26629   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4, output_width_div_4) {
26630     for (size_t input_width = 8; input_width < 32; input_width += 4) {
26631       DWConv2DMicrokernelTester()
26632         .input_width(input_width)
26633         .input_height(5)
26634         .kernel_height(5)
26635         .kernel_width(5)
26636         .subsampling(1)
26637         .padding_left(2)
26638         .padding_right(2)
26639         .padding_top(2)
26640         .padding_bottom(2)
26641         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_5x4);
26642     }
26643   }
26644 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4,output_width_lt_4)26645   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4, output_width_lt_4) {
26646     for (size_t input_width = 1; input_width < 4; input_width++) {
26647       DWConv2DMicrokernelTester()
26648         .input_width(4)
26649         .input_height(5)
26650         .kernel_height(5)
26651         .kernel_width(5)
26652         .subsampling(1)
26653         .padding_left(2)
26654         .padding_right(2)
26655         .padding_top(2)
26656         .padding_bottom(2)
26657         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_5x4);
26658     }
26659   }
26660 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4,output_width_gt_4)26661   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4, output_width_gt_4) {
26662     for (size_t input_width = 5; input_width < 9; input_width++) {
26663       DWConv2DMicrokernelTester()
26664         .input_width(input_width)
26665         .input_height(5)
26666         .kernel_height(5)
26667         .kernel_width(5)
26668         .subsampling(1)
26669         .padding_left(2)
26670         .padding_right(2)
26671         .padding_top(2)
26672         .padding_bottom(2)
26673         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_5x4);
26674     }
26675   }
26676 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4,output_height_div_5)26677   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4, output_height_div_5) {
26678     for (size_t input_height = 10; input_height < 40; input_height += 5) {
26679       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26680         DWConv2DMicrokernelTester()
26681           .input_width(input_width)
26682           .input_height(input_height)
26683           .kernel_height(5)
26684           .kernel_width(5)
26685           .subsampling(1)
26686           .padding_left(2)
26687           .padding_right(2)
26688           .padding_top(2)
26689           .padding_bottom(2)
26690           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_5x4);
26691       }
26692     }
26693   }
26694 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4,output_height_lt_5)26695   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4, output_height_lt_5) {
26696     for (size_t input_height = 1; input_height < 5; input_height++) {
26697       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26698         DWConv2DMicrokernelTester()
26699           .input_width(input_width)
26700           .input_height(input_height)
26701           .kernel_height(5)
26702           .kernel_width(5)
26703           .subsampling(1)
26704           .padding_left(2)
26705           .padding_right(2)
26706           .padding_top(2)
26707           .padding_bottom(2)
26708           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_5x4);
26709       }
26710     }
26711   }
26712 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4,output_height_gt_5)26713   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_LOADSPLAT_5X4, output_height_gt_5) {
26714     for (size_t input_height = 6; input_height < 11; input_height++) {
26715       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26716         DWConv2DMicrokernelTester()
26717           .input_width(input_width)
26718           .input_height(input_height)
26719           .kernel_height(5)
26720           .kernel_width(5)
26721           .subsampling(1)
26722           .padding_left(2)
26723           .padding_right(2)
26724           .padding_top(2)
26725           .padding_bottom(2)
26726           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_loadsplat_5x4);
26727       }
26728     }
26729   }
26730 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26731 
26732 
26733 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4,output_width_eq_4)26734   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4, output_width_eq_4) {
26735     DWConv2DMicrokernelTester()
26736       .input_width(4)
26737       .input_height(1)
26738       .kernel_height(5)
26739       .kernel_width(5)
26740       .subsampling(1)
26741       .padding_left(2)
26742       .padding_right(2)
26743       .padding_top(2)
26744       .padding_bottom(2)
26745       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4);
26746   }
26747 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4,output_width_div_4)26748   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4, output_width_div_4) {
26749     for (size_t input_width = 8; input_width < 32; input_width += 4) {
26750       DWConv2DMicrokernelTester()
26751         .input_width(input_width)
26752         .input_height(1)
26753         .kernel_height(5)
26754         .kernel_width(5)
26755         .subsampling(1)
26756         .padding_left(2)
26757         .padding_right(2)
26758         .padding_top(2)
26759         .padding_bottom(2)
26760         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4);
26761     }
26762   }
26763 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4,output_width_lt_4)26764   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4, output_width_lt_4) {
26765     for (size_t input_width = 1; input_width < 4; input_width++) {
26766       DWConv2DMicrokernelTester()
26767         .input_width(4)
26768         .input_height(1)
26769         .kernel_height(5)
26770         .kernel_width(5)
26771         .subsampling(1)
26772         .padding_left(2)
26773         .padding_right(2)
26774         .padding_top(2)
26775         .padding_bottom(2)
26776         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4);
26777     }
26778   }
26779 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4,output_width_gt_4)26780   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4, output_width_gt_4) {
26781     for (size_t input_width = 5; input_width < 9; input_width++) {
26782       DWConv2DMicrokernelTester()
26783         .input_width(input_width)
26784         .input_height(1)
26785         .kernel_height(5)
26786         .kernel_width(5)
26787         .subsampling(1)
26788         .padding_left(2)
26789         .padding_right(2)
26790         .padding_top(2)
26791         .padding_bottom(2)
26792         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4);
26793     }
26794   }
26795 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4,output_height_gt_1)26796   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4, output_height_gt_1) {
26797     for (size_t input_height = 2; input_height < 3; input_height++) {
26798       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26799         DWConv2DMicrokernelTester()
26800           .input_width(input_width)
26801           .input_height(input_height)
26802           .kernel_height(5)
26803           .kernel_width(5)
26804           .subsampling(1)
26805           .padding_left(2)
26806           .padding_right(2)
26807           .padding_top(2)
26808           .padding_bottom(2)
26809           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4);
26810       }
26811     }
26812   }
26813 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26814 
26815 
26816 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_eq_4)26817   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_eq_4) {
26818     DWConv2DMicrokernelTester()
26819       .input_width(4)
26820       .input_height(1)
26821       .kernel_height(5)
26822       .kernel_width(5)
26823       .subsampling(1)
26824       .padding_left(2)
26825       .padding_right(2)
26826       .padding_top(2)
26827       .padding_bottom(2)
26828       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc2);
26829   }
26830 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_div_4)26831   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_div_4) {
26832     for (size_t input_width = 8; input_width < 32; input_width += 4) {
26833       DWConv2DMicrokernelTester()
26834         .input_width(input_width)
26835         .input_height(1)
26836         .kernel_height(5)
26837         .kernel_width(5)
26838         .subsampling(1)
26839         .padding_left(2)
26840         .padding_right(2)
26841         .padding_top(2)
26842         .padding_bottom(2)
26843         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc2);
26844     }
26845   }
26846 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_lt_4)26847   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_lt_4) {
26848     for (size_t input_width = 1; input_width < 4; input_width++) {
26849       DWConv2DMicrokernelTester()
26850         .input_width(4)
26851         .input_height(1)
26852         .kernel_height(5)
26853         .kernel_width(5)
26854         .subsampling(1)
26855         .padding_left(2)
26856         .padding_right(2)
26857         .padding_top(2)
26858         .padding_bottom(2)
26859         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc2);
26860     }
26861   }
26862 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_gt_4)26863   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_gt_4) {
26864     for (size_t input_width = 5; input_width < 9; input_width++) {
26865       DWConv2DMicrokernelTester()
26866         .input_width(input_width)
26867         .input_height(1)
26868         .kernel_height(5)
26869         .kernel_width(5)
26870         .subsampling(1)
26871         .padding_left(2)
26872         .padding_right(2)
26873         .padding_top(2)
26874         .padding_bottom(2)
26875         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc2);
26876     }
26877   }
26878 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_height_gt_1)26879   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_height_gt_1) {
26880     for (size_t input_height = 2; input_height < 3; input_height++) {
26881       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26882         DWConv2DMicrokernelTester()
26883           .input_width(input_width)
26884           .input_height(input_height)
26885           .kernel_height(5)
26886           .kernel_width(5)
26887           .subsampling(1)
26888           .padding_left(2)
26889           .padding_right(2)
26890           .padding_top(2)
26891           .padding_bottom(2)
26892           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc2);
26893       }
26894     }
26895   }
26896 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26897 
26898 
26899 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_eq_4)26900   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_eq_4) {
26901     DWConv2DMicrokernelTester()
26902       .input_width(4)
26903       .input_height(1)
26904       .kernel_height(5)
26905       .kernel_width(5)
26906       .subsampling(1)
26907       .padding_left(2)
26908       .padding_right(2)
26909       .padding_top(2)
26910       .padding_bottom(2)
26911       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc3);
26912   }
26913 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_div_4)26914   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_div_4) {
26915     for (size_t input_width = 8; input_width < 32; input_width += 4) {
26916       DWConv2DMicrokernelTester()
26917         .input_width(input_width)
26918         .input_height(1)
26919         .kernel_height(5)
26920         .kernel_width(5)
26921         .subsampling(1)
26922         .padding_left(2)
26923         .padding_right(2)
26924         .padding_top(2)
26925         .padding_bottom(2)
26926         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc3);
26927     }
26928   }
26929 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_lt_4)26930   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_lt_4) {
26931     for (size_t input_width = 1; input_width < 4; input_width++) {
26932       DWConv2DMicrokernelTester()
26933         .input_width(4)
26934         .input_height(1)
26935         .kernel_height(5)
26936         .kernel_width(5)
26937         .subsampling(1)
26938         .padding_left(2)
26939         .padding_right(2)
26940         .padding_top(2)
26941         .padding_bottom(2)
26942         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc3);
26943     }
26944   }
26945 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_gt_4)26946   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_gt_4) {
26947     for (size_t input_width = 5; input_width < 9; input_width++) {
26948       DWConv2DMicrokernelTester()
26949         .input_width(input_width)
26950         .input_height(1)
26951         .kernel_height(5)
26952         .kernel_width(5)
26953         .subsampling(1)
26954         .padding_left(2)
26955         .padding_right(2)
26956         .padding_top(2)
26957         .padding_bottom(2)
26958         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc3);
26959     }
26960   }
26961 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_height_gt_1)26962   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_height_gt_1) {
26963     for (size_t input_height = 2; input_height < 3; input_height++) {
26964       for (size_t input_width = 1; input_width < 21; input_width += 3) {
26965         DWConv2DMicrokernelTester()
26966           .input_width(input_width)
26967           .input_height(input_height)
26968           .kernel_height(5)
26969           .kernel_width(5)
26970           .subsampling(1)
26971           .padding_left(2)
26972           .padding_right(2)
26973           .padding_top(2)
26974           .padding_bottom(2)
26975           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc3);
26976       }
26977     }
26978   }
26979 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26980 
26981 
26982 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_eq_4)26983   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_eq_4) {
26984     DWConv2DMicrokernelTester()
26985       .input_width(4)
26986       .input_height(1)
26987       .kernel_height(5)
26988       .kernel_width(5)
26989       .subsampling(1)
26990       .padding_left(2)
26991       .padding_right(2)
26992       .padding_top(2)
26993       .padding_bottom(2)
26994       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc4);
26995   }
26996 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_div_4)26997   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_div_4) {
26998     for (size_t input_width = 8; input_width < 32; input_width += 4) {
26999       DWConv2DMicrokernelTester()
27000         .input_width(input_width)
27001         .input_height(1)
27002         .kernel_height(5)
27003         .kernel_width(5)
27004         .subsampling(1)
27005         .padding_left(2)
27006         .padding_right(2)
27007         .padding_top(2)
27008         .padding_bottom(2)
27009         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc4);
27010     }
27011   }
27012 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_lt_4)27013   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_lt_4) {
27014     for (size_t input_width = 1; input_width < 4; input_width++) {
27015       DWConv2DMicrokernelTester()
27016         .input_width(4)
27017         .input_height(1)
27018         .kernel_height(5)
27019         .kernel_width(5)
27020         .subsampling(1)
27021         .padding_left(2)
27022         .padding_right(2)
27023         .padding_top(2)
27024         .padding_bottom(2)
27025         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc4);
27026     }
27027   }
27028 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_gt_4)27029   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_gt_4) {
27030     for (size_t input_width = 5; input_width < 9; input_width++) {
27031       DWConv2DMicrokernelTester()
27032         .input_width(input_width)
27033         .input_height(1)
27034         .kernel_height(5)
27035         .kernel_width(5)
27036         .subsampling(1)
27037         .padding_left(2)
27038         .padding_right(2)
27039         .padding_top(2)
27040         .padding_bottom(2)
27041         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc4);
27042     }
27043   }
27044 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_height_gt_1)27045   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_height_gt_1) {
27046     for (size_t input_height = 2; input_height < 3; input_height++) {
27047       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27048         DWConv2DMicrokernelTester()
27049           .input_width(input_width)
27050           .input_height(input_height)
27051           .kernel_height(5)
27052           .kernel_width(5)
27053           .subsampling(1)
27054           .padding_left(2)
27055           .padding_right(2)
27056           .padding_top(2)
27057           .padding_bottom(2)
27058           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc4);
27059       }
27060     }
27061   }
27062 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
27063 
27064 
27065 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC5,output_width_eq_4)27066   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC5, output_width_eq_4) {
27067     DWConv2DMicrokernelTester()
27068       .input_width(4)
27069       .input_height(1)
27070       .kernel_height(5)
27071       .kernel_width(5)
27072       .subsampling(1)
27073       .padding_left(2)
27074       .padding_right(2)
27075       .padding_top(2)
27076       .padding_bottom(2)
27077       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc5);
27078   }
27079 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC5,output_width_div_4)27080   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC5, output_width_div_4) {
27081     for (size_t input_width = 8; input_width < 32; input_width += 4) {
27082       DWConv2DMicrokernelTester()
27083         .input_width(input_width)
27084         .input_height(1)
27085         .kernel_height(5)
27086         .kernel_width(5)
27087         .subsampling(1)
27088         .padding_left(2)
27089         .padding_right(2)
27090         .padding_top(2)
27091         .padding_bottom(2)
27092         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc5);
27093     }
27094   }
27095 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC5,output_width_lt_4)27096   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC5, output_width_lt_4) {
27097     for (size_t input_width = 1; input_width < 4; input_width++) {
27098       DWConv2DMicrokernelTester()
27099         .input_width(4)
27100         .input_height(1)
27101         .kernel_height(5)
27102         .kernel_width(5)
27103         .subsampling(1)
27104         .padding_left(2)
27105         .padding_right(2)
27106         .padding_top(2)
27107         .padding_bottom(2)
27108         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc5);
27109     }
27110   }
27111 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC5,output_width_gt_4)27112   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC5, output_width_gt_4) {
27113     for (size_t input_width = 5; input_width < 9; input_width++) {
27114       DWConv2DMicrokernelTester()
27115         .input_width(input_width)
27116         .input_height(1)
27117         .kernel_height(5)
27118         .kernel_width(5)
27119         .subsampling(1)
27120         .padding_left(2)
27121         .padding_right(2)
27122         .padding_top(2)
27123         .padding_bottom(2)
27124         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc5);
27125     }
27126   }
27127 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC5,output_height_gt_1)27128   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_1X4_ACC5, output_height_gt_1) {
27129     for (size_t input_height = 2; input_height < 3; input_height++) {
27130       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27131         DWConv2DMicrokernelTester()
27132           .input_width(input_width)
27133           .input_height(input_height)
27134           .kernel_height(5)
27135           .kernel_width(5)
27136           .subsampling(1)
27137           .padding_left(2)
27138           .padding_right(2)
27139           .padding_top(2)
27140           .padding_bottom(2)
27141           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_1x4_acc5);
27142       }
27143     }
27144   }
27145 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
27146 
27147 
27148 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4,output_width_eq_4)27149   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4, output_width_eq_4) {
27150     DWConv2DMicrokernelTester()
27151       .input_width(4)
27152       .input_height(2)
27153       .kernel_height(5)
27154       .kernel_width(5)
27155       .subsampling(1)
27156       .padding_left(2)
27157       .padding_right(2)
27158       .padding_top(2)
27159       .padding_bottom(2)
27160       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4);
27161   }
27162 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4,output_width_div_4)27163   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4, output_width_div_4) {
27164     for (size_t input_width = 8; input_width < 32; input_width += 4) {
27165       DWConv2DMicrokernelTester()
27166         .input_width(input_width)
27167         .input_height(2)
27168         .kernel_height(5)
27169         .kernel_width(5)
27170         .subsampling(1)
27171         .padding_left(2)
27172         .padding_right(2)
27173         .padding_top(2)
27174         .padding_bottom(2)
27175         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4);
27176     }
27177   }
27178 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4,output_width_lt_4)27179   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4, output_width_lt_4) {
27180     for (size_t input_width = 1; input_width < 4; input_width++) {
27181       DWConv2DMicrokernelTester()
27182         .input_width(4)
27183         .input_height(2)
27184         .kernel_height(5)
27185         .kernel_width(5)
27186         .subsampling(1)
27187         .padding_left(2)
27188         .padding_right(2)
27189         .padding_top(2)
27190         .padding_bottom(2)
27191         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4);
27192     }
27193   }
27194 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4,output_width_gt_4)27195   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4, output_width_gt_4) {
27196     for (size_t input_width = 5; input_width < 9; input_width++) {
27197       DWConv2DMicrokernelTester()
27198         .input_width(input_width)
27199         .input_height(2)
27200         .kernel_height(5)
27201         .kernel_width(5)
27202         .subsampling(1)
27203         .padding_left(2)
27204         .padding_right(2)
27205         .padding_top(2)
27206         .padding_bottom(2)
27207         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4);
27208     }
27209   }
27210 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4,output_height_div_2)27211   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4, output_height_div_2) {
27212     for (size_t input_height = 4; input_height < 16; input_height += 2) {
27213       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27214         DWConv2DMicrokernelTester()
27215           .input_width(input_width)
27216           .input_height(input_height)
27217           .kernel_height(5)
27218           .kernel_width(5)
27219           .subsampling(1)
27220           .padding_left(2)
27221           .padding_right(2)
27222           .padding_top(2)
27223           .padding_bottom(2)
27224           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4);
27225       }
27226     }
27227   }
27228 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4,output_height_lt_2)27229   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4, output_height_lt_2) {
27230     for (size_t input_height = 1; input_height < 2; input_height++) {
27231       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27232         DWConv2DMicrokernelTester()
27233           .input_width(input_width)
27234           .input_height(input_height)
27235           .kernel_height(5)
27236           .kernel_width(5)
27237           .subsampling(1)
27238           .padding_left(2)
27239           .padding_right(2)
27240           .padding_top(2)
27241           .padding_bottom(2)
27242           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4);
27243       }
27244     }
27245   }
27246 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4,output_height_gt_2)27247   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4, output_height_gt_2) {
27248     for (size_t input_height = 3; input_height < 5; input_height++) {
27249       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27250         DWConv2DMicrokernelTester()
27251           .input_width(input_width)
27252           .input_height(input_height)
27253           .kernel_height(5)
27254           .kernel_width(5)
27255           .subsampling(1)
27256           .padding_left(2)
27257           .padding_right(2)
27258           .padding_top(2)
27259           .padding_bottom(2)
27260           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4);
27261       }
27262     }
27263   }
27264 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
27265 
27266 
27267 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_eq_4)27268   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_eq_4) {
27269     DWConv2DMicrokernelTester()
27270       .input_width(4)
27271       .input_height(2)
27272       .kernel_height(5)
27273       .kernel_width(5)
27274       .subsampling(1)
27275       .padding_left(2)
27276       .padding_right(2)
27277       .padding_top(2)
27278       .padding_bottom(2)
27279       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc2);
27280   }
27281 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_div_4)27282   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_div_4) {
27283     for (size_t input_width = 8; input_width < 32; input_width += 4) {
27284       DWConv2DMicrokernelTester()
27285         .input_width(input_width)
27286         .input_height(2)
27287         .kernel_height(5)
27288         .kernel_width(5)
27289         .subsampling(1)
27290         .padding_left(2)
27291         .padding_right(2)
27292         .padding_top(2)
27293         .padding_bottom(2)
27294         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc2);
27295     }
27296   }
27297 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_lt_4)27298   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_lt_4) {
27299     for (size_t input_width = 1; input_width < 4; input_width++) {
27300       DWConv2DMicrokernelTester()
27301         .input_width(4)
27302         .input_height(2)
27303         .kernel_height(5)
27304         .kernel_width(5)
27305         .subsampling(1)
27306         .padding_left(2)
27307         .padding_right(2)
27308         .padding_top(2)
27309         .padding_bottom(2)
27310         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc2);
27311     }
27312   }
27313 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_gt_4)27314   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_gt_4) {
27315     for (size_t input_width = 5; input_width < 9; input_width++) {
27316       DWConv2DMicrokernelTester()
27317         .input_width(input_width)
27318         .input_height(2)
27319         .kernel_height(5)
27320         .kernel_width(5)
27321         .subsampling(1)
27322         .padding_left(2)
27323         .padding_right(2)
27324         .padding_top(2)
27325         .padding_bottom(2)
27326         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc2);
27327     }
27328   }
27329 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_div_2)27330   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_div_2) {
27331     for (size_t input_height = 4; input_height < 16; input_height += 2) {
27332       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27333         DWConv2DMicrokernelTester()
27334           .input_width(input_width)
27335           .input_height(input_height)
27336           .kernel_height(5)
27337           .kernel_width(5)
27338           .subsampling(1)
27339           .padding_left(2)
27340           .padding_right(2)
27341           .padding_top(2)
27342           .padding_bottom(2)
27343           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc2);
27344       }
27345     }
27346   }
27347 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_lt_2)27348   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_lt_2) {
27349     for (size_t input_height = 1; input_height < 2; input_height++) {
27350       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27351         DWConv2DMicrokernelTester()
27352           .input_width(input_width)
27353           .input_height(input_height)
27354           .kernel_height(5)
27355           .kernel_width(5)
27356           .subsampling(1)
27357           .padding_left(2)
27358           .padding_right(2)
27359           .padding_top(2)
27360           .padding_bottom(2)
27361           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc2);
27362       }
27363     }
27364   }
27365 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_gt_2)27366   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_gt_2) {
27367     for (size_t input_height = 3; input_height < 5; input_height++) {
27368       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27369         DWConv2DMicrokernelTester()
27370           .input_width(input_width)
27371           .input_height(input_height)
27372           .kernel_height(5)
27373           .kernel_width(5)
27374           .subsampling(1)
27375           .padding_left(2)
27376           .padding_right(2)
27377           .padding_top(2)
27378           .padding_bottom(2)
27379           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc2);
27380       }
27381     }
27382   }
27383 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
27384 
27385 
27386 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_width_eq_4)27387   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_width_eq_4) {
27388     DWConv2DMicrokernelTester()
27389       .input_width(4)
27390       .input_height(2)
27391       .kernel_height(5)
27392       .kernel_width(5)
27393       .subsampling(1)
27394       .padding_left(2)
27395       .padding_right(2)
27396       .padding_top(2)
27397       .padding_bottom(2)
27398       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc3);
27399   }
27400 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_width_div_4)27401   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_width_div_4) {
27402     for (size_t input_width = 8; input_width < 32; input_width += 4) {
27403       DWConv2DMicrokernelTester()
27404         .input_width(input_width)
27405         .input_height(2)
27406         .kernel_height(5)
27407         .kernel_width(5)
27408         .subsampling(1)
27409         .padding_left(2)
27410         .padding_right(2)
27411         .padding_top(2)
27412         .padding_bottom(2)
27413         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc3);
27414     }
27415   }
27416 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_width_lt_4)27417   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_width_lt_4) {
27418     for (size_t input_width = 1; input_width < 4; input_width++) {
27419       DWConv2DMicrokernelTester()
27420         .input_width(4)
27421         .input_height(2)
27422         .kernel_height(5)
27423         .kernel_width(5)
27424         .subsampling(1)
27425         .padding_left(2)
27426         .padding_right(2)
27427         .padding_top(2)
27428         .padding_bottom(2)
27429         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc3);
27430     }
27431   }
27432 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_width_gt_4)27433   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_width_gt_4) {
27434     for (size_t input_width = 5; input_width < 9; input_width++) {
27435       DWConv2DMicrokernelTester()
27436         .input_width(input_width)
27437         .input_height(2)
27438         .kernel_height(5)
27439         .kernel_width(5)
27440         .subsampling(1)
27441         .padding_left(2)
27442         .padding_right(2)
27443         .padding_top(2)
27444         .padding_bottom(2)
27445         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc3);
27446     }
27447   }
27448 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_height_div_2)27449   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_height_div_2) {
27450     for (size_t input_height = 4; input_height < 16; input_height += 2) {
27451       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27452         DWConv2DMicrokernelTester()
27453           .input_width(input_width)
27454           .input_height(input_height)
27455           .kernel_height(5)
27456           .kernel_width(5)
27457           .subsampling(1)
27458           .padding_left(2)
27459           .padding_right(2)
27460           .padding_top(2)
27461           .padding_bottom(2)
27462           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc3);
27463       }
27464     }
27465   }
27466 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_height_lt_2)27467   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_height_lt_2) {
27468     for (size_t input_height = 1; input_height < 2; input_height++) {
27469       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27470         DWConv2DMicrokernelTester()
27471           .input_width(input_width)
27472           .input_height(input_height)
27473           .kernel_height(5)
27474           .kernel_width(5)
27475           .subsampling(1)
27476           .padding_left(2)
27477           .padding_right(2)
27478           .padding_top(2)
27479           .padding_bottom(2)
27480           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc3);
27481       }
27482     }
27483   }
27484 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_height_gt_2)27485   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_height_gt_2) {
27486     for (size_t input_height = 3; input_height < 5; input_height++) {
27487       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27488         DWConv2DMicrokernelTester()
27489           .input_width(input_width)
27490           .input_height(input_height)
27491           .kernel_height(5)
27492           .kernel_width(5)
27493           .subsampling(1)
27494           .padding_left(2)
27495           .padding_right(2)
27496           .padding_top(2)
27497           .padding_bottom(2)
27498           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_2x4_acc3);
27499       }
27500     }
27501   }
27502 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
27503 
27504 
27505 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4,output_width_eq_4)27506   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4, output_width_eq_4) {
27507     DWConv2DMicrokernelTester()
27508       .input_width(4)
27509       .input_height(3)
27510       .kernel_height(5)
27511       .kernel_width(5)
27512       .subsampling(1)
27513       .padding_left(2)
27514       .padding_right(2)
27515       .padding_top(2)
27516       .padding_bottom(2)
27517       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4);
27518   }
27519 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4,output_width_div_4)27520   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4, output_width_div_4) {
27521     for (size_t input_width = 8; input_width < 32; input_width += 4) {
27522       DWConv2DMicrokernelTester()
27523         .input_width(input_width)
27524         .input_height(3)
27525         .kernel_height(5)
27526         .kernel_width(5)
27527         .subsampling(1)
27528         .padding_left(2)
27529         .padding_right(2)
27530         .padding_top(2)
27531         .padding_bottom(2)
27532         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4);
27533     }
27534   }
27535 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4,output_width_lt_4)27536   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4, output_width_lt_4) {
27537     for (size_t input_width = 1; input_width < 4; input_width++) {
27538       DWConv2DMicrokernelTester()
27539         .input_width(4)
27540         .input_height(3)
27541         .kernel_height(5)
27542         .kernel_width(5)
27543         .subsampling(1)
27544         .padding_left(2)
27545         .padding_right(2)
27546         .padding_top(2)
27547         .padding_bottom(2)
27548         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4);
27549     }
27550   }
27551 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4,output_width_gt_4)27552   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4, output_width_gt_4) {
27553     for (size_t input_width = 5; input_width < 9; input_width++) {
27554       DWConv2DMicrokernelTester()
27555         .input_width(input_width)
27556         .input_height(3)
27557         .kernel_height(5)
27558         .kernel_width(5)
27559         .subsampling(1)
27560         .padding_left(2)
27561         .padding_right(2)
27562         .padding_top(2)
27563         .padding_bottom(2)
27564         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4);
27565     }
27566   }
27567 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4,output_height_div_3)27568   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4, output_height_div_3) {
27569     for (size_t input_height = 6; input_height < 24; input_height += 3) {
27570       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27571         DWConv2DMicrokernelTester()
27572           .input_width(input_width)
27573           .input_height(input_height)
27574           .kernel_height(5)
27575           .kernel_width(5)
27576           .subsampling(1)
27577           .padding_left(2)
27578           .padding_right(2)
27579           .padding_top(2)
27580           .padding_bottom(2)
27581           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4);
27582       }
27583     }
27584   }
27585 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4,output_height_lt_3)27586   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4, output_height_lt_3) {
27587     for (size_t input_height = 1; input_height < 3; input_height++) {
27588       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27589         DWConv2DMicrokernelTester()
27590           .input_width(input_width)
27591           .input_height(input_height)
27592           .kernel_height(5)
27593           .kernel_width(5)
27594           .subsampling(1)
27595           .padding_left(2)
27596           .padding_right(2)
27597           .padding_top(2)
27598           .padding_bottom(2)
27599           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4);
27600       }
27601     }
27602   }
27603 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4,output_height_gt_3)27604   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4, output_height_gt_3) {
27605     for (size_t input_height = 4; input_height < 7; input_height++) {
27606       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27607         DWConv2DMicrokernelTester()
27608           .input_width(input_width)
27609           .input_height(input_height)
27610           .kernel_height(5)
27611           .kernel_width(5)
27612           .subsampling(1)
27613           .padding_left(2)
27614           .padding_right(2)
27615           .padding_top(2)
27616           .padding_bottom(2)
27617           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4);
27618       }
27619     }
27620   }
27621 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
27622 
27623 
27624 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_width_eq_4)27625   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_width_eq_4) {
27626     DWConv2DMicrokernelTester()
27627       .input_width(4)
27628       .input_height(3)
27629       .kernel_height(5)
27630       .kernel_width(5)
27631       .subsampling(1)
27632       .padding_left(2)
27633       .padding_right(2)
27634       .padding_top(2)
27635       .padding_bottom(2)
27636       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4_acc2);
27637   }
27638 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_width_div_4)27639   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_width_div_4) {
27640     for (size_t input_width = 8; input_width < 32; input_width += 4) {
27641       DWConv2DMicrokernelTester()
27642         .input_width(input_width)
27643         .input_height(3)
27644         .kernel_height(5)
27645         .kernel_width(5)
27646         .subsampling(1)
27647         .padding_left(2)
27648         .padding_right(2)
27649         .padding_top(2)
27650         .padding_bottom(2)
27651         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4_acc2);
27652     }
27653   }
27654 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_width_lt_4)27655   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_width_lt_4) {
27656     for (size_t input_width = 1; input_width < 4; input_width++) {
27657       DWConv2DMicrokernelTester()
27658         .input_width(4)
27659         .input_height(3)
27660         .kernel_height(5)
27661         .kernel_width(5)
27662         .subsampling(1)
27663         .padding_left(2)
27664         .padding_right(2)
27665         .padding_top(2)
27666         .padding_bottom(2)
27667         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4_acc2);
27668     }
27669   }
27670 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_width_gt_4)27671   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_width_gt_4) {
27672     for (size_t input_width = 5; input_width < 9; input_width++) {
27673       DWConv2DMicrokernelTester()
27674         .input_width(input_width)
27675         .input_height(3)
27676         .kernel_height(5)
27677         .kernel_width(5)
27678         .subsampling(1)
27679         .padding_left(2)
27680         .padding_right(2)
27681         .padding_top(2)
27682         .padding_bottom(2)
27683         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4_acc2);
27684     }
27685   }
27686 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_height_div_3)27687   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_height_div_3) {
27688     for (size_t input_height = 6; input_height < 24; input_height += 3) {
27689       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27690         DWConv2DMicrokernelTester()
27691           .input_width(input_width)
27692           .input_height(input_height)
27693           .kernel_height(5)
27694           .kernel_width(5)
27695           .subsampling(1)
27696           .padding_left(2)
27697           .padding_right(2)
27698           .padding_top(2)
27699           .padding_bottom(2)
27700           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4_acc2);
27701       }
27702     }
27703   }
27704 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_height_lt_3)27705   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_height_lt_3) {
27706     for (size_t input_height = 1; input_height < 3; input_height++) {
27707       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27708         DWConv2DMicrokernelTester()
27709           .input_width(input_width)
27710           .input_height(input_height)
27711           .kernel_height(5)
27712           .kernel_width(5)
27713           .subsampling(1)
27714           .padding_left(2)
27715           .padding_right(2)
27716           .padding_top(2)
27717           .padding_bottom(2)
27718           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4_acc2);
27719       }
27720     }
27721   }
27722 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_height_gt_3)27723   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_height_gt_3) {
27724     for (size_t input_height = 4; input_height < 7; input_height++) {
27725       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27726         DWConv2DMicrokernelTester()
27727           .input_width(input_width)
27728           .input_height(input_height)
27729           .kernel_height(5)
27730           .kernel_width(5)
27731           .subsampling(1)
27732           .padding_left(2)
27733           .padding_right(2)
27734           .padding_top(2)
27735           .padding_bottom(2)
27736           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_3x4_acc2);
27737       }
27738     }
27739   }
27740 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
27741 
27742 
27743 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4,output_width_eq_4)27744   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4, output_width_eq_4) {
27745     DWConv2DMicrokernelTester()
27746       .input_width(4)
27747       .input_height(4)
27748       .kernel_height(5)
27749       .kernel_width(5)
27750       .subsampling(1)
27751       .padding_left(2)
27752       .padding_right(2)
27753       .padding_top(2)
27754       .padding_bottom(2)
27755       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4);
27756   }
27757 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4,output_width_div_4)27758   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4, output_width_div_4) {
27759     for (size_t input_width = 8; input_width < 32; input_width += 4) {
27760       DWConv2DMicrokernelTester()
27761         .input_width(input_width)
27762         .input_height(4)
27763         .kernel_height(5)
27764         .kernel_width(5)
27765         .subsampling(1)
27766         .padding_left(2)
27767         .padding_right(2)
27768         .padding_top(2)
27769         .padding_bottom(2)
27770         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4);
27771     }
27772   }
27773 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4,output_width_lt_4)27774   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4, output_width_lt_4) {
27775     for (size_t input_width = 1; input_width < 4; input_width++) {
27776       DWConv2DMicrokernelTester()
27777         .input_width(4)
27778         .input_height(4)
27779         .kernel_height(5)
27780         .kernel_width(5)
27781         .subsampling(1)
27782         .padding_left(2)
27783         .padding_right(2)
27784         .padding_top(2)
27785         .padding_bottom(2)
27786         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4);
27787     }
27788   }
27789 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4,output_width_gt_4)27790   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4, output_width_gt_4) {
27791     for (size_t input_width = 5; input_width < 9; input_width++) {
27792       DWConv2DMicrokernelTester()
27793         .input_width(input_width)
27794         .input_height(4)
27795         .kernel_height(5)
27796         .kernel_width(5)
27797         .subsampling(1)
27798         .padding_left(2)
27799         .padding_right(2)
27800         .padding_top(2)
27801         .padding_bottom(2)
27802         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4);
27803     }
27804   }
27805 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4,output_height_div_4)27806   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4, output_height_div_4) {
27807     for (size_t input_height = 8; input_height < 32; input_height += 4) {
27808       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27809         DWConv2DMicrokernelTester()
27810           .input_width(input_width)
27811           .input_height(input_height)
27812           .kernel_height(5)
27813           .kernel_width(5)
27814           .subsampling(1)
27815           .padding_left(2)
27816           .padding_right(2)
27817           .padding_top(2)
27818           .padding_bottom(2)
27819           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4);
27820       }
27821     }
27822   }
27823 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4,output_height_lt_4)27824   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4, output_height_lt_4) {
27825     for (size_t input_height = 1; input_height < 4; input_height++) {
27826       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27827         DWConv2DMicrokernelTester()
27828           .input_width(input_width)
27829           .input_height(input_height)
27830           .kernel_height(5)
27831           .kernel_width(5)
27832           .subsampling(1)
27833           .padding_left(2)
27834           .padding_right(2)
27835           .padding_top(2)
27836           .padding_bottom(2)
27837           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4);
27838       }
27839     }
27840   }
27841 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4,output_height_gt_4)27842   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4, output_height_gt_4) {
27843     for (size_t input_height = 5; input_height < 9; input_height++) {
27844       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27845         DWConv2DMicrokernelTester()
27846           .input_width(input_width)
27847           .input_height(input_height)
27848           .kernel_height(5)
27849           .kernel_width(5)
27850           .subsampling(1)
27851           .padding_left(2)
27852           .padding_right(2)
27853           .padding_top(2)
27854           .padding_bottom(2)
27855           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4);
27856       }
27857     }
27858   }
27859 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
27860 
27861 
27862 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2,output_width_eq_4)27863   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2, output_width_eq_4) {
27864     DWConv2DMicrokernelTester()
27865       .input_width(4)
27866       .input_height(4)
27867       .kernel_height(5)
27868       .kernel_width(5)
27869       .subsampling(1)
27870       .padding_left(2)
27871       .padding_right(2)
27872       .padding_top(2)
27873       .padding_bottom(2)
27874       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4_acc2);
27875   }
27876 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2,output_width_div_4)27877   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2, output_width_div_4) {
27878     for (size_t input_width = 8; input_width < 32; input_width += 4) {
27879       DWConv2DMicrokernelTester()
27880         .input_width(input_width)
27881         .input_height(4)
27882         .kernel_height(5)
27883         .kernel_width(5)
27884         .subsampling(1)
27885         .padding_left(2)
27886         .padding_right(2)
27887         .padding_top(2)
27888         .padding_bottom(2)
27889         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4_acc2);
27890     }
27891   }
27892 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2,output_width_lt_4)27893   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2, output_width_lt_4) {
27894     for (size_t input_width = 1; input_width < 4; input_width++) {
27895       DWConv2DMicrokernelTester()
27896         .input_width(4)
27897         .input_height(4)
27898         .kernel_height(5)
27899         .kernel_width(5)
27900         .subsampling(1)
27901         .padding_left(2)
27902         .padding_right(2)
27903         .padding_top(2)
27904         .padding_bottom(2)
27905         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4_acc2);
27906     }
27907   }
27908 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2,output_width_gt_4)27909   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2, output_width_gt_4) {
27910     for (size_t input_width = 5; input_width < 9; input_width++) {
27911       DWConv2DMicrokernelTester()
27912         .input_width(input_width)
27913         .input_height(4)
27914         .kernel_height(5)
27915         .kernel_width(5)
27916         .subsampling(1)
27917         .padding_left(2)
27918         .padding_right(2)
27919         .padding_top(2)
27920         .padding_bottom(2)
27921         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4_acc2);
27922     }
27923   }
27924 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2,output_height_div_4)27925   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2, output_height_div_4) {
27926     for (size_t input_height = 8; input_height < 32; input_height += 4) {
27927       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27928         DWConv2DMicrokernelTester()
27929           .input_width(input_width)
27930           .input_height(input_height)
27931           .kernel_height(5)
27932           .kernel_width(5)
27933           .subsampling(1)
27934           .padding_left(2)
27935           .padding_right(2)
27936           .padding_top(2)
27937           .padding_bottom(2)
27938           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4_acc2);
27939       }
27940     }
27941   }
27942 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2,output_height_lt_4)27943   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2, output_height_lt_4) {
27944     for (size_t input_height = 1; input_height < 4; input_height++) {
27945       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27946         DWConv2DMicrokernelTester()
27947           .input_width(input_width)
27948           .input_height(input_height)
27949           .kernel_height(5)
27950           .kernel_width(5)
27951           .subsampling(1)
27952           .padding_left(2)
27953           .padding_right(2)
27954           .padding_top(2)
27955           .padding_bottom(2)
27956           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4_acc2);
27957       }
27958     }
27959   }
27960 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2,output_height_gt_4)27961   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_4X4_ACC2, output_height_gt_4) {
27962     for (size_t input_height = 5; input_height < 9; input_height++) {
27963       for (size_t input_width = 1; input_width < 21; input_width += 3) {
27964         DWConv2DMicrokernelTester()
27965           .input_width(input_width)
27966           .input_height(input_height)
27967           .kernel_height(5)
27968           .kernel_width(5)
27969           .subsampling(1)
27970           .padding_left(2)
27971           .padding_right(2)
27972           .padding_top(2)
27973           .padding_bottom(2)
27974           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_4x4_acc2);
27975       }
27976     }
27977   }
27978 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
27979 
27980 
27981 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4,output_width_eq_4)27982   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4, output_width_eq_4) {
27983     DWConv2DMicrokernelTester()
27984       .input_width(4)
27985       .input_height(5)
27986       .kernel_height(5)
27987       .kernel_width(5)
27988       .subsampling(1)
27989       .padding_left(2)
27990       .padding_right(2)
27991       .padding_top(2)
27992       .padding_bottom(2)
27993       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_5x4);
27994   }
27995 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4,output_width_div_4)27996   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4, output_width_div_4) {
27997     for (size_t input_width = 8; input_width < 32; input_width += 4) {
27998       DWConv2DMicrokernelTester()
27999         .input_width(input_width)
28000         .input_height(5)
28001         .kernel_height(5)
28002         .kernel_width(5)
28003         .subsampling(1)
28004         .padding_left(2)
28005         .padding_right(2)
28006         .padding_top(2)
28007         .padding_bottom(2)
28008         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_5x4);
28009     }
28010   }
28011 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4,output_width_lt_4)28012   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4, output_width_lt_4) {
28013     for (size_t input_width = 1; input_width < 4; input_width++) {
28014       DWConv2DMicrokernelTester()
28015         .input_width(4)
28016         .input_height(5)
28017         .kernel_height(5)
28018         .kernel_width(5)
28019         .subsampling(1)
28020         .padding_left(2)
28021         .padding_right(2)
28022         .padding_top(2)
28023         .padding_bottom(2)
28024         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_5x4);
28025     }
28026   }
28027 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4,output_width_gt_4)28028   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4, output_width_gt_4) {
28029     for (size_t input_width = 5; input_width < 9; input_width++) {
28030       DWConv2DMicrokernelTester()
28031         .input_width(input_width)
28032         .input_height(5)
28033         .kernel_height(5)
28034         .kernel_width(5)
28035         .subsampling(1)
28036         .padding_left(2)
28037         .padding_right(2)
28038         .padding_top(2)
28039         .padding_bottom(2)
28040         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_5x4);
28041     }
28042   }
28043 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4,output_height_div_5)28044   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4, output_height_div_5) {
28045     for (size_t input_height = 10; input_height < 40; input_height += 5) {
28046       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28047         DWConv2DMicrokernelTester()
28048           .input_width(input_width)
28049           .input_height(input_height)
28050           .kernel_height(5)
28051           .kernel_width(5)
28052           .subsampling(1)
28053           .padding_left(2)
28054           .padding_right(2)
28055           .padding_top(2)
28056           .padding_bottom(2)
28057           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_5x4);
28058       }
28059     }
28060   }
28061 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4,output_height_lt_5)28062   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4, output_height_lt_5) {
28063     for (size_t input_height = 1; input_height < 5; input_height++) {
28064       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28065         DWConv2DMicrokernelTester()
28066           .input_width(input_width)
28067           .input_height(input_height)
28068           .kernel_height(5)
28069           .kernel_width(5)
28070           .subsampling(1)
28071           .padding_left(2)
28072           .padding_right(2)
28073           .padding_top(2)
28074           .padding_bottom(2)
28075           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_5x4);
28076       }
28077     }
28078   }
28079 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4,output_height_gt_5)28080   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_ARM_SPLAT_5X4, output_height_gt_5) {
28081     for (size_t input_height = 6; input_height < 11; input_height++) {
28082       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28083         DWConv2DMicrokernelTester()
28084           .input_width(input_width)
28085           .input_height(input_height)
28086           .kernel_height(5)
28087           .kernel_width(5)
28088           .subsampling(1)
28089           .padding_left(2)
28090           .padding_right(2)
28091           .padding_top(2)
28092           .padding_bottom(2)
28093           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_arm_splat_5x4);
28094       }
28095     }
28096   }
28097 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
28098 
28099 
28100 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4,output_width_eq_4)28101   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4, output_width_eq_4) {
28102     DWConv2DMicrokernelTester()
28103       .input_width(4)
28104       .input_height(1)
28105       .kernel_height(5)
28106       .kernel_width(5)
28107       .subsampling(1)
28108       .padding_left(2)
28109       .padding_right(2)
28110       .padding_top(2)
28111       .padding_bottom(2)
28112       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4);
28113   }
28114 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4,output_width_div_4)28115   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4, output_width_div_4) {
28116     for (size_t input_width = 8; input_width < 32; input_width += 4) {
28117       DWConv2DMicrokernelTester()
28118         .input_width(input_width)
28119         .input_height(1)
28120         .kernel_height(5)
28121         .kernel_width(5)
28122         .subsampling(1)
28123         .padding_left(2)
28124         .padding_right(2)
28125         .padding_top(2)
28126         .padding_bottom(2)
28127         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4);
28128     }
28129   }
28130 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4,output_width_lt_4)28131   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4, output_width_lt_4) {
28132     for (size_t input_width = 1; input_width < 4; input_width++) {
28133       DWConv2DMicrokernelTester()
28134         .input_width(4)
28135         .input_height(1)
28136         .kernel_height(5)
28137         .kernel_width(5)
28138         .subsampling(1)
28139         .padding_left(2)
28140         .padding_right(2)
28141         .padding_top(2)
28142         .padding_bottom(2)
28143         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4);
28144     }
28145   }
28146 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4,output_width_gt_4)28147   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4, output_width_gt_4) {
28148     for (size_t input_width = 5; input_width < 9; input_width++) {
28149       DWConv2DMicrokernelTester()
28150         .input_width(input_width)
28151         .input_height(1)
28152         .kernel_height(5)
28153         .kernel_width(5)
28154         .subsampling(1)
28155         .padding_left(2)
28156         .padding_right(2)
28157         .padding_top(2)
28158         .padding_bottom(2)
28159         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4);
28160     }
28161   }
28162 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4,output_height_gt_1)28163   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4, output_height_gt_1) {
28164     for (size_t input_height = 2; input_height < 3; input_height++) {
28165       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28166         DWConv2DMicrokernelTester()
28167           .input_width(input_width)
28168           .input_height(input_height)
28169           .kernel_height(5)
28170           .kernel_width(5)
28171           .subsampling(1)
28172           .padding_left(2)
28173           .padding_right(2)
28174           .padding_top(2)
28175           .padding_bottom(2)
28176           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4);
28177       }
28178     }
28179   }
28180 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
28181 
28182 
28183 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_eq_4)28184   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_eq_4) {
28185     DWConv2DMicrokernelTester()
28186       .input_width(4)
28187       .input_height(1)
28188       .kernel_height(5)
28189       .kernel_width(5)
28190       .subsampling(1)
28191       .padding_left(2)
28192       .padding_right(2)
28193       .padding_top(2)
28194       .padding_bottom(2)
28195       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc2);
28196   }
28197 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_div_4)28198   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_div_4) {
28199     for (size_t input_width = 8; input_width < 32; input_width += 4) {
28200       DWConv2DMicrokernelTester()
28201         .input_width(input_width)
28202         .input_height(1)
28203         .kernel_height(5)
28204         .kernel_width(5)
28205         .subsampling(1)
28206         .padding_left(2)
28207         .padding_right(2)
28208         .padding_top(2)
28209         .padding_bottom(2)
28210         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc2);
28211     }
28212   }
28213 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_lt_4)28214   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_lt_4) {
28215     for (size_t input_width = 1; input_width < 4; input_width++) {
28216       DWConv2DMicrokernelTester()
28217         .input_width(4)
28218         .input_height(1)
28219         .kernel_height(5)
28220         .kernel_width(5)
28221         .subsampling(1)
28222         .padding_left(2)
28223         .padding_right(2)
28224         .padding_top(2)
28225         .padding_bottom(2)
28226         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc2);
28227     }
28228   }
28229 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_gt_4)28230   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_gt_4) {
28231     for (size_t input_width = 5; input_width < 9; input_width++) {
28232       DWConv2DMicrokernelTester()
28233         .input_width(input_width)
28234         .input_height(1)
28235         .kernel_height(5)
28236         .kernel_width(5)
28237         .subsampling(1)
28238         .padding_left(2)
28239         .padding_right(2)
28240         .padding_top(2)
28241         .padding_bottom(2)
28242         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc2);
28243     }
28244   }
28245 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_height_gt_1)28246   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_height_gt_1) {
28247     for (size_t input_height = 2; input_height < 3; input_height++) {
28248       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28249         DWConv2DMicrokernelTester()
28250           .input_width(input_width)
28251           .input_height(input_height)
28252           .kernel_height(5)
28253           .kernel_width(5)
28254           .subsampling(1)
28255           .padding_left(2)
28256           .padding_right(2)
28257           .padding_top(2)
28258           .padding_bottom(2)
28259           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc2);
28260       }
28261     }
28262   }
28263 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
28264 
28265 
28266 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_eq_4)28267   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_eq_4) {
28268     DWConv2DMicrokernelTester()
28269       .input_width(4)
28270       .input_height(1)
28271       .kernel_height(5)
28272       .kernel_width(5)
28273       .subsampling(1)
28274       .padding_left(2)
28275       .padding_right(2)
28276       .padding_top(2)
28277       .padding_bottom(2)
28278       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc3);
28279   }
28280 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_div_4)28281   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_div_4) {
28282     for (size_t input_width = 8; input_width < 32; input_width += 4) {
28283       DWConv2DMicrokernelTester()
28284         .input_width(input_width)
28285         .input_height(1)
28286         .kernel_height(5)
28287         .kernel_width(5)
28288         .subsampling(1)
28289         .padding_left(2)
28290         .padding_right(2)
28291         .padding_top(2)
28292         .padding_bottom(2)
28293         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc3);
28294     }
28295   }
28296 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_lt_4)28297   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_lt_4) {
28298     for (size_t input_width = 1; input_width < 4; input_width++) {
28299       DWConv2DMicrokernelTester()
28300         .input_width(4)
28301         .input_height(1)
28302         .kernel_height(5)
28303         .kernel_width(5)
28304         .subsampling(1)
28305         .padding_left(2)
28306         .padding_right(2)
28307         .padding_top(2)
28308         .padding_bottom(2)
28309         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc3);
28310     }
28311   }
28312 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_gt_4)28313   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_gt_4) {
28314     for (size_t input_width = 5; input_width < 9; input_width++) {
28315       DWConv2DMicrokernelTester()
28316         .input_width(input_width)
28317         .input_height(1)
28318         .kernel_height(5)
28319         .kernel_width(5)
28320         .subsampling(1)
28321         .padding_left(2)
28322         .padding_right(2)
28323         .padding_top(2)
28324         .padding_bottom(2)
28325         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc3);
28326     }
28327   }
28328 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_height_gt_1)28329   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_height_gt_1) {
28330     for (size_t input_height = 2; input_height < 3; input_height++) {
28331       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28332         DWConv2DMicrokernelTester()
28333           .input_width(input_width)
28334           .input_height(input_height)
28335           .kernel_height(5)
28336           .kernel_width(5)
28337           .subsampling(1)
28338           .padding_left(2)
28339           .padding_right(2)
28340           .padding_top(2)
28341           .padding_bottom(2)
28342           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc3);
28343       }
28344     }
28345   }
28346 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
28347 
28348 
28349 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_eq_4)28350   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_eq_4) {
28351     DWConv2DMicrokernelTester()
28352       .input_width(4)
28353       .input_height(1)
28354       .kernel_height(5)
28355       .kernel_width(5)
28356       .subsampling(1)
28357       .padding_left(2)
28358       .padding_right(2)
28359       .padding_top(2)
28360       .padding_bottom(2)
28361       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc4);
28362   }
28363 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_div_4)28364   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_div_4) {
28365     for (size_t input_width = 8; input_width < 32; input_width += 4) {
28366       DWConv2DMicrokernelTester()
28367         .input_width(input_width)
28368         .input_height(1)
28369         .kernel_height(5)
28370         .kernel_width(5)
28371         .subsampling(1)
28372         .padding_left(2)
28373         .padding_right(2)
28374         .padding_top(2)
28375         .padding_bottom(2)
28376         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc4);
28377     }
28378   }
28379 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_lt_4)28380   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_lt_4) {
28381     for (size_t input_width = 1; input_width < 4; input_width++) {
28382       DWConv2DMicrokernelTester()
28383         .input_width(4)
28384         .input_height(1)
28385         .kernel_height(5)
28386         .kernel_width(5)
28387         .subsampling(1)
28388         .padding_left(2)
28389         .padding_right(2)
28390         .padding_top(2)
28391         .padding_bottom(2)
28392         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc4);
28393     }
28394   }
28395 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_gt_4)28396   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_gt_4) {
28397     for (size_t input_width = 5; input_width < 9; input_width++) {
28398       DWConv2DMicrokernelTester()
28399         .input_width(input_width)
28400         .input_height(1)
28401         .kernel_height(5)
28402         .kernel_width(5)
28403         .subsampling(1)
28404         .padding_left(2)
28405         .padding_right(2)
28406         .padding_top(2)
28407         .padding_bottom(2)
28408         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc4);
28409     }
28410   }
28411 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_height_gt_1)28412   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_height_gt_1) {
28413     for (size_t input_height = 2; input_height < 3; input_height++) {
28414       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28415         DWConv2DMicrokernelTester()
28416           .input_width(input_width)
28417           .input_height(input_height)
28418           .kernel_height(5)
28419           .kernel_width(5)
28420           .subsampling(1)
28421           .padding_left(2)
28422           .padding_right(2)
28423           .padding_top(2)
28424           .padding_bottom(2)
28425           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc4);
28426       }
28427     }
28428   }
28429 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
28430 
28431 
28432 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5,output_width_eq_4)28433   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5, output_width_eq_4) {
28434     DWConv2DMicrokernelTester()
28435       .input_width(4)
28436       .input_height(1)
28437       .kernel_height(5)
28438       .kernel_width(5)
28439       .subsampling(1)
28440       .padding_left(2)
28441       .padding_right(2)
28442       .padding_top(2)
28443       .padding_bottom(2)
28444       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc5);
28445   }
28446 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5,output_width_div_4)28447   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5, output_width_div_4) {
28448     for (size_t input_width = 8; input_width < 32; input_width += 4) {
28449       DWConv2DMicrokernelTester()
28450         .input_width(input_width)
28451         .input_height(1)
28452         .kernel_height(5)
28453         .kernel_width(5)
28454         .subsampling(1)
28455         .padding_left(2)
28456         .padding_right(2)
28457         .padding_top(2)
28458         .padding_bottom(2)
28459         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc5);
28460     }
28461   }
28462 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5,output_width_lt_4)28463   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5, output_width_lt_4) {
28464     for (size_t input_width = 1; input_width < 4; input_width++) {
28465       DWConv2DMicrokernelTester()
28466         .input_width(4)
28467         .input_height(1)
28468         .kernel_height(5)
28469         .kernel_width(5)
28470         .subsampling(1)
28471         .padding_left(2)
28472         .padding_right(2)
28473         .padding_top(2)
28474         .padding_bottom(2)
28475         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc5);
28476     }
28477   }
28478 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5,output_width_gt_4)28479   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5, output_width_gt_4) {
28480     for (size_t input_width = 5; input_width < 9; input_width++) {
28481       DWConv2DMicrokernelTester()
28482         .input_width(input_width)
28483         .input_height(1)
28484         .kernel_height(5)
28485         .kernel_width(5)
28486         .subsampling(1)
28487         .padding_left(2)
28488         .padding_right(2)
28489         .padding_top(2)
28490         .padding_bottom(2)
28491         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc5);
28492     }
28493   }
28494 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5,output_height_gt_1)28495   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5, output_height_gt_1) {
28496     for (size_t input_height = 2; input_height < 3; input_height++) {
28497       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28498         DWConv2DMicrokernelTester()
28499           .input_width(input_width)
28500           .input_height(input_height)
28501           .kernel_height(5)
28502           .kernel_width(5)
28503           .subsampling(1)
28504           .padding_left(2)
28505           .padding_right(2)
28506           .padding_top(2)
28507           .padding_bottom(2)
28508           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_1x4_acc5);
28509       }
28510     }
28511   }
28512 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
28513 
28514 
28515 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4,output_width_eq_4)28516   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4, output_width_eq_4) {
28517     DWConv2DMicrokernelTester()
28518       .input_width(4)
28519       .input_height(2)
28520       .kernel_height(5)
28521       .kernel_width(5)
28522       .subsampling(1)
28523       .padding_left(2)
28524       .padding_right(2)
28525       .padding_top(2)
28526       .padding_bottom(2)
28527       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4);
28528   }
28529 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4,output_width_div_4)28530   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4, output_width_div_4) {
28531     for (size_t input_width = 8; input_width < 32; input_width += 4) {
28532       DWConv2DMicrokernelTester()
28533         .input_width(input_width)
28534         .input_height(2)
28535         .kernel_height(5)
28536         .kernel_width(5)
28537         .subsampling(1)
28538         .padding_left(2)
28539         .padding_right(2)
28540         .padding_top(2)
28541         .padding_bottom(2)
28542         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4);
28543     }
28544   }
28545 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4,output_width_lt_4)28546   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4, output_width_lt_4) {
28547     for (size_t input_width = 1; input_width < 4; input_width++) {
28548       DWConv2DMicrokernelTester()
28549         .input_width(4)
28550         .input_height(2)
28551         .kernel_height(5)
28552         .kernel_width(5)
28553         .subsampling(1)
28554         .padding_left(2)
28555         .padding_right(2)
28556         .padding_top(2)
28557         .padding_bottom(2)
28558         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4);
28559     }
28560   }
28561 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4,output_width_gt_4)28562   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4, output_width_gt_4) {
28563     for (size_t input_width = 5; input_width < 9; input_width++) {
28564       DWConv2DMicrokernelTester()
28565         .input_width(input_width)
28566         .input_height(2)
28567         .kernel_height(5)
28568         .kernel_width(5)
28569         .subsampling(1)
28570         .padding_left(2)
28571         .padding_right(2)
28572         .padding_top(2)
28573         .padding_bottom(2)
28574         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4);
28575     }
28576   }
28577 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4,output_height_div_2)28578   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4, output_height_div_2) {
28579     for (size_t input_height = 4; input_height < 16; input_height += 2) {
28580       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28581         DWConv2DMicrokernelTester()
28582           .input_width(input_width)
28583           .input_height(input_height)
28584           .kernel_height(5)
28585           .kernel_width(5)
28586           .subsampling(1)
28587           .padding_left(2)
28588           .padding_right(2)
28589           .padding_top(2)
28590           .padding_bottom(2)
28591           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4);
28592       }
28593     }
28594   }
28595 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4,output_height_lt_2)28596   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4, output_height_lt_2) {
28597     for (size_t input_height = 1; input_height < 2; input_height++) {
28598       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28599         DWConv2DMicrokernelTester()
28600           .input_width(input_width)
28601           .input_height(input_height)
28602           .kernel_height(5)
28603           .kernel_width(5)
28604           .subsampling(1)
28605           .padding_left(2)
28606           .padding_right(2)
28607           .padding_top(2)
28608           .padding_bottom(2)
28609           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4);
28610       }
28611     }
28612   }
28613 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4,output_height_gt_2)28614   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4, output_height_gt_2) {
28615     for (size_t input_height = 3; input_height < 5; input_height++) {
28616       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28617         DWConv2DMicrokernelTester()
28618           .input_width(input_width)
28619           .input_height(input_height)
28620           .kernel_height(5)
28621           .kernel_width(5)
28622           .subsampling(1)
28623           .padding_left(2)
28624           .padding_right(2)
28625           .padding_top(2)
28626           .padding_bottom(2)
28627           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4);
28628       }
28629     }
28630   }
28631 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
28632 
28633 
28634 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_eq_4)28635   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_eq_4) {
28636     DWConv2DMicrokernelTester()
28637       .input_width(4)
28638       .input_height(2)
28639       .kernel_height(5)
28640       .kernel_width(5)
28641       .subsampling(1)
28642       .padding_left(2)
28643       .padding_right(2)
28644       .padding_top(2)
28645       .padding_bottom(2)
28646       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc2);
28647   }
28648 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_div_4)28649   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_div_4) {
28650     for (size_t input_width = 8; input_width < 32; input_width += 4) {
28651       DWConv2DMicrokernelTester()
28652         .input_width(input_width)
28653         .input_height(2)
28654         .kernel_height(5)
28655         .kernel_width(5)
28656         .subsampling(1)
28657         .padding_left(2)
28658         .padding_right(2)
28659         .padding_top(2)
28660         .padding_bottom(2)
28661         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc2);
28662     }
28663   }
28664 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_lt_4)28665   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_lt_4) {
28666     for (size_t input_width = 1; input_width < 4; input_width++) {
28667       DWConv2DMicrokernelTester()
28668         .input_width(4)
28669         .input_height(2)
28670         .kernel_height(5)
28671         .kernel_width(5)
28672         .subsampling(1)
28673         .padding_left(2)
28674         .padding_right(2)
28675         .padding_top(2)
28676         .padding_bottom(2)
28677         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc2);
28678     }
28679   }
28680 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_gt_4)28681   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_gt_4) {
28682     for (size_t input_width = 5; input_width < 9; input_width++) {
28683       DWConv2DMicrokernelTester()
28684         .input_width(input_width)
28685         .input_height(2)
28686         .kernel_height(5)
28687         .kernel_width(5)
28688         .subsampling(1)
28689         .padding_left(2)
28690         .padding_right(2)
28691         .padding_top(2)
28692         .padding_bottom(2)
28693         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc2);
28694     }
28695   }
28696 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_div_2)28697   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_div_2) {
28698     for (size_t input_height = 4; input_height < 16; input_height += 2) {
28699       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28700         DWConv2DMicrokernelTester()
28701           .input_width(input_width)
28702           .input_height(input_height)
28703           .kernel_height(5)
28704           .kernel_width(5)
28705           .subsampling(1)
28706           .padding_left(2)
28707           .padding_right(2)
28708           .padding_top(2)
28709           .padding_bottom(2)
28710           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc2);
28711       }
28712     }
28713   }
28714 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_lt_2)28715   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_lt_2) {
28716     for (size_t input_height = 1; input_height < 2; input_height++) {
28717       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28718         DWConv2DMicrokernelTester()
28719           .input_width(input_width)
28720           .input_height(input_height)
28721           .kernel_height(5)
28722           .kernel_width(5)
28723           .subsampling(1)
28724           .padding_left(2)
28725           .padding_right(2)
28726           .padding_top(2)
28727           .padding_bottom(2)
28728           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc2);
28729       }
28730     }
28731   }
28732 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_gt_2)28733   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_gt_2) {
28734     for (size_t input_height = 3; input_height < 5; input_height++) {
28735       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28736         DWConv2DMicrokernelTester()
28737           .input_width(input_width)
28738           .input_height(input_height)
28739           .kernel_height(5)
28740           .kernel_width(5)
28741           .subsampling(1)
28742           .padding_left(2)
28743           .padding_right(2)
28744           .padding_top(2)
28745           .padding_bottom(2)
28746           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc2);
28747       }
28748     }
28749   }
28750 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
28751 
28752 
28753 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_width_eq_4)28754   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_width_eq_4) {
28755     DWConv2DMicrokernelTester()
28756       .input_width(4)
28757       .input_height(2)
28758       .kernel_height(5)
28759       .kernel_width(5)
28760       .subsampling(1)
28761       .padding_left(2)
28762       .padding_right(2)
28763       .padding_top(2)
28764       .padding_bottom(2)
28765       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc3);
28766   }
28767 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_width_div_4)28768   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_width_div_4) {
28769     for (size_t input_width = 8; input_width < 32; input_width += 4) {
28770       DWConv2DMicrokernelTester()
28771         .input_width(input_width)
28772         .input_height(2)
28773         .kernel_height(5)
28774         .kernel_width(5)
28775         .subsampling(1)
28776         .padding_left(2)
28777         .padding_right(2)
28778         .padding_top(2)
28779         .padding_bottom(2)
28780         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc3);
28781     }
28782   }
28783 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_width_lt_4)28784   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_width_lt_4) {
28785     for (size_t input_width = 1; input_width < 4; input_width++) {
28786       DWConv2DMicrokernelTester()
28787         .input_width(4)
28788         .input_height(2)
28789         .kernel_height(5)
28790         .kernel_width(5)
28791         .subsampling(1)
28792         .padding_left(2)
28793         .padding_right(2)
28794         .padding_top(2)
28795         .padding_bottom(2)
28796         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc3);
28797     }
28798   }
28799 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_width_gt_4)28800   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_width_gt_4) {
28801     for (size_t input_width = 5; input_width < 9; input_width++) {
28802       DWConv2DMicrokernelTester()
28803         .input_width(input_width)
28804         .input_height(2)
28805         .kernel_height(5)
28806         .kernel_width(5)
28807         .subsampling(1)
28808         .padding_left(2)
28809         .padding_right(2)
28810         .padding_top(2)
28811         .padding_bottom(2)
28812         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc3);
28813     }
28814   }
28815 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_height_div_2)28816   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_height_div_2) {
28817     for (size_t input_height = 4; input_height < 16; input_height += 2) {
28818       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28819         DWConv2DMicrokernelTester()
28820           .input_width(input_width)
28821           .input_height(input_height)
28822           .kernel_height(5)
28823           .kernel_width(5)
28824           .subsampling(1)
28825           .padding_left(2)
28826           .padding_right(2)
28827           .padding_top(2)
28828           .padding_bottom(2)
28829           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc3);
28830       }
28831     }
28832   }
28833 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_height_lt_2)28834   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_height_lt_2) {
28835     for (size_t input_height = 1; input_height < 2; input_height++) {
28836       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28837         DWConv2DMicrokernelTester()
28838           .input_width(input_width)
28839           .input_height(input_height)
28840           .kernel_height(5)
28841           .kernel_width(5)
28842           .subsampling(1)
28843           .padding_left(2)
28844           .padding_right(2)
28845           .padding_top(2)
28846           .padding_bottom(2)
28847           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc3);
28848       }
28849     }
28850   }
28851 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_height_gt_2)28852   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_height_gt_2) {
28853     for (size_t input_height = 3; input_height < 5; input_height++) {
28854       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28855         DWConv2DMicrokernelTester()
28856           .input_width(input_width)
28857           .input_height(input_height)
28858           .kernel_height(5)
28859           .kernel_width(5)
28860           .subsampling(1)
28861           .padding_left(2)
28862           .padding_right(2)
28863           .padding_top(2)
28864           .padding_bottom(2)
28865           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_2x4_acc3);
28866       }
28867     }
28868   }
28869 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
28870 
28871 
28872 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4,output_width_eq_4)28873   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4, output_width_eq_4) {
28874     DWConv2DMicrokernelTester()
28875       .input_width(4)
28876       .input_height(3)
28877       .kernel_height(5)
28878       .kernel_width(5)
28879       .subsampling(1)
28880       .padding_left(2)
28881       .padding_right(2)
28882       .padding_top(2)
28883       .padding_bottom(2)
28884       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4);
28885   }
28886 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4,output_width_div_4)28887   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4, output_width_div_4) {
28888     for (size_t input_width = 8; input_width < 32; input_width += 4) {
28889       DWConv2DMicrokernelTester()
28890         .input_width(input_width)
28891         .input_height(3)
28892         .kernel_height(5)
28893         .kernel_width(5)
28894         .subsampling(1)
28895         .padding_left(2)
28896         .padding_right(2)
28897         .padding_top(2)
28898         .padding_bottom(2)
28899         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4);
28900     }
28901   }
28902 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4,output_width_lt_4)28903   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4, output_width_lt_4) {
28904     for (size_t input_width = 1; input_width < 4; input_width++) {
28905       DWConv2DMicrokernelTester()
28906         .input_width(4)
28907         .input_height(3)
28908         .kernel_height(5)
28909         .kernel_width(5)
28910         .subsampling(1)
28911         .padding_left(2)
28912         .padding_right(2)
28913         .padding_top(2)
28914         .padding_bottom(2)
28915         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4);
28916     }
28917   }
28918 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4,output_width_gt_4)28919   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4, output_width_gt_4) {
28920     for (size_t input_width = 5; input_width < 9; input_width++) {
28921       DWConv2DMicrokernelTester()
28922         .input_width(input_width)
28923         .input_height(3)
28924         .kernel_height(5)
28925         .kernel_width(5)
28926         .subsampling(1)
28927         .padding_left(2)
28928         .padding_right(2)
28929         .padding_top(2)
28930         .padding_bottom(2)
28931         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4);
28932     }
28933   }
28934 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4,output_height_div_3)28935   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4, output_height_div_3) {
28936     for (size_t input_height = 6; input_height < 24; input_height += 3) {
28937       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28938         DWConv2DMicrokernelTester()
28939           .input_width(input_width)
28940           .input_height(input_height)
28941           .kernel_height(5)
28942           .kernel_width(5)
28943           .subsampling(1)
28944           .padding_left(2)
28945           .padding_right(2)
28946           .padding_top(2)
28947           .padding_bottom(2)
28948           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4);
28949       }
28950     }
28951   }
28952 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4,output_height_lt_3)28953   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4, output_height_lt_3) {
28954     for (size_t input_height = 1; input_height < 3; input_height++) {
28955       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28956         DWConv2DMicrokernelTester()
28957           .input_width(input_width)
28958           .input_height(input_height)
28959           .kernel_height(5)
28960           .kernel_width(5)
28961           .subsampling(1)
28962           .padding_left(2)
28963           .padding_right(2)
28964           .padding_top(2)
28965           .padding_bottom(2)
28966           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4);
28967       }
28968     }
28969   }
28970 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4,output_height_gt_3)28971   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4, output_height_gt_3) {
28972     for (size_t input_height = 4; input_height < 7; input_height++) {
28973       for (size_t input_width = 1; input_width < 21; input_width += 3) {
28974         DWConv2DMicrokernelTester()
28975           .input_width(input_width)
28976           .input_height(input_height)
28977           .kernel_height(5)
28978           .kernel_width(5)
28979           .subsampling(1)
28980           .padding_left(2)
28981           .padding_right(2)
28982           .padding_top(2)
28983           .padding_bottom(2)
28984           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4);
28985       }
28986     }
28987   }
28988 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
28989 
28990 
28991 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_width_eq_4)28992   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_width_eq_4) {
28993     DWConv2DMicrokernelTester()
28994       .input_width(4)
28995       .input_height(3)
28996       .kernel_height(5)
28997       .kernel_width(5)
28998       .subsampling(1)
28999       .padding_left(2)
29000       .padding_right(2)
29001       .padding_top(2)
29002       .padding_bottom(2)
29003       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4_acc2);
29004   }
29005 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_width_div_4)29006   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_width_div_4) {
29007     for (size_t input_width = 8; input_width < 32; input_width += 4) {
29008       DWConv2DMicrokernelTester()
29009         .input_width(input_width)
29010         .input_height(3)
29011         .kernel_height(5)
29012         .kernel_width(5)
29013         .subsampling(1)
29014         .padding_left(2)
29015         .padding_right(2)
29016         .padding_top(2)
29017         .padding_bottom(2)
29018         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4_acc2);
29019     }
29020   }
29021 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_width_lt_4)29022   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_width_lt_4) {
29023     for (size_t input_width = 1; input_width < 4; input_width++) {
29024       DWConv2DMicrokernelTester()
29025         .input_width(4)
29026         .input_height(3)
29027         .kernel_height(5)
29028         .kernel_width(5)
29029         .subsampling(1)
29030         .padding_left(2)
29031         .padding_right(2)
29032         .padding_top(2)
29033         .padding_bottom(2)
29034         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4_acc2);
29035     }
29036   }
29037 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_width_gt_4)29038   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_width_gt_4) {
29039     for (size_t input_width = 5; input_width < 9; input_width++) {
29040       DWConv2DMicrokernelTester()
29041         .input_width(input_width)
29042         .input_height(3)
29043         .kernel_height(5)
29044         .kernel_width(5)
29045         .subsampling(1)
29046         .padding_left(2)
29047         .padding_right(2)
29048         .padding_top(2)
29049         .padding_bottom(2)
29050         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4_acc2);
29051     }
29052   }
29053 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_height_div_3)29054   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_height_div_3) {
29055     for (size_t input_height = 6; input_height < 24; input_height += 3) {
29056       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29057         DWConv2DMicrokernelTester()
29058           .input_width(input_width)
29059           .input_height(input_height)
29060           .kernel_height(5)
29061           .kernel_width(5)
29062           .subsampling(1)
29063           .padding_left(2)
29064           .padding_right(2)
29065           .padding_top(2)
29066           .padding_bottom(2)
29067           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4_acc2);
29068       }
29069     }
29070   }
29071 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_height_lt_3)29072   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_height_lt_3) {
29073     for (size_t input_height = 1; input_height < 3; input_height++) {
29074       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29075         DWConv2DMicrokernelTester()
29076           .input_width(input_width)
29077           .input_height(input_height)
29078           .kernel_height(5)
29079           .kernel_width(5)
29080           .subsampling(1)
29081           .padding_left(2)
29082           .padding_right(2)
29083           .padding_top(2)
29084           .padding_bottom(2)
29085           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4_acc2);
29086       }
29087     }
29088   }
29089 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_height_gt_3)29090   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_height_gt_3) {
29091     for (size_t input_height = 4; input_height < 7; input_height++) {
29092       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29093         DWConv2DMicrokernelTester()
29094           .input_width(input_width)
29095           .input_height(input_height)
29096           .kernel_height(5)
29097           .kernel_width(5)
29098           .subsampling(1)
29099           .padding_left(2)
29100           .padding_right(2)
29101           .padding_top(2)
29102           .padding_bottom(2)
29103           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_3x4_acc2);
29104       }
29105     }
29106   }
29107 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
29108 
29109 
29110 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4,output_width_eq_4)29111   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4, output_width_eq_4) {
29112     DWConv2DMicrokernelTester()
29113       .input_width(4)
29114       .input_height(4)
29115       .kernel_height(5)
29116       .kernel_width(5)
29117       .subsampling(1)
29118       .padding_left(2)
29119       .padding_right(2)
29120       .padding_top(2)
29121       .padding_bottom(2)
29122       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4);
29123   }
29124 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4,output_width_div_4)29125   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4, output_width_div_4) {
29126     for (size_t input_width = 8; input_width < 32; input_width += 4) {
29127       DWConv2DMicrokernelTester()
29128         .input_width(input_width)
29129         .input_height(4)
29130         .kernel_height(5)
29131         .kernel_width(5)
29132         .subsampling(1)
29133         .padding_left(2)
29134         .padding_right(2)
29135         .padding_top(2)
29136         .padding_bottom(2)
29137         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4);
29138     }
29139   }
29140 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4,output_width_lt_4)29141   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4, output_width_lt_4) {
29142     for (size_t input_width = 1; input_width < 4; input_width++) {
29143       DWConv2DMicrokernelTester()
29144         .input_width(4)
29145         .input_height(4)
29146         .kernel_height(5)
29147         .kernel_width(5)
29148         .subsampling(1)
29149         .padding_left(2)
29150         .padding_right(2)
29151         .padding_top(2)
29152         .padding_bottom(2)
29153         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4);
29154     }
29155   }
29156 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4,output_width_gt_4)29157   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4, output_width_gt_4) {
29158     for (size_t input_width = 5; input_width < 9; input_width++) {
29159       DWConv2DMicrokernelTester()
29160         .input_width(input_width)
29161         .input_height(4)
29162         .kernel_height(5)
29163         .kernel_width(5)
29164         .subsampling(1)
29165         .padding_left(2)
29166         .padding_right(2)
29167         .padding_top(2)
29168         .padding_bottom(2)
29169         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4);
29170     }
29171   }
29172 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4,output_height_div_4)29173   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4, output_height_div_4) {
29174     for (size_t input_height = 8; input_height < 32; input_height += 4) {
29175       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29176         DWConv2DMicrokernelTester()
29177           .input_width(input_width)
29178           .input_height(input_height)
29179           .kernel_height(5)
29180           .kernel_width(5)
29181           .subsampling(1)
29182           .padding_left(2)
29183           .padding_right(2)
29184           .padding_top(2)
29185           .padding_bottom(2)
29186           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4);
29187       }
29188     }
29189   }
29190 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4,output_height_lt_4)29191   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4, output_height_lt_4) {
29192     for (size_t input_height = 1; input_height < 4; input_height++) {
29193       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29194         DWConv2DMicrokernelTester()
29195           .input_width(input_width)
29196           .input_height(input_height)
29197           .kernel_height(5)
29198           .kernel_width(5)
29199           .subsampling(1)
29200           .padding_left(2)
29201           .padding_right(2)
29202           .padding_top(2)
29203           .padding_bottom(2)
29204           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4);
29205       }
29206     }
29207   }
29208 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4,output_height_gt_4)29209   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4, output_height_gt_4) {
29210     for (size_t input_height = 5; input_height < 9; input_height++) {
29211       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29212         DWConv2DMicrokernelTester()
29213           .input_width(input_width)
29214           .input_height(input_height)
29215           .kernel_height(5)
29216           .kernel_width(5)
29217           .subsampling(1)
29218           .padding_left(2)
29219           .padding_right(2)
29220           .padding_top(2)
29221           .padding_bottom(2)
29222           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4);
29223       }
29224     }
29225   }
29226 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
29227 
29228 
29229 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2,output_width_eq_4)29230   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2, output_width_eq_4) {
29231     DWConv2DMicrokernelTester()
29232       .input_width(4)
29233       .input_height(4)
29234       .kernel_height(5)
29235       .kernel_width(5)
29236       .subsampling(1)
29237       .padding_left(2)
29238       .padding_right(2)
29239       .padding_top(2)
29240       .padding_bottom(2)
29241       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4_acc2);
29242   }
29243 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2,output_width_div_4)29244   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2, output_width_div_4) {
29245     for (size_t input_width = 8; input_width < 32; input_width += 4) {
29246       DWConv2DMicrokernelTester()
29247         .input_width(input_width)
29248         .input_height(4)
29249         .kernel_height(5)
29250         .kernel_width(5)
29251         .subsampling(1)
29252         .padding_left(2)
29253         .padding_right(2)
29254         .padding_top(2)
29255         .padding_bottom(2)
29256         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4_acc2);
29257     }
29258   }
29259 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2,output_width_lt_4)29260   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2, output_width_lt_4) {
29261     for (size_t input_width = 1; input_width < 4; input_width++) {
29262       DWConv2DMicrokernelTester()
29263         .input_width(4)
29264         .input_height(4)
29265         .kernel_height(5)
29266         .kernel_width(5)
29267         .subsampling(1)
29268         .padding_left(2)
29269         .padding_right(2)
29270         .padding_top(2)
29271         .padding_bottom(2)
29272         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4_acc2);
29273     }
29274   }
29275 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2,output_width_gt_4)29276   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2, output_width_gt_4) {
29277     for (size_t input_width = 5; input_width < 9; input_width++) {
29278       DWConv2DMicrokernelTester()
29279         .input_width(input_width)
29280         .input_height(4)
29281         .kernel_height(5)
29282         .kernel_width(5)
29283         .subsampling(1)
29284         .padding_left(2)
29285         .padding_right(2)
29286         .padding_top(2)
29287         .padding_bottom(2)
29288         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4_acc2);
29289     }
29290   }
29291 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2,output_height_div_4)29292   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2, output_height_div_4) {
29293     for (size_t input_height = 8; input_height < 32; input_height += 4) {
29294       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29295         DWConv2DMicrokernelTester()
29296           .input_width(input_width)
29297           .input_height(input_height)
29298           .kernel_height(5)
29299           .kernel_width(5)
29300           .subsampling(1)
29301           .padding_left(2)
29302           .padding_right(2)
29303           .padding_top(2)
29304           .padding_bottom(2)
29305           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4_acc2);
29306       }
29307     }
29308   }
29309 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2,output_height_lt_4)29310   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2, output_height_lt_4) {
29311     for (size_t input_height = 1; input_height < 4; input_height++) {
29312       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29313         DWConv2DMicrokernelTester()
29314           .input_width(input_width)
29315           .input_height(input_height)
29316           .kernel_height(5)
29317           .kernel_width(5)
29318           .subsampling(1)
29319           .padding_left(2)
29320           .padding_right(2)
29321           .padding_top(2)
29322           .padding_bottom(2)
29323           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4_acc2);
29324       }
29325     }
29326   }
29327 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2,output_height_gt_4)29328   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_4X4_ACC2, output_height_gt_4) {
29329     for (size_t input_height = 5; input_height < 9; input_height++) {
29330       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29331         DWConv2DMicrokernelTester()
29332           .input_width(input_width)
29333           .input_height(input_height)
29334           .kernel_height(5)
29335           .kernel_width(5)
29336           .subsampling(1)
29337           .padding_left(2)
29338           .padding_right(2)
29339           .padding_top(2)
29340           .padding_bottom(2)
29341           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_4x4_acc2);
29342       }
29343     }
29344   }
29345 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
29346 
29347 
29348 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4,output_width_eq_4)29349   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4, output_width_eq_4) {
29350     DWConv2DMicrokernelTester()
29351       .input_width(4)
29352       .input_height(5)
29353       .kernel_height(5)
29354       .kernel_width(5)
29355       .subsampling(1)
29356       .padding_left(2)
29357       .padding_right(2)
29358       .padding_top(2)
29359       .padding_bottom(2)
29360       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_5x4);
29361   }
29362 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4,output_width_div_4)29363   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4, output_width_div_4) {
29364     for (size_t input_width = 8; input_width < 32; input_width += 4) {
29365       DWConv2DMicrokernelTester()
29366         .input_width(input_width)
29367         .input_height(5)
29368         .kernel_height(5)
29369         .kernel_width(5)
29370         .subsampling(1)
29371         .padding_left(2)
29372         .padding_right(2)
29373         .padding_top(2)
29374         .padding_bottom(2)
29375         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_5x4);
29376     }
29377   }
29378 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4,output_width_lt_4)29379   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4, output_width_lt_4) {
29380     for (size_t input_width = 1; input_width < 4; input_width++) {
29381       DWConv2DMicrokernelTester()
29382         .input_width(4)
29383         .input_height(5)
29384         .kernel_height(5)
29385         .kernel_width(5)
29386         .subsampling(1)
29387         .padding_left(2)
29388         .padding_right(2)
29389         .padding_top(2)
29390         .padding_bottom(2)
29391         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_5x4);
29392     }
29393   }
29394 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4,output_width_gt_4)29395   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4, output_width_gt_4) {
29396     for (size_t input_width = 5; input_width < 9; input_width++) {
29397       DWConv2DMicrokernelTester()
29398         .input_width(input_width)
29399         .input_height(5)
29400         .kernel_height(5)
29401         .kernel_width(5)
29402         .subsampling(1)
29403         .padding_left(2)
29404         .padding_right(2)
29405         .padding_top(2)
29406         .padding_bottom(2)
29407         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_5x4);
29408     }
29409   }
29410 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4,output_height_div_5)29411   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4, output_height_div_5) {
29412     for (size_t input_height = 10; input_height < 40; input_height += 5) {
29413       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29414         DWConv2DMicrokernelTester()
29415           .input_width(input_width)
29416           .input_height(input_height)
29417           .kernel_height(5)
29418           .kernel_width(5)
29419           .subsampling(1)
29420           .padding_left(2)
29421           .padding_right(2)
29422           .padding_top(2)
29423           .padding_bottom(2)
29424           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_5x4);
29425       }
29426     }
29427   }
29428 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4,output_height_lt_5)29429   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4, output_height_lt_5) {
29430     for (size_t input_height = 1; input_height < 5; input_height++) {
29431       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29432         DWConv2DMicrokernelTester()
29433           .input_width(input_width)
29434           .input_height(input_height)
29435           .kernel_height(5)
29436           .kernel_width(5)
29437           .subsampling(1)
29438           .padding_left(2)
29439           .padding_right(2)
29440           .padding_top(2)
29441           .padding_bottom(2)
29442           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_5x4);
29443       }
29444     }
29445   }
29446 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4,output_height_gt_5)29447   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_LOADSPLAT_5X4, output_height_gt_5) {
29448     for (size_t input_height = 6; input_height < 11; input_height++) {
29449       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29450         DWConv2DMicrokernelTester()
29451           .input_width(input_width)
29452           .input_height(input_height)
29453           .kernel_height(5)
29454           .kernel_width(5)
29455           .subsampling(1)
29456           .padding_left(2)
29457           .padding_right(2)
29458           .padding_top(2)
29459           .padding_bottom(2)
29460           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_loadsplat_5x4);
29461       }
29462     }
29463   }
29464 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
29465 
29466 
29467 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4,output_width_eq_4)29468   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4, output_width_eq_4) {
29469     DWConv2DMicrokernelTester()
29470       .input_width(4)
29471       .input_height(1)
29472       .kernel_height(5)
29473       .kernel_width(5)
29474       .subsampling(1)
29475       .padding_left(2)
29476       .padding_right(2)
29477       .padding_top(2)
29478       .padding_bottom(2)
29479       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4);
29480   }
29481 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4,output_width_div_4)29482   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4, output_width_div_4) {
29483     for (size_t input_width = 8; input_width < 32; input_width += 4) {
29484       DWConv2DMicrokernelTester()
29485         .input_width(input_width)
29486         .input_height(1)
29487         .kernel_height(5)
29488         .kernel_width(5)
29489         .subsampling(1)
29490         .padding_left(2)
29491         .padding_right(2)
29492         .padding_top(2)
29493         .padding_bottom(2)
29494         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4);
29495     }
29496   }
29497 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4,output_width_lt_4)29498   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4, output_width_lt_4) {
29499     for (size_t input_width = 1; input_width < 4; input_width++) {
29500       DWConv2DMicrokernelTester()
29501         .input_width(4)
29502         .input_height(1)
29503         .kernel_height(5)
29504         .kernel_width(5)
29505         .subsampling(1)
29506         .padding_left(2)
29507         .padding_right(2)
29508         .padding_top(2)
29509         .padding_bottom(2)
29510         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4);
29511     }
29512   }
29513 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4,output_width_gt_4)29514   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4, output_width_gt_4) {
29515     for (size_t input_width = 5; input_width < 9; input_width++) {
29516       DWConv2DMicrokernelTester()
29517         .input_width(input_width)
29518         .input_height(1)
29519         .kernel_height(5)
29520         .kernel_width(5)
29521         .subsampling(1)
29522         .padding_left(2)
29523         .padding_right(2)
29524         .padding_top(2)
29525         .padding_bottom(2)
29526         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4);
29527     }
29528   }
29529 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4,output_height_gt_1)29530   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4, output_height_gt_1) {
29531     for (size_t input_height = 2; input_height < 3; input_height++) {
29532       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29533         DWConv2DMicrokernelTester()
29534           .input_width(input_width)
29535           .input_height(input_height)
29536           .kernel_height(5)
29537           .kernel_width(5)
29538           .subsampling(1)
29539           .padding_left(2)
29540           .padding_right(2)
29541           .padding_top(2)
29542           .padding_bottom(2)
29543           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4);
29544       }
29545     }
29546   }
29547 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
29548 
29549 
29550 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_eq_4)29551   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_eq_4) {
29552     DWConv2DMicrokernelTester()
29553       .input_width(4)
29554       .input_height(1)
29555       .kernel_height(5)
29556       .kernel_width(5)
29557       .subsampling(1)
29558       .padding_left(2)
29559       .padding_right(2)
29560       .padding_top(2)
29561       .padding_bottom(2)
29562       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc2);
29563   }
29564 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_div_4)29565   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_div_4) {
29566     for (size_t input_width = 8; input_width < 32; input_width += 4) {
29567       DWConv2DMicrokernelTester()
29568         .input_width(input_width)
29569         .input_height(1)
29570         .kernel_height(5)
29571         .kernel_width(5)
29572         .subsampling(1)
29573         .padding_left(2)
29574         .padding_right(2)
29575         .padding_top(2)
29576         .padding_bottom(2)
29577         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc2);
29578     }
29579   }
29580 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_lt_4)29581   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_lt_4) {
29582     for (size_t input_width = 1; input_width < 4; input_width++) {
29583       DWConv2DMicrokernelTester()
29584         .input_width(4)
29585         .input_height(1)
29586         .kernel_height(5)
29587         .kernel_width(5)
29588         .subsampling(1)
29589         .padding_left(2)
29590         .padding_right(2)
29591         .padding_top(2)
29592         .padding_bottom(2)
29593         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc2);
29594     }
29595   }
29596 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_gt_4)29597   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_gt_4) {
29598     for (size_t input_width = 5; input_width < 9; input_width++) {
29599       DWConv2DMicrokernelTester()
29600         .input_width(input_width)
29601         .input_height(1)
29602         .kernel_height(5)
29603         .kernel_width(5)
29604         .subsampling(1)
29605         .padding_left(2)
29606         .padding_right(2)
29607         .padding_top(2)
29608         .padding_bottom(2)
29609         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc2);
29610     }
29611   }
29612 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC2,output_height_gt_1)29613   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC2, output_height_gt_1) {
29614     for (size_t input_height = 2; input_height < 3; input_height++) {
29615       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29616         DWConv2DMicrokernelTester()
29617           .input_width(input_width)
29618           .input_height(input_height)
29619           .kernel_height(5)
29620           .kernel_width(5)
29621           .subsampling(1)
29622           .padding_left(2)
29623           .padding_right(2)
29624           .padding_top(2)
29625           .padding_bottom(2)
29626           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc2);
29627       }
29628     }
29629   }
29630 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
29631 
29632 
29633 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_eq_4)29634   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_eq_4) {
29635     DWConv2DMicrokernelTester()
29636       .input_width(4)
29637       .input_height(1)
29638       .kernel_height(5)
29639       .kernel_width(5)
29640       .subsampling(1)
29641       .padding_left(2)
29642       .padding_right(2)
29643       .padding_top(2)
29644       .padding_bottom(2)
29645       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc3);
29646   }
29647 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_div_4)29648   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_div_4) {
29649     for (size_t input_width = 8; input_width < 32; input_width += 4) {
29650       DWConv2DMicrokernelTester()
29651         .input_width(input_width)
29652         .input_height(1)
29653         .kernel_height(5)
29654         .kernel_width(5)
29655         .subsampling(1)
29656         .padding_left(2)
29657         .padding_right(2)
29658         .padding_top(2)
29659         .padding_bottom(2)
29660         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc3);
29661     }
29662   }
29663 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_lt_4)29664   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_lt_4) {
29665     for (size_t input_width = 1; input_width < 4; input_width++) {
29666       DWConv2DMicrokernelTester()
29667         .input_width(4)
29668         .input_height(1)
29669         .kernel_height(5)
29670         .kernel_width(5)
29671         .subsampling(1)
29672         .padding_left(2)
29673         .padding_right(2)
29674         .padding_top(2)
29675         .padding_bottom(2)
29676         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc3);
29677     }
29678   }
29679 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_gt_4)29680   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_gt_4) {
29681     for (size_t input_width = 5; input_width < 9; input_width++) {
29682       DWConv2DMicrokernelTester()
29683         .input_width(input_width)
29684         .input_height(1)
29685         .kernel_height(5)
29686         .kernel_width(5)
29687         .subsampling(1)
29688         .padding_left(2)
29689         .padding_right(2)
29690         .padding_top(2)
29691         .padding_bottom(2)
29692         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc3);
29693     }
29694   }
29695 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC3,output_height_gt_1)29696   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC3, output_height_gt_1) {
29697     for (size_t input_height = 2; input_height < 3; input_height++) {
29698       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29699         DWConv2DMicrokernelTester()
29700           .input_width(input_width)
29701           .input_height(input_height)
29702           .kernel_height(5)
29703           .kernel_width(5)
29704           .subsampling(1)
29705           .padding_left(2)
29706           .padding_right(2)
29707           .padding_top(2)
29708           .padding_bottom(2)
29709           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc3);
29710       }
29711     }
29712   }
29713 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
29714 
29715 
29716 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_eq_4)29717   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_eq_4) {
29718     DWConv2DMicrokernelTester()
29719       .input_width(4)
29720       .input_height(1)
29721       .kernel_height(5)
29722       .kernel_width(5)
29723       .subsampling(1)
29724       .padding_left(2)
29725       .padding_right(2)
29726       .padding_top(2)
29727       .padding_bottom(2)
29728       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc4);
29729   }
29730 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_div_4)29731   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_div_4) {
29732     for (size_t input_width = 8; input_width < 32; input_width += 4) {
29733       DWConv2DMicrokernelTester()
29734         .input_width(input_width)
29735         .input_height(1)
29736         .kernel_height(5)
29737         .kernel_width(5)
29738         .subsampling(1)
29739         .padding_left(2)
29740         .padding_right(2)
29741         .padding_top(2)
29742         .padding_bottom(2)
29743         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc4);
29744     }
29745   }
29746 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_lt_4)29747   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_lt_4) {
29748     for (size_t input_width = 1; input_width < 4; input_width++) {
29749       DWConv2DMicrokernelTester()
29750         .input_width(4)
29751         .input_height(1)
29752         .kernel_height(5)
29753         .kernel_width(5)
29754         .subsampling(1)
29755         .padding_left(2)
29756         .padding_right(2)
29757         .padding_top(2)
29758         .padding_bottom(2)
29759         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc4);
29760     }
29761   }
29762 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_gt_4)29763   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_gt_4) {
29764     for (size_t input_width = 5; input_width < 9; input_width++) {
29765       DWConv2DMicrokernelTester()
29766         .input_width(input_width)
29767         .input_height(1)
29768         .kernel_height(5)
29769         .kernel_width(5)
29770         .subsampling(1)
29771         .padding_left(2)
29772         .padding_right(2)
29773         .padding_top(2)
29774         .padding_bottom(2)
29775         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc4);
29776     }
29777   }
29778 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC4,output_height_gt_1)29779   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC4, output_height_gt_1) {
29780     for (size_t input_height = 2; input_height < 3; input_height++) {
29781       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29782         DWConv2DMicrokernelTester()
29783           .input_width(input_width)
29784           .input_height(input_height)
29785           .kernel_height(5)
29786           .kernel_width(5)
29787           .subsampling(1)
29788           .padding_left(2)
29789           .padding_right(2)
29790           .padding_top(2)
29791           .padding_bottom(2)
29792           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc4);
29793       }
29794     }
29795   }
29796 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
29797 
29798 
29799 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC5,output_width_eq_4)29800   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC5, output_width_eq_4) {
29801     DWConv2DMicrokernelTester()
29802       .input_width(4)
29803       .input_height(1)
29804       .kernel_height(5)
29805       .kernel_width(5)
29806       .subsampling(1)
29807       .padding_left(2)
29808       .padding_right(2)
29809       .padding_top(2)
29810       .padding_bottom(2)
29811       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc5);
29812   }
29813 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC5,output_width_div_4)29814   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC5, output_width_div_4) {
29815     for (size_t input_width = 8; input_width < 32; input_width += 4) {
29816       DWConv2DMicrokernelTester()
29817         .input_width(input_width)
29818         .input_height(1)
29819         .kernel_height(5)
29820         .kernel_width(5)
29821         .subsampling(1)
29822         .padding_left(2)
29823         .padding_right(2)
29824         .padding_top(2)
29825         .padding_bottom(2)
29826         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc5);
29827     }
29828   }
29829 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC5,output_width_lt_4)29830   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC5, output_width_lt_4) {
29831     for (size_t input_width = 1; input_width < 4; input_width++) {
29832       DWConv2DMicrokernelTester()
29833         .input_width(4)
29834         .input_height(1)
29835         .kernel_height(5)
29836         .kernel_width(5)
29837         .subsampling(1)
29838         .padding_left(2)
29839         .padding_right(2)
29840         .padding_top(2)
29841         .padding_bottom(2)
29842         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc5);
29843     }
29844   }
29845 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC5,output_width_gt_4)29846   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC5, output_width_gt_4) {
29847     for (size_t input_width = 5; input_width < 9; input_width++) {
29848       DWConv2DMicrokernelTester()
29849         .input_width(input_width)
29850         .input_height(1)
29851         .kernel_height(5)
29852         .kernel_width(5)
29853         .subsampling(1)
29854         .padding_left(2)
29855         .padding_right(2)
29856         .padding_top(2)
29857         .padding_bottom(2)
29858         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc5);
29859     }
29860   }
29861 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC5,output_height_gt_1)29862   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_1X4_ACC5, output_height_gt_1) {
29863     for (size_t input_height = 2; input_height < 3; input_height++) {
29864       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29865         DWConv2DMicrokernelTester()
29866           .input_width(input_width)
29867           .input_height(input_height)
29868           .kernel_height(5)
29869           .kernel_width(5)
29870           .subsampling(1)
29871           .padding_left(2)
29872           .padding_right(2)
29873           .padding_top(2)
29874           .padding_bottom(2)
29875           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_1x4_acc5);
29876       }
29877     }
29878   }
29879 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
29880 
29881 
29882 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4,output_width_eq_4)29883   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4, output_width_eq_4) {
29884     DWConv2DMicrokernelTester()
29885       .input_width(4)
29886       .input_height(2)
29887       .kernel_height(5)
29888       .kernel_width(5)
29889       .subsampling(1)
29890       .padding_left(2)
29891       .padding_right(2)
29892       .padding_top(2)
29893       .padding_bottom(2)
29894       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4);
29895   }
29896 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4,output_width_div_4)29897   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4, output_width_div_4) {
29898     for (size_t input_width = 8; input_width < 32; input_width += 4) {
29899       DWConv2DMicrokernelTester()
29900         .input_width(input_width)
29901         .input_height(2)
29902         .kernel_height(5)
29903         .kernel_width(5)
29904         .subsampling(1)
29905         .padding_left(2)
29906         .padding_right(2)
29907         .padding_top(2)
29908         .padding_bottom(2)
29909         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4);
29910     }
29911   }
29912 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4,output_width_lt_4)29913   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4, output_width_lt_4) {
29914     for (size_t input_width = 1; input_width < 4; input_width++) {
29915       DWConv2DMicrokernelTester()
29916         .input_width(4)
29917         .input_height(2)
29918         .kernel_height(5)
29919         .kernel_width(5)
29920         .subsampling(1)
29921         .padding_left(2)
29922         .padding_right(2)
29923         .padding_top(2)
29924         .padding_bottom(2)
29925         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4);
29926     }
29927   }
29928 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4,output_width_gt_4)29929   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4, output_width_gt_4) {
29930     for (size_t input_width = 5; input_width < 9; input_width++) {
29931       DWConv2DMicrokernelTester()
29932         .input_width(input_width)
29933         .input_height(2)
29934         .kernel_height(5)
29935         .kernel_width(5)
29936         .subsampling(1)
29937         .padding_left(2)
29938         .padding_right(2)
29939         .padding_top(2)
29940         .padding_bottom(2)
29941         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4);
29942     }
29943   }
29944 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4,output_height_div_2)29945   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4, output_height_div_2) {
29946     for (size_t input_height = 4; input_height < 16; input_height += 2) {
29947       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29948         DWConv2DMicrokernelTester()
29949           .input_width(input_width)
29950           .input_height(input_height)
29951           .kernel_height(5)
29952           .kernel_width(5)
29953           .subsampling(1)
29954           .padding_left(2)
29955           .padding_right(2)
29956           .padding_top(2)
29957           .padding_bottom(2)
29958           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4);
29959       }
29960     }
29961   }
29962 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4,output_height_lt_2)29963   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4, output_height_lt_2) {
29964     for (size_t input_height = 1; input_height < 2; input_height++) {
29965       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29966         DWConv2DMicrokernelTester()
29967           .input_width(input_width)
29968           .input_height(input_height)
29969           .kernel_height(5)
29970           .kernel_width(5)
29971           .subsampling(1)
29972           .padding_left(2)
29973           .padding_right(2)
29974           .padding_top(2)
29975           .padding_bottom(2)
29976           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4);
29977       }
29978     }
29979   }
29980 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4,output_height_gt_2)29981   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4, output_height_gt_2) {
29982     for (size_t input_height = 3; input_height < 5; input_height++) {
29983       for (size_t input_width = 1; input_width < 21; input_width += 3) {
29984         DWConv2DMicrokernelTester()
29985           .input_width(input_width)
29986           .input_height(input_height)
29987           .kernel_height(5)
29988           .kernel_width(5)
29989           .subsampling(1)
29990           .padding_left(2)
29991           .padding_right(2)
29992           .padding_top(2)
29993           .padding_bottom(2)
29994           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4);
29995       }
29996     }
29997   }
29998 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
29999 
30000 
30001 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_eq_4)30002   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_eq_4) {
30003     DWConv2DMicrokernelTester()
30004       .input_width(4)
30005       .input_height(2)
30006       .kernel_height(5)
30007       .kernel_width(5)
30008       .subsampling(1)
30009       .padding_left(2)
30010       .padding_right(2)
30011       .padding_top(2)
30012       .padding_bottom(2)
30013       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc2);
30014   }
30015 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_div_4)30016   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_div_4) {
30017     for (size_t input_width = 8; input_width < 32; input_width += 4) {
30018       DWConv2DMicrokernelTester()
30019         .input_width(input_width)
30020         .input_height(2)
30021         .kernel_height(5)
30022         .kernel_width(5)
30023         .subsampling(1)
30024         .padding_left(2)
30025         .padding_right(2)
30026         .padding_top(2)
30027         .padding_bottom(2)
30028         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc2);
30029     }
30030   }
30031 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_lt_4)30032   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_lt_4) {
30033     for (size_t input_width = 1; input_width < 4; input_width++) {
30034       DWConv2DMicrokernelTester()
30035         .input_width(4)
30036         .input_height(2)
30037         .kernel_height(5)
30038         .kernel_width(5)
30039         .subsampling(1)
30040         .padding_left(2)
30041         .padding_right(2)
30042         .padding_top(2)
30043         .padding_bottom(2)
30044         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc2);
30045     }
30046   }
30047 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_gt_4)30048   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_gt_4) {
30049     for (size_t input_width = 5; input_width < 9; input_width++) {
30050       DWConv2DMicrokernelTester()
30051         .input_width(input_width)
30052         .input_height(2)
30053         .kernel_height(5)
30054         .kernel_width(5)
30055         .subsampling(1)
30056         .padding_left(2)
30057         .padding_right(2)
30058         .padding_top(2)
30059         .padding_bottom(2)
30060         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc2);
30061     }
30062   }
30063 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_div_2)30064   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_div_2) {
30065     for (size_t input_height = 4; input_height < 16; input_height += 2) {
30066       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30067         DWConv2DMicrokernelTester()
30068           .input_width(input_width)
30069           .input_height(input_height)
30070           .kernel_height(5)
30071           .kernel_width(5)
30072           .subsampling(1)
30073           .padding_left(2)
30074           .padding_right(2)
30075           .padding_top(2)
30076           .padding_bottom(2)
30077           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc2);
30078       }
30079     }
30080   }
30081 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_lt_2)30082   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_lt_2) {
30083     for (size_t input_height = 1; input_height < 2; input_height++) {
30084       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30085         DWConv2DMicrokernelTester()
30086           .input_width(input_width)
30087           .input_height(input_height)
30088           .kernel_height(5)
30089           .kernel_width(5)
30090           .subsampling(1)
30091           .padding_left(2)
30092           .padding_right(2)
30093           .padding_top(2)
30094           .padding_bottom(2)
30095           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc2);
30096       }
30097     }
30098   }
30099 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_gt_2)30100   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_gt_2) {
30101     for (size_t input_height = 3; input_height < 5; input_height++) {
30102       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30103         DWConv2DMicrokernelTester()
30104           .input_width(input_width)
30105           .input_height(input_height)
30106           .kernel_height(5)
30107           .kernel_width(5)
30108           .subsampling(1)
30109           .padding_left(2)
30110           .padding_right(2)
30111           .padding_top(2)
30112           .padding_bottom(2)
30113           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc2);
30114       }
30115     }
30116   }
30117 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
30118 
30119 
30120 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_width_eq_4)30121   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_width_eq_4) {
30122     DWConv2DMicrokernelTester()
30123       .input_width(4)
30124       .input_height(2)
30125       .kernel_height(5)
30126       .kernel_width(5)
30127       .subsampling(1)
30128       .padding_left(2)
30129       .padding_right(2)
30130       .padding_top(2)
30131       .padding_bottom(2)
30132       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc3);
30133   }
30134 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_width_div_4)30135   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_width_div_4) {
30136     for (size_t input_width = 8; input_width < 32; input_width += 4) {
30137       DWConv2DMicrokernelTester()
30138         .input_width(input_width)
30139         .input_height(2)
30140         .kernel_height(5)
30141         .kernel_width(5)
30142         .subsampling(1)
30143         .padding_left(2)
30144         .padding_right(2)
30145         .padding_top(2)
30146         .padding_bottom(2)
30147         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc3);
30148     }
30149   }
30150 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_width_lt_4)30151   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_width_lt_4) {
30152     for (size_t input_width = 1; input_width < 4; input_width++) {
30153       DWConv2DMicrokernelTester()
30154         .input_width(4)
30155         .input_height(2)
30156         .kernel_height(5)
30157         .kernel_width(5)
30158         .subsampling(1)
30159         .padding_left(2)
30160         .padding_right(2)
30161         .padding_top(2)
30162         .padding_bottom(2)
30163         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc3);
30164     }
30165   }
30166 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_width_gt_4)30167   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_width_gt_4) {
30168     for (size_t input_width = 5; input_width < 9; input_width++) {
30169       DWConv2DMicrokernelTester()
30170         .input_width(input_width)
30171         .input_height(2)
30172         .kernel_height(5)
30173         .kernel_width(5)
30174         .subsampling(1)
30175         .padding_left(2)
30176         .padding_right(2)
30177         .padding_top(2)
30178         .padding_bottom(2)
30179         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc3);
30180     }
30181   }
30182 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_height_div_2)30183   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_height_div_2) {
30184     for (size_t input_height = 4; input_height < 16; input_height += 2) {
30185       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30186         DWConv2DMicrokernelTester()
30187           .input_width(input_width)
30188           .input_height(input_height)
30189           .kernel_height(5)
30190           .kernel_width(5)
30191           .subsampling(1)
30192           .padding_left(2)
30193           .padding_right(2)
30194           .padding_top(2)
30195           .padding_bottom(2)
30196           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc3);
30197       }
30198     }
30199   }
30200 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_height_lt_2)30201   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_height_lt_2) {
30202     for (size_t input_height = 1; input_height < 2; input_height++) {
30203       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30204         DWConv2DMicrokernelTester()
30205           .input_width(input_width)
30206           .input_height(input_height)
30207           .kernel_height(5)
30208           .kernel_width(5)
30209           .subsampling(1)
30210           .padding_left(2)
30211           .padding_right(2)
30212           .padding_top(2)
30213           .padding_bottom(2)
30214           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc3);
30215       }
30216     }
30217   }
30218 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_height_gt_2)30219   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_height_gt_2) {
30220     for (size_t input_height = 3; input_height < 5; input_height++) {
30221       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30222         DWConv2DMicrokernelTester()
30223           .input_width(input_width)
30224           .input_height(input_height)
30225           .kernel_height(5)
30226           .kernel_width(5)
30227           .subsampling(1)
30228           .padding_left(2)
30229           .padding_right(2)
30230           .padding_top(2)
30231           .padding_bottom(2)
30232           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_2x4_acc3);
30233       }
30234     }
30235   }
30236 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
30237 
30238 
30239 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4,output_width_eq_4)30240   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4, output_width_eq_4) {
30241     DWConv2DMicrokernelTester()
30242       .input_width(4)
30243       .input_height(3)
30244       .kernel_height(5)
30245       .kernel_width(5)
30246       .subsampling(1)
30247       .padding_left(2)
30248       .padding_right(2)
30249       .padding_top(2)
30250       .padding_bottom(2)
30251       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4);
30252   }
30253 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4,output_width_div_4)30254   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4, output_width_div_4) {
30255     for (size_t input_width = 8; input_width < 32; input_width += 4) {
30256       DWConv2DMicrokernelTester()
30257         .input_width(input_width)
30258         .input_height(3)
30259         .kernel_height(5)
30260         .kernel_width(5)
30261         .subsampling(1)
30262         .padding_left(2)
30263         .padding_right(2)
30264         .padding_top(2)
30265         .padding_bottom(2)
30266         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4);
30267     }
30268   }
30269 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4,output_width_lt_4)30270   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4, output_width_lt_4) {
30271     for (size_t input_width = 1; input_width < 4; input_width++) {
30272       DWConv2DMicrokernelTester()
30273         .input_width(4)
30274         .input_height(3)
30275         .kernel_height(5)
30276         .kernel_width(5)
30277         .subsampling(1)
30278         .padding_left(2)
30279         .padding_right(2)
30280         .padding_top(2)
30281         .padding_bottom(2)
30282         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4);
30283     }
30284   }
30285 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4,output_width_gt_4)30286   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4, output_width_gt_4) {
30287     for (size_t input_width = 5; input_width < 9; input_width++) {
30288       DWConv2DMicrokernelTester()
30289         .input_width(input_width)
30290         .input_height(3)
30291         .kernel_height(5)
30292         .kernel_width(5)
30293         .subsampling(1)
30294         .padding_left(2)
30295         .padding_right(2)
30296         .padding_top(2)
30297         .padding_bottom(2)
30298         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4);
30299     }
30300   }
30301 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4,output_height_div_3)30302   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4, output_height_div_3) {
30303     for (size_t input_height = 6; input_height < 24; input_height += 3) {
30304       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30305         DWConv2DMicrokernelTester()
30306           .input_width(input_width)
30307           .input_height(input_height)
30308           .kernel_height(5)
30309           .kernel_width(5)
30310           .subsampling(1)
30311           .padding_left(2)
30312           .padding_right(2)
30313           .padding_top(2)
30314           .padding_bottom(2)
30315           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4);
30316       }
30317     }
30318   }
30319 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4,output_height_lt_3)30320   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4, output_height_lt_3) {
30321     for (size_t input_height = 1; input_height < 3; input_height++) {
30322       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30323         DWConv2DMicrokernelTester()
30324           .input_width(input_width)
30325           .input_height(input_height)
30326           .kernel_height(5)
30327           .kernel_width(5)
30328           .subsampling(1)
30329           .padding_left(2)
30330           .padding_right(2)
30331           .padding_top(2)
30332           .padding_bottom(2)
30333           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4);
30334       }
30335     }
30336   }
30337 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4,output_height_gt_3)30338   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4, output_height_gt_3) {
30339     for (size_t input_height = 4; input_height < 7; input_height++) {
30340       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30341         DWConv2DMicrokernelTester()
30342           .input_width(input_width)
30343           .input_height(input_height)
30344           .kernel_height(5)
30345           .kernel_width(5)
30346           .subsampling(1)
30347           .padding_left(2)
30348           .padding_right(2)
30349           .padding_top(2)
30350           .padding_bottom(2)
30351           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4);
30352       }
30353     }
30354   }
30355 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
30356 
30357 
30358 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_width_eq_4)30359   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_width_eq_4) {
30360     DWConv2DMicrokernelTester()
30361       .input_width(4)
30362       .input_height(3)
30363       .kernel_height(5)
30364       .kernel_width(5)
30365       .subsampling(1)
30366       .padding_left(2)
30367       .padding_right(2)
30368       .padding_top(2)
30369       .padding_bottom(2)
30370       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4_acc2);
30371   }
30372 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_width_div_4)30373   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_width_div_4) {
30374     for (size_t input_width = 8; input_width < 32; input_width += 4) {
30375       DWConv2DMicrokernelTester()
30376         .input_width(input_width)
30377         .input_height(3)
30378         .kernel_height(5)
30379         .kernel_width(5)
30380         .subsampling(1)
30381         .padding_left(2)
30382         .padding_right(2)
30383         .padding_top(2)
30384         .padding_bottom(2)
30385         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4_acc2);
30386     }
30387   }
30388 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_width_lt_4)30389   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_width_lt_4) {
30390     for (size_t input_width = 1; input_width < 4; input_width++) {
30391       DWConv2DMicrokernelTester()
30392         .input_width(4)
30393         .input_height(3)
30394         .kernel_height(5)
30395         .kernel_width(5)
30396         .subsampling(1)
30397         .padding_left(2)
30398         .padding_right(2)
30399         .padding_top(2)
30400         .padding_bottom(2)
30401         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4_acc2);
30402     }
30403   }
30404 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_width_gt_4)30405   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_width_gt_4) {
30406     for (size_t input_width = 5; input_width < 9; input_width++) {
30407       DWConv2DMicrokernelTester()
30408         .input_width(input_width)
30409         .input_height(3)
30410         .kernel_height(5)
30411         .kernel_width(5)
30412         .subsampling(1)
30413         .padding_left(2)
30414         .padding_right(2)
30415         .padding_top(2)
30416         .padding_bottom(2)
30417         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4_acc2);
30418     }
30419   }
30420 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_height_div_3)30421   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_height_div_3) {
30422     for (size_t input_height = 6; input_height < 24; input_height += 3) {
30423       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30424         DWConv2DMicrokernelTester()
30425           .input_width(input_width)
30426           .input_height(input_height)
30427           .kernel_height(5)
30428           .kernel_width(5)
30429           .subsampling(1)
30430           .padding_left(2)
30431           .padding_right(2)
30432           .padding_top(2)
30433           .padding_bottom(2)
30434           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4_acc2);
30435       }
30436     }
30437   }
30438 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_height_lt_3)30439   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_height_lt_3) {
30440     for (size_t input_height = 1; input_height < 3; input_height++) {
30441       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30442         DWConv2DMicrokernelTester()
30443           .input_width(input_width)
30444           .input_height(input_height)
30445           .kernel_height(5)
30446           .kernel_width(5)
30447           .subsampling(1)
30448           .padding_left(2)
30449           .padding_right(2)
30450           .padding_top(2)
30451           .padding_bottom(2)
30452           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4_acc2);
30453       }
30454     }
30455   }
30456 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_height_gt_3)30457   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_height_gt_3) {
30458     for (size_t input_height = 4; input_height < 7; input_height++) {
30459       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30460         DWConv2DMicrokernelTester()
30461           .input_width(input_width)
30462           .input_height(input_height)
30463           .kernel_height(5)
30464           .kernel_width(5)
30465           .subsampling(1)
30466           .padding_left(2)
30467           .padding_right(2)
30468           .padding_top(2)
30469           .padding_bottom(2)
30470           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_3x4_acc2);
30471       }
30472     }
30473   }
30474 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
30475 
30476 
30477 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4,output_width_eq_4)30478   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4, output_width_eq_4) {
30479     DWConv2DMicrokernelTester()
30480       .input_width(4)
30481       .input_height(4)
30482       .kernel_height(5)
30483       .kernel_width(5)
30484       .subsampling(1)
30485       .padding_left(2)
30486       .padding_right(2)
30487       .padding_top(2)
30488       .padding_bottom(2)
30489       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4);
30490   }
30491 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4,output_width_div_4)30492   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4, output_width_div_4) {
30493     for (size_t input_width = 8; input_width < 32; input_width += 4) {
30494       DWConv2DMicrokernelTester()
30495         .input_width(input_width)
30496         .input_height(4)
30497         .kernel_height(5)
30498         .kernel_width(5)
30499         .subsampling(1)
30500         .padding_left(2)
30501         .padding_right(2)
30502         .padding_top(2)
30503         .padding_bottom(2)
30504         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4);
30505     }
30506   }
30507 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4,output_width_lt_4)30508   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4, output_width_lt_4) {
30509     for (size_t input_width = 1; input_width < 4; input_width++) {
30510       DWConv2DMicrokernelTester()
30511         .input_width(4)
30512         .input_height(4)
30513         .kernel_height(5)
30514         .kernel_width(5)
30515         .subsampling(1)
30516         .padding_left(2)
30517         .padding_right(2)
30518         .padding_top(2)
30519         .padding_bottom(2)
30520         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4);
30521     }
30522   }
30523 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4,output_width_gt_4)30524   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4, output_width_gt_4) {
30525     for (size_t input_width = 5; input_width < 9; input_width++) {
30526       DWConv2DMicrokernelTester()
30527         .input_width(input_width)
30528         .input_height(4)
30529         .kernel_height(5)
30530         .kernel_width(5)
30531         .subsampling(1)
30532         .padding_left(2)
30533         .padding_right(2)
30534         .padding_top(2)
30535         .padding_bottom(2)
30536         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4);
30537     }
30538   }
30539 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4,output_height_div_4)30540   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4, output_height_div_4) {
30541     for (size_t input_height = 8; input_height < 32; input_height += 4) {
30542       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30543         DWConv2DMicrokernelTester()
30544           .input_width(input_width)
30545           .input_height(input_height)
30546           .kernel_height(5)
30547           .kernel_width(5)
30548           .subsampling(1)
30549           .padding_left(2)
30550           .padding_right(2)
30551           .padding_top(2)
30552           .padding_bottom(2)
30553           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4);
30554       }
30555     }
30556   }
30557 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4,output_height_lt_4)30558   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4, output_height_lt_4) {
30559     for (size_t input_height = 1; input_height < 4; input_height++) {
30560       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30561         DWConv2DMicrokernelTester()
30562           .input_width(input_width)
30563           .input_height(input_height)
30564           .kernel_height(5)
30565           .kernel_width(5)
30566           .subsampling(1)
30567           .padding_left(2)
30568           .padding_right(2)
30569           .padding_top(2)
30570           .padding_bottom(2)
30571           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4);
30572       }
30573     }
30574   }
30575 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4,output_height_gt_4)30576   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4, output_height_gt_4) {
30577     for (size_t input_height = 5; input_height < 9; input_height++) {
30578       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30579         DWConv2DMicrokernelTester()
30580           .input_width(input_width)
30581           .input_height(input_height)
30582           .kernel_height(5)
30583           .kernel_width(5)
30584           .subsampling(1)
30585           .padding_left(2)
30586           .padding_right(2)
30587           .padding_top(2)
30588           .padding_bottom(2)
30589           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4);
30590       }
30591     }
30592   }
30593 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
30594 
30595 
30596 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2,output_width_eq_4)30597   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2, output_width_eq_4) {
30598     DWConv2DMicrokernelTester()
30599       .input_width(4)
30600       .input_height(4)
30601       .kernel_height(5)
30602       .kernel_width(5)
30603       .subsampling(1)
30604       .padding_left(2)
30605       .padding_right(2)
30606       .padding_top(2)
30607       .padding_bottom(2)
30608       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4_acc2);
30609   }
30610 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2,output_width_div_4)30611   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2, output_width_div_4) {
30612     for (size_t input_width = 8; input_width < 32; input_width += 4) {
30613       DWConv2DMicrokernelTester()
30614         .input_width(input_width)
30615         .input_height(4)
30616         .kernel_height(5)
30617         .kernel_width(5)
30618         .subsampling(1)
30619         .padding_left(2)
30620         .padding_right(2)
30621         .padding_top(2)
30622         .padding_bottom(2)
30623         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4_acc2);
30624     }
30625   }
30626 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2,output_width_lt_4)30627   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2, output_width_lt_4) {
30628     for (size_t input_width = 1; input_width < 4; input_width++) {
30629       DWConv2DMicrokernelTester()
30630         .input_width(4)
30631         .input_height(4)
30632         .kernel_height(5)
30633         .kernel_width(5)
30634         .subsampling(1)
30635         .padding_left(2)
30636         .padding_right(2)
30637         .padding_top(2)
30638         .padding_bottom(2)
30639         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4_acc2);
30640     }
30641   }
30642 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2,output_width_gt_4)30643   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2, output_width_gt_4) {
30644     for (size_t input_width = 5; input_width < 9; input_width++) {
30645       DWConv2DMicrokernelTester()
30646         .input_width(input_width)
30647         .input_height(4)
30648         .kernel_height(5)
30649         .kernel_width(5)
30650         .subsampling(1)
30651         .padding_left(2)
30652         .padding_right(2)
30653         .padding_top(2)
30654         .padding_bottom(2)
30655         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4_acc2);
30656     }
30657   }
30658 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2,output_height_div_4)30659   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2, output_height_div_4) {
30660     for (size_t input_height = 8; input_height < 32; input_height += 4) {
30661       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30662         DWConv2DMicrokernelTester()
30663           .input_width(input_width)
30664           .input_height(input_height)
30665           .kernel_height(5)
30666           .kernel_width(5)
30667           .subsampling(1)
30668           .padding_left(2)
30669           .padding_right(2)
30670           .padding_top(2)
30671           .padding_bottom(2)
30672           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4_acc2);
30673       }
30674     }
30675   }
30676 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2,output_height_lt_4)30677   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2, output_height_lt_4) {
30678     for (size_t input_height = 1; input_height < 4; input_height++) {
30679       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30680         DWConv2DMicrokernelTester()
30681           .input_width(input_width)
30682           .input_height(input_height)
30683           .kernel_height(5)
30684           .kernel_width(5)
30685           .subsampling(1)
30686           .padding_left(2)
30687           .padding_right(2)
30688           .padding_top(2)
30689           .padding_bottom(2)
30690           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4_acc2);
30691       }
30692     }
30693   }
30694 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2,output_height_gt_4)30695   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_4X4_ACC2, output_height_gt_4) {
30696     for (size_t input_height = 5; input_height < 9; input_height++) {
30697       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30698         DWConv2DMicrokernelTester()
30699           .input_width(input_width)
30700           .input_height(input_height)
30701           .kernel_height(5)
30702           .kernel_width(5)
30703           .subsampling(1)
30704           .padding_left(2)
30705           .padding_right(2)
30706           .padding_top(2)
30707           .padding_bottom(2)
30708           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_4x4_acc2);
30709       }
30710     }
30711   }
30712 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
30713 
30714 
30715 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4,output_width_eq_4)30716   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4, output_width_eq_4) {
30717     DWConv2DMicrokernelTester()
30718       .input_width(4)
30719       .input_height(5)
30720       .kernel_height(5)
30721       .kernel_width(5)
30722       .subsampling(1)
30723       .padding_left(2)
30724       .padding_right(2)
30725       .padding_top(2)
30726       .padding_bottom(2)
30727       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_5x4);
30728   }
30729 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4,output_width_div_4)30730   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4, output_width_div_4) {
30731     for (size_t input_width = 8; input_width < 32; input_width += 4) {
30732       DWConv2DMicrokernelTester()
30733         .input_width(input_width)
30734         .input_height(5)
30735         .kernel_height(5)
30736         .kernel_width(5)
30737         .subsampling(1)
30738         .padding_left(2)
30739         .padding_right(2)
30740         .padding_top(2)
30741         .padding_bottom(2)
30742         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_5x4);
30743     }
30744   }
30745 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4,output_width_lt_4)30746   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4, output_width_lt_4) {
30747     for (size_t input_width = 1; input_width < 4; input_width++) {
30748       DWConv2DMicrokernelTester()
30749         .input_width(4)
30750         .input_height(5)
30751         .kernel_height(5)
30752         .kernel_width(5)
30753         .subsampling(1)
30754         .padding_left(2)
30755         .padding_right(2)
30756         .padding_top(2)
30757         .padding_bottom(2)
30758         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_5x4);
30759     }
30760   }
30761 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4,output_width_gt_4)30762   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4, output_width_gt_4) {
30763     for (size_t input_width = 5; input_width < 9; input_width++) {
30764       DWConv2DMicrokernelTester()
30765         .input_width(input_width)
30766         .input_height(5)
30767         .kernel_height(5)
30768         .kernel_width(5)
30769         .subsampling(1)
30770         .padding_left(2)
30771         .padding_right(2)
30772         .padding_top(2)
30773         .padding_bottom(2)
30774         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_5x4);
30775     }
30776   }
30777 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4,output_height_div_5)30778   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4, output_height_div_5) {
30779     for (size_t input_height = 10; input_height < 40; input_height += 5) {
30780       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30781         DWConv2DMicrokernelTester()
30782           .input_width(input_width)
30783           .input_height(input_height)
30784           .kernel_height(5)
30785           .kernel_width(5)
30786           .subsampling(1)
30787           .padding_left(2)
30788           .padding_right(2)
30789           .padding_top(2)
30790           .padding_bottom(2)
30791           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_5x4);
30792       }
30793     }
30794   }
30795 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4,output_height_lt_5)30796   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4, output_height_lt_5) {
30797     for (size_t input_height = 1; input_height < 5; input_height++) {
30798       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30799         DWConv2DMicrokernelTester()
30800           .input_width(input_width)
30801           .input_height(input_height)
30802           .kernel_height(5)
30803           .kernel_width(5)
30804           .subsampling(1)
30805           .padding_left(2)
30806           .padding_right(2)
30807           .padding_top(2)
30808           .padding_bottom(2)
30809           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_5x4);
30810       }
30811     }
30812   }
30813 
TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4,output_height_gt_5)30814   TEST(F32_DWCONV2D_CHW_5X5P2__WASMSIMD_X86_SPLAT_5X4, output_height_gt_5) {
30815     for (size_t input_height = 6; input_height < 11; input_height++) {
30816       for (size_t input_width = 1; input_width < 21; input_width += 3) {
30817         DWConv2DMicrokernelTester()
30818           .input_width(input_width)
30819           .input_height(input_height)
30820           .kernel_height(5)
30821           .kernel_width(5)
30822           .subsampling(1)
30823           .padding_left(2)
30824           .padding_right(2)
30825           .padding_top(2)
30826           .padding_bottom(2)
30827           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__wasmsimd_x86_splat_5x4);
30828       }
30829     }
30830   }
30831 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
30832 
30833 
30834 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_eq_4)30835   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_eq_4) {
30836     for (size_t input_width = 7; input_width < 9; input_width++) {
30837       DWConv2DMicrokernelTester()
30838         .input_width(input_width)
30839         .input_height(2)
30840         .kernel_height(5)
30841         .kernel_width(5)
30842         .subsampling(2)
30843         .padding_left(2)
30844         .padding_right(2)
30845         .padding_top(2)
30846         .padding_bottom(2)
30847         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4);
30848     }
30849   }
30850 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_div_4)30851   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_div_4) {
30852     for (size_t input_width = 16; input_width < 64; input_width += 8) {
30853       DWConv2DMicrokernelTester()
30854         .input_width(input_width)
30855         .input_height(2)
30856         .kernel_height(5)
30857         .kernel_width(5)
30858         .subsampling(2)
30859         .padding_left(2)
30860         .padding_right(2)
30861         .padding_top(2)
30862         .padding_bottom(2)
30863         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4);
30864     }
30865   }
30866 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_lt_4)30867   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_lt_4) {
30868     for (size_t input_width = 1; input_width < 7; input_width++) {
30869       DWConv2DMicrokernelTester()
30870         .input_width(8)
30871         .input_height(2)
30872         .kernel_height(5)
30873         .kernel_width(5)
30874         .subsampling(2)
30875         .padding_left(2)
30876         .padding_right(2)
30877         .padding_top(2)
30878         .padding_bottom(2)
30879         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4);
30880     }
30881   }
30882 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4,output_width_gt_4)30883   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4, output_width_gt_4) {
30884     for (size_t input_width = 9; input_width < 17; input_width++) {
30885       DWConv2DMicrokernelTester()
30886         .input_width(input_width)
30887         .input_height(2)
30888         .kernel_height(5)
30889         .kernel_width(5)
30890         .subsampling(2)
30891         .padding_left(2)
30892         .padding_right(2)
30893         .padding_top(2)
30894         .padding_bottom(2)
30895         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4);
30896     }
30897   }
30898 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4,output_height_eq_1)30899   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4, output_height_eq_1) {
30900     for (size_t input_height = 1; input_height < 3; input_height++) {
30901       for (size_t input_width = 1; input_width < 41; input_width += 7) {
30902         DWConv2DMicrokernelTester()
30903           .input_width(input_width)
30904           .input_height(input_height)
30905           .kernel_height(5)
30906           .kernel_width(5)
30907           .subsampling(2)
30908           .padding_left(2)
30909           .padding_right(2)
30910           .padding_top(2)
30911           .padding_bottom(2)
30912           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4);
30913       }
30914     }
30915   }
30916 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4,output_height_gt_1)30917   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4, output_height_gt_1) {
30918     for (size_t input_height = 3; input_height < 5; input_height++) {
30919       for (size_t input_width = 1; input_width < 41; input_width += 7) {
30920         DWConv2DMicrokernelTester()
30921           .input_width(input_width)
30922           .input_height(input_height)
30923           .kernel_height(5)
30924           .kernel_width(5)
30925           .subsampling(2)
30926           .padding_left(2)
30927           .padding_right(2)
30928           .padding_top(2)
30929           .padding_bottom(2)
30930           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4);
30931       }
30932     }
30933   }
30934 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4,padding_top_eq_1)30935   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4, padding_top_eq_1) {
30936     for (size_t input_height = 2; input_height < 8; input_height++) {
30937       for (size_t input_width = 1; input_width < 41; input_width += 7) {
30938         DWConv2DMicrokernelTester()
30939           .input_width(input_width)
30940           .input_height(input_height)
30941           .kernel_height(5)
30942           .kernel_width(5)
30943           .subsampling(2)
30944           .padding_left(2)
30945           .padding_right(2)
30946           .padding_top(1)
30947           .padding_bottom(2)
30948           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4);
30949       }
30950     }
30951   }
30952 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
30953 
30954 
30955 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_eq_4)30956   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_eq_4) {
30957     for (size_t input_width = 7; input_width < 9; input_width++) {
30958       DWConv2DMicrokernelTester()
30959         .input_width(input_width)
30960         .input_height(2)
30961         .kernel_height(5)
30962         .kernel_width(5)
30963         .subsampling(2)
30964         .padding_left(2)
30965         .padding_right(2)
30966         .padding_top(2)
30967         .padding_bottom(2)
30968         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc2);
30969     }
30970   }
30971 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_div_4)30972   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_div_4) {
30973     for (size_t input_width = 16; input_width < 64; input_width += 8) {
30974       DWConv2DMicrokernelTester()
30975         .input_width(input_width)
30976         .input_height(2)
30977         .kernel_height(5)
30978         .kernel_width(5)
30979         .subsampling(2)
30980         .padding_left(2)
30981         .padding_right(2)
30982         .padding_top(2)
30983         .padding_bottom(2)
30984         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc2);
30985     }
30986   }
30987 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_lt_4)30988   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_lt_4) {
30989     for (size_t input_width = 1; input_width < 7; input_width++) {
30990       DWConv2DMicrokernelTester()
30991         .input_width(8)
30992         .input_height(2)
30993         .kernel_height(5)
30994         .kernel_width(5)
30995         .subsampling(2)
30996         .padding_left(2)
30997         .padding_right(2)
30998         .padding_top(2)
30999         .padding_bottom(2)
31000         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc2);
31001     }
31002   }
31003 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_width_gt_4)31004   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_width_gt_4) {
31005     for (size_t input_width = 9; input_width < 17; input_width++) {
31006       DWConv2DMicrokernelTester()
31007         .input_width(input_width)
31008         .input_height(2)
31009         .kernel_height(5)
31010         .kernel_width(5)
31011         .subsampling(2)
31012         .padding_left(2)
31013         .padding_right(2)
31014         .padding_top(2)
31015         .padding_bottom(2)
31016         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc2);
31017     }
31018   }
31019 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_height_eq_1)31020   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_height_eq_1) {
31021     for (size_t input_height = 1; input_height < 3; input_height++) {
31022       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31023         DWConv2DMicrokernelTester()
31024           .input_width(input_width)
31025           .input_height(input_height)
31026           .kernel_height(5)
31027           .kernel_width(5)
31028           .subsampling(2)
31029           .padding_left(2)
31030           .padding_right(2)
31031           .padding_top(2)
31032           .padding_bottom(2)
31033           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc2);
31034       }
31035     }
31036   }
31037 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,output_height_gt_1)31038   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, output_height_gt_1) {
31039     for (size_t input_height = 3; input_height < 5; input_height++) {
31040       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31041         DWConv2DMicrokernelTester()
31042           .input_width(input_width)
31043           .input_height(input_height)
31044           .kernel_height(5)
31045           .kernel_width(5)
31046           .subsampling(2)
31047           .padding_left(2)
31048           .padding_right(2)
31049           .padding_top(2)
31050           .padding_bottom(2)
31051           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc2);
31052       }
31053     }
31054   }
31055 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2,padding_top_eq_1)31056   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC2, padding_top_eq_1) {
31057     for (size_t input_height = 2; input_height < 8; input_height++) {
31058       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31059         DWConv2DMicrokernelTester()
31060           .input_width(input_width)
31061           .input_height(input_height)
31062           .kernel_height(5)
31063           .kernel_width(5)
31064           .subsampling(2)
31065           .padding_left(2)
31066           .padding_right(2)
31067           .padding_top(1)
31068           .padding_bottom(2)
31069           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc2);
31070       }
31071     }
31072   }
31073 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
31074 
31075 
31076 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_eq_4)31077   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_eq_4) {
31078     for (size_t input_width = 7; input_width < 9; input_width++) {
31079       DWConv2DMicrokernelTester()
31080         .input_width(input_width)
31081         .input_height(2)
31082         .kernel_height(5)
31083         .kernel_width(5)
31084         .subsampling(2)
31085         .padding_left(2)
31086         .padding_right(2)
31087         .padding_top(2)
31088         .padding_bottom(2)
31089         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc3);
31090     }
31091   }
31092 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_div_4)31093   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_div_4) {
31094     for (size_t input_width = 16; input_width < 64; input_width += 8) {
31095       DWConv2DMicrokernelTester()
31096         .input_width(input_width)
31097         .input_height(2)
31098         .kernel_height(5)
31099         .kernel_width(5)
31100         .subsampling(2)
31101         .padding_left(2)
31102         .padding_right(2)
31103         .padding_top(2)
31104         .padding_bottom(2)
31105         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc3);
31106     }
31107   }
31108 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_lt_4)31109   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_lt_4) {
31110     for (size_t input_width = 1; input_width < 7; input_width++) {
31111       DWConv2DMicrokernelTester()
31112         .input_width(8)
31113         .input_height(2)
31114         .kernel_height(5)
31115         .kernel_width(5)
31116         .subsampling(2)
31117         .padding_left(2)
31118         .padding_right(2)
31119         .padding_top(2)
31120         .padding_bottom(2)
31121         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc3);
31122     }
31123   }
31124 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_width_gt_4)31125   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_width_gt_4) {
31126     for (size_t input_width = 9; input_width < 17; input_width++) {
31127       DWConv2DMicrokernelTester()
31128         .input_width(input_width)
31129         .input_height(2)
31130         .kernel_height(5)
31131         .kernel_width(5)
31132         .subsampling(2)
31133         .padding_left(2)
31134         .padding_right(2)
31135         .padding_top(2)
31136         .padding_bottom(2)
31137         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc3);
31138     }
31139   }
31140 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_height_eq_1)31141   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_height_eq_1) {
31142     for (size_t input_height = 1; input_height < 3; input_height++) {
31143       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31144         DWConv2DMicrokernelTester()
31145           .input_width(input_width)
31146           .input_height(input_height)
31147           .kernel_height(5)
31148           .kernel_width(5)
31149           .subsampling(2)
31150           .padding_left(2)
31151           .padding_right(2)
31152           .padding_top(2)
31153           .padding_bottom(2)
31154           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc3);
31155       }
31156     }
31157   }
31158 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,output_height_gt_1)31159   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, output_height_gt_1) {
31160     for (size_t input_height = 3; input_height < 5; input_height++) {
31161       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31162         DWConv2DMicrokernelTester()
31163           .input_width(input_width)
31164           .input_height(input_height)
31165           .kernel_height(5)
31166           .kernel_width(5)
31167           .subsampling(2)
31168           .padding_left(2)
31169           .padding_right(2)
31170           .padding_top(2)
31171           .padding_bottom(2)
31172           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc3);
31173       }
31174     }
31175   }
31176 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3,padding_top_eq_1)31177   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC3, padding_top_eq_1) {
31178     for (size_t input_height = 2; input_height < 8; input_height++) {
31179       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31180         DWConv2DMicrokernelTester()
31181           .input_width(input_width)
31182           .input_height(input_height)
31183           .kernel_height(5)
31184           .kernel_width(5)
31185           .subsampling(2)
31186           .padding_left(2)
31187           .padding_right(2)
31188           .padding_top(1)
31189           .padding_bottom(2)
31190           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc3);
31191       }
31192     }
31193   }
31194 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
31195 
31196 
31197 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_eq_4)31198   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_eq_4) {
31199     for (size_t input_width = 7; input_width < 9; input_width++) {
31200       DWConv2DMicrokernelTester()
31201         .input_width(input_width)
31202         .input_height(2)
31203         .kernel_height(5)
31204         .kernel_width(5)
31205         .subsampling(2)
31206         .padding_left(2)
31207         .padding_right(2)
31208         .padding_top(2)
31209         .padding_bottom(2)
31210         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc4);
31211     }
31212   }
31213 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_div_4)31214   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_div_4) {
31215     for (size_t input_width = 16; input_width < 64; input_width += 8) {
31216       DWConv2DMicrokernelTester()
31217         .input_width(input_width)
31218         .input_height(2)
31219         .kernel_height(5)
31220         .kernel_width(5)
31221         .subsampling(2)
31222         .padding_left(2)
31223         .padding_right(2)
31224         .padding_top(2)
31225         .padding_bottom(2)
31226         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc4);
31227     }
31228   }
31229 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_lt_4)31230   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_lt_4) {
31231     for (size_t input_width = 1; input_width < 7; input_width++) {
31232       DWConv2DMicrokernelTester()
31233         .input_width(8)
31234         .input_height(2)
31235         .kernel_height(5)
31236         .kernel_width(5)
31237         .subsampling(2)
31238         .padding_left(2)
31239         .padding_right(2)
31240         .padding_top(2)
31241         .padding_bottom(2)
31242         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc4);
31243     }
31244   }
31245 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_width_gt_4)31246   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_width_gt_4) {
31247     for (size_t input_width = 9; input_width < 17; input_width++) {
31248       DWConv2DMicrokernelTester()
31249         .input_width(input_width)
31250         .input_height(2)
31251         .kernel_height(5)
31252         .kernel_width(5)
31253         .subsampling(2)
31254         .padding_left(2)
31255         .padding_right(2)
31256         .padding_top(2)
31257         .padding_bottom(2)
31258         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc4);
31259     }
31260   }
31261 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_height_eq_1)31262   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_height_eq_1) {
31263     for (size_t input_height = 1; input_height < 3; input_height++) {
31264       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31265         DWConv2DMicrokernelTester()
31266           .input_width(input_width)
31267           .input_height(input_height)
31268           .kernel_height(5)
31269           .kernel_width(5)
31270           .subsampling(2)
31271           .padding_left(2)
31272           .padding_right(2)
31273           .padding_top(2)
31274           .padding_bottom(2)
31275           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc4);
31276       }
31277     }
31278   }
31279 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,output_height_gt_1)31280   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, output_height_gt_1) {
31281     for (size_t input_height = 3; input_height < 5; input_height++) {
31282       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31283         DWConv2DMicrokernelTester()
31284           .input_width(input_width)
31285           .input_height(input_height)
31286           .kernel_height(5)
31287           .kernel_width(5)
31288           .subsampling(2)
31289           .padding_left(2)
31290           .padding_right(2)
31291           .padding_top(2)
31292           .padding_bottom(2)
31293           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc4);
31294       }
31295     }
31296   }
31297 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4,padding_top_eq_1)31298   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC4, padding_top_eq_1) {
31299     for (size_t input_height = 2; input_height < 8; input_height++) {
31300       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31301         DWConv2DMicrokernelTester()
31302           .input_width(input_width)
31303           .input_height(input_height)
31304           .kernel_height(5)
31305           .kernel_width(5)
31306           .subsampling(2)
31307           .padding_left(2)
31308           .padding_right(2)
31309           .padding_top(1)
31310           .padding_bottom(2)
31311           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc4);
31312       }
31313     }
31314   }
31315 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
31316 
31317 
31318 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5,output_width_eq_4)31319   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5, output_width_eq_4) {
31320     for (size_t input_width = 7; input_width < 9; input_width++) {
31321       DWConv2DMicrokernelTester()
31322         .input_width(input_width)
31323         .input_height(2)
31324         .kernel_height(5)
31325         .kernel_width(5)
31326         .subsampling(2)
31327         .padding_left(2)
31328         .padding_right(2)
31329         .padding_top(2)
31330         .padding_bottom(2)
31331         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc5);
31332     }
31333   }
31334 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5,output_width_div_4)31335   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5, output_width_div_4) {
31336     for (size_t input_width = 16; input_width < 64; input_width += 8) {
31337       DWConv2DMicrokernelTester()
31338         .input_width(input_width)
31339         .input_height(2)
31340         .kernel_height(5)
31341         .kernel_width(5)
31342         .subsampling(2)
31343         .padding_left(2)
31344         .padding_right(2)
31345         .padding_top(2)
31346         .padding_bottom(2)
31347         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc5);
31348     }
31349   }
31350 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5,output_width_lt_4)31351   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5, output_width_lt_4) {
31352     for (size_t input_width = 1; input_width < 7; input_width++) {
31353       DWConv2DMicrokernelTester()
31354         .input_width(8)
31355         .input_height(2)
31356         .kernel_height(5)
31357         .kernel_width(5)
31358         .subsampling(2)
31359         .padding_left(2)
31360         .padding_right(2)
31361         .padding_top(2)
31362         .padding_bottom(2)
31363         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc5);
31364     }
31365   }
31366 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5,output_width_gt_4)31367   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5, output_width_gt_4) {
31368     for (size_t input_width = 9; input_width < 17; input_width++) {
31369       DWConv2DMicrokernelTester()
31370         .input_width(input_width)
31371         .input_height(2)
31372         .kernel_height(5)
31373         .kernel_width(5)
31374         .subsampling(2)
31375         .padding_left(2)
31376         .padding_right(2)
31377         .padding_top(2)
31378         .padding_bottom(2)
31379         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc5);
31380     }
31381   }
31382 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5,output_height_eq_1)31383   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5, output_height_eq_1) {
31384     for (size_t input_height = 1; input_height < 3; input_height++) {
31385       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31386         DWConv2DMicrokernelTester()
31387           .input_width(input_width)
31388           .input_height(input_height)
31389           .kernel_height(5)
31390           .kernel_width(5)
31391           .subsampling(2)
31392           .padding_left(2)
31393           .padding_right(2)
31394           .padding_top(2)
31395           .padding_bottom(2)
31396           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc5);
31397       }
31398     }
31399   }
31400 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5,output_height_gt_1)31401   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5, output_height_gt_1) {
31402     for (size_t input_height = 3; input_height < 5; input_height++) {
31403       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31404         DWConv2DMicrokernelTester()
31405           .input_width(input_width)
31406           .input_height(input_height)
31407           .kernel_height(5)
31408           .kernel_width(5)
31409           .subsampling(2)
31410           .padding_left(2)
31411           .padding_right(2)
31412           .padding_top(2)
31413           .padding_bottom(2)
31414           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc5);
31415       }
31416     }
31417   }
31418 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5,padding_top_eq_1)31419   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_1X4_ACC5, padding_top_eq_1) {
31420     for (size_t input_height = 2; input_height < 8; input_height++) {
31421       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31422         DWConv2DMicrokernelTester()
31423           .input_width(input_width)
31424           .input_height(input_height)
31425           .kernel_height(5)
31426           .kernel_width(5)
31427           .subsampling(2)
31428           .padding_left(2)
31429           .padding_right(2)
31430           .padding_top(1)
31431           .padding_bottom(2)
31432           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_1x4_acc5);
31433       }
31434     }
31435   }
31436 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
31437 
31438 
31439 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_eq_4)31440   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_eq_4) {
31441     for (size_t input_width = 7; input_width < 9; input_width++) {
31442       DWConv2DMicrokernelTester()
31443         .input_width(input_width)
31444         .input_height(4)
31445         .kernel_height(5)
31446         .kernel_width(5)
31447         .subsampling(2)
31448         .padding_left(2)
31449         .padding_right(2)
31450         .padding_top(2)
31451         .padding_bottom(2)
31452         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4);
31453     }
31454   }
31455 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_div_4)31456   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_div_4) {
31457     for (size_t input_width = 16; input_width < 64; input_width += 8) {
31458       DWConv2DMicrokernelTester()
31459         .input_width(input_width)
31460         .input_height(4)
31461         .kernel_height(5)
31462         .kernel_width(5)
31463         .subsampling(2)
31464         .padding_left(2)
31465         .padding_right(2)
31466         .padding_top(2)
31467         .padding_bottom(2)
31468         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4);
31469     }
31470   }
31471 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_lt_4)31472   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_lt_4) {
31473     for (size_t input_width = 1; input_width < 7; input_width++) {
31474       DWConv2DMicrokernelTester()
31475         .input_width(8)
31476         .input_height(4)
31477         .kernel_height(5)
31478         .kernel_width(5)
31479         .subsampling(2)
31480         .padding_left(2)
31481         .padding_right(2)
31482         .padding_top(2)
31483         .padding_bottom(2)
31484         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4);
31485     }
31486   }
31487 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_width_gt_4)31488   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_width_gt_4) {
31489     for (size_t input_width = 9; input_width < 17; input_width++) {
31490       DWConv2DMicrokernelTester()
31491         .input_width(input_width)
31492         .input_height(4)
31493         .kernel_height(5)
31494         .kernel_width(5)
31495         .subsampling(2)
31496         .padding_left(2)
31497         .padding_right(2)
31498         .padding_top(2)
31499         .padding_bottom(2)
31500         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4);
31501     }
31502   }
31503 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_eq_2)31504   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_eq_2) {
31505     for (size_t input_height = 3; input_height < 5; input_height++) {
31506       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31507         DWConv2DMicrokernelTester()
31508           .input_width(input_width)
31509           .input_height(input_height)
31510           .kernel_height(5)
31511           .kernel_width(5)
31512           .subsampling(2)
31513           .padding_left(2)
31514           .padding_right(2)
31515           .padding_top(2)
31516           .padding_bottom(2)
31517           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4);
31518       }
31519     }
31520   }
31521 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_div_2)31522   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_div_2) {
31523     for (size_t input_height = 8; input_height < 32; input_height += 4) {
31524       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31525         DWConv2DMicrokernelTester()
31526           .input_width(input_width)
31527           .input_height(input_height)
31528           .kernel_height(5)
31529           .kernel_width(5)
31530           .subsampling(2)
31531           .padding_left(2)
31532           .padding_right(2)
31533           .padding_top(2)
31534           .padding_bottom(2)
31535           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4);
31536       }
31537     }
31538   }
31539 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_lt_2)31540   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_lt_2) {
31541     for (size_t input_height = 1; input_height < 3; input_height++) {
31542       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31543         DWConv2DMicrokernelTester()
31544           .input_width(input_width)
31545           .input_height(input_height)
31546           .kernel_height(5)
31547           .kernel_width(5)
31548           .subsampling(2)
31549           .padding_left(2)
31550           .padding_right(2)
31551           .padding_top(2)
31552           .padding_bottom(2)
31553           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4);
31554       }
31555     }
31556   }
31557 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4,output_height_gt_2)31558   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4, output_height_gt_2) {
31559     for (size_t input_height = 5; input_height < 9; input_height++) {
31560       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31561         DWConv2DMicrokernelTester()
31562           .input_width(input_width)
31563           .input_height(input_height)
31564           .kernel_height(5)
31565           .kernel_width(5)
31566           .subsampling(2)
31567           .padding_left(2)
31568           .padding_right(2)
31569           .padding_top(2)
31570           .padding_bottom(2)
31571           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4);
31572       }
31573     }
31574   }
31575 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4,padding_top_eq_1)31576   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4, padding_top_eq_1) {
31577     for (size_t input_height = 2; input_height < 14; input_height++) {
31578       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31579         DWConv2DMicrokernelTester()
31580           .input_width(input_width)
31581           .input_height(input_height)
31582           .kernel_height(5)
31583           .kernel_width(5)
31584           .subsampling(2)
31585           .padding_left(2)
31586           .padding_right(2)
31587           .padding_top(1)
31588           .padding_bottom(2)
31589           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4);
31590       }
31591     }
31592   }
31593 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
31594 
31595 
31596 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_eq_4)31597   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_eq_4) {
31598     for (size_t input_width = 7; input_width < 9; input_width++) {
31599       DWConv2DMicrokernelTester()
31600         .input_width(input_width)
31601         .input_height(4)
31602         .kernel_height(5)
31603         .kernel_width(5)
31604         .subsampling(2)
31605         .padding_left(2)
31606         .padding_right(2)
31607         .padding_top(2)
31608         .padding_bottom(2)
31609         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc2);
31610     }
31611   }
31612 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_div_4)31613   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_div_4) {
31614     for (size_t input_width = 16; input_width < 64; input_width += 8) {
31615       DWConv2DMicrokernelTester()
31616         .input_width(input_width)
31617         .input_height(4)
31618         .kernel_height(5)
31619         .kernel_width(5)
31620         .subsampling(2)
31621         .padding_left(2)
31622         .padding_right(2)
31623         .padding_top(2)
31624         .padding_bottom(2)
31625         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc2);
31626     }
31627   }
31628 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_lt_4)31629   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_lt_4) {
31630     for (size_t input_width = 1; input_width < 7; input_width++) {
31631       DWConv2DMicrokernelTester()
31632         .input_width(8)
31633         .input_height(4)
31634         .kernel_height(5)
31635         .kernel_width(5)
31636         .subsampling(2)
31637         .padding_left(2)
31638         .padding_right(2)
31639         .padding_top(2)
31640         .padding_bottom(2)
31641         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc2);
31642     }
31643   }
31644 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_width_gt_4)31645   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_width_gt_4) {
31646     for (size_t input_width = 9; input_width < 17; input_width++) {
31647       DWConv2DMicrokernelTester()
31648         .input_width(input_width)
31649         .input_height(4)
31650         .kernel_height(5)
31651         .kernel_width(5)
31652         .subsampling(2)
31653         .padding_left(2)
31654         .padding_right(2)
31655         .padding_top(2)
31656         .padding_bottom(2)
31657         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc2);
31658     }
31659   }
31660 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_eq_2)31661   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_eq_2) {
31662     for (size_t input_height = 3; input_height < 5; input_height++) {
31663       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31664         DWConv2DMicrokernelTester()
31665           .input_width(input_width)
31666           .input_height(input_height)
31667           .kernel_height(5)
31668           .kernel_width(5)
31669           .subsampling(2)
31670           .padding_left(2)
31671           .padding_right(2)
31672           .padding_top(2)
31673           .padding_bottom(2)
31674           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc2);
31675       }
31676     }
31677   }
31678 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_div_2)31679   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_div_2) {
31680     for (size_t input_height = 8; input_height < 32; input_height += 4) {
31681       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31682         DWConv2DMicrokernelTester()
31683           .input_width(input_width)
31684           .input_height(input_height)
31685           .kernel_height(5)
31686           .kernel_width(5)
31687           .subsampling(2)
31688           .padding_left(2)
31689           .padding_right(2)
31690           .padding_top(2)
31691           .padding_bottom(2)
31692           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc2);
31693       }
31694     }
31695   }
31696 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_lt_2)31697   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_lt_2) {
31698     for (size_t input_height = 1; input_height < 3; input_height++) {
31699       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31700         DWConv2DMicrokernelTester()
31701           .input_width(input_width)
31702           .input_height(input_height)
31703           .kernel_height(5)
31704           .kernel_width(5)
31705           .subsampling(2)
31706           .padding_left(2)
31707           .padding_right(2)
31708           .padding_top(2)
31709           .padding_bottom(2)
31710           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc2);
31711       }
31712     }
31713   }
31714 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,output_height_gt_2)31715   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, output_height_gt_2) {
31716     for (size_t input_height = 5; input_height < 9; input_height++) {
31717       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31718         DWConv2DMicrokernelTester()
31719           .input_width(input_width)
31720           .input_height(input_height)
31721           .kernel_height(5)
31722           .kernel_width(5)
31723           .subsampling(2)
31724           .padding_left(2)
31725           .padding_right(2)
31726           .padding_top(2)
31727           .padding_bottom(2)
31728           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc2);
31729       }
31730     }
31731   }
31732 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2,padding_top_eq_1)31733   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC2, padding_top_eq_1) {
31734     for (size_t input_height = 2; input_height < 14; input_height++) {
31735       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31736         DWConv2DMicrokernelTester()
31737           .input_width(input_width)
31738           .input_height(input_height)
31739           .kernel_height(5)
31740           .kernel_width(5)
31741           .subsampling(2)
31742           .padding_left(2)
31743           .padding_right(2)
31744           .padding_top(1)
31745           .padding_bottom(2)
31746           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc2);
31747       }
31748     }
31749   }
31750 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
31751 
31752 
31753 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_width_eq_4)31754   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_width_eq_4) {
31755     for (size_t input_width = 7; input_width < 9; input_width++) {
31756       DWConv2DMicrokernelTester()
31757         .input_width(input_width)
31758         .input_height(4)
31759         .kernel_height(5)
31760         .kernel_width(5)
31761         .subsampling(2)
31762         .padding_left(2)
31763         .padding_right(2)
31764         .padding_top(2)
31765         .padding_bottom(2)
31766         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc3);
31767     }
31768   }
31769 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_width_div_4)31770   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_width_div_4) {
31771     for (size_t input_width = 16; input_width < 64; input_width += 8) {
31772       DWConv2DMicrokernelTester()
31773         .input_width(input_width)
31774         .input_height(4)
31775         .kernel_height(5)
31776         .kernel_width(5)
31777         .subsampling(2)
31778         .padding_left(2)
31779         .padding_right(2)
31780         .padding_top(2)
31781         .padding_bottom(2)
31782         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc3);
31783     }
31784   }
31785 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_width_lt_4)31786   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_width_lt_4) {
31787     for (size_t input_width = 1; input_width < 7; input_width++) {
31788       DWConv2DMicrokernelTester()
31789         .input_width(8)
31790         .input_height(4)
31791         .kernel_height(5)
31792         .kernel_width(5)
31793         .subsampling(2)
31794         .padding_left(2)
31795         .padding_right(2)
31796         .padding_top(2)
31797         .padding_bottom(2)
31798         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc3);
31799     }
31800   }
31801 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_width_gt_4)31802   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_width_gt_4) {
31803     for (size_t input_width = 9; input_width < 17; input_width++) {
31804       DWConv2DMicrokernelTester()
31805         .input_width(input_width)
31806         .input_height(4)
31807         .kernel_height(5)
31808         .kernel_width(5)
31809         .subsampling(2)
31810         .padding_left(2)
31811         .padding_right(2)
31812         .padding_top(2)
31813         .padding_bottom(2)
31814         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc3);
31815     }
31816   }
31817 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_height_eq_2)31818   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_height_eq_2) {
31819     for (size_t input_height = 3; input_height < 5; input_height++) {
31820       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31821         DWConv2DMicrokernelTester()
31822           .input_width(input_width)
31823           .input_height(input_height)
31824           .kernel_height(5)
31825           .kernel_width(5)
31826           .subsampling(2)
31827           .padding_left(2)
31828           .padding_right(2)
31829           .padding_top(2)
31830           .padding_bottom(2)
31831           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc3);
31832       }
31833     }
31834   }
31835 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_height_div_2)31836   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_height_div_2) {
31837     for (size_t input_height = 8; input_height < 32; input_height += 4) {
31838       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31839         DWConv2DMicrokernelTester()
31840           .input_width(input_width)
31841           .input_height(input_height)
31842           .kernel_height(5)
31843           .kernel_width(5)
31844           .subsampling(2)
31845           .padding_left(2)
31846           .padding_right(2)
31847           .padding_top(2)
31848           .padding_bottom(2)
31849           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc3);
31850       }
31851     }
31852   }
31853 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_height_lt_2)31854   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_height_lt_2) {
31855     for (size_t input_height = 1; input_height < 3; input_height++) {
31856       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31857         DWConv2DMicrokernelTester()
31858           .input_width(input_width)
31859           .input_height(input_height)
31860           .kernel_height(5)
31861           .kernel_width(5)
31862           .subsampling(2)
31863           .padding_left(2)
31864           .padding_right(2)
31865           .padding_top(2)
31866           .padding_bottom(2)
31867           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc3);
31868       }
31869     }
31870   }
31871 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,output_height_gt_2)31872   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, output_height_gt_2) {
31873     for (size_t input_height = 5; input_height < 9; input_height++) {
31874       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31875         DWConv2DMicrokernelTester()
31876           .input_width(input_width)
31877           .input_height(input_height)
31878           .kernel_height(5)
31879           .kernel_width(5)
31880           .subsampling(2)
31881           .padding_left(2)
31882           .padding_right(2)
31883           .padding_top(2)
31884           .padding_bottom(2)
31885           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc3);
31886       }
31887     }
31888   }
31889 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3,padding_top_eq_1)31890   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_2X4_ACC3, padding_top_eq_1) {
31891     for (size_t input_height = 2; input_height < 14; input_height++) {
31892       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31893         DWConv2DMicrokernelTester()
31894           .input_width(input_width)
31895           .input_height(input_height)
31896           .kernel_height(5)
31897           .kernel_width(5)
31898           .subsampling(2)
31899           .padding_left(2)
31900           .padding_right(2)
31901           .padding_top(1)
31902           .padding_bottom(2)
31903           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_2x4_acc3);
31904       }
31905     }
31906   }
31907 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
31908 
31909 
31910 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_eq_4)31911   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_eq_4) {
31912     for (size_t input_width = 7; input_width < 9; input_width++) {
31913       DWConv2DMicrokernelTester()
31914         .input_width(input_width)
31915         .input_height(6)
31916         .kernel_height(5)
31917         .kernel_width(5)
31918         .subsampling(2)
31919         .padding_left(2)
31920         .padding_right(2)
31921         .padding_top(2)
31922         .padding_bottom(2)
31923         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4);
31924     }
31925   }
31926 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_div_4)31927   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_div_4) {
31928     for (size_t input_width = 16; input_width < 64; input_width += 8) {
31929       DWConv2DMicrokernelTester()
31930         .input_width(input_width)
31931         .input_height(6)
31932         .kernel_height(5)
31933         .kernel_width(5)
31934         .subsampling(2)
31935         .padding_left(2)
31936         .padding_right(2)
31937         .padding_top(2)
31938         .padding_bottom(2)
31939         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4);
31940     }
31941   }
31942 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_lt_4)31943   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_lt_4) {
31944     for (size_t input_width = 1; input_width < 7; input_width++) {
31945       DWConv2DMicrokernelTester()
31946         .input_width(8)
31947         .input_height(6)
31948         .kernel_height(5)
31949         .kernel_width(5)
31950         .subsampling(2)
31951         .padding_left(2)
31952         .padding_right(2)
31953         .padding_top(2)
31954         .padding_bottom(2)
31955         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4);
31956     }
31957   }
31958 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_width_gt_4)31959   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_width_gt_4) {
31960     for (size_t input_width = 9; input_width < 17; input_width++) {
31961       DWConv2DMicrokernelTester()
31962         .input_width(input_width)
31963         .input_height(6)
31964         .kernel_height(5)
31965         .kernel_width(5)
31966         .subsampling(2)
31967         .padding_left(2)
31968         .padding_right(2)
31969         .padding_top(2)
31970         .padding_bottom(2)
31971         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4);
31972     }
31973   }
31974 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_eq_3)31975   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_eq_3) {
31976     for (size_t input_height = 5; input_height < 7; input_height++) {
31977       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31978         DWConv2DMicrokernelTester()
31979           .input_width(input_width)
31980           .input_height(input_height)
31981           .kernel_height(5)
31982           .kernel_width(5)
31983           .subsampling(2)
31984           .padding_left(2)
31985           .padding_right(2)
31986           .padding_top(2)
31987           .padding_bottom(2)
31988           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4);
31989       }
31990     }
31991   }
31992 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_div_3)31993   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_div_3) {
31994     for (size_t input_height = 12; input_height < 48; input_height += 6) {
31995       for (size_t input_width = 1; input_width < 41; input_width += 7) {
31996         DWConv2DMicrokernelTester()
31997           .input_width(input_width)
31998           .input_height(input_height)
31999           .kernel_height(5)
32000           .kernel_width(5)
32001           .subsampling(2)
32002           .padding_left(2)
32003           .padding_right(2)
32004           .padding_top(2)
32005           .padding_bottom(2)
32006           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4);
32007       }
32008     }
32009   }
32010 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_lt_3)32011   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_lt_3) {
32012     for (size_t input_height = 1; input_height < 5; input_height++) {
32013       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32014         DWConv2DMicrokernelTester()
32015           .input_width(input_width)
32016           .input_height(input_height)
32017           .kernel_height(5)
32018           .kernel_width(5)
32019           .subsampling(2)
32020           .padding_left(2)
32021           .padding_right(2)
32022           .padding_top(2)
32023           .padding_bottom(2)
32024           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4);
32025       }
32026     }
32027   }
32028 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4,output_height_gt_3)32029   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4, output_height_gt_3) {
32030     for (size_t input_height = 7; input_height < 13; input_height++) {
32031       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32032         DWConv2DMicrokernelTester()
32033           .input_width(input_width)
32034           .input_height(input_height)
32035           .kernel_height(5)
32036           .kernel_width(5)
32037           .subsampling(2)
32038           .padding_left(2)
32039           .padding_right(2)
32040           .padding_top(2)
32041           .padding_bottom(2)
32042           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4);
32043       }
32044     }
32045   }
32046 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4,padding_top_eq_1)32047   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4, padding_top_eq_1) {
32048     for (size_t input_height = 2; input_height < 20; input_height++) {
32049       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32050         DWConv2DMicrokernelTester()
32051           .input_width(input_width)
32052           .input_height(input_height)
32053           .kernel_height(5)
32054           .kernel_width(5)
32055           .subsampling(2)
32056           .padding_left(2)
32057           .padding_right(2)
32058           .padding_top(1)
32059           .padding_bottom(2)
32060           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4);
32061       }
32062     }
32063   }
32064 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32065 
32066 
32067 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_width_eq_4)32068   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_width_eq_4) {
32069     for (size_t input_width = 7; input_width < 9; input_width++) {
32070       DWConv2DMicrokernelTester()
32071         .input_width(input_width)
32072         .input_height(6)
32073         .kernel_height(5)
32074         .kernel_width(5)
32075         .subsampling(2)
32076         .padding_left(2)
32077         .padding_right(2)
32078         .padding_top(2)
32079         .padding_bottom(2)
32080         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4_acc2);
32081     }
32082   }
32083 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_width_div_4)32084   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_width_div_4) {
32085     for (size_t input_width = 16; input_width < 64; input_width += 8) {
32086       DWConv2DMicrokernelTester()
32087         .input_width(input_width)
32088         .input_height(6)
32089         .kernel_height(5)
32090         .kernel_width(5)
32091         .subsampling(2)
32092         .padding_left(2)
32093         .padding_right(2)
32094         .padding_top(2)
32095         .padding_bottom(2)
32096         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4_acc2);
32097     }
32098   }
32099 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_width_lt_4)32100   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_width_lt_4) {
32101     for (size_t input_width = 1; input_width < 7; input_width++) {
32102       DWConv2DMicrokernelTester()
32103         .input_width(8)
32104         .input_height(6)
32105         .kernel_height(5)
32106         .kernel_width(5)
32107         .subsampling(2)
32108         .padding_left(2)
32109         .padding_right(2)
32110         .padding_top(2)
32111         .padding_bottom(2)
32112         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4_acc2);
32113     }
32114   }
32115 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_width_gt_4)32116   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_width_gt_4) {
32117     for (size_t input_width = 9; input_width < 17; input_width++) {
32118       DWConv2DMicrokernelTester()
32119         .input_width(input_width)
32120         .input_height(6)
32121         .kernel_height(5)
32122         .kernel_width(5)
32123         .subsampling(2)
32124         .padding_left(2)
32125         .padding_right(2)
32126         .padding_top(2)
32127         .padding_bottom(2)
32128         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4_acc2);
32129     }
32130   }
32131 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_height_eq_3)32132   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_height_eq_3) {
32133     for (size_t input_height = 5; input_height < 7; input_height++) {
32134       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32135         DWConv2DMicrokernelTester()
32136           .input_width(input_width)
32137           .input_height(input_height)
32138           .kernel_height(5)
32139           .kernel_width(5)
32140           .subsampling(2)
32141           .padding_left(2)
32142           .padding_right(2)
32143           .padding_top(2)
32144           .padding_bottom(2)
32145           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4_acc2);
32146       }
32147     }
32148   }
32149 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_height_div_3)32150   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_height_div_3) {
32151     for (size_t input_height = 12; input_height < 48; input_height += 6) {
32152       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32153         DWConv2DMicrokernelTester()
32154           .input_width(input_width)
32155           .input_height(input_height)
32156           .kernel_height(5)
32157           .kernel_width(5)
32158           .subsampling(2)
32159           .padding_left(2)
32160           .padding_right(2)
32161           .padding_top(2)
32162           .padding_bottom(2)
32163           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4_acc2);
32164       }
32165     }
32166   }
32167 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_height_lt_3)32168   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_height_lt_3) {
32169     for (size_t input_height = 1; input_height < 5; input_height++) {
32170       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32171         DWConv2DMicrokernelTester()
32172           .input_width(input_width)
32173           .input_height(input_height)
32174           .kernel_height(5)
32175           .kernel_width(5)
32176           .subsampling(2)
32177           .padding_left(2)
32178           .padding_right(2)
32179           .padding_top(2)
32180           .padding_bottom(2)
32181           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4_acc2);
32182       }
32183     }
32184   }
32185 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,output_height_gt_3)32186   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, output_height_gt_3) {
32187     for (size_t input_height = 7; input_height < 13; input_height++) {
32188       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32189         DWConv2DMicrokernelTester()
32190           .input_width(input_width)
32191           .input_height(input_height)
32192           .kernel_height(5)
32193           .kernel_width(5)
32194           .subsampling(2)
32195           .padding_left(2)
32196           .padding_right(2)
32197           .padding_top(2)
32198           .padding_bottom(2)
32199           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4_acc2);
32200       }
32201     }
32202   }
32203 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2,padding_top_eq_1)32204   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_LOADSPLAT_3X4_ACC2, padding_top_eq_1) {
32205     for (size_t input_height = 2; input_height < 20; input_height++) {
32206       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32207         DWConv2DMicrokernelTester()
32208           .input_width(input_width)
32209           .input_height(input_height)
32210           .kernel_height(5)
32211           .kernel_width(5)
32212           .subsampling(2)
32213           .padding_left(2)
32214           .padding_right(2)
32215           .padding_top(1)
32216           .padding_bottom(2)
32217           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_loadsplat_3x4_acc2);
32218       }
32219     }
32220   }
32221 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32222 
32223 
32224 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4,output_width_eq_4)32225   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4, output_width_eq_4) {
32226     for (size_t input_width = 7; input_width < 9; input_width++) {
32227       DWConv2DMicrokernelTester()
32228         .input_width(input_width)
32229         .input_height(2)
32230         .kernel_height(5)
32231         .kernel_width(5)
32232         .subsampling(2)
32233         .padding_left(2)
32234         .padding_right(2)
32235         .padding_top(2)
32236         .padding_bottom(2)
32237         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4);
32238     }
32239   }
32240 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4,output_width_div_4)32241   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4, output_width_div_4) {
32242     for (size_t input_width = 16; input_width < 64; input_width += 8) {
32243       DWConv2DMicrokernelTester()
32244         .input_width(input_width)
32245         .input_height(2)
32246         .kernel_height(5)
32247         .kernel_width(5)
32248         .subsampling(2)
32249         .padding_left(2)
32250         .padding_right(2)
32251         .padding_top(2)
32252         .padding_bottom(2)
32253         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4);
32254     }
32255   }
32256 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4,output_width_lt_4)32257   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4, output_width_lt_4) {
32258     for (size_t input_width = 1; input_width < 7; input_width++) {
32259       DWConv2DMicrokernelTester()
32260         .input_width(8)
32261         .input_height(2)
32262         .kernel_height(5)
32263         .kernel_width(5)
32264         .subsampling(2)
32265         .padding_left(2)
32266         .padding_right(2)
32267         .padding_top(2)
32268         .padding_bottom(2)
32269         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4);
32270     }
32271   }
32272 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4,output_width_gt_4)32273   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4, output_width_gt_4) {
32274     for (size_t input_width = 9; input_width < 17; input_width++) {
32275       DWConv2DMicrokernelTester()
32276         .input_width(input_width)
32277         .input_height(2)
32278         .kernel_height(5)
32279         .kernel_width(5)
32280         .subsampling(2)
32281         .padding_left(2)
32282         .padding_right(2)
32283         .padding_top(2)
32284         .padding_bottom(2)
32285         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4);
32286     }
32287   }
32288 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4,output_height_eq_1)32289   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4, output_height_eq_1) {
32290     for (size_t input_height = 1; input_height < 3; input_height++) {
32291       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32292         DWConv2DMicrokernelTester()
32293           .input_width(input_width)
32294           .input_height(input_height)
32295           .kernel_height(5)
32296           .kernel_width(5)
32297           .subsampling(2)
32298           .padding_left(2)
32299           .padding_right(2)
32300           .padding_top(2)
32301           .padding_bottom(2)
32302           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4);
32303       }
32304     }
32305   }
32306 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4,output_height_gt_1)32307   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4, output_height_gt_1) {
32308     for (size_t input_height = 3; input_height < 5; input_height++) {
32309       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32310         DWConv2DMicrokernelTester()
32311           .input_width(input_width)
32312           .input_height(input_height)
32313           .kernel_height(5)
32314           .kernel_width(5)
32315           .subsampling(2)
32316           .padding_left(2)
32317           .padding_right(2)
32318           .padding_top(2)
32319           .padding_bottom(2)
32320           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4);
32321       }
32322     }
32323   }
32324 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4,padding_top_eq_1)32325   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4, padding_top_eq_1) {
32326     for (size_t input_height = 2; input_height < 8; input_height++) {
32327       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32328         DWConv2DMicrokernelTester()
32329           .input_width(input_width)
32330           .input_height(input_height)
32331           .kernel_height(5)
32332           .kernel_width(5)
32333           .subsampling(2)
32334           .padding_left(2)
32335           .padding_right(2)
32336           .padding_top(1)
32337           .padding_bottom(2)
32338           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4);
32339       }
32340     }
32341   }
32342 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32343 
32344 
32345 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_eq_4)32346   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_eq_4) {
32347     for (size_t input_width = 7; input_width < 9; input_width++) {
32348       DWConv2DMicrokernelTester()
32349         .input_width(input_width)
32350         .input_height(2)
32351         .kernel_height(5)
32352         .kernel_width(5)
32353         .subsampling(2)
32354         .padding_left(2)
32355         .padding_right(2)
32356         .padding_top(2)
32357         .padding_bottom(2)
32358         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc2);
32359     }
32360   }
32361 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_div_4)32362   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_div_4) {
32363     for (size_t input_width = 16; input_width < 64; input_width += 8) {
32364       DWConv2DMicrokernelTester()
32365         .input_width(input_width)
32366         .input_height(2)
32367         .kernel_height(5)
32368         .kernel_width(5)
32369         .subsampling(2)
32370         .padding_left(2)
32371         .padding_right(2)
32372         .padding_top(2)
32373         .padding_bottom(2)
32374         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc2);
32375     }
32376   }
32377 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_lt_4)32378   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_lt_4) {
32379     for (size_t input_width = 1; input_width < 7; input_width++) {
32380       DWConv2DMicrokernelTester()
32381         .input_width(8)
32382         .input_height(2)
32383         .kernel_height(5)
32384         .kernel_width(5)
32385         .subsampling(2)
32386         .padding_left(2)
32387         .padding_right(2)
32388         .padding_top(2)
32389         .padding_bottom(2)
32390         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc2);
32391     }
32392   }
32393 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_width_gt_4)32394   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_width_gt_4) {
32395     for (size_t input_width = 9; input_width < 17; input_width++) {
32396       DWConv2DMicrokernelTester()
32397         .input_width(input_width)
32398         .input_height(2)
32399         .kernel_height(5)
32400         .kernel_width(5)
32401         .subsampling(2)
32402         .padding_left(2)
32403         .padding_right(2)
32404         .padding_top(2)
32405         .padding_bottom(2)
32406         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc2);
32407     }
32408   }
32409 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_height_eq_1)32410   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_height_eq_1) {
32411     for (size_t input_height = 1; input_height < 3; input_height++) {
32412       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32413         DWConv2DMicrokernelTester()
32414           .input_width(input_width)
32415           .input_height(input_height)
32416           .kernel_height(5)
32417           .kernel_width(5)
32418           .subsampling(2)
32419           .padding_left(2)
32420           .padding_right(2)
32421           .padding_top(2)
32422           .padding_bottom(2)
32423           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc2);
32424       }
32425     }
32426   }
32427 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2,output_height_gt_1)32428   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2, output_height_gt_1) {
32429     for (size_t input_height = 3; input_height < 5; input_height++) {
32430       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32431         DWConv2DMicrokernelTester()
32432           .input_width(input_width)
32433           .input_height(input_height)
32434           .kernel_height(5)
32435           .kernel_width(5)
32436           .subsampling(2)
32437           .padding_left(2)
32438           .padding_right(2)
32439           .padding_top(2)
32440           .padding_bottom(2)
32441           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc2);
32442       }
32443     }
32444   }
32445 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2,padding_top_eq_1)32446   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC2, padding_top_eq_1) {
32447     for (size_t input_height = 2; input_height < 8; input_height++) {
32448       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32449         DWConv2DMicrokernelTester()
32450           .input_width(input_width)
32451           .input_height(input_height)
32452           .kernel_height(5)
32453           .kernel_width(5)
32454           .subsampling(2)
32455           .padding_left(2)
32456           .padding_right(2)
32457           .padding_top(1)
32458           .padding_bottom(2)
32459           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc2);
32460       }
32461     }
32462   }
32463 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32464 
32465 
32466 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_eq_4)32467   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_eq_4) {
32468     for (size_t input_width = 7; input_width < 9; input_width++) {
32469       DWConv2DMicrokernelTester()
32470         .input_width(input_width)
32471         .input_height(2)
32472         .kernel_height(5)
32473         .kernel_width(5)
32474         .subsampling(2)
32475         .padding_left(2)
32476         .padding_right(2)
32477         .padding_top(2)
32478         .padding_bottom(2)
32479         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc3);
32480     }
32481   }
32482 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_div_4)32483   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_div_4) {
32484     for (size_t input_width = 16; input_width < 64; input_width += 8) {
32485       DWConv2DMicrokernelTester()
32486         .input_width(input_width)
32487         .input_height(2)
32488         .kernel_height(5)
32489         .kernel_width(5)
32490         .subsampling(2)
32491         .padding_left(2)
32492         .padding_right(2)
32493         .padding_top(2)
32494         .padding_bottom(2)
32495         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc3);
32496     }
32497   }
32498 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_lt_4)32499   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_lt_4) {
32500     for (size_t input_width = 1; input_width < 7; input_width++) {
32501       DWConv2DMicrokernelTester()
32502         .input_width(8)
32503         .input_height(2)
32504         .kernel_height(5)
32505         .kernel_width(5)
32506         .subsampling(2)
32507         .padding_left(2)
32508         .padding_right(2)
32509         .padding_top(2)
32510         .padding_bottom(2)
32511         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc3);
32512     }
32513   }
32514 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_width_gt_4)32515   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_width_gt_4) {
32516     for (size_t input_width = 9; input_width < 17; input_width++) {
32517       DWConv2DMicrokernelTester()
32518         .input_width(input_width)
32519         .input_height(2)
32520         .kernel_height(5)
32521         .kernel_width(5)
32522         .subsampling(2)
32523         .padding_left(2)
32524         .padding_right(2)
32525         .padding_top(2)
32526         .padding_bottom(2)
32527         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc3);
32528     }
32529   }
32530 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_height_eq_1)32531   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_height_eq_1) {
32532     for (size_t input_height = 1; input_height < 3; input_height++) {
32533       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32534         DWConv2DMicrokernelTester()
32535           .input_width(input_width)
32536           .input_height(input_height)
32537           .kernel_height(5)
32538           .kernel_width(5)
32539           .subsampling(2)
32540           .padding_left(2)
32541           .padding_right(2)
32542           .padding_top(2)
32543           .padding_bottom(2)
32544           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc3);
32545       }
32546     }
32547   }
32548 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3,output_height_gt_1)32549   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3, output_height_gt_1) {
32550     for (size_t input_height = 3; input_height < 5; input_height++) {
32551       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32552         DWConv2DMicrokernelTester()
32553           .input_width(input_width)
32554           .input_height(input_height)
32555           .kernel_height(5)
32556           .kernel_width(5)
32557           .subsampling(2)
32558           .padding_left(2)
32559           .padding_right(2)
32560           .padding_top(2)
32561           .padding_bottom(2)
32562           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc3);
32563       }
32564     }
32565   }
32566 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3,padding_top_eq_1)32567   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC3, padding_top_eq_1) {
32568     for (size_t input_height = 2; input_height < 8; input_height++) {
32569       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32570         DWConv2DMicrokernelTester()
32571           .input_width(input_width)
32572           .input_height(input_height)
32573           .kernel_height(5)
32574           .kernel_width(5)
32575           .subsampling(2)
32576           .padding_left(2)
32577           .padding_right(2)
32578           .padding_top(1)
32579           .padding_bottom(2)
32580           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc3);
32581       }
32582     }
32583   }
32584 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32585 
32586 
32587 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_eq_4)32588   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_eq_4) {
32589     for (size_t input_width = 7; input_width < 9; input_width++) {
32590       DWConv2DMicrokernelTester()
32591         .input_width(input_width)
32592         .input_height(2)
32593         .kernel_height(5)
32594         .kernel_width(5)
32595         .subsampling(2)
32596         .padding_left(2)
32597         .padding_right(2)
32598         .padding_top(2)
32599         .padding_bottom(2)
32600         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc4);
32601     }
32602   }
32603 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_div_4)32604   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_div_4) {
32605     for (size_t input_width = 16; input_width < 64; input_width += 8) {
32606       DWConv2DMicrokernelTester()
32607         .input_width(input_width)
32608         .input_height(2)
32609         .kernel_height(5)
32610         .kernel_width(5)
32611         .subsampling(2)
32612         .padding_left(2)
32613         .padding_right(2)
32614         .padding_top(2)
32615         .padding_bottom(2)
32616         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc4);
32617     }
32618   }
32619 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_lt_4)32620   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_lt_4) {
32621     for (size_t input_width = 1; input_width < 7; input_width++) {
32622       DWConv2DMicrokernelTester()
32623         .input_width(8)
32624         .input_height(2)
32625         .kernel_height(5)
32626         .kernel_width(5)
32627         .subsampling(2)
32628         .padding_left(2)
32629         .padding_right(2)
32630         .padding_top(2)
32631         .padding_bottom(2)
32632         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc4);
32633     }
32634   }
32635 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_width_gt_4)32636   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_width_gt_4) {
32637     for (size_t input_width = 9; input_width < 17; input_width++) {
32638       DWConv2DMicrokernelTester()
32639         .input_width(input_width)
32640         .input_height(2)
32641         .kernel_height(5)
32642         .kernel_width(5)
32643         .subsampling(2)
32644         .padding_left(2)
32645         .padding_right(2)
32646         .padding_top(2)
32647         .padding_bottom(2)
32648         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc4);
32649     }
32650   }
32651 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_height_eq_1)32652   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_height_eq_1) {
32653     for (size_t input_height = 1; input_height < 3; input_height++) {
32654       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32655         DWConv2DMicrokernelTester()
32656           .input_width(input_width)
32657           .input_height(input_height)
32658           .kernel_height(5)
32659           .kernel_width(5)
32660           .subsampling(2)
32661           .padding_left(2)
32662           .padding_right(2)
32663           .padding_top(2)
32664           .padding_bottom(2)
32665           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc4);
32666       }
32667     }
32668   }
32669 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4,output_height_gt_1)32670   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4, output_height_gt_1) {
32671     for (size_t input_height = 3; input_height < 5; input_height++) {
32672       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32673         DWConv2DMicrokernelTester()
32674           .input_width(input_width)
32675           .input_height(input_height)
32676           .kernel_height(5)
32677           .kernel_width(5)
32678           .subsampling(2)
32679           .padding_left(2)
32680           .padding_right(2)
32681           .padding_top(2)
32682           .padding_bottom(2)
32683           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc4);
32684       }
32685     }
32686   }
32687 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4,padding_top_eq_1)32688   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC4, padding_top_eq_1) {
32689     for (size_t input_height = 2; input_height < 8; input_height++) {
32690       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32691         DWConv2DMicrokernelTester()
32692           .input_width(input_width)
32693           .input_height(input_height)
32694           .kernel_height(5)
32695           .kernel_width(5)
32696           .subsampling(2)
32697           .padding_left(2)
32698           .padding_right(2)
32699           .padding_top(1)
32700           .padding_bottom(2)
32701           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc4);
32702       }
32703     }
32704   }
32705 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32706 
32707 
32708 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5,output_width_eq_4)32709   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5, output_width_eq_4) {
32710     for (size_t input_width = 7; input_width < 9; input_width++) {
32711       DWConv2DMicrokernelTester()
32712         .input_width(input_width)
32713         .input_height(2)
32714         .kernel_height(5)
32715         .kernel_width(5)
32716         .subsampling(2)
32717         .padding_left(2)
32718         .padding_right(2)
32719         .padding_top(2)
32720         .padding_bottom(2)
32721         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc5);
32722     }
32723   }
32724 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5,output_width_div_4)32725   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5, output_width_div_4) {
32726     for (size_t input_width = 16; input_width < 64; input_width += 8) {
32727       DWConv2DMicrokernelTester()
32728         .input_width(input_width)
32729         .input_height(2)
32730         .kernel_height(5)
32731         .kernel_width(5)
32732         .subsampling(2)
32733         .padding_left(2)
32734         .padding_right(2)
32735         .padding_top(2)
32736         .padding_bottom(2)
32737         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc5);
32738     }
32739   }
32740 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5,output_width_lt_4)32741   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5, output_width_lt_4) {
32742     for (size_t input_width = 1; input_width < 7; input_width++) {
32743       DWConv2DMicrokernelTester()
32744         .input_width(8)
32745         .input_height(2)
32746         .kernel_height(5)
32747         .kernel_width(5)
32748         .subsampling(2)
32749         .padding_left(2)
32750         .padding_right(2)
32751         .padding_top(2)
32752         .padding_bottom(2)
32753         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc5);
32754     }
32755   }
32756 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5,output_width_gt_4)32757   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5, output_width_gt_4) {
32758     for (size_t input_width = 9; input_width < 17; input_width++) {
32759       DWConv2DMicrokernelTester()
32760         .input_width(input_width)
32761         .input_height(2)
32762         .kernel_height(5)
32763         .kernel_width(5)
32764         .subsampling(2)
32765         .padding_left(2)
32766         .padding_right(2)
32767         .padding_top(2)
32768         .padding_bottom(2)
32769         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc5);
32770     }
32771   }
32772 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5,output_height_eq_1)32773   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5, output_height_eq_1) {
32774     for (size_t input_height = 1; input_height < 3; input_height++) {
32775       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32776         DWConv2DMicrokernelTester()
32777           .input_width(input_width)
32778           .input_height(input_height)
32779           .kernel_height(5)
32780           .kernel_width(5)
32781           .subsampling(2)
32782           .padding_left(2)
32783           .padding_right(2)
32784           .padding_top(2)
32785           .padding_bottom(2)
32786           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc5);
32787       }
32788     }
32789   }
32790 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5,output_height_gt_1)32791   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5, output_height_gt_1) {
32792     for (size_t input_height = 3; input_height < 5; input_height++) {
32793       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32794         DWConv2DMicrokernelTester()
32795           .input_width(input_width)
32796           .input_height(input_height)
32797           .kernel_height(5)
32798           .kernel_width(5)
32799           .subsampling(2)
32800           .padding_left(2)
32801           .padding_right(2)
32802           .padding_top(2)
32803           .padding_bottom(2)
32804           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc5);
32805       }
32806     }
32807   }
32808 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5,padding_top_eq_1)32809   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_1X4_ACC5, padding_top_eq_1) {
32810     for (size_t input_height = 2; input_height < 8; input_height++) {
32811       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32812         DWConv2DMicrokernelTester()
32813           .input_width(input_width)
32814           .input_height(input_height)
32815           .kernel_height(5)
32816           .kernel_width(5)
32817           .subsampling(2)
32818           .padding_left(2)
32819           .padding_right(2)
32820           .padding_top(1)
32821           .padding_bottom(2)
32822           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_1x4_acc5);
32823       }
32824     }
32825   }
32826 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32827 
32828 
32829 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4,output_width_eq_4)32830   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4, output_width_eq_4) {
32831     for (size_t input_width = 7; input_width < 9; input_width++) {
32832       DWConv2DMicrokernelTester()
32833         .input_width(input_width)
32834         .input_height(4)
32835         .kernel_height(5)
32836         .kernel_width(5)
32837         .subsampling(2)
32838         .padding_left(2)
32839         .padding_right(2)
32840         .padding_top(2)
32841         .padding_bottom(2)
32842         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4);
32843     }
32844   }
32845 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4,output_width_div_4)32846   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4, output_width_div_4) {
32847     for (size_t input_width = 16; input_width < 64; input_width += 8) {
32848       DWConv2DMicrokernelTester()
32849         .input_width(input_width)
32850         .input_height(4)
32851         .kernel_height(5)
32852         .kernel_width(5)
32853         .subsampling(2)
32854         .padding_left(2)
32855         .padding_right(2)
32856         .padding_top(2)
32857         .padding_bottom(2)
32858         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4);
32859     }
32860   }
32861 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4,output_width_lt_4)32862   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4, output_width_lt_4) {
32863     for (size_t input_width = 1; input_width < 7; input_width++) {
32864       DWConv2DMicrokernelTester()
32865         .input_width(8)
32866         .input_height(4)
32867         .kernel_height(5)
32868         .kernel_width(5)
32869         .subsampling(2)
32870         .padding_left(2)
32871         .padding_right(2)
32872         .padding_top(2)
32873         .padding_bottom(2)
32874         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4);
32875     }
32876   }
32877 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4,output_width_gt_4)32878   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4, output_width_gt_4) {
32879     for (size_t input_width = 9; input_width < 17; input_width++) {
32880       DWConv2DMicrokernelTester()
32881         .input_width(input_width)
32882         .input_height(4)
32883         .kernel_height(5)
32884         .kernel_width(5)
32885         .subsampling(2)
32886         .padding_left(2)
32887         .padding_right(2)
32888         .padding_top(2)
32889         .padding_bottom(2)
32890         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4);
32891     }
32892   }
32893 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4,output_height_eq_2)32894   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4, output_height_eq_2) {
32895     for (size_t input_height = 3; input_height < 5; input_height++) {
32896       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32897         DWConv2DMicrokernelTester()
32898           .input_width(input_width)
32899           .input_height(input_height)
32900           .kernel_height(5)
32901           .kernel_width(5)
32902           .subsampling(2)
32903           .padding_left(2)
32904           .padding_right(2)
32905           .padding_top(2)
32906           .padding_bottom(2)
32907           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4);
32908       }
32909     }
32910   }
32911 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4,output_height_div_2)32912   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4, output_height_div_2) {
32913     for (size_t input_height = 8; input_height < 32; input_height += 4) {
32914       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32915         DWConv2DMicrokernelTester()
32916           .input_width(input_width)
32917           .input_height(input_height)
32918           .kernel_height(5)
32919           .kernel_width(5)
32920           .subsampling(2)
32921           .padding_left(2)
32922           .padding_right(2)
32923           .padding_top(2)
32924           .padding_bottom(2)
32925           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4);
32926       }
32927     }
32928   }
32929 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4,output_height_lt_2)32930   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4, output_height_lt_2) {
32931     for (size_t input_height = 1; input_height < 3; input_height++) {
32932       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32933         DWConv2DMicrokernelTester()
32934           .input_width(input_width)
32935           .input_height(input_height)
32936           .kernel_height(5)
32937           .kernel_width(5)
32938           .subsampling(2)
32939           .padding_left(2)
32940           .padding_right(2)
32941           .padding_top(2)
32942           .padding_bottom(2)
32943           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4);
32944       }
32945     }
32946   }
32947 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4,output_height_gt_2)32948   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4, output_height_gt_2) {
32949     for (size_t input_height = 5; input_height < 9; input_height++) {
32950       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32951         DWConv2DMicrokernelTester()
32952           .input_width(input_width)
32953           .input_height(input_height)
32954           .kernel_height(5)
32955           .kernel_width(5)
32956           .subsampling(2)
32957           .padding_left(2)
32958           .padding_right(2)
32959           .padding_top(2)
32960           .padding_bottom(2)
32961           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4);
32962       }
32963     }
32964   }
32965 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4,padding_top_eq_1)32966   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4, padding_top_eq_1) {
32967     for (size_t input_height = 2; input_height < 14; input_height++) {
32968       for (size_t input_width = 1; input_width < 41; input_width += 7) {
32969         DWConv2DMicrokernelTester()
32970           .input_width(input_width)
32971           .input_height(input_height)
32972           .kernel_height(5)
32973           .kernel_width(5)
32974           .subsampling(2)
32975           .padding_left(2)
32976           .padding_right(2)
32977           .padding_top(1)
32978           .padding_bottom(2)
32979           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4);
32980       }
32981     }
32982   }
32983 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32984 
32985 
32986 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_eq_4)32987   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_eq_4) {
32988     for (size_t input_width = 7; input_width < 9; input_width++) {
32989       DWConv2DMicrokernelTester()
32990         .input_width(input_width)
32991         .input_height(4)
32992         .kernel_height(5)
32993         .kernel_width(5)
32994         .subsampling(2)
32995         .padding_left(2)
32996         .padding_right(2)
32997         .padding_top(2)
32998         .padding_bottom(2)
32999         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc2);
33000     }
33001   }
33002 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_div_4)33003   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_div_4) {
33004     for (size_t input_width = 16; input_width < 64; input_width += 8) {
33005       DWConv2DMicrokernelTester()
33006         .input_width(input_width)
33007         .input_height(4)
33008         .kernel_height(5)
33009         .kernel_width(5)
33010         .subsampling(2)
33011         .padding_left(2)
33012         .padding_right(2)
33013         .padding_top(2)
33014         .padding_bottom(2)
33015         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc2);
33016     }
33017   }
33018 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_lt_4)33019   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_lt_4) {
33020     for (size_t input_width = 1; input_width < 7; input_width++) {
33021       DWConv2DMicrokernelTester()
33022         .input_width(8)
33023         .input_height(4)
33024         .kernel_height(5)
33025         .kernel_width(5)
33026         .subsampling(2)
33027         .padding_left(2)
33028         .padding_right(2)
33029         .padding_top(2)
33030         .padding_bottom(2)
33031         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc2);
33032     }
33033   }
33034 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_width_gt_4)33035   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_width_gt_4) {
33036     for (size_t input_width = 9; input_width < 17; input_width++) {
33037       DWConv2DMicrokernelTester()
33038         .input_width(input_width)
33039         .input_height(4)
33040         .kernel_height(5)
33041         .kernel_width(5)
33042         .subsampling(2)
33043         .padding_left(2)
33044         .padding_right(2)
33045         .padding_top(2)
33046         .padding_bottom(2)
33047         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc2);
33048     }
33049   }
33050 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_eq_2)33051   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_eq_2) {
33052     for (size_t input_height = 3; input_height < 5; input_height++) {
33053       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33054         DWConv2DMicrokernelTester()
33055           .input_width(input_width)
33056           .input_height(input_height)
33057           .kernel_height(5)
33058           .kernel_width(5)
33059           .subsampling(2)
33060           .padding_left(2)
33061           .padding_right(2)
33062           .padding_top(2)
33063           .padding_bottom(2)
33064           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc2);
33065       }
33066     }
33067   }
33068 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_div_2)33069   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_div_2) {
33070     for (size_t input_height = 8; input_height < 32; input_height += 4) {
33071       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33072         DWConv2DMicrokernelTester()
33073           .input_width(input_width)
33074           .input_height(input_height)
33075           .kernel_height(5)
33076           .kernel_width(5)
33077           .subsampling(2)
33078           .padding_left(2)
33079           .padding_right(2)
33080           .padding_top(2)
33081           .padding_bottom(2)
33082           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc2);
33083       }
33084     }
33085   }
33086 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_lt_2)33087   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_lt_2) {
33088     for (size_t input_height = 1; input_height < 3; input_height++) {
33089       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33090         DWConv2DMicrokernelTester()
33091           .input_width(input_width)
33092           .input_height(input_height)
33093           .kernel_height(5)
33094           .kernel_width(5)
33095           .subsampling(2)
33096           .padding_left(2)
33097           .padding_right(2)
33098           .padding_top(2)
33099           .padding_bottom(2)
33100           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc2);
33101       }
33102     }
33103   }
33104 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,output_height_gt_2)33105   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, output_height_gt_2) {
33106     for (size_t input_height = 5; input_height < 9; input_height++) {
33107       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33108         DWConv2DMicrokernelTester()
33109           .input_width(input_width)
33110           .input_height(input_height)
33111           .kernel_height(5)
33112           .kernel_width(5)
33113           .subsampling(2)
33114           .padding_left(2)
33115           .padding_right(2)
33116           .padding_top(2)
33117           .padding_bottom(2)
33118           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc2);
33119       }
33120     }
33121   }
33122 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2,padding_top_eq_1)33123   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC2, padding_top_eq_1) {
33124     for (size_t input_height = 2; input_height < 14; input_height++) {
33125       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33126         DWConv2DMicrokernelTester()
33127           .input_width(input_width)
33128           .input_height(input_height)
33129           .kernel_height(5)
33130           .kernel_width(5)
33131           .subsampling(2)
33132           .padding_left(2)
33133           .padding_right(2)
33134           .padding_top(1)
33135           .padding_bottom(2)
33136           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc2);
33137       }
33138     }
33139   }
33140 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33141 
33142 
33143 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_width_eq_4)33144   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_width_eq_4) {
33145     for (size_t input_width = 7; input_width < 9; input_width++) {
33146       DWConv2DMicrokernelTester()
33147         .input_width(input_width)
33148         .input_height(4)
33149         .kernel_height(5)
33150         .kernel_width(5)
33151         .subsampling(2)
33152         .padding_left(2)
33153         .padding_right(2)
33154         .padding_top(2)
33155         .padding_bottom(2)
33156         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc3);
33157     }
33158   }
33159 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_width_div_4)33160   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_width_div_4) {
33161     for (size_t input_width = 16; input_width < 64; input_width += 8) {
33162       DWConv2DMicrokernelTester()
33163         .input_width(input_width)
33164         .input_height(4)
33165         .kernel_height(5)
33166         .kernel_width(5)
33167         .subsampling(2)
33168         .padding_left(2)
33169         .padding_right(2)
33170         .padding_top(2)
33171         .padding_bottom(2)
33172         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc3);
33173     }
33174   }
33175 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_width_lt_4)33176   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_width_lt_4) {
33177     for (size_t input_width = 1; input_width < 7; input_width++) {
33178       DWConv2DMicrokernelTester()
33179         .input_width(8)
33180         .input_height(4)
33181         .kernel_height(5)
33182         .kernel_width(5)
33183         .subsampling(2)
33184         .padding_left(2)
33185         .padding_right(2)
33186         .padding_top(2)
33187         .padding_bottom(2)
33188         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc3);
33189     }
33190   }
33191 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_width_gt_4)33192   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_width_gt_4) {
33193     for (size_t input_width = 9; input_width < 17; input_width++) {
33194       DWConv2DMicrokernelTester()
33195         .input_width(input_width)
33196         .input_height(4)
33197         .kernel_height(5)
33198         .kernel_width(5)
33199         .subsampling(2)
33200         .padding_left(2)
33201         .padding_right(2)
33202         .padding_top(2)
33203         .padding_bottom(2)
33204         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc3);
33205     }
33206   }
33207 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_height_eq_2)33208   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_height_eq_2) {
33209     for (size_t input_height = 3; input_height < 5; input_height++) {
33210       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33211         DWConv2DMicrokernelTester()
33212           .input_width(input_width)
33213           .input_height(input_height)
33214           .kernel_height(5)
33215           .kernel_width(5)
33216           .subsampling(2)
33217           .padding_left(2)
33218           .padding_right(2)
33219           .padding_top(2)
33220           .padding_bottom(2)
33221           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc3);
33222       }
33223     }
33224   }
33225 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_height_div_2)33226   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_height_div_2) {
33227     for (size_t input_height = 8; input_height < 32; input_height += 4) {
33228       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33229         DWConv2DMicrokernelTester()
33230           .input_width(input_width)
33231           .input_height(input_height)
33232           .kernel_height(5)
33233           .kernel_width(5)
33234           .subsampling(2)
33235           .padding_left(2)
33236           .padding_right(2)
33237           .padding_top(2)
33238           .padding_bottom(2)
33239           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc3);
33240       }
33241     }
33242   }
33243 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_height_lt_2)33244   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_height_lt_2) {
33245     for (size_t input_height = 1; input_height < 3; input_height++) {
33246       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33247         DWConv2DMicrokernelTester()
33248           .input_width(input_width)
33249           .input_height(input_height)
33250           .kernel_height(5)
33251           .kernel_width(5)
33252           .subsampling(2)
33253           .padding_left(2)
33254           .padding_right(2)
33255           .padding_top(2)
33256           .padding_bottom(2)
33257           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc3);
33258       }
33259     }
33260   }
33261 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,output_height_gt_2)33262   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, output_height_gt_2) {
33263     for (size_t input_height = 5; input_height < 9; input_height++) {
33264       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33265         DWConv2DMicrokernelTester()
33266           .input_width(input_width)
33267           .input_height(input_height)
33268           .kernel_height(5)
33269           .kernel_width(5)
33270           .subsampling(2)
33271           .padding_left(2)
33272           .padding_right(2)
33273           .padding_top(2)
33274           .padding_bottom(2)
33275           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc3);
33276       }
33277     }
33278   }
33279 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3,padding_top_eq_1)33280   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_2X4_ACC3, padding_top_eq_1) {
33281     for (size_t input_height = 2; input_height < 14; input_height++) {
33282       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33283         DWConv2DMicrokernelTester()
33284           .input_width(input_width)
33285           .input_height(input_height)
33286           .kernel_height(5)
33287           .kernel_width(5)
33288           .subsampling(2)
33289           .padding_left(2)
33290           .padding_right(2)
33291           .padding_top(1)
33292           .padding_bottom(2)
33293           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_2x4_acc3);
33294       }
33295     }
33296   }
33297 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33298 
33299 
33300 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4,output_width_eq_4)33301   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4, output_width_eq_4) {
33302     for (size_t input_width = 7; input_width < 9; input_width++) {
33303       DWConv2DMicrokernelTester()
33304         .input_width(input_width)
33305         .input_height(6)
33306         .kernel_height(5)
33307         .kernel_width(5)
33308         .subsampling(2)
33309         .padding_left(2)
33310         .padding_right(2)
33311         .padding_top(2)
33312         .padding_bottom(2)
33313         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4);
33314     }
33315   }
33316 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4,output_width_div_4)33317   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4, output_width_div_4) {
33318     for (size_t input_width = 16; input_width < 64; input_width += 8) {
33319       DWConv2DMicrokernelTester()
33320         .input_width(input_width)
33321         .input_height(6)
33322         .kernel_height(5)
33323         .kernel_width(5)
33324         .subsampling(2)
33325         .padding_left(2)
33326         .padding_right(2)
33327         .padding_top(2)
33328         .padding_bottom(2)
33329         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4);
33330     }
33331   }
33332 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4,output_width_lt_4)33333   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4, output_width_lt_4) {
33334     for (size_t input_width = 1; input_width < 7; input_width++) {
33335       DWConv2DMicrokernelTester()
33336         .input_width(8)
33337         .input_height(6)
33338         .kernel_height(5)
33339         .kernel_width(5)
33340         .subsampling(2)
33341         .padding_left(2)
33342         .padding_right(2)
33343         .padding_top(2)
33344         .padding_bottom(2)
33345         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4);
33346     }
33347   }
33348 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4,output_width_gt_4)33349   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4, output_width_gt_4) {
33350     for (size_t input_width = 9; input_width < 17; input_width++) {
33351       DWConv2DMicrokernelTester()
33352         .input_width(input_width)
33353         .input_height(6)
33354         .kernel_height(5)
33355         .kernel_width(5)
33356         .subsampling(2)
33357         .padding_left(2)
33358         .padding_right(2)
33359         .padding_top(2)
33360         .padding_bottom(2)
33361         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4);
33362     }
33363   }
33364 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4,output_height_eq_3)33365   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4, output_height_eq_3) {
33366     for (size_t input_height = 5; input_height < 7; input_height++) {
33367       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33368         DWConv2DMicrokernelTester()
33369           .input_width(input_width)
33370           .input_height(input_height)
33371           .kernel_height(5)
33372           .kernel_width(5)
33373           .subsampling(2)
33374           .padding_left(2)
33375           .padding_right(2)
33376           .padding_top(2)
33377           .padding_bottom(2)
33378           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4);
33379       }
33380     }
33381   }
33382 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4,output_height_div_3)33383   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4, output_height_div_3) {
33384     for (size_t input_height = 12; input_height < 48; input_height += 6) {
33385       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33386         DWConv2DMicrokernelTester()
33387           .input_width(input_width)
33388           .input_height(input_height)
33389           .kernel_height(5)
33390           .kernel_width(5)
33391           .subsampling(2)
33392           .padding_left(2)
33393           .padding_right(2)
33394           .padding_top(2)
33395           .padding_bottom(2)
33396           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4);
33397       }
33398     }
33399   }
33400 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4,output_height_lt_3)33401   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4, output_height_lt_3) {
33402     for (size_t input_height = 1; input_height < 5; input_height++) {
33403       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33404         DWConv2DMicrokernelTester()
33405           .input_width(input_width)
33406           .input_height(input_height)
33407           .kernel_height(5)
33408           .kernel_width(5)
33409           .subsampling(2)
33410           .padding_left(2)
33411           .padding_right(2)
33412           .padding_top(2)
33413           .padding_bottom(2)
33414           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4);
33415       }
33416     }
33417   }
33418 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4,output_height_gt_3)33419   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4, output_height_gt_3) {
33420     for (size_t input_height = 7; input_height < 13; input_height++) {
33421       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33422         DWConv2DMicrokernelTester()
33423           .input_width(input_width)
33424           .input_height(input_height)
33425           .kernel_height(5)
33426           .kernel_width(5)
33427           .subsampling(2)
33428           .padding_left(2)
33429           .padding_right(2)
33430           .padding_top(2)
33431           .padding_bottom(2)
33432           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4);
33433       }
33434     }
33435   }
33436 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4,padding_top_eq_1)33437   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4, padding_top_eq_1) {
33438     for (size_t input_height = 2; input_height < 20; input_height++) {
33439       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33440         DWConv2DMicrokernelTester()
33441           .input_width(input_width)
33442           .input_height(input_height)
33443           .kernel_height(5)
33444           .kernel_width(5)
33445           .subsampling(2)
33446           .padding_left(2)
33447           .padding_right(2)
33448           .padding_top(1)
33449           .padding_bottom(2)
33450           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4);
33451       }
33452     }
33453   }
33454 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33455 
33456 
33457 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_width_eq_4)33458   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_width_eq_4) {
33459     for (size_t input_width = 7; input_width < 9; input_width++) {
33460       DWConv2DMicrokernelTester()
33461         .input_width(input_width)
33462         .input_height(6)
33463         .kernel_height(5)
33464         .kernel_width(5)
33465         .subsampling(2)
33466         .padding_left(2)
33467         .padding_right(2)
33468         .padding_top(2)
33469         .padding_bottom(2)
33470         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4_acc2);
33471     }
33472   }
33473 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_width_div_4)33474   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_width_div_4) {
33475     for (size_t input_width = 16; input_width < 64; input_width += 8) {
33476       DWConv2DMicrokernelTester()
33477         .input_width(input_width)
33478         .input_height(6)
33479         .kernel_height(5)
33480         .kernel_width(5)
33481         .subsampling(2)
33482         .padding_left(2)
33483         .padding_right(2)
33484         .padding_top(2)
33485         .padding_bottom(2)
33486         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4_acc2);
33487     }
33488   }
33489 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_width_lt_4)33490   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_width_lt_4) {
33491     for (size_t input_width = 1; input_width < 7; input_width++) {
33492       DWConv2DMicrokernelTester()
33493         .input_width(8)
33494         .input_height(6)
33495         .kernel_height(5)
33496         .kernel_width(5)
33497         .subsampling(2)
33498         .padding_left(2)
33499         .padding_right(2)
33500         .padding_top(2)
33501         .padding_bottom(2)
33502         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4_acc2);
33503     }
33504   }
33505 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_width_gt_4)33506   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_width_gt_4) {
33507     for (size_t input_width = 9; input_width < 17; input_width++) {
33508       DWConv2DMicrokernelTester()
33509         .input_width(input_width)
33510         .input_height(6)
33511         .kernel_height(5)
33512         .kernel_width(5)
33513         .subsampling(2)
33514         .padding_left(2)
33515         .padding_right(2)
33516         .padding_top(2)
33517         .padding_bottom(2)
33518         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4_acc2);
33519     }
33520   }
33521 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_height_eq_3)33522   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_height_eq_3) {
33523     for (size_t input_height = 5; input_height < 7; input_height++) {
33524       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33525         DWConv2DMicrokernelTester()
33526           .input_width(input_width)
33527           .input_height(input_height)
33528           .kernel_height(5)
33529           .kernel_width(5)
33530           .subsampling(2)
33531           .padding_left(2)
33532           .padding_right(2)
33533           .padding_top(2)
33534           .padding_bottom(2)
33535           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4_acc2);
33536       }
33537     }
33538   }
33539 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_height_div_3)33540   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_height_div_3) {
33541     for (size_t input_height = 12; input_height < 48; input_height += 6) {
33542       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33543         DWConv2DMicrokernelTester()
33544           .input_width(input_width)
33545           .input_height(input_height)
33546           .kernel_height(5)
33547           .kernel_width(5)
33548           .subsampling(2)
33549           .padding_left(2)
33550           .padding_right(2)
33551           .padding_top(2)
33552           .padding_bottom(2)
33553           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4_acc2);
33554       }
33555     }
33556   }
33557 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_height_lt_3)33558   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_height_lt_3) {
33559     for (size_t input_height = 1; input_height < 5; input_height++) {
33560       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33561         DWConv2DMicrokernelTester()
33562           .input_width(input_width)
33563           .input_height(input_height)
33564           .kernel_height(5)
33565           .kernel_width(5)
33566           .subsampling(2)
33567           .padding_left(2)
33568           .padding_right(2)
33569           .padding_top(2)
33570           .padding_bottom(2)
33571           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4_acc2);
33572       }
33573     }
33574   }
33575 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,output_height_gt_3)33576   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, output_height_gt_3) {
33577     for (size_t input_height = 7; input_height < 13; input_height++) {
33578       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33579         DWConv2DMicrokernelTester()
33580           .input_width(input_width)
33581           .input_height(input_height)
33582           .kernel_height(5)
33583           .kernel_width(5)
33584           .subsampling(2)
33585           .padding_left(2)
33586           .padding_right(2)
33587           .padding_top(2)
33588           .padding_bottom(2)
33589           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4_acc2);
33590       }
33591     }
33592   }
33593 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2,padding_top_eq_1)33594   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_ARM_SPLAT_3X4_ACC2, padding_top_eq_1) {
33595     for (size_t input_height = 2; input_height < 20; input_height++) {
33596       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33597         DWConv2DMicrokernelTester()
33598           .input_width(input_width)
33599           .input_height(input_height)
33600           .kernel_height(5)
33601           .kernel_width(5)
33602           .subsampling(2)
33603           .padding_left(2)
33604           .padding_right(2)
33605           .padding_top(1)
33606           .padding_bottom(2)
33607           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_arm_splat_3x4_acc2);
33608       }
33609     }
33610   }
33611 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33612 
33613 
33614 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4,output_width_eq_4)33615   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4, output_width_eq_4) {
33616     for (size_t input_width = 7; input_width < 9; input_width++) {
33617       DWConv2DMicrokernelTester()
33618         .input_width(input_width)
33619         .input_height(2)
33620         .kernel_height(5)
33621         .kernel_width(5)
33622         .subsampling(2)
33623         .padding_left(2)
33624         .padding_right(2)
33625         .padding_top(2)
33626         .padding_bottom(2)
33627         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4);
33628     }
33629   }
33630 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4,output_width_div_4)33631   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4, output_width_div_4) {
33632     for (size_t input_width = 16; input_width < 64; input_width += 8) {
33633       DWConv2DMicrokernelTester()
33634         .input_width(input_width)
33635         .input_height(2)
33636         .kernel_height(5)
33637         .kernel_width(5)
33638         .subsampling(2)
33639         .padding_left(2)
33640         .padding_right(2)
33641         .padding_top(2)
33642         .padding_bottom(2)
33643         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4);
33644     }
33645   }
33646 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4,output_width_lt_4)33647   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4, output_width_lt_4) {
33648     for (size_t input_width = 1; input_width < 7; input_width++) {
33649       DWConv2DMicrokernelTester()
33650         .input_width(8)
33651         .input_height(2)
33652         .kernel_height(5)
33653         .kernel_width(5)
33654         .subsampling(2)
33655         .padding_left(2)
33656         .padding_right(2)
33657         .padding_top(2)
33658         .padding_bottom(2)
33659         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4);
33660     }
33661   }
33662 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4,output_width_gt_4)33663   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4, output_width_gt_4) {
33664     for (size_t input_width = 9; input_width < 17; input_width++) {
33665       DWConv2DMicrokernelTester()
33666         .input_width(input_width)
33667         .input_height(2)
33668         .kernel_height(5)
33669         .kernel_width(5)
33670         .subsampling(2)
33671         .padding_left(2)
33672         .padding_right(2)
33673         .padding_top(2)
33674         .padding_bottom(2)
33675         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4);
33676     }
33677   }
33678 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4,output_height_eq_1)33679   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4, output_height_eq_1) {
33680     for (size_t input_height = 1; input_height < 3; input_height++) {
33681       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33682         DWConv2DMicrokernelTester()
33683           .input_width(input_width)
33684           .input_height(input_height)
33685           .kernel_height(5)
33686           .kernel_width(5)
33687           .subsampling(2)
33688           .padding_left(2)
33689           .padding_right(2)
33690           .padding_top(2)
33691           .padding_bottom(2)
33692           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4);
33693       }
33694     }
33695   }
33696 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4,output_height_gt_1)33697   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4, output_height_gt_1) {
33698     for (size_t input_height = 3; input_height < 5; input_height++) {
33699       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33700         DWConv2DMicrokernelTester()
33701           .input_width(input_width)
33702           .input_height(input_height)
33703           .kernel_height(5)
33704           .kernel_width(5)
33705           .subsampling(2)
33706           .padding_left(2)
33707           .padding_right(2)
33708           .padding_top(2)
33709           .padding_bottom(2)
33710           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4);
33711       }
33712     }
33713   }
33714 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4,padding_top_eq_1)33715   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4, padding_top_eq_1) {
33716     for (size_t input_height = 2; input_height < 8; input_height++) {
33717       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33718         DWConv2DMicrokernelTester()
33719           .input_width(input_width)
33720           .input_height(input_height)
33721           .kernel_height(5)
33722           .kernel_width(5)
33723           .subsampling(2)
33724           .padding_left(2)
33725           .padding_right(2)
33726           .padding_top(1)
33727           .padding_bottom(2)
33728           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4);
33729       }
33730     }
33731   }
33732 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33733 
33734 
33735 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_eq_4)33736   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_eq_4) {
33737     for (size_t input_width = 7; input_width < 9; input_width++) {
33738       DWConv2DMicrokernelTester()
33739         .input_width(input_width)
33740         .input_height(2)
33741         .kernel_height(5)
33742         .kernel_width(5)
33743         .subsampling(2)
33744         .padding_left(2)
33745         .padding_right(2)
33746         .padding_top(2)
33747         .padding_bottom(2)
33748         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc2);
33749     }
33750   }
33751 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_div_4)33752   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_div_4) {
33753     for (size_t input_width = 16; input_width < 64; input_width += 8) {
33754       DWConv2DMicrokernelTester()
33755         .input_width(input_width)
33756         .input_height(2)
33757         .kernel_height(5)
33758         .kernel_width(5)
33759         .subsampling(2)
33760         .padding_left(2)
33761         .padding_right(2)
33762         .padding_top(2)
33763         .padding_bottom(2)
33764         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc2);
33765     }
33766   }
33767 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_lt_4)33768   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_lt_4) {
33769     for (size_t input_width = 1; input_width < 7; input_width++) {
33770       DWConv2DMicrokernelTester()
33771         .input_width(8)
33772         .input_height(2)
33773         .kernel_height(5)
33774         .kernel_width(5)
33775         .subsampling(2)
33776         .padding_left(2)
33777         .padding_right(2)
33778         .padding_top(2)
33779         .padding_bottom(2)
33780         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc2);
33781     }
33782   }
33783 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_width_gt_4)33784   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_width_gt_4) {
33785     for (size_t input_width = 9; input_width < 17; input_width++) {
33786       DWConv2DMicrokernelTester()
33787         .input_width(input_width)
33788         .input_height(2)
33789         .kernel_height(5)
33790         .kernel_width(5)
33791         .subsampling(2)
33792         .padding_left(2)
33793         .padding_right(2)
33794         .padding_top(2)
33795         .padding_bottom(2)
33796         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc2);
33797     }
33798   }
33799 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_height_eq_1)33800   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_height_eq_1) {
33801     for (size_t input_height = 1; input_height < 3; input_height++) {
33802       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33803         DWConv2DMicrokernelTester()
33804           .input_width(input_width)
33805           .input_height(input_height)
33806           .kernel_height(5)
33807           .kernel_width(5)
33808           .subsampling(2)
33809           .padding_left(2)
33810           .padding_right(2)
33811           .padding_top(2)
33812           .padding_bottom(2)
33813           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc2);
33814       }
33815     }
33816   }
33817 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,output_height_gt_1)33818   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, output_height_gt_1) {
33819     for (size_t input_height = 3; input_height < 5; input_height++) {
33820       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33821         DWConv2DMicrokernelTester()
33822           .input_width(input_width)
33823           .input_height(input_height)
33824           .kernel_height(5)
33825           .kernel_width(5)
33826           .subsampling(2)
33827           .padding_left(2)
33828           .padding_right(2)
33829           .padding_top(2)
33830           .padding_bottom(2)
33831           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc2);
33832       }
33833     }
33834   }
33835 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2,padding_top_eq_1)33836   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC2, padding_top_eq_1) {
33837     for (size_t input_height = 2; input_height < 8; input_height++) {
33838       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33839         DWConv2DMicrokernelTester()
33840           .input_width(input_width)
33841           .input_height(input_height)
33842           .kernel_height(5)
33843           .kernel_width(5)
33844           .subsampling(2)
33845           .padding_left(2)
33846           .padding_right(2)
33847           .padding_top(1)
33848           .padding_bottom(2)
33849           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc2);
33850       }
33851     }
33852   }
33853 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33854 
33855 
33856 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_eq_4)33857   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_eq_4) {
33858     for (size_t input_width = 7; input_width < 9; input_width++) {
33859       DWConv2DMicrokernelTester()
33860         .input_width(input_width)
33861         .input_height(2)
33862         .kernel_height(5)
33863         .kernel_width(5)
33864         .subsampling(2)
33865         .padding_left(2)
33866         .padding_right(2)
33867         .padding_top(2)
33868         .padding_bottom(2)
33869         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc3);
33870     }
33871   }
33872 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_div_4)33873   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_div_4) {
33874     for (size_t input_width = 16; input_width < 64; input_width += 8) {
33875       DWConv2DMicrokernelTester()
33876         .input_width(input_width)
33877         .input_height(2)
33878         .kernel_height(5)
33879         .kernel_width(5)
33880         .subsampling(2)
33881         .padding_left(2)
33882         .padding_right(2)
33883         .padding_top(2)
33884         .padding_bottom(2)
33885         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc3);
33886     }
33887   }
33888 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_lt_4)33889   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_lt_4) {
33890     for (size_t input_width = 1; input_width < 7; input_width++) {
33891       DWConv2DMicrokernelTester()
33892         .input_width(8)
33893         .input_height(2)
33894         .kernel_height(5)
33895         .kernel_width(5)
33896         .subsampling(2)
33897         .padding_left(2)
33898         .padding_right(2)
33899         .padding_top(2)
33900         .padding_bottom(2)
33901         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc3);
33902     }
33903   }
33904 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_width_gt_4)33905   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_width_gt_4) {
33906     for (size_t input_width = 9; input_width < 17; input_width++) {
33907       DWConv2DMicrokernelTester()
33908         .input_width(input_width)
33909         .input_height(2)
33910         .kernel_height(5)
33911         .kernel_width(5)
33912         .subsampling(2)
33913         .padding_left(2)
33914         .padding_right(2)
33915         .padding_top(2)
33916         .padding_bottom(2)
33917         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc3);
33918     }
33919   }
33920 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_height_eq_1)33921   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_height_eq_1) {
33922     for (size_t input_height = 1; input_height < 3; input_height++) {
33923       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33924         DWConv2DMicrokernelTester()
33925           .input_width(input_width)
33926           .input_height(input_height)
33927           .kernel_height(5)
33928           .kernel_width(5)
33929           .subsampling(2)
33930           .padding_left(2)
33931           .padding_right(2)
33932           .padding_top(2)
33933           .padding_bottom(2)
33934           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc3);
33935       }
33936     }
33937   }
33938 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,output_height_gt_1)33939   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, output_height_gt_1) {
33940     for (size_t input_height = 3; input_height < 5; input_height++) {
33941       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33942         DWConv2DMicrokernelTester()
33943           .input_width(input_width)
33944           .input_height(input_height)
33945           .kernel_height(5)
33946           .kernel_width(5)
33947           .subsampling(2)
33948           .padding_left(2)
33949           .padding_right(2)
33950           .padding_top(2)
33951           .padding_bottom(2)
33952           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc3);
33953       }
33954     }
33955   }
33956 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3,padding_top_eq_1)33957   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC3, padding_top_eq_1) {
33958     for (size_t input_height = 2; input_height < 8; input_height++) {
33959       for (size_t input_width = 1; input_width < 41; input_width += 7) {
33960         DWConv2DMicrokernelTester()
33961           .input_width(input_width)
33962           .input_height(input_height)
33963           .kernel_height(5)
33964           .kernel_width(5)
33965           .subsampling(2)
33966           .padding_left(2)
33967           .padding_right(2)
33968           .padding_top(1)
33969           .padding_bottom(2)
33970           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc3);
33971       }
33972     }
33973   }
33974 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33975 
33976 
33977 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_eq_4)33978   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_eq_4) {
33979     for (size_t input_width = 7; input_width < 9; input_width++) {
33980       DWConv2DMicrokernelTester()
33981         .input_width(input_width)
33982         .input_height(2)
33983         .kernel_height(5)
33984         .kernel_width(5)
33985         .subsampling(2)
33986         .padding_left(2)
33987         .padding_right(2)
33988         .padding_top(2)
33989         .padding_bottom(2)
33990         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc4);
33991     }
33992   }
33993 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_div_4)33994   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_div_4) {
33995     for (size_t input_width = 16; input_width < 64; input_width += 8) {
33996       DWConv2DMicrokernelTester()
33997         .input_width(input_width)
33998         .input_height(2)
33999         .kernel_height(5)
34000         .kernel_width(5)
34001         .subsampling(2)
34002         .padding_left(2)
34003         .padding_right(2)
34004         .padding_top(2)
34005         .padding_bottom(2)
34006         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc4);
34007     }
34008   }
34009 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_lt_4)34010   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_lt_4) {
34011     for (size_t input_width = 1; input_width < 7; input_width++) {
34012       DWConv2DMicrokernelTester()
34013         .input_width(8)
34014         .input_height(2)
34015         .kernel_height(5)
34016         .kernel_width(5)
34017         .subsampling(2)
34018         .padding_left(2)
34019         .padding_right(2)
34020         .padding_top(2)
34021         .padding_bottom(2)
34022         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc4);
34023     }
34024   }
34025 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_width_gt_4)34026   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_width_gt_4) {
34027     for (size_t input_width = 9; input_width < 17; input_width++) {
34028       DWConv2DMicrokernelTester()
34029         .input_width(input_width)
34030         .input_height(2)
34031         .kernel_height(5)
34032         .kernel_width(5)
34033         .subsampling(2)
34034         .padding_left(2)
34035         .padding_right(2)
34036         .padding_top(2)
34037         .padding_bottom(2)
34038         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc4);
34039     }
34040   }
34041 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_height_eq_1)34042   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_height_eq_1) {
34043     for (size_t input_height = 1; input_height < 3; input_height++) {
34044       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34045         DWConv2DMicrokernelTester()
34046           .input_width(input_width)
34047           .input_height(input_height)
34048           .kernel_height(5)
34049           .kernel_width(5)
34050           .subsampling(2)
34051           .padding_left(2)
34052           .padding_right(2)
34053           .padding_top(2)
34054           .padding_bottom(2)
34055           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc4);
34056       }
34057     }
34058   }
34059 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,output_height_gt_1)34060   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, output_height_gt_1) {
34061     for (size_t input_height = 3; input_height < 5; input_height++) {
34062       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34063         DWConv2DMicrokernelTester()
34064           .input_width(input_width)
34065           .input_height(input_height)
34066           .kernel_height(5)
34067           .kernel_width(5)
34068           .subsampling(2)
34069           .padding_left(2)
34070           .padding_right(2)
34071           .padding_top(2)
34072           .padding_bottom(2)
34073           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc4);
34074       }
34075     }
34076   }
34077 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4,padding_top_eq_1)34078   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC4, padding_top_eq_1) {
34079     for (size_t input_height = 2; input_height < 8; input_height++) {
34080       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34081         DWConv2DMicrokernelTester()
34082           .input_width(input_width)
34083           .input_height(input_height)
34084           .kernel_height(5)
34085           .kernel_width(5)
34086           .subsampling(2)
34087           .padding_left(2)
34088           .padding_right(2)
34089           .padding_top(1)
34090           .padding_bottom(2)
34091           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc4);
34092       }
34093     }
34094   }
34095 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
34096 
34097 
34098 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5,output_width_eq_4)34099   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5, output_width_eq_4) {
34100     for (size_t input_width = 7; input_width < 9; input_width++) {
34101       DWConv2DMicrokernelTester()
34102         .input_width(input_width)
34103         .input_height(2)
34104         .kernel_height(5)
34105         .kernel_width(5)
34106         .subsampling(2)
34107         .padding_left(2)
34108         .padding_right(2)
34109         .padding_top(2)
34110         .padding_bottom(2)
34111         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc5);
34112     }
34113   }
34114 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5,output_width_div_4)34115   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5, output_width_div_4) {
34116     for (size_t input_width = 16; input_width < 64; input_width += 8) {
34117       DWConv2DMicrokernelTester()
34118         .input_width(input_width)
34119         .input_height(2)
34120         .kernel_height(5)
34121         .kernel_width(5)
34122         .subsampling(2)
34123         .padding_left(2)
34124         .padding_right(2)
34125         .padding_top(2)
34126         .padding_bottom(2)
34127         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc5);
34128     }
34129   }
34130 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5,output_width_lt_4)34131   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5, output_width_lt_4) {
34132     for (size_t input_width = 1; input_width < 7; input_width++) {
34133       DWConv2DMicrokernelTester()
34134         .input_width(8)
34135         .input_height(2)
34136         .kernel_height(5)
34137         .kernel_width(5)
34138         .subsampling(2)
34139         .padding_left(2)
34140         .padding_right(2)
34141         .padding_top(2)
34142         .padding_bottom(2)
34143         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc5);
34144     }
34145   }
34146 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5,output_width_gt_4)34147   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5, output_width_gt_4) {
34148     for (size_t input_width = 9; input_width < 17; input_width++) {
34149       DWConv2DMicrokernelTester()
34150         .input_width(input_width)
34151         .input_height(2)
34152         .kernel_height(5)
34153         .kernel_width(5)
34154         .subsampling(2)
34155         .padding_left(2)
34156         .padding_right(2)
34157         .padding_top(2)
34158         .padding_bottom(2)
34159         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc5);
34160     }
34161   }
34162 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5,output_height_eq_1)34163   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5, output_height_eq_1) {
34164     for (size_t input_height = 1; input_height < 3; input_height++) {
34165       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34166         DWConv2DMicrokernelTester()
34167           .input_width(input_width)
34168           .input_height(input_height)
34169           .kernel_height(5)
34170           .kernel_width(5)
34171           .subsampling(2)
34172           .padding_left(2)
34173           .padding_right(2)
34174           .padding_top(2)
34175           .padding_bottom(2)
34176           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc5);
34177       }
34178     }
34179   }
34180 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5,output_height_gt_1)34181   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5, output_height_gt_1) {
34182     for (size_t input_height = 3; input_height < 5; input_height++) {
34183       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34184         DWConv2DMicrokernelTester()
34185           .input_width(input_width)
34186           .input_height(input_height)
34187           .kernel_height(5)
34188           .kernel_width(5)
34189           .subsampling(2)
34190           .padding_left(2)
34191           .padding_right(2)
34192           .padding_top(2)
34193           .padding_bottom(2)
34194           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc5);
34195       }
34196     }
34197   }
34198 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5,padding_top_eq_1)34199   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_1X4_ACC5, padding_top_eq_1) {
34200     for (size_t input_height = 2; input_height < 8; input_height++) {
34201       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34202         DWConv2DMicrokernelTester()
34203           .input_width(input_width)
34204           .input_height(input_height)
34205           .kernel_height(5)
34206           .kernel_width(5)
34207           .subsampling(2)
34208           .padding_left(2)
34209           .padding_right(2)
34210           .padding_top(1)
34211           .padding_bottom(2)
34212           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_1x4_acc5);
34213       }
34214     }
34215   }
34216 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
34217 
34218 
34219 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4,output_width_eq_4)34220   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4, output_width_eq_4) {
34221     for (size_t input_width = 7; input_width < 9; input_width++) {
34222       DWConv2DMicrokernelTester()
34223         .input_width(input_width)
34224         .input_height(4)
34225         .kernel_height(5)
34226         .kernel_width(5)
34227         .subsampling(2)
34228         .padding_left(2)
34229         .padding_right(2)
34230         .padding_top(2)
34231         .padding_bottom(2)
34232         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4);
34233     }
34234   }
34235 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4,output_width_div_4)34236   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4, output_width_div_4) {
34237     for (size_t input_width = 16; input_width < 64; input_width += 8) {
34238       DWConv2DMicrokernelTester()
34239         .input_width(input_width)
34240         .input_height(4)
34241         .kernel_height(5)
34242         .kernel_width(5)
34243         .subsampling(2)
34244         .padding_left(2)
34245         .padding_right(2)
34246         .padding_top(2)
34247         .padding_bottom(2)
34248         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4);
34249     }
34250   }
34251 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4,output_width_lt_4)34252   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4, output_width_lt_4) {
34253     for (size_t input_width = 1; input_width < 7; input_width++) {
34254       DWConv2DMicrokernelTester()
34255         .input_width(8)
34256         .input_height(4)
34257         .kernel_height(5)
34258         .kernel_width(5)
34259         .subsampling(2)
34260         .padding_left(2)
34261         .padding_right(2)
34262         .padding_top(2)
34263         .padding_bottom(2)
34264         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4);
34265     }
34266   }
34267 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4,output_width_gt_4)34268   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4, output_width_gt_4) {
34269     for (size_t input_width = 9; input_width < 17; input_width++) {
34270       DWConv2DMicrokernelTester()
34271         .input_width(input_width)
34272         .input_height(4)
34273         .kernel_height(5)
34274         .kernel_width(5)
34275         .subsampling(2)
34276         .padding_left(2)
34277         .padding_right(2)
34278         .padding_top(2)
34279         .padding_bottom(2)
34280         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4);
34281     }
34282   }
34283 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4,output_height_eq_2)34284   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4, output_height_eq_2) {
34285     for (size_t input_height = 3; input_height < 5; input_height++) {
34286       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34287         DWConv2DMicrokernelTester()
34288           .input_width(input_width)
34289           .input_height(input_height)
34290           .kernel_height(5)
34291           .kernel_width(5)
34292           .subsampling(2)
34293           .padding_left(2)
34294           .padding_right(2)
34295           .padding_top(2)
34296           .padding_bottom(2)
34297           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4);
34298       }
34299     }
34300   }
34301 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4,output_height_div_2)34302   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4, output_height_div_2) {
34303     for (size_t input_height = 8; input_height < 32; input_height += 4) {
34304       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34305         DWConv2DMicrokernelTester()
34306           .input_width(input_width)
34307           .input_height(input_height)
34308           .kernel_height(5)
34309           .kernel_width(5)
34310           .subsampling(2)
34311           .padding_left(2)
34312           .padding_right(2)
34313           .padding_top(2)
34314           .padding_bottom(2)
34315           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4);
34316       }
34317     }
34318   }
34319 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4,output_height_lt_2)34320   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4, output_height_lt_2) {
34321     for (size_t input_height = 1; input_height < 3; input_height++) {
34322       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34323         DWConv2DMicrokernelTester()
34324           .input_width(input_width)
34325           .input_height(input_height)
34326           .kernel_height(5)
34327           .kernel_width(5)
34328           .subsampling(2)
34329           .padding_left(2)
34330           .padding_right(2)
34331           .padding_top(2)
34332           .padding_bottom(2)
34333           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4);
34334       }
34335     }
34336   }
34337 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4,output_height_gt_2)34338   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4, output_height_gt_2) {
34339     for (size_t input_height = 5; input_height < 9; input_height++) {
34340       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34341         DWConv2DMicrokernelTester()
34342           .input_width(input_width)
34343           .input_height(input_height)
34344           .kernel_height(5)
34345           .kernel_width(5)
34346           .subsampling(2)
34347           .padding_left(2)
34348           .padding_right(2)
34349           .padding_top(2)
34350           .padding_bottom(2)
34351           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4);
34352       }
34353     }
34354   }
34355 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4,padding_top_eq_1)34356   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4, padding_top_eq_1) {
34357     for (size_t input_height = 2; input_height < 14; input_height++) {
34358       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34359         DWConv2DMicrokernelTester()
34360           .input_width(input_width)
34361           .input_height(input_height)
34362           .kernel_height(5)
34363           .kernel_width(5)
34364           .subsampling(2)
34365           .padding_left(2)
34366           .padding_right(2)
34367           .padding_top(1)
34368           .padding_bottom(2)
34369           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4);
34370       }
34371     }
34372   }
34373 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
34374 
34375 
34376 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_eq_4)34377   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_eq_4) {
34378     for (size_t input_width = 7; input_width < 9; input_width++) {
34379       DWConv2DMicrokernelTester()
34380         .input_width(input_width)
34381         .input_height(4)
34382         .kernel_height(5)
34383         .kernel_width(5)
34384         .subsampling(2)
34385         .padding_left(2)
34386         .padding_right(2)
34387         .padding_top(2)
34388         .padding_bottom(2)
34389         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc2);
34390     }
34391   }
34392 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_div_4)34393   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_div_4) {
34394     for (size_t input_width = 16; input_width < 64; input_width += 8) {
34395       DWConv2DMicrokernelTester()
34396         .input_width(input_width)
34397         .input_height(4)
34398         .kernel_height(5)
34399         .kernel_width(5)
34400         .subsampling(2)
34401         .padding_left(2)
34402         .padding_right(2)
34403         .padding_top(2)
34404         .padding_bottom(2)
34405         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc2);
34406     }
34407   }
34408 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_lt_4)34409   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_lt_4) {
34410     for (size_t input_width = 1; input_width < 7; input_width++) {
34411       DWConv2DMicrokernelTester()
34412         .input_width(8)
34413         .input_height(4)
34414         .kernel_height(5)
34415         .kernel_width(5)
34416         .subsampling(2)
34417         .padding_left(2)
34418         .padding_right(2)
34419         .padding_top(2)
34420         .padding_bottom(2)
34421         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc2);
34422     }
34423   }
34424 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_width_gt_4)34425   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_width_gt_4) {
34426     for (size_t input_width = 9; input_width < 17; input_width++) {
34427       DWConv2DMicrokernelTester()
34428         .input_width(input_width)
34429         .input_height(4)
34430         .kernel_height(5)
34431         .kernel_width(5)
34432         .subsampling(2)
34433         .padding_left(2)
34434         .padding_right(2)
34435         .padding_top(2)
34436         .padding_bottom(2)
34437         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc2);
34438     }
34439   }
34440 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_eq_2)34441   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_eq_2) {
34442     for (size_t input_height = 3; input_height < 5; input_height++) {
34443       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34444         DWConv2DMicrokernelTester()
34445           .input_width(input_width)
34446           .input_height(input_height)
34447           .kernel_height(5)
34448           .kernel_width(5)
34449           .subsampling(2)
34450           .padding_left(2)
34451           .padding_right(2)
34452           .padding_top(2)
34453           .padding_bottom(2)
34454           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc2);
34455       }
34456     }
34457   }
34458 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_div_2)34459   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_div_2) {
34460     for (size_t input_height = 8; input_height < 32; input_height += 4) {
34461       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34462         DWConv2DMicrokernelTester()
34463           .input_width(input_width)
34464           .input_height(input_height)
34465           .kernel_height(5)
34466           .kernel_width(5)
34467           .subsampling(2)
34468           .padding_left(2)
34469           .padding_right(2)
34470           .padding_top(2)
34471           .padding_bottom(2)
34472           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc2);
34473       }
34474     }
34475   }
34476 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_lt_2)34477   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_lt_2) {
34478     for (size_t input_height = 1; input_height < 3; input_height++) {
34479       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34480         DWConv2DMicrokernelTester()
34481           .input_width(input_width)
34482           .input_height(input_height)
34483           .kernel_height(5)
34484           .kernel_width(5)
34485           .subsampling(2)
34486           .padding_left(2)
34487           .padding_right(2)
34488           .padding_top(2)
34489           .padding_bottom(2)
34490           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc2);
34491       }
34492     }
34493   }
34494 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,output_height_gt_2)34495   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, output_height_gt_2) {
34496     for (size_t input_height = 5; input_height < 9; input_height++) {
34497       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34498         DWConv2DMicrokernelTester()
34499           .input_width(input_width)
34500           .input_height(input_height)
34501           .kernel_height(5)
34502           .kernel_width(5)
34503           .subsampling(2)
34504           .padding_left(2)
34505           .padding_right(2)
34506           .padding_top(2)
34507           .padding_bottom(2)
34508           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc2);
34509       }
34510     }
34511   }
34512 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2,padding_top_eq_1)34513   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC2, padding_top_eq_1) {
34514     for (size_t input_height = 2; input_height < 14; input_height++) {
34515       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34516         DWConv2DMicrokernelTester()
34517           .input_width(input_width)
34518           .input_height(input_height)
34519           .kernel_height(5)
34520           .kernel_width(5)
34521           .subsampling(2)
34522           .padding_left(2)
34523           .padding_right(2)
34524           .padding_top(1)
34525           .padding_bottom(2)
34526           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc2);
34527       }
34528     }
34529   }
34530 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
34531 
34532 
34533 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_width_eq_4)34534   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_width_eq_4) {
34535     for (size_t input_width = 7; input_width < 9; input_width++) {
34536       DWConv2DMicrokernelTester()
34537         .input_width(input_width)
34538         .input_height(4)
34539         .kernel_height(5)
34540         .kernel_width(5)
34541         .subsampling(2)
34542         .padding_left(2)
34543         .padding_right(2)
34544         .padding_top(2)
34545         .padding_bottom(2)
34546         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc3);
34547     }
34548   }
34549 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_width_div_4)34550   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_width_div_4) {
34551     for (size_t input_width = 16; input_width < 64; input_width += 8) {
34552       DWConv2DMicrokernelTester()
34553         .input_width(input_width)
34554         .input_height(4)
34555         .kernel_height(5)
34556         .kernel_width(5)
34557         .subsampling(2)
34558         .padding_left(2)
34559         .padding_right(2)
34560         .padding_top(2)
34561         .padding_bottom(2)
34562         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc3);
34563     }
34564   }
34565 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_width_lt_4)34566   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_width_lt_4) {
34567     for (size_t input_width = 1; input_width < 7; input_width++) {
34568       DWConv2DMicrokernelTester()
34569         .input_width(8)
34570         .input_height(4)
34571         .kernel_height(5)
34572         .kernel_width(5)
34573         .subsampling(2)
34574         .padding_left(2)
34575         .padding_right(2)
34576         .padding_top(2)
34577         .padding_bottom(2)
34578         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc3);
34579     }
34580   }
34581 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_width_gt_4)34582   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_width_gt_4) {
34583     for (size_t input_width = 9; input_width < 17; input_width++) {
34584       DWConv2DMicrokernelTester()
34585         .input_width(input_width)
34586         .input_height(4)
34587         .kernel_height(5)
34588         .kernel_width(5)
34589         .subsampling(2)
34590         .padding_left(2)
34591         .padding_right(2)
34592         .padding_top(2)
34593         .padding_bottom(2)
34594         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc3);
34595     }
34596   }
34597 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_height_eq_2)34598   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_height_eq_2) {
34599     for (size_t input_height = 3; input_height < 5; input_height++) {
34600       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34601         DWConv2DMicrokernelTester()
34602           .input_width(input_width)
34603           .input_height(input_height)
34604           .kernel_height(5)
34605           .kernel_width(5)
34606           .subsampling(2)
34607           .padding_left(2)
34608           .padding_right(2)
34609           .padding_top(2)
34610           .padding_bottom(2)
34611           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc3);
34612       }
34613     }
34614   }
34615 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_height_div_2)34616   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_height_div_2) {
34617     for (size_t input_height = 8; input_height < 32; input_height += 4) {
34618       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34619         DWConv2DMicrokernelTester()
34620           .input_width(input_width)
34621           .input_height(input_height)
34622           .kernel_height(5)
34623           .kernel_width(5)
34624           .subsampling(2)
34625           .padding_left(2)
34626           .padding_right(2)
34627           .padding_top(2)
34628           .padding_bottom(2)
34629           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc3);
34630       }
34631     }
34632   }
34633 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_height_lt_2)34634   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_height_lt_2) {
34635     for (size_t input_height = 1; input_height < 3; input_height++) {
34636       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34637         DWConv2DMicrokernelTester()
34638           .input_width(input_width)
34639           .input_height(input_height)
34640           .kernel_height(5)
34641           .kernel_width(5)
34642           .subsampling(2)
34643           .padding_left(2)
34644           .padding_right(2)
34645           .padding_top(2)
34646           .padding_bottom(2)
34647           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc3);
34648       }
34649     }
34650   }
34651 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,output_height_gt_2)34652   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, output_height_gt_2) {
34653     for (size_t input_height = 5; input_height < 9; input_height++) {
34654       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34655         DWConv2DMicrokernelTester()
34656           .input_width(input_width)
34657           .input_height(input_height)
34658           .kernel_height(5)
34659           .kernel_width(5)
34660           .subsampling(2)
34661           .padding_left(2)
34662           .padding_right(2)
34663           .padding_top(2)
34664           .padding_bottom(2)
34665           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc3);
34666       }
34667     }
34668   }
34669 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3,padding_top_eq_1)34670   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_2X4_ACC3, padding_top_eq_1) {
34671     for (size_t input_height = 2; input_height < 14; input_height++) {
34672       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34673         DWConv2DMicrokernelTester()
34674           .input_width(input_width)
34675           .input_height(input_height)
34676           .kernel_height(5)
34677           .kernel_width(5)
34678           .subsampling(2)
34679           .padding_left(2)
34680           .padding_right(2)
34681           .padding_top(1)
34682           .padding_bottom(2)
34683           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_2x4_acc3);
34684       }
34685     }
34686   }
34687 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
34688 
34689 
34690 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4,output_width_eq_4)34691   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4, output_width_eq_4) {
34692     for (size_t input_width = 7; input_width < 9; input_width++) {
34693       DWConv2DMicrokernelTester()
34694         .input_width(input_width)
34695         .input_height(6)
34696         .kernel_height(5)
34697         .kernel_width(5)
34698         .subsampling(2)
34699         .padding_left(2)
34700         .padding_right(2)
34701         .padding_top(2)
34702         .padding_bottom(2)
34703         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4);
34704     }
34705   }
34706 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4,output_width_div_4)34707   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4, output_width_div_4) {
34708     for (size_t input_width = 16; input_width < 64; input_width += 8) {
34709       DWConv2DMicrokernelTester()
34710         .input_width(input_width)
34711         .input_height(6)
34712         .kernel_height(5)
34713         .kernel_width(5)
34714         .subsampling(2)
34715         .padding_left(2)
34716         .padding_right(2)
34717         .padding_top(2)
34718         .padding_bottom(2)
34719         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4);
34720     }
34721   }
34722 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4,output_width_lt_4)34723   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4, output_width_lt_4) {
34724     for (size_t input_width = 1; input_width < 7; input_width++) {
34725       DWConv2DMicrokernelTester()
34726         .input_width(8)
34727         .input_height(6)
34728         .kernel_height(5)
34729         .kernel_width(5)
34730         .subsampling(2)
34731         .padding_left(2)
34732         .padding_right(2)
34733         .padding_top(2)
34734         .padding_bottom(2)
34735         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4);
34736     }
34737   }
34738 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4,output_width_gt_4)34739   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4, output_width_gt_4) {
34740     for (size_t input_width = 9; input_width < 17; input_width++) {
34741       DWConv2DMicrokernelTester()
34742         .input_width(input_width)
34743         .input_height(6)
34744         .kernel_height(5)
34745         .kernel_width(5)
34746         .subsampling(2)
34747         .padding_left(2)
34748         .padding_right(2)
34749         .padding_top(2)
34750         .padding_bottom(2)
34751         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4);
34752     }
34753   }
34754 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4,output_height_eq_3)34755   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4, output_height_eq_3) {
34756     for (size_t input_height = 5; input_height < 7; input_height++) {
34757       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34758         DWConv2DMicrokernelTester()
34759           .input_width(input_width)
34760           .input_height(input_height)
34761           .kernel_height(5)
34762           .kernel_width(5)
34763           .subsampling(2)
34764           .padding_left(2)
34765           .padding_right(2)
34766           .padding_top(2)
34767           .padding_bottom(2)
34768           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4);
34769       }
34770     }
34771   }
34772 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4,output_height_div_3)34773   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4, output_height_div_3) {
34774     for (size_t input_height = 12; input_height < 48; input_height += 6) {
34775       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34776         DWConv2DMicrokernelTester()
34777           .input_width(input_width)
34778           .input_height(input_height)
34779           .kernel_height(5)
34780           .kernel_width(5)
34781           .subsampling(2)
34782           .padding_left(2)
34783           .padding_right(2)
34784           .padding_top(2)
34785           .padding_bottom(2)
34786           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4);
34787       }
34788     }
34789   }
34790 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4,output_height_lt_3)34791   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4, output_height_lt_3) {
34792     for (size_t input_height = 1; input_height < 5; input_height++) {
34793       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34794         DWConv2DMicrokernelTester()
34795           .input_width(input_width)
34796           .input_height(input_height)
34797           .kernel_height(5)
34798           .kernel_width(5)
34799           .subsampling(2)
34800           .padding_left(2)
34801           .padding_right(2)
34802           .padding_top(2)
34803           .padding_bottom(2)
34804           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4);
34805       }
34806     }
34807   }
34808 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4,output_height_gt_3)34809   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4, output_height_gt_3) {
34810     for (size_t input_height = 7; input_height < 13; input_height++) {
34811       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34812         DWConv2DMicrokernelTester()
34813           .input_width(input_width)
34814           .input_height(input_height)
34815           .kernel_height(5)
34816           .kernel_width(5)
34817           .subsampling(2)
34818           .padding_left(2)
34819           .padding_right(2)
34820           .padding_top(2)
34821           .padding_bottom(2)
34822           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4);
34823       }
34824     }
34825   }
34826 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4,padding_top_eq_1)34827   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4, padding_top_eq_1) {
34828     for (size_t input_height = 2; input_height < 20; input_height++) {
34829       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34830         DWConv2DMicrokernelTester()
34831           .input_width(input_width)
34832           .input_height(input_height)
34833           .kernel_height(5)
34834           .kernel_width(5)
34835           .subsampling(2)
34836           .padding_left(2)
34837           .padding_right(2)
34838           .padding_top(1)
34839           .padding_bottom(2)
34840           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4);
34841       }
34842     }
34843   }
34844 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
34845 
34846 
34847 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_width_eq_4)34848   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_width_eq_4) {
34849     for (size_t input_width = 7; input_width < 9; input_width++) {
34850       DWConv2DMicrokernelTester()
34851         .input_width(input_width)
34852         .input_height(6)
34853         .kernel_height(5)
34854         .kernel_width(5)
34855         .subsampling(2)
34856         .padding_left(2)
34857         .padding_right(2)
34858         .padding_top(2)
34859         .padding_bottom(2)
34860         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4_acc2);
34861     }
34862   }
34863 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_width_div_4)34864   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_width_div_4) {
34865     for (size_t input_width = 16; input_width < 64; input_width += 8) {
34866       DWConv2DMicrokernelTester()
34867         .input_width(input_width)
34868         .input_height(6)
34869         .kernel_height(5)
34870         .kernel_width(5)
34871         .subsampling(2)
34872         .padding_left(2)
34873         .padding_right(2)
34874         .padding_top(2)
34875         .padding_bottom(2)
34876         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4_acc2);
34877     }
34878   }
34879 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_width_lt_4)34880   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_width_lt_4) {
34881     for (size_t input_width = 1; input_width < 7; input_width++) {
34882       DWConv2DMicrokernelTester()
34883         .input_width(8)
34884         .input_height(6)
34885         .kernel_height(5)
34886         .kernel_width(5)
34887         .subsampling(2)
34888         .padding_left(2)
34889         .padding_right(2)
34890         .padding_top(2)
34891         .padding_bottom(2)
34892         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4_acc2);
34893     }
34894   }
34895 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_width_gt_4)34896   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_width_gt_4) {
34897     for (size_t input_width = 9; input_width < 17; input_width++) {
34898       DWConv2DMicrokernelTester()
34899         .input_width(input_width)
34900         .input_height(6)
34901         .kernel_height(5)
34902         .kernel_width(5)
34903         .subsampling(2)
34904         .padding_left(2)
34905         .padding_right(2)
34906         .padding_top(2)
34907         .padding_bottom(2)
34908         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4_acc2);
34909     }
34910   }
34911 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_height_eq_3)34912   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_height_eq_3) {
34913     for (size_t input_height = 5; input_height < 7; input_height++) {
34914       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34915         DWConv2DMicrokernelTester()
34916           .input_width(input_width)
34917           .input_height(input_height)
34918           .kernel_height(5)
34919           .kernel_width(5)
34920           .subsampling(2)
34921           .padding_left(2)
34922           .padding_right(2)
34923           .padding_top(2)
34924           .padding_bottom(2)
34925           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4_acc2);
34926       }
34927     }
34928   }
34929 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_height_div_3)34930   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_height_div_3) {
34931     for (size_t input_height = 12; input_height < 48; input_height += 6) {
34932       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34933         DWConv2DMicrokernelTester()
34934           .input_width(input_width)
34935           .input_height(input_height)
34936           .kernel_height(5)
34937           .kernel_width(5)
34938           .subsampling(2)
34939           .padding_left(2)
34940           .padding_right(2)
34941           .padding_top(2)
34942           .padding_bottom(2)
34943           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4_acc2);
34944       }
34945     }
34946   }
34947 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_height_lt_3)34948   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_height_lt_3) {
34949     for (size_t input_height = 1; input_height < 5; input_height++) {
34950       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34951         DWConv2DMicrokernelTester()
34952           .input_width(input_width)
34953           .input_height(input_height)
34954           .kernel_height(5)
34955           .kernel_width(5)
34956           .subsampling(2)
34957           .padding_left(2)
34958           .padding_right(2)
34959           .padding_top(2)
34960           .padding_bottom(2)
34961           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4_acc2);
34962       }
34963     }
34964   }
34965 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,output_height_gt_3)34966   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, output_height_gt_3) {
34967     for (size_t input_height = 7; input_height < 13; input_height++) {
34968       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34969         DWConv2DMicrokernelTester()
34970           .input_width(input_width)
34971           .input_height(input_height)
34972           .kernel_height(5)
34973           .kernel_width(5)
34974           .subsampling(2)
34975           .padding_left(2)
34976           .padding_right(2)
34977           .padding_top(2)
34978           .padding_bottom(2)
34979           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4_acc2);
34980       }
34981     }
34982   }
34983 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2,padding_top_eq_1)34984   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_LOADSPLAT_3X4_ACC2, padding_top_eq_1) {
34985     for (size_t input_height = 2; input_height < 20; input_height++) {
34986       for (size_t input_width = 1; input_width < 41; input_width += 7) {
34987         DWConv2DMicrokernelTester()
34988           .input_width(input_width)
34989           .input_height(input_height)
34990           .kernel_height(5)
34991           .kernel_width(5)
34992           .subsampling(2)
34993           .padding_left(2)
34994           .padding_right(2)
34995           .padding_top(1)
34996           .padding_bottom(2)
34997           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_loadsplat_3x4_acc2);
34998       }
34999     }
35000   }
35001 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
35002 
35003 
35004 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4,output_width_eq_4)35005   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4, output_width_eq_4) {
35006     for (size_t input_width = 7; input_width < 9; input_width++) {
35007       DWConv2DMicrokernelTester()
35008         .input_width(input_width)
35009         .input_height(2)
35010         .kernel_height(5)
35011         .kernel_width(5)
35012         .subsampling(2)
35013         .padding_left(2)
35014         .padding_right(2)
35015         .padding_top(2)
35016         .padding_bottom(2)
35017         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4);
35018     }
35019   }
35020 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4,output_width_div_4)35021   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4, output_width_div_4) {
35022     for (size_t input_width = 16; input_width < 64; input_width += 8) {
35023       DWConv2DMicrokernelTester()
35024         .input_width(input_width)
35025         .input_height(2)
35026         .kernel_height(5)
35027         .kernel_width(5)
35028         .subsampling(2)
35029         .padding_left(2)
35030         .padding_right(2)
35031         .padding_top(2)
35032         .padding_bottom(2)
35033         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4);
35034     }
35035   }
35036 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4,output_width_lt_4)35037   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4, output_width_lt_4) {
35038     for (size_t input_width = 1; input_width < 7; input_width++) {
35039       DWConv2DMicrokernelTester()
35040         .input_width(8)
35041         .input_height(2)
35042         .kernel_height(5)
35043         .kernel_width(5)
35044         .subsampling(2)
35045         .padding_left(2)
35046         .padding_right(2)
35047         .padding_top(2)
35048         .padding_bottom(2)
35049         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4);
35050     }
35051   }
35052 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4,output_width_gt_4)35053   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4, output_width_gt_4) {
35054     for (size_t input_width = 9; input_width < 17; input_width++) {
35055       DWConv2DMicrokernelTester()
35056         .input_width(input_width)
35057         .input_height(2)
35058         .kernel_height(5)
35059         .kernel_width(5)
35060         .subsampling(2)
35061         .padding_left(2)
35062         .padding_right(2)
35063         .padding_top(2)
35064         .padding_bottom(2)
35065         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4);
35066     }
35067   }
35068 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4,output_height_eq_1)35069   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4, output_height_eq_1) {
35070     for (size_t input_height = 1; input_height < 3; input_height++) {
35071       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35072         DWConv2DMicrokernelTester()
35073           .input_width(input_width)
35074           .input_height(input_height)
35075           .kernel_height(5)
35076           .kernel_width(5)
35077           .subsampling(2)
35078           .padding_left(2)
35079           .padding_right(2)
35080           .padding_top(2)
35081           .padding_bottom(2)
35082           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4);
35083       }
35084     }
35085   }
35086 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4,output_height_gt_1)35087   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4, output_height_gt_1) {
35088     for (size_t input_height = 3; input_height < 5; input_height++) {
35089       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35090         DWConv2DMicrokernelTester()
35091           .input_width(input_width)
35092           .input_height(input_height)
35093           .kernel_height(5)
35094           .kernel_width(5)
35095           .subsampling(2)
35096           .padding_left(2)
35097           .padding_right(2)
35098           .padding_top(2)
35099           .padding_bottom(2)
35100           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4);
35101       }
35102     }
35103   }
35104 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4,padding_top_eq_1)35105   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4, padding_top_eq_1) {
35106     for (size_t input_height = 2; input_height < 8; input_height++) {
35107       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35108         DWConv2DMicrokernelTester()
35109           .input_width(input_width)
35110           .input_height(input_height)
35111           .kernel_height(5)
35112           .kernel_width(5)
35113           .subsampling(2)
35114           .padding_left(2)
35115           .padding_right(2)
35116           .padding_top(1)
35117           .padding_bottom(2)
35118           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4);
35119       }
35120     }
35121   }
35122 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
35123 
35124 
35125 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_eq_4)35126   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_eq_4) {
35127     for (size_t input_width = 7; input_width < 9; input_width++) {
35128       DWConv2DMicrokernelTester()
35129         .input_width(input_width)
35130         .input_height(2)
35131         .kernel_height(5)
35132         .kernel_width(5)
35133         .subsampling(2)
35134         .padding_left(2)
35135         .padding_right(2)
35136         .padding_top(2)
35137         .padding_bottom(2)
35138         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc2);
35139     }
35140   }
35141 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_div_4)35142   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_div_4) {
35143     for (size_t input_width = 16; input_width < 64; input_width += 8) {
35144       DWConv2DMicrokernelTester()
35145         .input_width(input_width)
35146         .input_height(2)
35147         .kernel_height(5)
35148         .kernel_width(5)
35149         .subsampling(2)
35150         .padding_left(2)
35151         .padding_right(2)
35152         .padding_top(2)
35153         .padding_bottom(2)
35154         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc2);
35155     }
35156   }
35157 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_lt_4)35158   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_lt_4) {
35159     for (size_t input_width = 1; input_width < 7; input_width++) {
35160       DWConv2DMicrokernelTester()
35161         .input_width(8)
35162         .input_height(2)
35163         .kernel_height(5)
35164         .kernel_width(5)
35165         .subsampling(2)
35166         .padding_left(2)
35167         .padding_right(2)
35168         .padding_top(2)
35169         .padding_bottom(2)
35170         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc2);
35171     }
35172   }
35173 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2,output_width_gt_4)35174   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2, output_width_gt_4) {
35175     for (size_t input_width = 9; input_width < 17; input_width++) {
35176       DWConv2DMicrokernelTester()
35177         .input_width(input_width)
35178         .input_height(2)
35179         .kernel_height(5)
35180         .kernel_width(5)
35181         .subsampling(2)
35182         .padding_left(2)
35183         .padding_right(2)
35184         .padding_top(2)
35185         .padding_bottom(2)
35186         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc2);
35187     }
35188   }
35189 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2,output_height_eq_1)35190   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2, output_height_eq_1) {
35191     for (size_t input_height = 1; input_height < 3; input_height++) {
35192       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35193         DWConv2DMicrokernelTester()
35194           .input_width(input_width)
35195           .input_height(input_height)
35196           .kernel_height(5)
35197           .kernel_width(5)
35198           .subsampling(2)
35199           .padding_left(2)
35200           .padding_right(2)
35201           .padding_top(2)
35202           .padding_bottom(2)
35203           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc2);
35204       }
35205     }
35206   }
35207 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2,output_height_gt_1)35208   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2, output_height_gt_1) {
35209     for (size_t input_height = 3; input_height < 5; input_height++) {
35210       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35211         DWConv2DMicrokernelTester()
35212           .input_width(input_width)
35213           .input_height(input_height)
35214           .kernel_height(5)
35215           .kernel_width(5)
35216           .subsampling(2)
35217           .padding_left(2)
35218           .padding_right(2)
35219           .padding_top(2)
35220           .padding_bottom(2)
35221           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc2);
35222       }
35223     }
35224   }
35225 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2,padding_top_eq_1)35226   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC2, padding_top_eq_1) {
35227     for (size_t input_height = 2; input_height < 8; input_height++) {
35228       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35229         DWConv2DMicrokernelTester()
35230           .input_width(input_width)
35231           .input_height(input_height)
35232           .kernel_height(5)
35233           .kernel_width(5)
35234           .subsampling(2)
35235           .padding_left(2)
35236           .padding_right(2)
35237           .padding_top(1)
35238           .padding_bottom(2)
35239           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc2);
35240       }
35241     }
35242   }
35243 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
35244 
35245 
35246 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_eq_4)35247   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_eq_4) {
35248     for (size_t input_width = 7; input_width < 9; input_width++) {
35249       DWConv2DMicrokernelTester()
35250         .input_width(input_width)
35251         .input_height(2)
35252         .kernel_height(5)
35253         .kernel_width(5)
35254         .subsampling(2)
35255         .padding_left(2)
35256         .padding_right(2)
35257         .padding_top(2)
35258         .padding_bottom(2)
35259         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc3);
35260     }
35261   }
35262 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_div_4)35263   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_div_4) {
35264     for (size_t input_width = 16; input_width < 64; input_width += 8) {
35265       DWConv2DMicrokernelTester()
35266         .input_width(input_width)
35267         .input_height(2)
35268         .kernel_height(5)
35269         .kernel_width(5)
35270         .subsampling(2)
35271         .padding_left(2)
35272         .padding_right(2)
35273         .padding_top(2)
35274         .padding_bottom(2)
35275         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc3);
35276     }
35277   }
35278 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_lt_4)35279   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_lt_4) {
35280     for (size_t input_width = 1; input_width < 7; input_width++) {
35281       DWConv2DMicrokernelTester()
35282         .input_width(8)
35283         .input_height(2)
35284         .kernel_height(5)
35285         .kernel_width(5)
35286         .subsampling(2)
35287         .padding_left(2)
35288         .padding_right(2)
35289         .padding_top(2)
35290         .padding_bottom(2)
35291         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc3);
35292     }
35293   }
35294 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3,output_width_gt_4)35295   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3, output_width_gt_4) {
35296     for (size_t input_width = 9; input_width < 17; input_width++) {
35297       DWConv2DMicrokernelTester()
35298         .input_width(input_width)
35299         .input_height(2)
35300         .kernel_height(5)
35301         .kernel_width(5)
35302         .subsampling(2)
35303         .padding_left(2)
35304         .padding_right(2)
35305         .padding_top(2)
35306         .padding_bottom(2)
35307         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc3);
35308     }
35309   }
35310 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3,output_height_eq_1)35311   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3, output_height_eq_1) {
35312     for (size_t input_height = 1; input_height < 3; input_height++) {
35313       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35314         DWConv2DMicrokernelTester()
35315           .input_width(input_width)
35316           .input_height(input_height)
35317           .kernel_height(5)
35318           .kernel_width(5)
35319           .subsampling(2)
35320           .padding_left(2)
35321           .padding_right(2)
35322           .padding_top(2)
35323           .padding_bottom(2)
35324           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc3);
35325       }
35326     }
35327   }
35328 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3,output_height_gt_1)35329   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3, output_height_gt_1) {
35330     for (size_t input_height = 3; input_height < 5; input_height++) {
35331       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35332         DWConv2DMicrokernelTester()
35333           .input_width(input_width)
35334           .input_height(input_height)
35335           .kernel_height(5)
35336           .kernel_width(5)
35337           .subsampling(2)
35338           .padding_left(2)
35339           .padding_right(2)
35340           .padding_top(2)
35341           .padding_bottom(2)
35342           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc3);
35343       }
35344     }
35345   }
35346 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3,padding_top_eq_1)35347   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC3, padding_top_eq_1) {
35348     for (size_t input_height = 2; input_height < 8; input_height++) {
35349       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35350         DWConv2DMicrokernelTester()
35351           .input_width(input_width)
35352           .input_height(input_height)
35353           .kernel_height(5)
35354           .kernel_width(5)
35355           .subsampling(2)
35356           .padding_left(2)
35357           .padding_right(2)
35358           .padding_top(1)
35359           .padding_bottom(2)
35360           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc3);
35361       }
35362     }
35363   }
35364 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
35365 
35366 
35367 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_eq_4)35368   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_eq_4) {
35369     for (size_t input_width = 7; input_width < 9; input_width++) {
35370       DWConv2DMicrokernelTester()
35371         .input_width(input_width)
35372         .input_height(2)
35373         .kernel_height(5)
35374         .kernel_width(5)
35375         .subsampling(2)
35376         .padding_left(2)
35377         .padding_right(2)
35378         .padding_top(2)
35379         .padding_bottom(2)
35380         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc4);
35381     }
35382   }
35383 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_div_4)35384   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_div_4) {
35385     for (size_t input_width = 16; input_width < 64; input_width += 8) {
35386       DWConv2DMicrokernelTester()
35387         .input_width(input_width)
35388         .input_height(2)
35389         .kernel_height(5)
35390         .kernel_width(5)
35391         .subsampling(2)
35392         .padding_left(2)
35393         .padding_right(2)
35394         .padding_top(2)
35395         .padding_bottom(2)
35396         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc4);
35397     }
35398   }
35399 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_lt_4)35400   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_lt_4) {
35401     for (size_t input_width = 1; input_width < 7; input_width++) {
35402       DWConv2DMicrokernelTester()
35403         .input_width(8)
35404         .input_height(2)
35405         .kernel_height(5)
35406         .kernel_width(5)
35407         .subsampling(2)
35408         .padding_left(2)
35409         .padding_right(2)
35410         .padding_top(2)
35411         .padding_bottom(2)
35412         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc4);
35413     }
35414   }
35415 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4,output_width_gt_4)35416   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4, output_width_gt_4) {
35417     for (size_t input_width = 9; input_width < 17; input_width++) {
35418       DWConv2DMicrokernelTester()
35419         .input_width(input_width)
35420         .input_height(2)
35421         .kernel_height(5)
35422         .kernel_width(5)
35423         .subsampling(2)
35424         .padding_left(2)
35425         .padding_right(2)
35426         .padding_top(2)
35427         .padding_bottom(2)
35428         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc4);
35429     }
35430   }
35431 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4,output_height_eq_1)35432   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4, output_height_eq_1) {
35433     for (size_t input_height = 1; input_height < 3; input_height++) {
35434       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35435         DWConv2DMicrokernelTester()
35436           .input_width(input_width)
35437           .input_height(input_height)
35438           .kernel_height(5)
35439           .kernel_width(5)
35440           .subsampling(2)
35441           .padding_left(2)
35442           .padding_right(2)
35443           .padding_top(2)
35444           .padding_bottom(2)
35445           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc4);
35446       }
35447     }
35448   }
35449 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4,output_height_gt_1)35450   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4, output_height_gt_1) {
35451     for (size_t input_height = 3; input_height < 5; input_height++) {
35452       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35453         DWConv2DMicrokernelTester()
35454           .input_width(input_width)
35455           .input_height(input_height)
35456           .kernel_height(5)
35457           .kernel_width(5)
35458           .subsampling(2)
35459           .padding_left(2)
35460           .padding_right(2)
35461           .padding_top(2)
35462           .padding_bottom(2)
35463           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc4);
35464       }
35465     }
35466   }
35467 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4,padding_top_eq_1)35468   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC4, padding_top_eq_1) {
35469     for (size_t input_height = 2; input_height < 8; input_height++) {
35470       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35471         DWConv2DMicrokernelTester()
35472           .input_width(input_width)
35473           .input_height(input_height)
35474           .kernel_height(5)
35475           .kernel_width(5)
35476           .subsampling(2)
35477           .padding_left(2)
35478           .padding_right(2)
35479           .padding_top(1)
35480           .padding_bottom(2)
35481           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc4);
35482       }
35483     }
35484   }
35485 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
35486 
35487 
35488 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5,output_width_eq_4)35489   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5, output_width_eq_4) {
35490     for (size_t input_width = 7; input_width < 9; input_width++) {
35491       DWConv2DMicrokernelTester()
35492         .input_width(input_width)
35493         .input_height(2)
35494         .kernel_height(5)
35495         .kernel_width(5)
35496         .subsampling(2)
35497         .padding_left(2)
35498         .padding_right(2)
35499         .padding_top(2)
35500         .padding_bottom(2)
35501         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc5);
35502     }
35503   }
35504 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5,output_width_div_4)35505   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5, output_width_div_4) {
35506     for (size_t input_width = 16; input_width < 64; input_width += 8) {
35507       DWConv2DMicrokernelTester()
35508         .input_width(input_width)
35509         .input_height(2)
35510         .kernel_height(5)
35511         .kernel_width(5)
35512         .subsampling(2)
35513         .padding_left(2)
35514         .padding_right(2)
35515         .padding_top(2)
35516         .padding_bottom(2)
35517         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc5);
35518     }
35519   }
35520 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5,output_width_lt_4)35521   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5, output_width_lt_4) {
35522     for (size_t input_width = 1; input_width < 7; input_width++) {
35523       DWConv2DMicrokernelTester()
35524         .input_width(8)
35525         .input_height(2)
35526         .kernel_height(5)
35527         .kernel_width(5)
35528         .subsampling(2)
35529         .padding_left(2)
35530         .padding_right(2)
35531         .padding_top(2)
35532         .padding_bottom(2)
35533         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc5);
35534     }
35535   }
35536 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5,output_width_gt_4)35537   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5, output_width_gt_4) {
35538     for (size_t input_width = 9; input_width < 17; input_width++) {
35539       DWConv2DMicrokernelTester()
35540         .input_width(input_width)
35541         .input_height(2)
35542         .kernel_height(5)
35543         .kernel_width(5)
35544         .subsampling(2)
35545         .padding_left(2)
35546         .padding_right(2)
35547         .padding_top(2)
35548         .padding_bottom(2)
35549         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc5);
35550     }
35551   }
35552 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5,output_height_eq_1)35553   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5, output_height_eq_1) {
35554     for (size_t input_height = 1; input_height < 3; input_height++) {
35555       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35556         DWConv2DMicrokernelTester()
35557           .input_width(input_width)
35558           .input_height(input_height)
35559           .kernel_height(5)
35560           .kernel_width(5)
35561           .subsampling(2)
35562           .padding_left(2)
35563           .padding_right(2)
35564           .padding_top(2)
35565           .padding_bottom(2)
35566           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc5);
35567       }
35568     }
35569   }
35570 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5,output_height_gt_1)35571   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5, output_height_gt_1) {
35572     for (size_t input_height = 3; input_height < 5; input_height++) {
35573       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35574         DWConv2DMicrokernelTester()
35575           .input_width(input_width)
35576           .input_height(input_height)
35577           .kernel_height(5)
35578           .kernel_width(5)
35579           .subsampling(2)
35580           .padding_left(2)
35581           .padding_right(2)
35582           .padding_top(2)
35583           .padding_bottom(2)
35584           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc5);
35585       }
35586     }
35587   }
35588 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5,padding_top_eq_1)35589   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_1X4_ACC5, padding_top_eq_1) {
35590     for (size_t input_height = 2; input_height < 8; input_height++) {
35591       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35592         DWConv2DMicrokernelTester()
35593           .input_width(input_width)
35594           .input_height(input_height)
35595           .kernel_height(5)
35596           .kernel_width(5)
35597           .subsampling(2)
35598           .padding_left(2)
35599           .padding_right(2)
35600           .padding_top(1)
35601           .padding_bottom(2)
35602           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_1x4_acc5);
35603       }
35604     }
35605   }
35606 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
35607 
35608 
35609 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4,output_width_eq_4)35610   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4, output_width_eq_4) {
35611     for (size_t input_width = 7; input_width < 9; input_width++) {
35612       DWConv2DMicrokernelTester()
35613         .input_width(input_width)
35614         .input_height(4)
35615         .kernel_height(5)
35616         .kernel_width(5)
35617         .subsampling(2)
35618         .padding_left(2)
35619         .padding_right(2)
35620         .padding_top(2)
35621         .padding_bottom(2)
35622         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4);
35623     }
35624   }
35625 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4,output_width_div_4)35626   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4, output_width_div_4) {
35627     for (size_t input_width = 16; input_width < 64; input_width += 8) {
35628       DWConv2DMicrokernelTester()
35629         .input_width(input_width)
35630         .input_height(4)
35631         .kernel_height(5)
35632         .kernel_width(5)
35633         .subsampling(2)
35634         .padding_left(2)
35635         .padding_right(2)
35636         .padding_top(2)
35637         .padding_bottom(2)
35638         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4);
35639     }
35640   }
35641 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4,output_width_lt_4)35642   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4, output_width_lt_4) {
35643     for (size_t input_width = 1; input_width < 7; input_width++) {
35644       DWConv2DMicrokernelTester()
35645         .input_width(8)
35646         .input_height(4)
35647         .kernel_height(5)
35648         .kernel_width(5)
35649         .subsampling(2)
35650         .padding_left(2)
35651         .padding_right(2)
35652         .padding_top(2)
35653         .padding_bottom(2)
35654         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4);
35655     }
35656   }
35657 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4,output_width_gt_4)35658   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4, output_width_gt_4) {
35659     for (size_t input_width = 9; input_width < 17; input_width++) {
35660       DWConv2DMicrokernelTester()
35661         .input_width(input_width)
35662         .input_height(4)
35663         .kernel_height(5)
35664         .kernel_width(5)
35665         .subsampling(2)
35666         .padding_left(2)
35667         .padding_right(2)
35668         .padding_top(2)
35669         .padding_bottom(2)
35670         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4);
35671     }
35672   }
35673 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4,output_height_eq_2)35674   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4, output_height_eq_2) {
35675     for (size_t input_height = 3; input_height < 5; input_height++) {
35676       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35677         DWConv2DMicrokernelTester()
35678           .input_width(input_width)
35679           .input_height(input_height)
35680           .kernel_height(5)
35681           .kernel_width(5)
35682           .subsampling(2)
35683           .padding_left(2)
35684           .padding_right(2)
35685           .padding_top(2)
35686           .padding_bottom(2)
35687           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4);
35688       }
35689     }
35690   }
35691 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4,output_height_div_2)35692   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4, output_height_div_2) {
35693     for (size_t input_height = 8; input_height < 32; input_height += 4) {
35694       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35695         DWConv2DMicrokernelTester()
35696           .input_width(input_width)
35697           .input_height(input_height)
35698           .kernel_height(5)
35699           .kernel_width(5)
35700           .subsampling(2)
35701           .padding_left(2)
35702           .padding_right(2)
35703           .padding_top(2)
35704           .padding_bottom(2)
35705           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4);
35706       }
35707     }
35708   }
35709 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4,output_height_lt_2)35710   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4, output_height_lt_2) {
35711     for (size_t input_height = 1; input_height < 3; input_height++) {
35712       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35713         DWConv2DMicrokernelTester()
35714           .input_width(input_width)
35715           .input_height(input_height)
35716           .kernel_height(5)
35717           .kernel_width(5)
35718           .subsampling(2)
35719           .padding_left(2)
35720           .padding_right(2)
35721           .padding_top(2)
35722           .padding_bottom(2)
35723           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4);
35724       }
35725     }
35726   }
35727 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4,output_height_gt_2)35728   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4, output_height_gt_2) {
35729     for (size_t input_height = 5; input_height < 9; input_height++) {
35730       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35731         DWConv2DMicrokernelTester()
35732           .input_width(input_width)
35733           .input_height(input_height)
35734           .kernel_height(5)
35735           .kernel_width(5)
35736           .subsampling(2)
35737           .padding_left(2)
35738           .padding_right(2)
35739           .padding_top(2)
35740           .padding_bottom(2)
35741           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4);
35742       }
35743     }
35744   }
35745 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4,padding_top_eq_1)35746   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4, padding_top_eq_1) {
35747     for (size_t input_height = 2; input_height < 14; input_height++) {
35748       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35749         DWConv2DMicrokernelTester()
35750           .input_width(input_width)
35751           .input_height(input_height)
35752           .kernel_height(5)
35753           .kernel_width(5)
35754           .subsampling(2)
35755           .padding_left(2)
35756           .padding_right(2)
35757           .padding_top(1)
35758           .padding_bottom(2)
35759           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4);
35760       }
35761     }
35762   }
35763 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
35764 
35765 
35766 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_eq_4)35767   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_eq_4) {
35768     for (size_t input_width = 7; input_width < 9; input_width++) {
35769       DWConv2DMicrokernelTester()
35770         .input_width(input_width)
35771         .input_height(4)
35772         .kernel_height(5)
35773         .kernel_width(5)
35774         .subsampling(2)
35775         .padding_left(2)
35776         .padding_right(2)
35777         .padding_top(2)
35778         .padding_bottom(2)
35779         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc2);
35780     }
35781   }
35782 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_div_4)35783   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_div_4) {
35784     for (size_t input_width = 16; input_width < 64; input_width += 8) {
35785       DWConv2DMicrokernelTester()
35786         .input_width(input_width)
35787         .input_height(4)
35788         .kernel_height(5)
35789         .kernel_width(5)
35790         .subsampling(2)
35791         .padding_left(2)
35792         .padding_right(2)
35793         .padding_top(2)
35794         .padding_bottom(2)
35795         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc2);
35796     }
35797   }
35798 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_lt_4)35799   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_lt_4) {
35800     for (size_t input_width = 1; input_width < 7; input_width++) {
35801       DWConv2DMicrokernelTester()
35802         .input_width(8)
35803         .input_height(4)
35804         .kernel_height(5)
35805         .kernel_width(5)
35806         .subsampling(2)
35807         .padding_left(2)
35808         .padding_right(2)
35809         .padding_top(2)
35810         .padding_bottom(2)
35811         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc2);
35812     }
35813   }
35814 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_width_gt_4)35815   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_width_gt_4) {
35816     for (size_t input_width = 9; input_width < 17; input_width++) {
35817       DWConv2DMicrokernelTester()
35818         .input_width(input_width)
35819         .input_height(4)
35820         .kernel_height(5)
35821         .kernel_width(5)
35822         .subsampling(2)
35823         .padding_left(2)
35824         .padding_right(2)
35825         .padding_top(2)
35826         .padding_bottom(2)
35827         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc2);
35828     }
35829   }
35830 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_eq_2)35831   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_eq_2) {
35832     for (size_t input_height = 3; input_height < 5; input_height++) {
35833       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35834         DWConv2DMicrokernelTester()
35835           .input_width(input_width)
35836           .input_height(input_height)
35837           .kernel_height(5)
35838           .kernel_width(5)
35839           .subsampling(2)
35840           .padding_left(2)
35841           .padding_right(2)
35842           .padding_top(2)
35843           .padding_bottom(2)
35844           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc2);
35845       }
35846     }
35847   }
35848 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_div_2)35849   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_div_2) {
35850     for (size_t input_height = 8; input_height < 32; input_height += 4) {
35851       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35852         DWConv2DMicrokernelTester()
35853           .input_width(input_width)
35854           .input_height(input_height)
35855           .kernel_height(5)
35856           .kernel_width(5)
35857           .subsampling(2)
35858           .padding_left(2)
35859           .padding_right(2)
35860           .padding_top(2)
35861           .padding_bottom(2)
35862           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc2);
35863       }
35864     }
35865   }
35866 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_lt_2)35867   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_lt_2) {
35868     for (size_t input_height = 1; input_height < 3; input_height++) {
35869       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35870         DWConv2DMicrokernelTester()
35871           .input_width(input_width)
35872           .input_height(input_height)
35873           .kernel_height(5)
35874           .kernel_width(5)
35875           .subsampling(2)
35876           .padding_left(2)
35877           .padding_right(2)
35878           .padding_top(2)
35879           .padding_bottom(2)
35880           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc2);
35881       }
35882     }
35883   }
35884 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2,output_height_gt_2)35885   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2, output_height_gt_2) {
35886     for (size_t input_height = 5; input_height < 9; input_height++) {
35887       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35888         DWConv2DMicrokernelTester()
35889           .input_width(input_width)
35890           .input_height(input_height)
35891           .kernel_height(5)
35892           .kernel_width(5)
35893           .subsampling(2)
35894           .padding_left(2)
35895           .padding_right(2)
35896           .padding_top(2)
35897           .padding_bottom(2)
35898           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc2);
35899       }
35900     }
35901   }
35902 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2,padding_top_eq_1)35903   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC2, padding_top_eq_1) {
35904     for (size_t input_height = 2; input_height < 14; input_height++) {
35905       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35906         DWConv2DMicrokernelTester()
35907           .input_width(input_width)
35908           .input_height(input_height)
35909           .kernel_height(5)
35910           .kernel_width(5)
35911           .subsampling(2)
35912           .padding_left(2)
35913           .padding_right(2)
35914           .padding_top(1)
35915           .padding_bottom(2)
35916           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc2);
35917       }
35918     }
35919   }
35920 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
35921 
35922 
35923 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_width_eq_4)35924   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_width_eq_4) {
35925     for (size_t input_width = 7; input_width < 9; input_width++) {
35926       DWConv2DMicrokernelTester()
35927         .input_width(input_width)
35928         .input_height(4)
35929         .kernel_height(5)
35930         .kernel_width(5)
35931         .subsampling(2)
35932         .padding_left(2)
35933         .padding_right(2)
35934         .padding_top(2)
35935         .padding_bottom(2)
35936         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc3);
35937     }
35938   }
35939 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_width_div_4)35940   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_width_div_4) {
35941     for (size_t input_width = 16; input_width < 64; input_width += 8) {
35942       DWConv2DMicrokernelTester()
35943         .input_width(input_width)
35944         .input_height(4)
35945         .kernel_height(5)
35946         .kernel_width(5)
35947         .subsampling(2)
35948         .padding_left(2)
35949         .padding_right(2)
35950         .padding_top(2)
35951         .padding_bottom(2)
35952         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc3);
35953     }
35954   }
35955 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_width_lt_4)35956   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_width_lt_4) {
35957     for (size_t input_width = 1; input_width < 7; input_width++) {
35958       DWConv2DMicrokernelTester()
35959         .input_width(8)
35960         .input_height(4)
35961         .kernel_height(5)
35962         .kernel_width(5)
35963         .subsampling(2)
35964         .padding_left(2)
35965         .padding_right(2)
35966         .padding_top(2)
35967         .padding_bottom(2)
35968         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc3);
35969     }
35970   }
35971 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_width_gt_4)35972   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_width_gt_4) {
35973     for (size_t input_width = 9; input_width < 17; input_width++) {
35974       DWConv2DMicrokernelTester()
35975         .input_width(input_width)
35976         .input_height(4)
35977         .kernel_height(5)
35978         .kernel_width(5)
35979         .subsampling(2)
35980         .padding_left(2)
35981         .padding_right(2)
35982         .padding_top(2)
35983         .padding_bottom(2)
35984         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc3);
35985     }
35986   }
35987 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_height_eq_2)35988   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_height_eq_2) {
35989     for (size_t input_height = 3; input_height < 5; input_height++) {
35990       for (size_t input_width = 1; input_width < 41; input_width += 7) {
35991         DWConv2DMicrokernelTester()
35992           .input_width(input_width)
35993           .input_height(input_height)
35994           .kernel_height(5)
35995           .kernel_width(5)
35996           .subsampling(2)
35997           .padding_left(2)
35998           .padding_right(2)
35999           .padding_top(2)
36000           .padding_bottom(2)
36001           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc3);
36002       }
36003     }
36004   }
36005 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_height_div_2)36006   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_height_div_2) {
36007     for (size_t input_height = 8; input_height < 32; input_height += 4) {
36008       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36009         DWConv2DMicrokernelTester()
36010           .input_width(input_width)
36011           .input_height(input_height)
36012           .kernel_height(5)
36013           .kernel_width(5)
36014           .subsampling(2)
36015           .padding_left(2)
36016           .padding_right(2)
36017           .padding_top(2)
36018           .padding_bottom(2)
36019           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc3);
36020       }
36021     }
36022   }
36023 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_height_lt_2)36024   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_height_lt_2) {
36025     for (size_t input_height = 1; input_height < 3; input_height++) {
36026       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36027         DWConv2DMicrokernelTester()
36028           .input_width(input_width)
36029           .input_height(input_height)
36030           .kernel_height(5)
36031           .kernel_width(5)
36032           .subsampling(2)
36033           .padding_left(2)
36034           .padding_right(2)
36035           .padding_top(2)
36036           .padding_bottom(2)
36037           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc3);
36038       }
36039     }
36040   }
36041 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3,output_height_gt_2)36042   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3, output_height_gt_2) {
36043     for (size_t input_height = 5; input_height < 9; input_height++) {
36044       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36045         DWConv2DMicrokernelTester()
36046           .input_width(input_width)
36047           .input_height(input_height)
36048           .kernel_height(5)
36049           .kernel_width(5)
36050           .subsampling(2)
36051           .padding_left(2)
36052           .padding_right(2)
36053           .padding_top(2)
36054           .padding_bottom(2)
36055           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc3);
36056       }
36057     }
36058   }
36059 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3,padding_top_eq_1)36060   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_2X4_ACC3, padding_top_eq_1) {
36061     for (size_t input_height = 2; input_height < 14; input_height++) {
36062       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36063         DWConv2DMicrokernelTester()
36064           .input_width(input_width)
36065           .input_height(input_height)
36066           .kernel_height(5)
36067           .kernel_width(5)
36068           .subsampling(2)
36069           .padding_left(2)
36070           .padding_right(2)
36071           .padding_top(1)
36072           .padding_bottom(2)
36073           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_2x4_acc3);
36074       }
36075     }
36076   }
36077 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
36078 
36079 
36080 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4,output_width_eq_4)36081   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4, output_width_eq_4) {
36082     for (size_t input_width = 7; input_width < 9; input_width++) {
36083       DWConv2DMicrokernelTester()
36084         .input_width(input_width)
36085         .input_height(6)
36086         .kernel_height(5)
36087         .kernel_width(5)
36088         .subsampling(2)
36089         .padding_left(2)
36090         .padding_right(2)
36091         .padding_top(2)
36092         .padding_bottom(2)
36093         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4);
36094     }
36095   }
36096 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4,output_width_div_4)36097   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4, output_width_div_4) {
36098     for (size_t input_width = 16; input_width < 64; input_width += 8) {
36099       DWConv2DMicrokernelTester()
36100         .input_width(input_width)
36101         .input_height(6)
36102         .kernel_height(5)
36103         .kernel_width(5)
36104         .subsampling(2)
36105         .padding_left(2)
36106         .padding_right(2)
36107         .padding_top(2)
36108         .padding_bottom(2)
36109         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4);
36110     }
36111   }
36112 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4,output_width_lt_4)36113   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4, output_width_lt_4) {
36114     for (size_t input_width = 1; input_width < 7; input_width++) {
36115       DWConv2DMicrokernelTester()
36116         .input_width(8)
36117         .input_height(6)
36118         .kernel_height(5)
36119         .kernel_width(5)
36120         .subsampling(2)
36121         .padding_left(2)
36122         .padding_right(2)
36123         .padding_top(2)
36124         .padding_bottom(2)
36125         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4);
36126     }
36127   }
36128 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4,output_width_gt_4)36129   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4, output_width_gt_4) {
36130     for (size_t input_width = 9; input_width < 17; input_width++) {
36131       DWConv2DMicrokernelTester()
36132         .input_width(input_width)
36133         .input_height(6)
36134         .kernel_height(5)
36135         .kernel_width(5)
36136         .subsampling(2)
36137         .padding_left(2)
36138         .padding_right(2)
36139         .padding_top(2)
36140         .padding_bottom(2)
36141         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4);
36142     }
36143   }
36144 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4,output_height_eq_3)36145   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4, output_height_eq_3) {
36146     for (size_t input_height = 5; input_height < 7; input_height++) {
36147       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36148         DWConv2DMicrokernelTester()
36149           .input_width(input_width)
36150           .input_height(input_height)
36151           .kernel_height(5)
36152           .kernel_width(5)
36153           .subsampling(2)
36154           .padding_left(2)
36155           .padding_right(2)
36156           .padding_top(2)
36157           .padding_bottom(2)
36158           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4);
36159       }
36160     }
36161   }
36162 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4,output_height_div_3)36163   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4, output_height_div_3) {
36164     for (size_t input_height = 12; input_height < 48; input_height += 6) {
36165       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36166         DWConv2DMicrokernelTester()
36167           .input_width(input_width)
36168           .input_height(input_height)
36169           .kernel_height(5)
36170           .kernel_width(5)
36171           .subsampling(2)
36172           .padding_left(2)
36173           .padding_right(2)
36174           .padding_top(2)
36175           .padding_bottom(2)
36176           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4);
36177       }
36178     }
36179   }
36180 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4,output_height_lt_3)36181   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4, output_height_lt_3) {
36182     for (size_t input_height = 1; input_height < 5; input_height++) {
36183       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36184         DWConv2DMicrokernelTester()
36185           .input_width(input_width)
36186           .input_height(input_height)
36187           .kernel_height(5)
36188           .kernel_width(5)
36189           .subsampling(2)
36190           .padding_left(2)
36191           .padding_right(2)
36192           .padding_top(2)
36193           .padding_bottom(2)
36194           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4);
36195       }
36196     }
36197   }
36198 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4,output_height_gt_3)36199   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4, output_height_gt_3) {
36200     for (size_t input_height = 7; input_height < 13; input_height++) {
36201       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36202         DWConv2DMicrokernelTester()
36203           .input_width(input_width)
36204           .input_height(input_height)
36205           .kernel_height(5)
36206           .kernel_width(5)
36207           .subsampling(2)
36208           .padding_left(2)
36209           .padding_right(2)
36210           .padding_top(2)
36211           .padding_bottom(2)
36212           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4);
36213       }
36214     }
36215   }
36216 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4,padding_top_eq_1)36217   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4, padding_top_eq_1) {
36218     for (size_t input_height = 2; input_height < 20; input_height++) {
36219       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36220         DWConv2DMicrokernelTester()
36221           .input_width(input_width)
36222           .input_height(input_height)
36223           .kernel_height(5)
36224           .kernel_width(5)
36225           .subsampling(2)
36226           .padding_left(2)
36227           .padding_right(2)
36228           .padding_top(1)
36229           .padding_bottom(2)
36230           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4);
36231       }
36232     }
36233   }
36234 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
36235 
36236 
36237 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_width_eq_4)36238   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_width_eq_4) {
36239     for (size_t input_width = 7; input_width < 9; input_width++) {
36240       DWConv2DMicrokernelTester()
36241         .input_width(input_width)
36242         .input_height(6)
36243         .kernel_height(5)
36244         .kernel_width(5)
36245         .subsampling(2)
36246         .padding_left(2)
36247         .padding_right(2)
36248         .padding_top(2)
36249         .padding_bottom(2)
36250         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4_acc2);
36251     }
36252   }
36253 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_width_div_4)36254   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_width_div_4) {
36255     for (size_t input_width = 16; input_width < 64; input_width += 8) {
36256       DWConv2DMicrokernelTester()
36257         .input_width(input_width)
36258         .input_height(6)
36259         .kernel_height(5)
36260         .kernel_width(5)
36261         .subsampling(2)
36262         .padding_left(2)
36263         .padding_right(2)
36264         .padding_top(2)
36265         .padding_bottom(2)
36266         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4_acc2);
36267     }
36268   }
36269 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_width_lt_4)36270   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_width_lt_4) {
36271     for (size_t input_width = 1; input_width < 7; input_width++) {
36272       DWConv2DMicrokernelTester()
36273         .input_width(8)
36274         .input_height(6)
36275         .kernel_height(5)
36276         .kernel_width(5)
36277         .subsampling(2)
36278         .padding_left(2)
36279         .padding_right(2)
36280         .padding_top(2)
36281         .padding_bottom(2)
36282         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4_acc2);
36283     }
36284   }
36285 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_width_gt_4)36286   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_width_gt_4) {
36287     for (size_t input_width = 9; input_width < 17; input_width++) {
36288       DWConv2DMicrokernelTester()
36289         .input_width(input_width)
36290         .input_height(6)
36291         .kernel_height(5)
36292         .kernel_width(5)
36293         .subsampling(2)
36294         .padding_left(2)
36295         .padding_right(2)
36296         .padding_top(2)
36297         .padding_bottom(2)
36298         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4_acc2);
36299     }
36300   }
36301 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_height_eq_3)36302   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_height_eq_3) {
36303     for (size_t input_height = 5; input_height < 7; input_height++) {
36304       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36305         DWConv2DMicrokernelTester()
36306           .input_width(input_width)
36307           .input_height(input_height)
36308           .kernel_height(5)
36309           .kernel_width(5)
36310           .subsampling(2)
36311           .padding_left(2)
36312           .padding_right(2)
36313           .padding_top(2)
36314           .padding_bottom(2)
36315           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4_acc2);
36316       }
36317     }
36318   }
36319 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_height_div_3)36320   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_height_div_3) {
36321     for (size_t input_height = 12; input_height < 48; input_height += 6) {
36322       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36323         DWConv2DMicrokernelTester()
36324           .input_width(input_width)
36325           .input_height(input_height)
36326           .kernel_height(5)
36327           .kernel_width(5)
36328           .subsampling(2)
36329           .padding_left(2)
36330           .padding_right(2)
36331           .padding_top(2)
36332           .padding_bottom(2)
36333           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4_acc2);
36334       }
36335     }
36336   }
36337 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_height_lt_3)36338   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_height_lt_3) {
36339     for (size_t input_height = 1; input_height < 5; input_height++) {
36340       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36341         DWConv2DMicrokernelTester()
36342           .input_width(input_width)
36343           .input_height(input_height)
36344           .kernel_height(5)
36345           .kernel_width(5)
36346           .subsampling(2)
36347           .padding_left(2)
36348           .padding_right(2)
36349           .padding_top(2)
36350           .padding_bottom(2)
36351           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4_acc2);
36352       }
36353     }
36354   }
36355 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2,output_height_gt_3)36356   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2, output_height_gt_3) {
36357     for (size_t input_height = 7; input_height < 13; input_height++) {
36358       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36359         DWConv2DMicrokernelTester()
36360           .input_width(input_width)
36361           .input_height(input_height)
36362           .kernel_height(5)
36363           .kernel_width(5)
36364           .subsampling(2)
36365           .padding_left(2)
36366           .padding_right(2)
36367           .padding_top(2)
36368           .padding_bottom(2)
36369           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4_acc2);
36370       }
36371     }
36372   }
36373 
TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2,padding_top_eq_1)36374   TEST(F32_DWCONV2D_CHW_5X5S2P2__WASMSIMD_X86_SPLAT_3X4_ACC2, padding_top_eq_1) {
36375     for (size_t input_height = 2; input_height < 20; input_height++) {
36376       for (size_t input_width = 1; input_width < 41; input_width += 7) {
36377         DWConv2DMicrokernelTester()
36378           .input_width(input_width)
36379           .input_height(input_height)
36380           .kernel_height(5)
36381           .kernel_width(5)
36382           .subsampling(2)
36383           .padding_left(2)
36384           .padding_right(2)
36385           .padding_top(1)
36386           .padding_bottom(2)
36387           .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__wasmsimd_x86_splat_3x4_acc2);
36388       }
36389     }
36390   }
36391 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
36392 
36393 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1,output_width_eq_1)36394 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1, output_width_eq_1) {
36395   DWConv2DMicrokernelTester()
36396     .input_width(1)
36397     .input_height(1)
36398     .kernel_height(3)
36399     .kernel_width(3)
36400     .subsampling(1)
36401     .padding_left(1)
36402     .padding_right(1)
36403     .padding_top(1)
36404     .padding_bottom(1)
36405     .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
36406 }
36407 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1,output_width_gt_1)36408 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1, output_width_gt_1) {
36409   for (size_t input_width = 2; input_width < 6; input_width++) {
36410     DWConv2DMicrokernelTester()
36411       .input_width(input_width)
36412       .input_height(1)
36413       .kernel_height(3)
36414       .kernel_width(3)
36415       .subsampling(1)
36416       .padding_left(1)
36417       .padding_right(1)
36418       .padding_top(1)
36419       .padding_bottom(1)
36420       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
36421   }
36422 }
36423 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1,output_height_gt_1)36424 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1, output_height_gt_1) {
36425   for (size_t input_height = 2; input_height < 6; input_height++) {
36426     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36427       DWConv2DMicrokernelTester()
36428         .input_width(input_width)
36429         .input_height(input_height)
36430         .kernel_height(3)
36431         .kernel_width(3)
36432         .subsampling(1)
36433         .padding_left(1)
36434         .padding_right(1)
36435         .padding_top(1)
36436         .padding_bottom(1)
36437         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
36438     }
36439   }
36440 }
36441 
36442 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC2,output_width_eq_1)36443 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC2, output_width_eq_1) {
36444   DWConv2DMicrokernelTester()
36445     .input_width(1)
36446     .input_height(1)
36447     .kernel_height(3)
36448     .kernel_width(3)
36449     .subsampling(1)
36450     .padding_left(1)
36451     .padding_right(1)
36452     .padding_top(1)
36453     .padding_bottom(1)
36454     .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
36455 }
36456 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC2,output_width_gt_1)36457 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC2, output_width_gt_1) {
36458   for (size_t input_width = 2; input_width < 6; input_width++) {
36459     DWConv2DMicrokernelTester()
36460       .input_width(input_width)
36461       .input_height(1)
36462       .kernel_height(3)
36463       .kernel_width(3)
36464       .subsampling(1)
36465       .padding_left(1)
36466       .padding_right(1)
36467       .padding_top(1)
36468       .padding_bottom(1)
36469       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
36470   }
36471 }
36472 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC2,output_height_gt_1)36473 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC2, output_height_gt_1) {
36474   for (size_t input_height = 2; input_height < 6; input_height++) {
36475     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36476       DWConv2DMicrokernelTester()
36477         .input_width(input_width)
36478         .input_height(input_height)
36479         .kernel_height(3)
36480         .kernel_width(3)
36481         .subsampling(1)
36482         .padding_left(1)
36483         .padding_right(1)
36484         .padding_top(1)
36485         .padding_bottom(1)
36486         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
36487     }
36488   }
36489 }
36490 
36491 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC3,output_width_eq_1)36492 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC3, output_width_eq_1) {
36493   DWConv2DMicrokernelTester()
36494     .input_width(1)
36495     .input_height(1)
36496     .kernel_height(3)
36497     .kernel_width(3)
36498     .subsampling(1)
36499     .padding_left(1)
36500     .padding_right(1)
36501     .padding_top(1)
36502     .padding_bottom(1)
36503     .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
36504 }
36505 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC3,output_width_gt_1)36506 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC3, output_width_gt_1) {
36507   for (size_t input_width = 2; input_width < 6; input_width++) {
36508     DWConv2DMicrokernelTester()
36509       .input_width(input_width)
36510       .input_height(1)
36511       .kernel_height(3)
36512       .kernel_width(3)
36513       .subsampling(1)
36514       .padding_left(1)
36515       .padding_right(1)
36516       .padding_top(1)
36517       .padding_bottom(1)
36518       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
36519   }
36520 }
36521 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC3,output_height_gt_1)36522 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC3, output_height_gt_1) {
36523   for (size_t input_height = 2; input_height < 6; input_height++) {
36524     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36525       DWConv2DMicrokernelTester()
36526         .input_width(input_width)
36527         .input_height(input_height)
36528         .kernel_height(3)
36529         .kernel_width(3)
36530         .subsampling(1)
36531         .padding_left(1)
36532         .padding_right(1)
36533         .padding_top(1)
36534         .padding_bottom(1)
36535         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
36536     }
36537   }
36538 }
36539 
36540 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC4,output_width_eq_1)36541 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC4, output_width_eq_1) {
36542   DWConv2DMicrokernelTester()
36543     .input_width(1)
36544     .input_height(1)
36545     .kernel_height(3)
36546     .kernel_width(3)
36547     .subsampling(1)
36548     .padding_left(1)
36549     .padding_right(1)
36550     .padding_top(1)
36551     .padding_bottom(1)
36552     .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
36553 }
36554 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC4,output_width_gt_1)36555 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC4, output_width_gt_1) {
36556   for (size_t input_width = 2; input_width < 6; input_width++) {
36557     DWConv2DMicrokernelTester()
36558       .input_width(input_width)
36559       .input_height(1)
36560       .kernel_height(3)
36561       .kernel_width(3)
36562       .subsampling(1)
36563       .padding_left(1)
36564       .padding_right(1)
36565       .padding_top(1)
36566       .padding_bottom(1)
36567       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
36568   }
36569 }
36570 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC4,output_height_gt_1)36571 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_1X1_ACC4, output_height_gt_1) {
36572   for (size_t input_height = 2; input_height < 6; input_height++) {
36573     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36574       DWConv2DMicrokernelTester()
36575         .input_width(input_width)
36576         .input_height(input_height)
36577         .kernel_height(3)
36578         .kernel_width(3)
36579         .subsampling(1)
36580         .padding_left(1)
36581         .padding_right(1)
36582         .padding_top(1)
36583         .padding_bottom(1)
36584         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
36585     }
36586   }
36587 }
36588 
36589 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1,output_width_eq_1)36590 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1, output_width_eq_1) {
36591   DWConv2DMicrokernelTester()
36592     .input_width(1)
36593     .input_height(2)
36594     .kernel_height(3)
36595     .kernel_width(3)
36596     .subsampling(1)
36597     .padding_left(1)
36598     .padding_right(1)
36599     .padding_top(1)
36600     .padding_bottom(1)
36601     .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
36602 }
36603 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1,output_width_gt_1)36604 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1, output_width_gt_1) {
36605   for (size_t input_width = 2; input_width < 6; input_width++) {
36606     DWConv2DMicrokernelTester()
36607       .input_width(input_width)
36608       .input_height(2)
36609       .kernel_height(3)
36610       .kernel_width(3)
36611       .subsampling(1)
36612       .padding_left(1)
36613       .padding_right(1)
36614       .padding_top(1)
36615       .padding_bottom(1)
36616       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
36617   }
36618 }
36619 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1,output_height_div_2)36620 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1, output_height_div_2) {
36621   for (size_t input_height = 4; input_height < 16; input_height += 2) {
36622     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36623       DWConv2DMicrokernelTester()
36624         .input_width(input_width)
36625         .input_height(input_height)
36626         .kernel_height(3)
36627         .kernel_width(3)
36628         .subsampling(1)
36629         .padding_left(1)
36630         .padding_right(1)
36631         .padding_top(1)
36632         .padding_bottom(1)
36633         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
36634     }
36635   }
36636 }
36637 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1,output_height_lt_2)36638 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1, output_height_lt_2) {
36639   for (size_t input_height = 1; input_height < 2; input_height++) {
36640     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36641       DWConv2DMicrokernelTester()
36642         .input_width(input_width)
36643         .input_height(input_height)
36644         .kernel_height(3)
36645         .kernel_width(3)
36646         .subsampling(1)
36647         .padding_left(1)
36648         .padding_right(1)
36649         .padding_top(1)
36650         .padding_bottom(1)
36651         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
36652     }
36653   }
36654 }
36655 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1,output_height_gt_2)36656 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1, output_height_gt_2) {
36657   for (size_t input_height = 3; input_height < 11; input_height++) {
36658     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36659       DWConv2DMicrokernelTester()
36660         .input_width(input_width)
36661         .input_height(input_height)
36662         .kernel_height(3)
36663         .kernel_width(3)
36664         .subsampling(1)
36665         .padding_left(1)
36666         .padding_right(1)
36667         .padding_top(1)
36668         .padding_bottom(1)
36669         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
36670     }
36671   }
36672 }
36673 
36674 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1_ACC2,output_width_eq_1)36675 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1_ACC2, output_width_eq_1) {
36676   DWConv2DMicrokernelTester()
36677     .input_width(1)
36678     .input_height(2)
36679     .kernel_height(3)
36680     .kernel_width(3)
36681     .subsampling(1)
36682     .padding_left(1)
36683     .padding_right(1)
36684     .padding_top(1)
36685     .padding_bottom(1)
36686     .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
36687 }
36688 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1_ACC2,output_width_gt_1)36689 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1_ACC2, output_width_gt_1) {
36690   for (size_t input_width = 2; input_width < 6; input_width++) {
36691     DWConv2DMicrokernelTester()
36692       .input_width(input_width)
36693       .input_height(2)
36694       .kernel_height(3)
36695       .kernel_width(3)
36696       .subsampling(1)
36697       .padding_left(1)
36698       .padding_right(1)
36699       .padding_top(1)
36700       .padding_bottom(1)
36701       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
36702   }
36703 }
36704 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1_ACC2,output_height_div_2)36705 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1_ACC2, output_height_div_2) {
36706   for (size_t input_height = 4; input_height < 16; input_height += 2) {
36707     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36708       DWConv2DMicrokernelTester()
36709         .input_width(input_width)
36710         .input_height(input_height)
36711         .kernel_height(3)
36712         .kernel_width(3)
36713         .subsampling(1)
36714         .padding_left(1)
36715         .padding_right(1)
36716         .padding_top(1)
36717         .padding_bottom(1)
36718         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
36719     }
36720   }
36721 }
36722 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1_ACC2,output_height_lt_2)36723 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1_ACC2, output_height_lt_2) {
36724   for (size_t input_height = 1; input_height < 2; input_height++) {
36725     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36726       DWConv2DMicrokernelTester()
36727         .input_width(input_width)
36728         .input_height(input_height)
36729         .kernel_height(3)
36730         .kernel_width(3)
36731         .subsampling(1)
36732         .padding_left(1)
36733         .padding_right(1)
36734         .padding_top(1)
36735         .padding_bottom(1)
36736         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
36737     }
36738   }
36739 }
36740 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1_ACC2,output_height_gt_2)36741 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_2X1_ACC2, output_height_gt_2) {
36742   for (size_t input_height = 3; input_height < 11; input_height++) {
36743     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36744       DWConv2DMicrokernelTester()
36745         .input_width(input_width)
36746         .input_height(input_height)
36747         .kernel_height(3)
36748         .kernel_width(3)
36749         .subsampling(1)
36750         .padding_left(1)
36751         .padding_right(1)
36752         .padding_top(1)
36753         .padding_bottom(1)
36754         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
36755     }
36756   }
36757 }
36758 
36759 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_3X1,output_width_eq_1)36760 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_3X1, output_width_eq_1) {
36761   DWConv2DMicrokernelTester()
36762     .input_width(1)
36763     .input_height(3)
36764     .kernel_height(3)
36765     .kernel_width(3)
36766     .subsampling(1)
36767     .padding_left(1)
36768     .padding_right(1)
36769     .padding_top(1)
36770     .padding_bottom(1)
36771     .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
36772 }
36773 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_3X1,output_width_gt_1)36774 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_3X1, output_width_gt_1) {
36775   for (size_t input_width = 2; input_width < 6; input_width++) {
36776     DWConv2DMicrokernelTester()
36777       .input_width(input_width)
36778       .input_height(3)
36779       .kernel_height(3)
36780       .kernel_width(3)
36781       .subsampling(1)
36782       .padding_left(1)
36783       .padding_right(1)
36784       .padding_top(1)
36785       .padding_bottom(1)
36786       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
36787   }
36788 }
36789 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_3X1,output_height_div_3)36790 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_3X1, output_height_div_3) {
36791   for (size_t input_height = 6; input_height < 24; input_height += 3) {
36792     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36793       DWConv2DMicrokernelTester()
36794         .input_width(input_width)
36795         .input_height(input_height)
36796         .kernel_height(3)
36797         .kernel_width(3)
36798         .subsampling(1)
36799         .padding_left(1)
36800         .padding_right(1)
36801         .padding_top(1)
36802         .padding_bottom(1)
36803         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
36804     }
36805   }
36806 }
36807 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_3X1,output_height_lt_3)36808 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_3X1, output_height_lt_3) {
36809   for (size_t input_height = 1; input_height < 3; input_height++) {
36810     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36811       DWConv2DMicrokernelTester()
36812         .input_width(input_width)
36813         .input_height(input_height)
36814         .kernel_height(3)
36815         .kernel_width(3)
36816         .subsampling(1)
36817         .padding_left(1)
36818         .padding_right(1)
36819         .padding_top(1)
36820         .padding_bottom(1)
36821         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
36822     }
36823   }
36824 }
36825 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_3X1,output_height_gt_3)36826 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_3X1, output_height_gt_3) {
36827   for (size_t input_height = 4; input_height < 16; input_height++) {
36828     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36829       DWConv2DMicrokernelTester()
36830         .input_width(input_width)
36831         .input_height(input_height)
36832         .kernel_height(3)
36833         .kernel_width(3)
36834         .subsampling(1)
36835         .padding_left(1)
36836         .padding_right(1)
36837         .padding_top(1)
36838         .padding_bottom(1)
36839         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
36840     }
36841   }
36842 }
36843 
36844 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_4X1,output_width_eq_1)36845 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_4X1, output_width_eq_1) {
36846   DWConv2DMicrokernelTester()
36847     .input_width(1)
36848     .input_height(4)
36849     .kernel_height(3)
36850     .kernel_width(3)
36851     .subsampling(1)
36852     .padding_left(1)
36853     .padding_right(1)
36854     .padding_top(1)
36855     .padding_bottom(1)
36856     .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_4x1, DWConv2DMicrokernelTester::Variant::Scalar);
36857 }
36858 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_4X1,output_width_gt_1)36859 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_4X1, output_width_gt_1) {
36860   for (size_t input_width = 2; input_width < 6; input_width++) {
36861     DWConv2DMicrokernelTester()
36862       .input_width(input_width)
36863       .input_height(4)
36864       .kernel_height(3)
36865       .kernel_width(3)
36866       .subsampling(1)
36867       .padding_left(1)
36868       .padding_right(1)
36869       .padding_top(1)
36870       .padding_bottom(1)
36871       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_4x1, DWConv2DMicrokernelTester::Variant::Scalar);
36872   }
36873 }
36874 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_4X1,output_height_div_4)36875 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_4X1, output_height_div_4) {
36876   for (size_t input_height = 8; input_height < 32; input_height += 4) {
36877     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36878       DWConv2DMicrokernelTester()
36879         .input_width(input_width)
36880         .input_height(input_height)
36881         .kernel_height(3)
36882         .kernel_width(3)
36883         .subsampling(1)
36884         .padding_left(1)
36885         .padding_right(1)
36886         .padding_top(1)
36887         .padding_bottom(1)
36888         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_4x1, DWConv2DMicrokernelTester::Variant::Scalar);
36889     }
36890   }
36891 }
36892 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_4X1,output_height_lt_4)36893 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_4X1, output_height_lt_4) {
36894   for (size_t input_height = 1; input_height < 4; input_height++) {
36895     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36896       DWConv2DMicrokernelTester()
36897         .input_width(input_width)
36898         .input_height(input_height)
36899         .kernel_height(3)
36900         .kernel_width(3)
36901         .subsampling(1)
36902         .padding_left(1)
36903         .padding_right(1)
36904         .padding_top(1)
36905         .padding_bottom(1)
36906         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_4x1, DWConv2DMicrokernelTester::Variant::Scalar);
36907     }
36908   }
36909 }
36910 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_4X1,output_height_gt_4)36911 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_4X1, output_height_gt_4) {
36912   for (size_t input_height = 5; input_height < 21; input_height++) {
36913     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36914       DWConv2DMicrokernelTester()
36915         .input_width(input_width)
36916         .input_height(input_height)
36917         .kernel_height(3)
36918         .kernel_width(3)
36919         .subsampling(1)
36920         .padding_left(1)
36921         .padding_right(1)
36922         .padding_top(1)
36923         .padding_bottom(1)
36924         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_4x1, DWConv2DMicrokernelTester::Variant::Scalar);
36925     }
36926   }
36927 }
36928 
36929 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_5X1,output_width_eq_1)36930 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_5X1, output_width_eq_1) {
36931   DWConv2DMicrokernelTester()
36932     .input_width(1)
36933     .input_height(5)
36934     .kernel_height(3)
36935     .kernel_width(3)
36936     .subsampling(1)
36937     .padding_left(1)
36938     .padding_right(1)
36939     .padding_top(1)
36940     .padding_bottom(1)
36941     .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_5x1, DWConv2DMicrokernelTester::Variant::Scalar);
36942 }
36943 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_5X1,output_width_gt_1)36944 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_5X1, output_width_gt_1) {
36945   for (size_t input_width = 2; input_width < 6; input_width++) {
36946     DWConv2DMicrokernelTester()
36947       .input_width(input_width)
36948       .input_height(5)
36949       .kernel_height(3)
36950       .kernel_width(3)
36951       .subsampling(1)
36952       .padding_left(1)
36953       .padding_right(1)
36954       .padding_top(1)
36955       .padding_bottom(1)
36956       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_5x1, DWConv2DMicrokernelTester::Variant::Scalar);
36957   }
36958 }
36959 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_5X1,output_height_div_5)36960 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_5X1, output_height_div_5) {
36961   for (size_t input_height = 10; input_height < 40; input_height += 5) {
36962     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36963       DWConv2DMicrokernelTester()
36964         .input_width(input_width)
36965         .input_height(input_height)
36966         .kernel_height(3)
36967         .kernel_width(3)
36968         .subsampling(1)
36969         .padding_left(1)
36970         .padding_right(1)
36971         .padding_top(1)
36972         .padding_bottom(1)
36973         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_5x1, DWConv2DMicrokernelTester::Variant::Scalar);
36974     }
36975   }
36976 }
36977 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_5X1,output_height_lt_5)36978 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_5X1, output_height_lt_5) {
36979   for (size_t input_height = 1; input_height < 5; input_height++) {
36980     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36981       DWConv2DMicrokernelTester()
36982         .input_width(input_width)
36983         .input_height(input_height)
36984         .kernel_height(3)
36985         .kernel_width(3)
36986         .subsampling(1)
36987         .padding_left(1)
36988         .padding_right(1)
36989         .padding_top(1)
36990         .padding_bottom(1)
36991         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_5x1, DWConv2DMicrokernelTester::Variant::Scalar);
36992     }
36993   }
36994 }
36995 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_5X1,output_height_gt_5)36996 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_5X1, output_height_gt_5) {
36997   for (size_t input_height = 6; input_height < 26; input_height++) {
36998     for (size_t input_width = 1; input_width < 6; input_width += 1) {
36999       DWConv2DMicrokernelTester()
37000         .input_width(input_width)
37001         .input_height(input_height)
37002         .kernel_height(3)
37003         .kernel_width(3)
37004         .subsampling(1)
37005         .padding_left(1)
37006         .padding_right(1)
37007         .padding_top(1)
37008         .padding_bottom(1)
37009         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_5x1, DWConv2DMicrokernelTester::Variant::Scalar);
37010     }
37011   }
37012 }
37013 
37014 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_6X1,output_width_eq_1)37015 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_6X1, output_width_eq_1) {
37016   DWConv2DMicrokernelTester()
37017     .input_width(1)
37018     .input_height(6)
37019     .kernel_height(3)
37020     .kernel_width(3)
37021     .subsampling(1)
37022     .padding_left(1)
37023     .padding_right(1)
37024     .padding_top(1)
37025     .padding_bottom(1)
37026     .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_6x1, DWConv2DMicrokernelTester::Variant::Scalar);
37027 }
37028 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_6X1,output_width_gt_1)37029 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_6X1, output_width_gt_1) {
37030   for (size_t input_width = 2; input_width < 6; input_width++) {
37031     DWConv2DMicrokernelTester()
37032       .input_width(input_width)
37033       .input_height(6)
37034       .kernel_height(3)
37035       .kernel_width(3)
37036       .subsampling(1)
37037       .padding_left(1)
37038       .padding_right(1)
37039       .padding_top(1)
37040       .padding_bottom(1)
37041       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_6x1, DWConv2DMicrokernelTester::Variant::Scalar);
37042   }
37043 }
37044 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_6X1,output_height_div_6)37045 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_6X1, output_height_div_6) {
37046   for (size_t input_height = 12; input_height < 48; input_height += 6) {
37047     for (size_t input_width = 1; input_width < 6; input_width += 1) {
37048       DWConv2DMicrokernelTester()
37049         .input_width(input_width)
37050         .input_height(input_height)
37051         .kernel_height(3)
37052         .kernel_width(3)
37053         .subsampling(1)
37054         .padding_left(1)
37055         .padding_right(1)
37056         .padding_top(1)
37057         .padding_bottom(1)
37058         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_6x1, DWConv2DMicrokernelTester::Variant::Scalar);
37059     }
37060   }
37061 }
37062 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_6X1,output_height_lt_6)37063 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_6X1, output_height_lt_6) {
37064   for (size_t input_height = 1; input_height < 6; input_height++) {
37065     for (size_t input_width = 1; input_width < 6; input_width += 1) {
37066       DWConv2DMicrokernelTester()
37067         .input_width(input_width)
37068         .input_height(input_height)
37069         .kernel_height(3)
37070         .kernel_width(3)
37071         .subsampling(1)
37072         .padding_left(1)
37073         .padding_right(1)
37074         .padding_top(1)
37075         .padding_bottom(1)
37076         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_6x1, DWConv2DMicrokernelTester::Variant::Scalar);
37077     }
37078   }
37079 }
37080 
TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_6X1,output_height_gt_6)37081 TEST(F32_DWCONV2D_CHW_3X3P1__SCALAR_6X1, output_height_gt_6) {
37082   for (size_t input_height = 7; input_height < 31; input_height++) {
37083     for (size_t input_width = 1; input_width < 6; input_width += 1) {
37084       DWConv2DMicrokernelTester()
37085         .input_width(input_width)
37086         .input_height(input_height)
37087         .kernel_height(3)
37088         .kernel_width(3)
37089         .subsampling(1)
37090         .padding_left(1)
37091         .padding_right(1)
37092         .padding_top(1)
37093         .padding_bottom(1)
37094         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3p1__scalar_6x1, DWConv2DMicrokernelTester::Variant::Scalar);
37095     }
37096   }
37097 }
37098 
37099 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1,output_width_eq_1)37100 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1, output_width_eq_1) {
37101   for (size_t input_width = 1; input_width < 3; input_width++) {
37102     DWConv2DMicrokernelTester()
37103       .input_width(input_width)
37104       .input_height(2)
37105       .kernel_height(3)
37106       .kernel_width(3)
37107       .subsampling(2)
37108       .padding_left(1)
37109       .padding_right(1)
37110       .padding_top(1)
37111       .padding_bottom(1)
37112       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
37113   }
37114 }
37115 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1,output_width_gt_1)37116 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1, output_width_gt_1) {
37117   for (size_t input_width = 3; input_width < 11; input_width++) {
37118     DWConv2DMicrokernelTester()
37119       .input_width(input_width)
37120       .input_height(2)
37121       .kernel_height(3)
37122       .kernel_width(3)
37123       .subsampling(2)
37124       .padding_left(1)
37125       .padding_right(1)
37126       .padding_top(1)
37127       .padding_bottom(1)
37128       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
37129   }
37130 }
37131 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1,output_height_eq_1)37132 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1, output_height_eq_1) {
37133   for (size_t input_height = 1; input_height < 3; input_height++) {
37134     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37135       DWConv2DMicrokernelTester()
37136         .input_width(input_width)
37137         .input_height(input_height)
37138         .kernel_height(3)
37139         .kernel_width(3)
37140         .subsampling(2)
37141         .padding_left(1)
37142         .padding_right(1)
37143         .padding_top(1)
37144         .padding_bottom(1)
37145         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
37146     }
37147   }
37148 }
37149 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1,output_height_gt_1)37150 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1, output_height_gt_1) {
37151   for (size_t input_height = 3; input_height < 11; input_height++) {
37152     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37153       DWConv2DMicrokernelTester()
37154         .input_width(input_width)
37155         .input_height(input_height)
37156         .kernel_height(3)
37157         .kernel_width(3)
37158         .subsampling(2)
37159         .padding_left(1)
37160         .padding_right(1)
37161         .padding_top(1)
37162         .padding_bottom(1)
37163         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
37164     }
37165   }
37166 }
37167 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1,padding_top_eq_1)37168 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1, padding_top_eq_1) {
37169   for (size_t input_height = 2; input_height < 8; input_height++) {
37170     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37171       DWConv2DMicrokernelTester()
37172         .input_width(input_width)
37173         .input_height(input_height)
37174         .kernel_height(3)
37175         .kernel_width(3)
37176         .subsampling(2)
37177         .padding_left(1)
37178         .padding_right(1)
37179         .padding_top(0)
37180         .padding_bottom(1)
37181         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
37182     }
37183   }
37184 }
37185 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC2,output_width_eq_1)37186 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC2, output_width_eq_1) {
37187   for (size_t input_width = 1; input_width < 3; input_width++) {
37188     DWConv2DMicrokernelTester()
37189       .input_width(input_width)
37190       .input_height(2)
37191       .kernel_height(3)
37192       .kernel_width(3)
37193       .subsampling(2)
37194       .padding_left(1)
37195       .padding_right(1)
37196       .padding_top(1)
37197       .padding_bottom(1)
37198       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37199   }
37200 }
37201 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC2,output_width_gt_1)37202 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC2, output_width_gt_1) {
37203   for (size_t input_width = 3; input_width < 11; input_width++) {
37204     DWConv2DMicrokernelTester()
37205       .input_width(input_width)
37206       .input_height(2)
37207       .kernel_height(3)
37208       .kernel_width(3)
37209       .subsampling(2)
37210       .padding_left(1)
37211       .padding_right(1)
37212       .padding_top(1)
37213       .padding_bottom(1)
37214       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37215   }
37216 }
37217 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC2,output_height_eq_1)37218 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC2, output_height_eq_1) {
37219   for (size_t input_height = 1; input_height < 3; input_height++) {
37220     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37221       DWConv2DMicrokernelTester()
37222         .input_width(input_width)
37223         .input_height(input_height)
37224         .kernel_height(3)
37225         .kernel_width(3)
37226         .subsampling(2)
37227         .padding_left(1)
37228         .padding_right(1)
37229         .padding_top(1)
37230         .padding_bottom(1)
37231         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37232     }
37233   }
37234 }
37235 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC2,output_height_gt_1)37236 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC2, output_height_gt_1) {
37237   for (size_t input_height = 3; input_height < 11; input_height++) {
37238     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37239       DWConv2DMicrokernelTester()
37240         .input_width(input_width)
37241         .input_height(input_height)
37242         .kernel_height(3)
37243         .kernel_width(3)
37244         .subsampling(2)
37245         .padding_left(1)
37246         .padding_right(1)
37247         .padding_top(1)
37248         .padding_bottom(1)
37249         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37250     }
37251   }
37252 }
37253 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC2,padding_top_eq_1)37254 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC2, padding_top_eq_1) {
37255   for (size_t input_height = 2; input_height < 8; input_height++) {
37256     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37257       DWConv2DMicrokernelTester()
37258         .input_width(input_width)
37259         .input_height(input_height)
37260         .kernel_height(3)
37261         .kernel_width(3)
37262         .subsampling(2)
37263         .padding_left(1)
37264         .padding_right(1)
37265         .padding_top(0)
37266         .padding_bottom(1)
37267         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37268     }
37269   }
37270 }
37271 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC3,output_width_eq_1)37272 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC3, output_width_eq_1) {
37273   for (size_t input_width = 1; input_width < 3; input_width++) {
37274     DWConv2DMicrokernelTester()
37275       .input_width(input_width)
37276       .input_height(2)
37277       .kernel_height(3)
37278       .kernel_width(3)
37279       .subsampling(2)
37280       .padding_left(1)
37281       .padding_right(1)
37282       .padding_top(1)
37283       .padding_bottom(1)
37284       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
37285   }
37286 }
37287 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC3,output_width_gt_1)37288 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC3, output_width_gt_1) {
37289   for (size_t input_width = 3; input_width < 11; input_width++) {
37290     DWConv2DMicrokernelTester()
37291       .input_width(input_width)
37292       .input_height(2)
37293       .kernel_height(3)
37294       .kernel_width(3)
37295       .subsampling(2)
37296       .padding_left(1)
37297       .padding_right(1)
37298       .padding_top(1)
37299       .padding_bottom(1)
37300       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
37301   }
37302 }
37303 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC3,output_height_eq_1)37304 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC3, output_height_eq_1) {
37305   for (size_t input_height = 1; input_height < 3; input_height++) {
37306     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37307       DWConv2DMicrokernelTester()
37308         .input_width(input_width)
37309         .input_height(input_height)
37310         .kernel_height(3)
37311         .kernel_width(3)
37312         .subsampling(2)
37313         .padding_left(1)
37314         .padding_right(1)
37315         .padding_top(1)
37316         .padding_bottom(1)
37317         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
37318     }
37319   }
37320 }
37321 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC3,output_height_gt_1)37322 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC3, output_height_gt_1) {
37323   for (size_t input_height = 3; input_height < 11; input_height++) {
37324     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37325       DWConv2DMicrokernelTester()
37326         .input_width(input_width)
37327         .input_height(input_height)
37328         .kernel_height(3)
37329         .kernel_width(3)
37330         .subsampling(2)
37331         .padding_left(1)
37332         .padding_right(1)
37333         .padding_top(1)
37334         .padding_bottom(1)
37335         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
37336     }
37337   }
37338 }
37339 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC3,padding_top_eq_1)37340 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC3, padding_top_eq_1) {
37341   for (size_t input_height = 2; input_height < 8; input_height++) {
37342     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37343       DWConv2DMicrokernelTester()
37344         .input_width(input_width)
37345         .input_height(input_height)
37346         .kernel_height(3)
37347         .kernel_width(3)
37348         .subsampling(2)
37349         .padding_left(1)
37350         .padding_right(1)
37351         .padding_top(0)
37352         .padding_bottom(1)
37353         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
37354     }
37355   }
37356 }
37357 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC4,output_width_eq_1)37358 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC4, output_width_eq_1) {
37359   for (size_t input_width = 1; input_width < 3; input_width++) {
37360     DWConv2DMicrokernelTester()
37361       .input_width(input_width)
37362       .input_height(2)
37363       .kernel_height(3)
37364       .kernel_width(3)
37365       .subsampling(2)
37366       .padding_left(1)
37367       .padding_right(1)
37368       .padding_top(1)
37369       .padding_bottom(1)
37370       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
37371   }
37372 }
37373 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC4,output_width_gt_1)37374 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC4, output_width_gt_1) {
37375   for (size_t input_width = 3; input_width < 11; input_width++) {
37376     DWConv2DMicrokernelTester()
37377       .input_width(input_width)
37378       .input_height(2)
37379       .kernel_height(3)
37380       .kernel_width(3)
37381       .subsampling(2)
37382       .padding_left(1)
37383       .padding_right(1)
37384       .padding_top(1)
37385       .padding_bottom(1)
37386       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
37387   }
37388 }
37389 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC4,output_height_eq_1)37390 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC4, output_height_eq_1) {
37391   for (size_t input_height = 1; input_height < 3; input_height++) {
37392     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37393       DWConv2DMicrokernelTester()
37394         .input_width(input_width)
37395         .input_height(input_height)
37396         .kernel_height(3)
37397         .kernel_width(3)
37398         .subsampling(2)
37399         .padding_left(1)
37400         .padding_right(1)
37401         .padding_top(1)
37402         .padding_bottom(1)
37403         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
37404     }
37405   }
37406 }
37407 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC4,output_height_gt_1)37408 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC4, output_height_gt_1) {
37409   for (size_t input_height = 3; input_height < 11; input_height++) {
37410     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37411       DWConv2DMicrokernelTester()
37412         .input_width(input_width)
37413         .input_height(input_height)
37414         .kernel_height(3)
37415         .kernel_width(3)
37416         .subsampling(2)
37417         .padding_left(1)
37418         .padding_right(1)
37419         .padding_top(1)
37420         .padding_bottom(1)
37421         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
37422     }
37423   }
37424 }
37425 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC4,padding_top_eq_1)37426 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_1X1_ACC4, padding_top_eq_1) {
37427   for (size_t input_height = 2; input_height < 8; input_height++) {
37428     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37429       DWConv2DMicrokernelTester()
37430         .input_width(input_width)
37431         .input_height(input_height)
37432         .kernel_height(3)
37433         .kernel_width(3)
37434         .subsampling(2)
37435         .padding_left(1)
37436         .padding_right(1)
37437         .padding_top(0)
37438         .padding_bottom(1)
37439         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
37440     }
37441   }
37442 }
37443 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1,output_width_eq_1)37444 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1, output_width_eq_1) {
37445   for (size_t input_width = 1; input_width < 3; input_width++) {
37446     DWConv2DMicrokernelTester()
37447       .input_width(input_width)
37448       .input_height(4)
37449       .kernel_height(3)
37450       .kernel_width(3)
37451       .subsampling(2)
37452       .padding_left(1)
37453       .padding_right(1)
37454       .padding_top(1)
37455       .padding_bottom(1)
37456       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
37457   }
37458 }
37459 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1,output_width_gt_1)37460 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1, output_width_gt_1) {
37461   for (size_t input_width = 3; input_width < 11; input_width++) {
37462     DWConv2DMicrokernelTester()
37463       .input_width(input_width)
37464       .input_height(4)
37465       .kernel_height(3)
37466       .kernel_width(3)
37467       .subsampling(2)
37468       .padding_left(1)
37469       .padding_right(1)
37470       .padding_top(1)
37471       .padding_bottom(1)
37472       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
37473   }
37474 }
37475 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1,output_height_eq_2)37476 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1, output_height_eq_2) {
37477   for (size_t input_height = 3; input_height < 5; input_height++) {
37478     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37479       DWConv2DMicrokernelTester()
37480         .input_width(input_width)
37481         .input_height(input_height)
37482         .kernel_height(3)
37483         .kernel_width(3)
37484         .subsampling(2)
37485         .padding_left(1)
37486         .padding_right(1)
37487         .padding_top(1)
37488         .padding_bottom(1)
37489         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
37490     }
37491   }
37492 }
37493 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1,output_height_div_2)37494 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1, output_height_div_2) {
37495   for (size_t input_height = 8; input_height < 32; input_height += 4) {
37496     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37497       DWConv2DMicrokernelTester()
37498         .input_width(input_width)
37499         .input_height(input_height)
37500         .kernel_height(3)
37501         .kernel_width(3)
37502         .subsampling(2)
37503         .padding_left(1)
37504         .padding_right(1)
37505         .padding_top(1)
37506         .padding_bottom(1)
37507         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
37508     }
37509   }
37510 }
37511 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1,output_height_lt_2)37512 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1, output_height_lt_2) {
37513   for (size_t input_height = 1; input_height < 3; input_height++) {
37514     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37515       DWConv2DMicrokernelTester()
37516         .input_width(input_width)
37517         .input_height(input_height)
37518         .kernel_height(3)
37519         .kernel_width(3)
37520         .subsampling(2)
37521         .padding_left(1)
37522         .padding_right(1)
37523         .padding_top(1)
37524         .padding_bottom(1)
37525         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
37526     }
37527   }
37528 }
37529 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1,output_height_gt_2)37530 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1, output_height_gt_2) {
37531   for (size_t input_height = 5; input_height < 21; input_height++) {
37532     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37533       DWConv2DMicrokernelTester()
37534         .input_width(input_width)
37535         .input_height(input_height)
37536         .kernel_height(3)
37537         .kernel_width(3)
37538         .subsampling(2)
37539         .padding_left(1)
37540         .padding_right(1)
37541         .padding_top(1)
37542         .padding_bottom(1)
37543         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
37544     }
37545   }
37546 }
37547 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1,padding_top_eq_1)37548 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1, padding_top_eq_1) {
37549   for (size_t input_height = 2; input_height < 14; input_height++) {
37550     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37551       DWConv2DMicrokernelTester()
37552         .input_width(input_width)
37553         .input_height(input_height)
37554         .kernel_height(3)
37555         .kernel_width(3)
37556         .subsampling(2)
37557         .padding_left(1)
37558         .padding_right(1)
37559         .padding_top(0)
37560         .padding_bottom(1)
37561         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
37562     }
37563   }
37564 }
37565 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2,output_width_eq_1)37566 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2, output_width_eq_1) {
37567   for (size_t input_width = 1; input_width < 3; input_width++) {
37568     DWConv2DMicrokernelTester()
37569       .input_width(input_width)
37570       .input_height(4)
37571       .kernel_height(3)
37572       .kernel_width(3)
37573       .subsampling(2)
37574       .padding_left(1)
37575       .padding_right(1)
37576       .padding_top(1)
37577       .padding_bottom(1)
37578       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37579   }
37580 }
37581 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2,output_width_gt_1)37582 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2, output_width_gt_1) {
37583   for (size_t input_width = 3; input_width < 11; input_width++) {
37584     DWConv2DMicrokernelTester()
37585       .input_width(input_width)
37586       .input_height(4)
37587       .kernel_height(3)
37588       .kernel_width(3)
37589       .subsampling(2)
37590       .padding_left(1)
37591       .padding_right(1)
37592       .padding_top(1)
37593       .padding_bottom(1)
37594       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37595   }
37596 }
37597 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2,output_height_eq_2)37598 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2, output_height_eq_2) {
37599   for (size_t input_height = 3; input_height < 5; input_height++) {
37600     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37601       DWConv2DMicrokernelTester()
37602         .input_width(input_width)
37603         .input_height(input_height)
37604         .kernel_height(3)
37605         .kernel_width(3)
37606         .subsampling(2)
37607         .padding_left(1)
37608         .padding_right(1)
37609         .padding_top(1)
37610         .padding_bottom(1)
37611         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37612     }
37613   }
37614 }
37615 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2,output_height_div_2)37616 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2, output_height_div_2) {
37617   for (size_t input_height = 8; input_height < 32; input_height += 4) {
37618     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37619       DWConv2DMicrokernelTester()
37620         .input_width(input_width)
37621         .input_height(input_height)
37622         .kernel_height(3)
37623         .kernel_width(3)
37624         .subsampling(2)
37625         .padding_left(1)
37626         .padding_right(1)
37627         .padding_top(1)
37628         .padding_bottom(1)
37629         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37630     }
37631   }
37632 }
37633 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2,output_height_lt_2)37634 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2, output_height_lt_2) {
37635   for (size_t input_height = 1; input_height < 3; input_height++) {
37636     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37637       DWConv2DMicrokernelTester()
37638         .input_width(input_width)
37639         .input_height(input_height)
37640         .kernel_height(3)
37641         .kernel_width(3)
37642         .subsampling(2)
37643         .padding_left(1)
37644         .padding_right(1)
37645         .padding_top(1)
37646         .padding_bottom(1)
37647         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37648     }
37649   }
37650 }
37651 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2,output_height_gt_2)37652 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2, output_height_gt_2) {
37653   for (size_t input_height = 5; input_height < 21; input_height++) {
37654     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37655       DWConv2DMicrokernelTester()
37656         .input_width(input_width)
37657         .input_height(input_height)
37658         .kernel_height(3)
37659         .kernel_width(3)
37660         .subsampling(2)
37661         .padding_left(1)
37662         .padding_right(1)
37663         .padding_top(1)
37664         .padding_bottom(1)
37665         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37666     }
37667   }
37668 }
37669 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2,padding_top_eq_1)37670 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_2X1_ACC2, padding_top_eq_1) {
37671   for (size_t input_height = 2; input_height < 14; input_height++) {
37672     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37673       DWConv2DMicrokernelTester()
37674         .input_width(input_width)
37675         .input_height(input_height)
37676         .kernel_height(3)
37677         .kernel_width(3)
37678         .subsampling(2)
37679         .padding_left(1)
37680         .padding_right(1)
37681         .padding_top(0)
37682         .padding_bottom(1)
37683         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37684     }
37685   }
37686 }
37687 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1,output_width_eq_1)37688 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1, output_width_eq_1) {
37689   for (size_t input_width = 1; input_width < 3; input_width++) {
37690     DWConv2DMicrokernelTester()
37691       .input_width(input_width)
37692       .input_height(6)
37693       .kernel_height(3)
37694       .kernel_width(3)
37695       .subsampling(2)
37696       .padding_left(1)
37697       .padding_right(1)
37698       .padding_top(1)
37699       .padding_bottom(1)
37700       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
37701   }
37702 }
37703 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1,output_width_gt_1)37704 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1, output_width_gt_1) {
37705   for (size_t input_width = 3; input_width < 11; input_width++) {
37706     DWConv2DMicrokernelTester()
37707       .input_width(input_width)
37708       .input_height(6)
37709       .kernel_height(3)
37710       .kernel_width(3)
37711       .subsampling(2)
37712       .padding_left(1)
37713       .padding_right(1)
37714       .padding_top(1)
37715       .padding_bottom(1)
37716       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
37717   }
37718 }
37719 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1,output_height_eq_3)37720 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1, output_height_eq_3) {
37721   for (size_t input_height = 5; input_height < 7; input_height++) {
37722     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37723       DWConv2DMicrokernelTester()
37724         .input_width(input_width)
37725         .input_height(input_height)
37726         .kernel_height(3)
37727         .kernel_width(3)
37728         .subsampling(2)
37729         .padding_left(1)
37730         .padding_right(1)
37731         .padding_top(1)
37732         .padding_bottom(1)
37733         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
37734     }
37735   }
37736 }
37737 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1,output_height_div_3)37738 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1, output_height_div_3) {
37739   for (size_t input_height = 12; input_height < 48; input_height += 6) {
37740     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37741       DWConv2DMicrokernelTester()
37742         .input_width(input_width)
37743         .input_height(input_height)
37744         .kernel_height(3)
37745         .kernel_width(3)
37746         .subsampling(2)
37747         .padding_left(1)
37748         .padding_right(1)
37749         .padding_top(1)
37750         .padding_bottom(1)
37751         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
37752     }
37753   }
37754 }
37755 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1,output_height_lt_3)37756 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1, output_height_lt_3) {
37757   for (size_t input_height = 1; input_height < 5; input_height++) {
37758     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37759       DWConv2DMicrokernelTester()
37760         .input_width(input_width)
37761         .input_height(input_height)
37762         .kernel_height(3)
37763         .kernel_width(3)
37764         .subsampling(2)
37765         .padding_left(1)
37766         .padding_right(1)
37767         .padding_top(1)
37768         .padding_bottom(1)
37769         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
37770     }
37771   }
37772 }
37773 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1,output_height_gt_3)37774 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1, output_height_gt_3) {
37775   for (size_t input_height = 7; input_height < 31; input_height++) {
37776     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37777       DWConv2DMicrokernelTester()
37778         .input_width(input_width)
37779         .input_height(input_height)
37780         .kernel_height(3)
37781         .kernel_width(3)
37782         .subsampling(2)
37783         .padding_left(1)
37784         .padding_right(1)
37785         .padding_top(1)
37786         .padding_bottom(1)
37787         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
37788     }
37789   }
37790 }
37791 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1,padding_top_eq_1)37792 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_3X1, padding_top_eq_1) {
37793   for (size_t input_height = 2; input_height < 20; input_height++) {
37794     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37795       DWConv2DMicrokernelTester()
37796         .input_width(input_width)
37797         .input_height(input_height)
37798         .kernel_height(3)
37799         .kernel_width(3)
37800         .subsampling(2)
37801         .padding_left(1)
37802         .padding_right(1)
37803         .padding_top(0)
37804         .padding_bottom(1)
37805         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
37806     }
37807   }
37808 }
37809 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1,output_width_eq_1)37810 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1, output_width_eq_1) {
37811   for (size_t input_width = 1; input_width < 3; input_width++) {
37812     DWConv2DMicrokernelTester()
37813       .input_width(input_width)
37814       .input_height(8)
37815       .kernel_height(3)
37816       .kernel_width(3)
37817       .subsampling(2)
37818       .padding_left(1)
37819       .padding_right(1)
37820       .padding_top(1)
37821       .padding_bottom(1)
37822       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_4x1, DWConv2DMicrokernelTester::Variant::Scalar);
37823   }
37824 }
37825 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1,output_width_gt_1)37826 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1, output_width_gt_1) {
37827   for (size_t input_width = 3; input_width < 11; input_width++) {
37828     DWConv2DMicrokernelTester()
37829       .input_width(input_width)
37830       .input_height(8)
37831       .kernel_height(3)
37832       .kernel_width(3)
37833       .subsampling(2)
37834       .padding_left(1)
37835       .padding_right(1)
37836       .padding_top(1)
37837       .padding_bottom(1)
37838       .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_4x1, DWConv2DMicrokernelTester::Variant::Scalar);
37839   }
37840 }
37841 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1,output_height_eq_4)37842 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1, output_height_eq_4) {
37843   for (size_t input_height = 7; input_height < 9; input_height++) {
37844     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37845       DWConv2DMicrokernelTester()
37846         .input_width(input_width)
37847         .input_height(input_height)
37848         .kernel_height(3)
37849         .kernel_width(3)
37850         .subsampling(2)
37851         .padding_left(1)
37852         .padding_right(1)
37853         .padding_top(1)
37854         .padding_bottom(1)
37855         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_4x1, DWConv2DMicrokernelTester::Variant::Scalar);
37856     }
37857   }
37858 }
37859 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1,output_height_div_4)37860 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1, output_height_div_4) {
37861   for (size_t input_height = 16; input_height < 64; input_height += 8) {
37862     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37863       DWConv2DMicrokernelTester()
37864         .input_width(input_width)
37865         .input_height(input_height)
37866         .kernel_height(3)
37867         .kernel_width(3)
37868         .subsampling(2)
37869         .padding_left(1)
37870         .padding_right(1)
37871         .padding_top(1)
37872         .padding_bottom(1)
37873         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_4x1, DWConv2DMicrokernelTester::Variant::Scalar);
37874     }
37875   }
37876 }
37877 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1,output_height_lt_4)37878 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1, output_height_lt_4) {
37879   for (size_t input_height = 1; input_height < 7; input_height++) {
37880     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37881       DWConv2DMicrokernelTester()
37882         .input_width(input_width)
37883         .input_height(input_height)
37884         .kernel_height(3)
37885         .kernel_width(3)
37886         .subsampling(2)
37887         .padding_left(1)
37888         .padding_right(1)
37889         .padding_top(1)
37890         .padding_bottom(1)
37891         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_4x1, DWConv2DMicrokernelTester::Variant::Scalar);
37892     }
37893   }
37894 }
37895 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1,output_height_gt_4)37896 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1, output_height_gt_4) {
37897   for (size_t input_height = 9; input_height < 41; input_height++) {
37898     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37899       DWConv2DMicrokernelTester()
37900         .input_width(input_width)
37901         .input_height(input_height)
37902         .kernel_height(3)
37903         .kernel_width(3)
37904         .subsampling(2)
37905         .padding_left(1)
37906         .padding_right(1)
37907         .padding_top(1)
37908         .padding_bottom(1)
37909         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_4x1, DWConv2DMicrokernelTester::Variant::Scalar);
37910     }
37911   }
37912 }
37913 
TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1,padding_top_eq_1)37914 TEST(F32_DWCONV2D_CHW_3X3S2P1__SCALAR_4X1, padding_top_eq_1) {
37915   for (size_t input_height = 2; input_height < 26; input_height++) {
37916     for (size_t input_width = 1; input_width < 11; input_width += 1) {
37917       DWConv2DMicrokernelTester()
37918         .input_width(input_width)
37919         .input_height(input_height)
37920         .kernel_height(3)
37921         .kernel_width(3)
37922         .subsampling(2)
37923         .padding_left(1)
37924         .padding_right(1)
37925         .padding_top(0)
37926         .padding_bottom(1)
37927         .Test(xnn_f32_dwconv2d_chw_ukernel_3x3s2p1__scalar_4x1, DWConv2DMicrokernelTester::Variant::Scalar);
37928     }
37929   }
37930 }
37931 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1,output_width_eq_1)37932 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1, output_width_eq_1) {
37933   DWConv2DMicrokernelTester()
37934     .input_width(1)
37935     .input_height(1)
37936     .kernel_height(5)
37937     .kernel_width(5)
37938     .subsampling(1)
37939     .padding_left(2)
37940     .padding_right(2)
37941     .padding_top(2)
37942     .padding_bottom(2)
37943     .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
37944 }
37945 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1,output_width_gt_1)37946 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1, output_width_gt_1) {
37947   for (size_t input_width = 2; input_width < 6; input_width++) {
37948     DWConv2DMicrokernelTester()
37949       .input_width(input_width)
37950       .input_height(1)
37951       .kernel_height(5)
37952       .kernel_width(5)
37953       .subsampling(1)
37954       .padding_left(2)
37955       .padding_right(2)
37956       .padding_top(2)
37957       .padding_bottom(2)
37958       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
37959   }
37960 }
37961 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1,output_height_gt_1)37962 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1, output_height_gt_1) {
37963   for (size_t input_height = 2; input_height < 6; input_height++) {
37964     for (size_t input_width = 1; input_width < 6; input_width += 1) {
37965       DWConv2DMicrokernelTester()
37966         .input_width(input_width)
37967         .input_height(input_height)
37968         .kernel_height(5)
37969         .kernel_width(5)
37970         .subsampling(1)
37971         .padding_left(2)
37972         .padding_right(2)
37973         .padding_top(2)
37974         .padding_bottom(2)
37975         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
37976     }
37977   }
37978 }
37979 
37980 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC2,output_width_eq_1)37981 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC2, output_width_eq_1) {
37982   DWConv2DMicrokernelTester()
37983     .input_width(1)
37984     .input_height(1)
37985     .kernel_height(5)
37986     .kernel_width(5)
37987     .subsampling(1)
37988     .padding_left(2)
37989     .padding_right(2)
37990     .padding_top(2)
37991     .padding_bottom(2)
37992     .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
37993 }
37994 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC2,output_width_gt_1)37995 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC2, output_width_gt_1) {
37996   for (size_t input_width = 2; input_width < 6; input_width++) {
37997     DWConv2DMicrokernelTester()
37998       .input_width(input_width)
37999       .input_height(1)
38000       .kernel_height(5)
38001       .kernel_width(5)
38002       .subsampling(1)
38003       .padding_left(2)
38004       .padding_right(2)
38005       .padding_top(2)
38006       .padding_bottom(2)
38007       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38008   }
38009 }
38010 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC2,output_height_gt_1)38011 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC2, output_height_gt_1) {
38012   for (size_t input_height = 2; input_height < 6; input_height++) {
38013     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38014       DWConv2DMicrokernelTester()
38015         .input_width(input_width)
38016         .input_height(input_height)
38017         .kernel_height(5)
38018         .kernel_width(5)
38019         .subsampling(1)
38020         .padding_left(2)
38021         .padding_right(2)
38022         .padding_top(2)
38023         .padding_bottom(2)
38024         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38025     }
38026   }
38027 }
38028 
38029 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC3,output_width_eq_1)38030 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC3, output_width_eq_1) {
38031   DWConv2DMicrokernelTester()
38032     .input_width(1)
38033     .input_height(1)
38034     .kernel_height(5)
38035     .kernel_width(5)
38036     .subsampling(1)
38037     .padding_left(2)
38038     .padding_right(2)
38039     .padding_top(2)
38040     .padding_bottom(2)
38041     .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38042 }
38043 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC3,output_width_gt_1)38044 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC3, output_width_gt_1) {
38045   for (size_t input_width = 2; input_width < 6; input_width++) {
38046     DWConv2DMicrokernelTester()
38047       .input_width(input_width)
38048       .input_height(1)
38049       .kernel_height(5)
38050       .kernel_width(5)
38051       .subsampling(1)
38052       .padding_left(2)
38053       .padding_right(2)
38054       .padding_top(2)
38055       .padding_bottom(2)
38056       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38057   }
38058 }
38059 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC3,output_height_gt_1)38060 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC3, output_height_gt_1) {
38061   for (size_t input_height = 2; input_height < 6; input_height++) {
38062     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38063       DWConv2DMicrokernelTester()
38064         .input_width(input_width)
38065         .input_height(input_height)
38066         .kernel_height(5)
38067         .kernel_width(5)
38068         .subsampling(1)
38069         .padding_left(2)
38070         .padding_right(2)
38071         .padding_top(2)
38072         .padding_bottom(2)
38073         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38074     }
38075   }
38076 }
38077 
38078 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC4,output_width_eq_1)38079 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC4, output_width_eq_1) {
38080   DWConv2DMicrokernelTester()
38081     .input_width(1)
38082     .input_height(1)
38083     .kernel_height(5)
38084     .kernel_width(5)
38085     .subsampling(1)
38086     .padding_left(2)
38087     .padding_right(2)
38088     .padding_top(2)
38089     .padding_bottom(2)
38090     .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
38091 }
38092 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC4,output_width_gt_1)38093 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC4, output_width_gt_1) {
38094   for (size_t input_width = 2; input_width < 6; input_width++) {
38095     DWConv2DMicrokernelTester()
38096       .input_width(input_width)
38097       .input_height(1)
38098       .kernel_height(5)
38099       .kernel_width(5)
38100       .subsampling(1)
38101       .padding_left(2)
38102       .padding_right(2)
38103       .padding_top(2)
38104       .padding_bottom(2)
38105       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
38106   }
38107 }
38108 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC4,output_height_gt_1)38109 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC4, output_height_gt_1) {
38110   for (size_t input_height = 2; input_height < 6; input_height++) {
38111     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38112       DWConv2DMicrokernelTester()
38113         .input_width(input_width)
38114         .input_height(input_height)
38115         .kernel_height(5)
38116         .kernel_width(5)
38117         .subsampling(1)
38118         .padding_left(2)
38119         .padding_right(2)
38120         .padding_top(2)
38121         .padding_bottom(2)
38122         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
38123     }
38124   }
38125 }
38126 
38127 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC5,output_width_eq_1)38128 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC5, output_width_eq_1) {
38129   DWConv2DMicrokernelTester()
38130     .input_width(1)
38131     .input_height(1)
38132     .kernel_height(5)
38133     .kernel_width(5)
38134     .subsampling(1)
38135     .padding_left(2)
38136     .padding_right(2)
38137     .padding_top(2)
38138     .padding_bottom(2)
38139     .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1_acc5, DWConv2DMicrokernelTester::Variant::Scalar);
38140 }
38141 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC5,output_width_gt_1)38142 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC5, output_width_gt_1) {
38143   for (size_t input_width = 2; input_width < 6; input_width++) {
38144     DWConv2DMicrokernelTester()
38145       .input_width(input_width)
38146       .input_height(1)
38147       .kernel_height(5)
38148       .kernel_width(5)
38149       .subsampling(1)
38150       .padding_left(2)
38151       .padding_right(2)
38152       .padding_top(2)
38153       .padding_bottom(2)
38154       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1_acc5, DWConv2DMicrokernelTester::Variant::Scalar);
38155   }
38156 }
38157 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC5,output_height_gt_1)38158 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_1X1_ACC5, output_height_gt_1) {
38159   for (size_t input_height = 2; input_height < 6; input_height++) {
38160     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38161       DWConv2DMicrokernelTester()
38162         .input_width(input_width)
38163         .input_height(input_height)
38164         .kernel_height(5)
38165         .kernel_width(5)
38166         .subsampling(1)
38167         .padding_left(2)
38168         .padding_right(2)
38169         .padding_top(2)
38170         .padding_bottom(2)
38171         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_1x1_acc5, DWConv2DMicrokernelTester::Variant::Scalar);
38172     }
38173   }
38174 }
38175 
38176 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1,output_width_eq_1)38177 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1, output_width_eq_1) {
38178   DWConv2DMicrokernelTester()
38179     .input_width(1)
38180     .input_height(2)
38181     .kernel_height(5)
38182     .kernel_width(5)
38183     .subsampling(1)
38184     .padding_left(2)
38185     .padding_right(2)
38186     .padding_top(2)
38187     .padding_bottom(2)
38188     .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
38189 }
38190 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1,output_width_gt_1)38191 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1, output_width_gt_1) {
38192   for (size_t input_width = 2; input_width < 6; input_width++) {
38193     DWConv2DMicrokernelTester()
38194       .input_width(input_width)
38195       .input_height(2)
38196       .kernel_height(5)
38197       .kernel_width(5)
38198       .subsampling(1)
38199       .padding_left(2)
38200       .padding_right(2)
38201       .padding_top(2)
38202       .padding_bottom(2)
38203       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
38204   }
38205 }
38206 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1,output_height_div_2)38207 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1, output_height_div_2) {
38208   for (size_t input_height = 4; input_height < 16; input_height += 2) {
38209     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38210       DWConv2DMicrokernelTester()
38211         .input_width(input_width)
38212         .input_height(input_height)
38213         .kernel_height(5)
38214         .kernel_width(5)
38215         .subsampling(1)
38216         .padding_left(2)
38217         .padding_right(2)
38218         .padding_top(2)
38219         .padding_bottom(2)
38220         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
38221     }
38222   }
38223 }
38224 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1,output_height_lt_2)38225 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1, output_height_lt_2) {
38226   for (size_t input_height = 1; input_height < 2; input_height++) {
38227     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38228       DWConv2DMicrokernelTester()
38229         .input_width(input_width)
38230         .input_height(input_height)
38231         .kernel_height(5)
38232         .kernel_width(5)
38233         .subsampling(1)
38234         .padding_left(2)
38235         .padding_right(2)
38236         .padding_top(2)
38237         .padding_bottom(2)
38238         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
38239     }
38240   }
38241 }
38242 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1,output_height_gt_2)38243 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1, output_height_gt_2) {
38244   for (size_t input_height = 3; input_height < 11; input_height++) {
38245     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38246       DWConv2DMicrokernelTester()
38247         .input_width(input_width)
38248         .input_height(input_height)
38249         .kernel_height(5)
38250         .kernel_width(5)
38251         .subsampling(1)
38252         .padding_left(2)
38253         .padding_right(2)
38254         .padding_top(2)
38255         .padding_bottom(2)
38256         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
38257     }
38258   }
38259 }
38260 
38261 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC2,output_width_eq_1)38262 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC2, output_width_eq_1) {
38263   DWConv2DMicrokernelTester()
38264     .input_width(1)
38265     .input_height(2)
38266     .kernel_height(5)
38267     .kernel_width(5)
38268     .subsampling(1)
38269     .padding_left(2)
38270     .padding_right(2)
38271     .padding_top(2)
38272     .padding_bottom(2)
38273     .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38274 }
38275 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC2,output_width_gt_1)38276 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC2, output_width_gt_1) {
38277   for (size_t input_width = 2; input_width < 6; input_width++) {
38278     DWConv2DMicrokernelTester()
38279       .input_width(input_width)
38280       .input_height(2)
38281       .kernel_height(5)
38282       .kernel_width(5)
38283       .subsampling(1)
38284       .padding_left(2)
38285       .padding_right(2)
38286       .padding_top(2)
38287       .padding_bottom(2)
38288       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38289   }
38290 }
38291 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC2,output_height_div_2)38292 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC2, output_height_div_2) {
38293   for (size_t input_height = 4; input_height < 16; input_height += 2) {
38294     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38295       DWConv2DMicrokernelTester()
38296         .input_width(input_width)
38297         .input_height(input_height)
38298         .kernel_height(5)
38299         .kernel_width(5)
38300         .subsampling(1)
38301         .padding_left(2)
38302         .padding_right(2)
38303         .padding_top(2)
38304         .padding_bottom(2)
38305         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38306     }
38307   }
38308 }
38309 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC2,output_height_lt_2)38310 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC2, output_height_lt_2) {
38311   for (size_t input_height = 1; input_height < 2; input_height++) {
38312     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38313       DWConv2DMicrokernelTester()
38314         .input_width(input_width)
38315         .input_height(input_height)
38316         .kernel_height(5)
38317         .kernel_width(5)
38318         .subsampling(1)
38319         .padding_left(2)
38320         .padding_right(2)
38321         .padding_top(2)
38322         .padding_bottom(2)
38323         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38324     }
38325   }
38326 }
38327 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC2,output_height_gt_2)38328 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC2, output_height_gt_2) {
38329   for (size_t input_height = 3; input_height < 11; input_height++) {
38330     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38331       DWConv2DMicrokernelTester()
38332         .input_width(input_width)
38333         .input_height(input_height)
38334         .kernel_height(5)
38335         .kernel_width(5)
38336         .subsampling(1)
38337         .padding_left(2)
38338         .padding_right(2)
38339         .padding_top(2)
38340         .padding_bottom(2)
38341         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38342     }
38343   }
38344 }
38345 
38346 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC3,output_width_eq_1)38347 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC3, output_width_eq_1) {
38348   DWConv2DMicrokernelTester()
38349     .input_width(1)
38350     .input_height(2)
38351     .kernel_height(5)
38352     .kernel_width(5)
38353     .subsampling(1)
38354     .padding_left(2)
38355     .padding_right(2)
38356     .padding_top(2)
38357     .padding_bottom(2)
38358     .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38359 }
38360 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC3,output_width_gt_1)38361 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC3, output_width_gt_1) {
38362   for (size_t input_width = 2; input_width < 6; input_width++) {
38363     DWConv2DMicrokernelTester()
38364       .input_width(input_width)
38365       .input_height(2)
38366       .kernel_height(5)
38367       .kernel_width(5)
38368       .subsampling(1)
38369       .padding_left(2)
38370       .padding_right(2)
38371       .padding_top(2)
38372       .padding_bottom(2)
38373       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38374   }
38375 }
38376 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC3,output_height_div_2)38377 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC3, output_height_div_2) {
38378   for (size_t input_height = 4; input_height < 16; input_height += 2) {
38379     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38380       DWConv2DMicrokernelTester()
38381         .input_width(input_width)
38382         .input_height(input_height)
38383         .kernel_height(5)
38384         .kernel_width(5)
38385         .subsampling(1)
38386         .padding_left(2)
38387         .padding_right(2)
38388         .padding_top(2)
38389         .padding_bottom(2)
38390         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38391     }
38392   }
38393 }
38394 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC3,output_height_lt_2)38395 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC3, output_height_lt_2) {
38396   for (size_t input_height = 1; input_height < 2; input_height++) {
38397     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38398       DWConv2DMicrokernelTester()
38399         .input_width(input_width)
38400         .input_height(input_height)
38401         .kernel_height(5)
38402         .kernel_width(5)
38403         .subsampling(1)
38404         .padding_left(2)
38405         .padding_right(2)
38406         .padding_top(2)
38407         .padding_bottom(2)
38408         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38409     }
38410   }
38411 }
38412 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC3,output_height_gt_2)38413 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_2X1_ACC3, output_height_gt_2) {
38414   for (size_t input_height = 3; input_height < 11; input_height++) {
38415     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38416       DWConv2DMicrokernelTester()
38417         .input_width(input_width)
38418         .input_height(input_height)
38419         .kernel_height(5)
38420         .kernel_width(5)
38421         .subsampling(1)
38422         .padding_left(2)
38423         .padding_right(2)
38424         .padding_top(2)
38425         .padding_bottom(2)
38426         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_2x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38427     }
38428   }
38429 }
38430 
38431 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1,output_width_eq_1)38432 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1, output_width_eq_1) {
38433   DWConv2DMicrokernelTester()
38434     .input_width(1)
38435     .input_height(3)
38436     .kernel_height(5)
38437     .kernel_width(5)
38438     .subsampling(1)
38439     .padding_left(2)
38440     .padding_right(2)
38441     .padding_top(2)
38442     .padding_bottom(2)
38443     .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
38444 }
38445 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1,output_width_gt_1)38446 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1, output_width_gt_1) {
38447   for (size_t input_width = 2; input_width < 6; input_width++) {
38448     DWConv2DMicrokernelTester()
38449       .input_width(input_width)
38450       .input_height(3)
38451       .kernel_height(5)
38452       .kernel_width(5)
38453       .subsampling(1)
38454       .padding_left(2)
38455       .padding_right(2)
38456       .padding_top(2)
38457       .padding_bottom(2)
38458       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
38459   }
38460 }
38461 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1,output_height_div_3)38462 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1, output_height_div_3) {
38463   for (size_t input_height = 6; input_height < 24; input_height += 3) {
38464     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38465       DWConv2DMicrokernelTester()
38466         .input_width(input_width)
38467         .input_height(input_height)
38468         .kernel_height(5)
38469         .kernel_width(5)
38470         .subsampling(1)
38471         .padding_left(2)
38472         .padding_right(2)
38473         .padding_top(2)
38474         .padding_bottom(2)
38475         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
38476     }
38477   }
38478 }
38479 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1,output_height_lt_3)38480 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1, output_height_lt_3) {
38481   for (size_t input_height = 1; input_height < 3; input_height++) {
38482     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38483       DWConv2DMicrokernelTester()
38484         .input_width(input_width)
38485         .input_height(input_height)
38486         .kernel_height(5)
38487         .kernel_width(5)
38488         .subsampling(1)
38489         .padding_left(2)
38490         .padding_right(2)
38491         .padding_top(2)
38492         .padding_bottom(2)
38493         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
38494     }
38495   }
38496 }
38497 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1,output_height_gt_3)38498 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1, output_height_gt_3) {
38499   for (size_t input_height = 4; input_height < 16; input_height++) {
38500     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38501       DWConv2DMicrokernelTester()
38502         .input_width(input_width)
38503         .input_height(input_height)
38504         .kernel_height(5)
38505         .kernel_width(5)
38506         .subsampling(1)
38507         .padding_left(2)
38508         .padding_right(2)
38509         .padding_top(2)
38510         .padding_bottom(2)
38511         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
38512     }
38513   }
38514 }
38515 
38516 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1_ACC2,output_width_eq_1)38517 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1_ACC2, output_width_eq_1) {
38518   DWConv2DMicrokernelTester()
38519     .input_width(1)
38520     .input_height(3)
38521     .kernel_height(5)
38522     .kernel_width(5)
38523     .subsampling(1)
38524     .padding_left(2)
38525     .padding_right(2)
38526     .padding_top(2)
38527     .padding_bottom(2)
38528     .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_3x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38529 }
38530 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1_ACC2,output_width_gt_1)38531 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1_ACC2, output_width_gt_1) {
38532   for (size_t input_width = 2; input_width < 6; input_width++) {
38533     DWConv2DMicrokernelTester()
38534       .input_width(input_width)
38535       .input_height(3)
38536       .kernel_height(5)
38537       .kernel_width(5)
38538       .subsampling(1)
38539       .padding_left(2)
38540       .padding_right(2)
38541       .padding_top(2)
38542       .padding_bottom(2)
38543       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_3x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38544   }
38545 }
38546 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1_ACC2,output_height_div_3)38547 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1_ACC2, output_height_div_3) {
38548   for (size_t input_height = 6; input_height < 24; input_height += 3) {
38549     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38550       DWConv2DMicrokernelTester()
38551         .input_width(input_width)
38552         .input_height(input_height)
38553         .kernel_height(5)
38554         .kernel_width(5)
38555         .subsampling(1)
38556         .padding_left(2)
38557         .padding_right(2)
38558         .padding_top(2)
38559         .padding_bottom(2)
38560         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_3x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38561     }
38562   }
38563 }
38564 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1_ACC2,output_height_lt_3)38565 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1_ACC2, output_height_lt_3) {
38566   for (size_t input_height = 1; input_height < 3; input_height++) {
38567     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38568       DWConv2DMicrokernelTester()
38569         .input_width(input_width)
38570         .input_height(input_height)
38571         .kernel_height(5)
38572         .kernel_width(5)
38573         .subsampling(1)
38574         .padding_left(2)
38575         .padding_right(2)
38576         .padding_top(2)
38577         .padding_bottom(2)
38578         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_3x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38579     }
38580   }
38581 }
38582 
TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1_ACC2,output_height_gt_3)38583 TEST(F32_DWCONV2D_CHW_5X5P2__SCALAR_3X1_ACC2, output_height_gt_3) {
38584   for (size_t input_height = 4; input_height < 16; input_height++) {
38585     for (size_t input_width = 1; input_width < 6; input_width += 1) {
38586       DWConv2DMicrokernelTester()
38587         .input_width(input_width)
38588         .input_height(input_height)
38589         .kernel_height(5)
38590         .kernel_width(5)
38591         .subsampling(1)
38592         .padding_left(2)
38593         .padding_right(2)
38594         .padding_top(2)
38595         .padding_bottom(2)
38596         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5p2__scalar_3x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38597     }
38598   }
38599 }
38600 
38601 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1,output_width_eq_1)38602 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1, output_width_eq_1) {
38603   for (size_t input_width = 1; input_width < 3; input_width++) {
38604     DWConv2DMicrokernelTester()
38605       .input_width(input_width)
38606       .input_height(2)
38607       .kernel_height(5)
38608       .kernel_width(5)
38609       .subsampling(2)
38610       .padding_left(2)
38611       .padding_right(2)
38612       .padding_top(2)
38613       .padding_bottom(2)
38614       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
38615   }
38616 }
38617 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1,output_width_gt_1)38618 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1, output_width_gt_1) {
38619   for (size_t input_width = 3; input_width < 11; input_width++) {
38620     DWConv2DMicrokernelTester()
38621       .input_width(input_width)
38622       .input_height(2)
38623       .kernel_height(5)
38624       .kernel_width(5)
38625       .subsampling(2)
38626       .padding_left(2)
38627       .padding_right(2)
38628       .padding_top(2)
38629       .padding_bottom(2)
38630       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
38631   }
38632 }
38633 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1,output_height_eq_1)38634 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1, output_height_eq_1) {
38635   for (size_t input_height = 1; input_height < 3; input_height++) {
38636     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38637       DWConv2DMicrokernelTester()
38638         .input_width(input_width)
38639         .input_height(input_height)
38640         .kernel_height(5)
38641         .kernel_width(5)
38642         .subsampling(2)
38643         .padding_left(2)
38644         .padding_right(2)
38645         .padding_top(2)
38646         .padding_bottom(2)
38647         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
38648     }
38649   }
38650 }
38651 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1,output_height_gt_1)38652 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1, output_height_gt_1) {
38653   for (size_t input_height = 3; input_height < 11; input_height++) {
38654     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38655       DWConv2DMicrokernelTester()
38656         .input_width(input_width)
38657         .input_height(input_height)
38658         .kernel_height(5)
38659         .kernel_width(5)
38660         .subsampling(2)
38661         .padding_left(2)
38662         .padding_right(2)
38663         .padding_top(2)
38664         .padding_bottom(2)
38665         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
38666     }
38667   }
38668 }
38669 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1,padding_top_eq_1)38670 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1, padding_top_eq_1) {
38671   for (size_t input_height = 2; input_height < 8; input_height++) {
38672     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38673       DWConv2DMicrokernelTester()
38674         .input_width(input_width)
38675         .input_height(input_height)
38676         .kernel_height(5)
38677         .kernel_width(5)
38678         .subsampling(2)
38679         .padding_left(2)
38680         .padding_right(2)
38681         .padding_top(1)
38682         .padding_bottom(2)
38683         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1, DWConv2DMicrokernelTester::Variant::Scalar);
38684     }
38685   }
38686 }
38687 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC2,output_width_eq_1)38688 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC2, output_width_eq_1) {
38689   for (size_t input_width = 1; input_width < 3; input_width++) {
38690     DWConv2DMicrokernelTester()
38691       .input_width(input_width)
38692       .input_height(2)
38693       .kernel_height(5)
38694       .kernel_width(5)
38695       .subsampling(2)
38696       .padding_left(2)
38697       .padding_right(2)
38698       .padding_top(2)
38699       .padding_bottom(2)
38700       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38701   }
38702 }
38703 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC2,output_width_gt_1)38704 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC2, output_width_gt_1) {
38705   for (size_t input_width = 3; input_width < 11; input_width++) {
38706     DWConv2DMicrokernelTester()
38707       .input_width(input_width)
38708       .input_height(2)
38709       .kernel_height(5)
38710       .kernel_width(5)
38711       .subsampling(2)
38712       .padding_left(2)
38713       .padding_right(2)
38714       .padding_top(2)
38715       .padding_bottom(2)
38716       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38717   }
38718 }
38719 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC2,output_height_eq_1)38720 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC2, output_height_eq_1) {
38721   for (size_t input_height = 1; input_height < 3; input_height++) {
38722     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38723       DWConv2DMicrokernelTester()
38724         .input_width(input_width)
38725         .input_height(input_height)
38726         .kernel_height(5)
38727         .kernel_width(5)
38728         .subsampling(2)
38729         .padding_left(2)
38730         .padding_right(2)
38731         .padding_top(2)
38732         .padding_bottom(2)
38733         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38734     }
38735   }
38736 }
38737 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC2,output_height_gt_1)38738 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC2, output_height_gt_1) {
38739   for (size_t input_height = 3; input_height < 11; input_height++) {
38740     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38741       DWConv2DMicrokernelTester()
38742         .input_width(input_width)
38743         .input_height(input_height)
38744         .kernel_height(5)
38745         .kernel_width(5)
38746         .subsampling(2)
38747         .padding_left(2)
38748         .padding_right(2)
38749         .padding_top(2)
38750         .padding_bottom(2)
38751         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38752     }
38753   }
38754 }
38755 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC2,padding_top_eq_1)38756 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC2, padding_top_eq_1) {
38757   for (size_t input_height = 2; input_height < 8; input_height++) {
38758     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38759       DWConv2DMicrokernelTester()
38760         .input_width(input_width)
38761         .input_height(input_height)
38762         .kernel_height(5)
38763         .kernel_width(5)
38764         .subsampling(2)
38765         .padding_left(2)
38766         .padding_right(2)
38767         .padding_top(1)
38768         .padding_bottom(2)
38769         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
38770     }
38771   }
38772 }
38773 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC3,output_width_eq_1)38774 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC3, output_width_eq_1) {
38775   for (size_t input_width = 1; input_width < 3; input_width++) {
38776     DWConv2DMicrokernelTester()
38777       .input_width(input_width)
38778       .input_height(2)
38779       .kernel_height(5)
38780       .kernel_width(5)
38781       .subsampling(2)
38782       .padding_left(2)
38783       .padding_right(2)
38784       .padding_top(2)
38785       .padding_bottom(2)
38786       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38787   }
38788 }
38789 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC3,output_width_gt_1)38790 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC3, output_width_gt_1) {
38791   for (size_t input_width = 3; input_width < 11; input_width++) {
38792     DWConv2DMicrokernelTester()
38793       .input_width(input_width)
38794       .input_height(2)
38795       .kernel_height(5)
38796       .kernel_width(5)
38797       .subsampling(2)
38798       .padding_left(2)
38799       .padding_right(2)
38800       .padding_top(2)
38801       .padding_bottom(2)
38802       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38803   }
38804 }
38805 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC3,output_height_eq_1)38806 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC3, output_height_eq_1) {
38807   for (size_t input_height = 1; input_height < 3; input_height++) {
38808     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38809       DWConv2DMicrokernelTester()
38810         .input_width(input_width)
38811         .input_height(input_height)
38812         .kernel_height(5)
38813         .kernel_width(5)
38814         .subsampling(2)
38815         .padding_left(2)
38816         .padding_right(2)
38817         .padding_top(2)
38818         .padding_bottom(2)
38819         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38820     }
38821   }
38822 }
38823 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC3,output_height_gt_1)38824 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC3, output_height_gt_1) {
38825   for (size_t input_height = 3; input_height < 11; input_height++) {
38826     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38827       DWConv2DMicrokernelTester()
38828         .input_width(input_width)
38829         .input_height(input_height)
38830         .kernel_height(5)
38831         .kernel_width(5)
38832         .subsampling(2)
38833         .padding_left(2)
38834         .padding_right(2)
38835         .padding_top(2)
38836         .padding_bottom(2)
38837         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38838     }
38839   }
38840 }
38841 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC3,padding_top_eq_1)38842 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC3, padding_top_eq_1) {
38843   for (size_t input_height = 2; input_height < 8; input_height++) {
38844     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38845       DWConv2DMicrokernelTester()
38846         .input_width(input_width)
38847         .input_height(input_height)
38848         .kernel_height(5)
38849         .kernel_width(5)
38850         .subsampling(2)
38851         .padding_left(2)
38852         .padding_right(2)
38853         .padding_top(1)
38854         .padding_bottom(2)
38855         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
38856     }
38857   }
38858 }
38859 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC4,output_width_eq_1)38860 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC4, output_width_eq_1) {
38861   for (size_t input_width = 1; input_width < 3; input_width++) {
38862     DWConv2DMicrokernelTester()
38863       .input_width(input_width)
38864       .input_height(2)
38865       .kernel_height(5)
38866       .kernel_width(5)
38867       .subsampling(2)
38868       .padding_left(2)
38869       .padding_right(2)
38870       .padding_top(2)
38871       .padding_bottom(2)
38872       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
38873   }
38874 }
38875 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC4,output_width_gt_1)38876 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC4, output_width_gt_1) {
38877   for (size_t input_width = 3; input_width < 11; input_width++) {
38878     DWConv2DMicrokernelTester()
38879       .input_width(input_width)
38880       .input_height(2)
38881       .kernel_height(5)
38882       .kernel_width(5)
38883       .subsampling(2)
38884       .padding_left(2)
38885       .padding_right(2)
38886       .padding_top(2)
38887       .padding_bottom(2)
38888       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
38889   }
38890 }
38891 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC4,output_height_eq_1)38892 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC4, output_height_eq_1) {
38893   for (size_t input_height = 1; input_height < 3; input_height++) {
38894     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38895       DWConv2DMicrokernelTester()
38896         .input_width(input_width)
38897         .input_height(input_height)
38898         .kernel_height(5)
38899         .kernel_width(5)
38900         .subsampling(2)
38901         .padding_left(2)
38902         .padding_right(2)
38903         .padding_top(2)
38904         .padding_bottom(2)
38905         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
38906     }
38907   }
38908 }
38909 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC4,output_height_gt_1)38910 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC4, output_height_gt_1) {
38911   for (size_t input_height = 3; input_height < 11; input_height++) {
38912     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38913       DWConv2DMicrokernelTester()
38914         .input_width(input_width)
38915         .input_height(input_height)
38916         .kernel_height(5)
38917         .kernel_width(5)
38918         .subsampling(2)
38919         .padding_left(2)
38920         .padding_right(2)
38921         .padding_top(2)
38922         .padding_bottom(2)
38923         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
38924     }
38925   }
38926 }
38927 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC4,padding_top_eq_1)38928 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC4, padding_top_eq_1) {
38929   for (size_t input_height = 2; input_height < 8; input_height++) {
38930     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38931       DWConv2DMicrokernelTester()
38932         .input_width(input_width)
38933         .input_height(input_height)
38934         .kernel_height(5)
38935         .kernel_width(5)
38936         .subsampling(2)
38937         .padding_left(2)
38938         .padding_right(2)
38939         .padding_top(1)
38940         .padding_bottom(2)
38941         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc4, DWConv2DMicrokernelTester::Variant::Scalar);
38942     }
38943   }
38944 }
38945 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC5,output_width_eq_1)38946 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC5, output_width_eq_1) {
38947   for (size_t input_width = 1; input_width < 3; input_width++) {
38948     DWConv2DMicrokernelTester()
38949       .input_width(input_width)
38950       .input_height(2)
38951       .kernel_height(5)
38952       .kernel_width(5)
38953       .subsampling(2)
38954       .padding_left(2)
38955       .padding_right(2)
38956       .padding_top(2)
38957       .padding_bottom(2)
38958       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc5, DWConv2DMicrokernelTester::Variant::Scalar);
38959   }
38960 }
38961 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC5,output_width_gt_1)38962 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC5, output_width_gt_1) {
38963   for (size_t input_width = 3; input_width < 11; input_width++) {
38964     DWConv2DMicrokernelTester()
38965       .input_width(input_width)
38966       .input_height(2)
38967       .kernel_height(5)
38968       .kernel_width(5)
38969       .subsampling(2)
38970       .padding_left(2)
38971       .padding_right(2)
38972       .padding_top(2)
38973       .padding_bottom(2)
38974       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc5, DWConv2DMicrokernelTester::Variant::Scalar);
38975   }
38976 }
38977 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC5,output_height_eq_1)38978 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC5, output_height_eq_1) {
38979   for (size_t input_height = 1; input_height < 3; input_height++) {
38980     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38981       DWConv2DMicrokernelTester()
38982         .input_width(input_width)
38983         .input_height(input_height)
38984         .kernel_height(5)
38985         .kernel_width(5)
38986         .subsampling(2)
38987         .padding_left(2)
38988         .padding_right(2)
38989         .padding_top(2)
38990         .padding_bottom(2)
38991         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc5, DWConv2DMicrokernelTester::Variant::Scalar);
38992     }
38993   }
38994 }
38995 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC5,output_height_gt_1)38996 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC5, output_height_gt_1) {
38997   for (size_t input_height = 3; input_height < 11; input_height++) {
38998     for (size_t input_width = 1; input_width < 11; input_width += 1) {
38999       DWConv2DMicrokernelTester()
39000         .input_width(input_width)
39001         .input_height(input_height)
39002         .kernel_height(5)
39003         .kernel_width(5)
39004         .subsampling(2)
39005         .padding_left(2)
39006         .padding_right(2)
39007         .padding_top(2)
39008         .padding_bottom(2)
39009         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc5, DWConv2DMicrokernelTester::Variant::Scalar);
39010     }
39011   }
39012 }
39013 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC5,padding_top_eq_1)39014 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_1X1_ACC5, padding_top_eq_1) {
39015   for (size_t input_height = 2; input_height < 8; input_height++) {
39016     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39017       DWConv2DMicrokernelTester()
39018         .input_width(input_width)
39019         .input_height(input_height)
39020         .kernel_height(5)
39021         .kernel_width(5)
39022         .subsampling(2)
39023         .padding_left(2)
39024         .padding_right(2)
39025         .padding_top(1)
39026         .padding_bottom(2)
39027         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_1x1_acc5, DWConv2DMicrokernelTester::Variant::Scalar);
39028     }
39029   }
39030 }
39031 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1,output_width_eq_1)39032 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1, output_width_eq_1) {
39033   for (size_t input_width = 1; input_width < 3; input_width++) {
39034     DWConv2DMicrokernelTester()
39035       .input_width(input_width)
39036       .input_height(4)
39037       .kernel_height(5)
39038       .kernel_width(5)
39039       .subsampling(2)
39040       .padding_left(2)
39041       .padding_right(2)
39042       .padding_top(2)
39043       .padding_bottom(2)
39044       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
39045   }
39046 }
39047 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1,output_width_gt_1)39048 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1, output_width_gt_1) {
39049   for (size_t input_width = 3; input_width < 11; input_width++) {
39050     DWConv2DMicrokernelTester()
39051       .input_width(input_width)
39052       .input_height(4)
39053       .kernel_height(5)
39054       .kernel_width(5)
39055       .subsampling(2)
39056       .padding_left(2)
39057       .padding_right(2)
39058       .padding_top(2)
39059       .padding_bottom(2)
39060       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
39061   }
39062 }
39063 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1,output_height_eq_2)39064 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1, output_height_eq_2) {
39065   for (size_t input_height = 3; input_height < 5; input_height++) {
39066     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39067       DWConv2DMicrokernelTester()
39068         .input_width(input_width)
39069         .input_height(input_height)
39070         .kernel_height(5)
39071         .kernel_width(5)
39072         .subsampling(2)
39073         .padding_left(2)
39074         .padding_right(2)
39075         .padding_top(2)
39076         .padding_bottom(2)
39077         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
39078     }
39079   }
39080 }
39081 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1,output_height_div_2)39082 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1, output_height_div_2) {
39083   for (size_t input_height = 8; input_height < 32; input_height += 4) {
39084     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39085       DWConv2DMicrokernelTester()
39086         .input_width(input_width)
39087         .input_height(input_height)
39088         .kernel_height(5)
39089         .kernel_width(5)
39090         .subsampling(2)
39091         .padding_left(2)
39092         .padding_right(2)
39093         .padding_top(2)
39094         .padding_bottom(2)
39095         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
39096     }
39097   }
39098 }
39099 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1,output_height_lt_2)39100 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1, output_height_lt_2) {
39101   for (size_t input_height = 1; input_height < 3; input_height++) {
39102     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39103       DWConv2DMicrokernelTester()
39104         .input_width(input_width)
39105         .input_height(input_height)
39106         .kernel_height(5)
39107         .kernel_width(5)
39108         .subsampling(2)
39109         .padding_left(2)
39110         .padding_right(2)
39111         .padding_top(2)
39112         .padding_bottom(2)
39113         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
39114     }
39115   }
39116 }
39117 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1,output_height_gt_2)39118 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1, output_height_gt_2) {
39119   for (size_t input_height = 5; input_height < 21; input_height++) {
39120     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39121       DWConv2DMicrokernelTester()
39122         .input_width(input_width)
39123         .input_height(input_height)
39124         .kernel_height(5)
39125         .kernel_width(5)
39126         .subsampling(2)
39127         .padding_left(2)
39128         .padding_right(2)
39129         .padding_top(2)
39130         .padding_bottom(2)
39131         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
39132     }
39133   }
39134 }
39135 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1,padding_top_eq_1)39136 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1, padding_top_eq_1) {
39137   for (size_t input_height = 2; input_height < 14; input_height++) {
39138     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39139       DWConv2DMicrokernelTester()
39140         .input_width(input_width)
39141         .input_height(input_height)
39142         .kernel_height(5)
39143         .kernel_width(5)
39144         .subsampling(2)
39145         .padding_left(2)
39146         .padding_right(2)
39147         .padding_top(1)
39148         .padding_bottom(2)
39149         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1, DWConv2DMicrokernelTester::Variant::Scalar);
39150     }
39151   }
39152 }
39153 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2,output_width_eq_1)39154 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2, output_width_eq_1) {
39155   for (size_t input_width = 1; input_width < 3; input_width++) {
39156     DWConv2DMicrokernelTester()
39157       .input_width(input_width)
39158       .input_height(4)
39159       .kernel_height(5)
39160       .kernel_width(5)
39161       .subsampling(2)
39162       .padding_left(2)
39163       .padding_right(2)
39164       .padding_top(2)
39165       .padding_bottom(2)
39166       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39167   }
39168 }
39169 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2,output_width_gt_1)39170 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2, output_width_gt_1) {
39171   for (size_t input_width = 3; input_width < 11; input_width++) {
39172     DWConv2DMicrokernelTester()
39173       .input_width(input_width)
39174       .input_height(4)
39175       .kernel_height(5)
39176       .kernel_width(5)
39177       .subsampling(2)
39178       .padding_left(2)
39179       .padding_right(2)
39180       .padding_top(2)
39181       .padding_bottom(2)
39182       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39183   }
39184 }
39185 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2,output_height_eq_2)39186 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2, output_height_eq_2) {
39187   for (size_t input_height = 3; input_height < 5; input_height++) {
39188     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39189       DWConv2DMicrokernelTester()
39190         .input_width(input_width)
39191         .input_height(input_height)
39192         .kernel_height(5)
39193         .kernel_width(5)
39194         .subsampling(2)
39195         .padding_left(2)
39196         .padding_right(2)
39197         .padding_top(2)
39198         .padding_bottom(2)
39199         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39200     }
39201   }
39202 }
39203 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2,output_height_div_2)39204 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2, output_height_div_2) {
39205   for (size_t input_height = 8; input_height < 32; input_height += 4) {
39206     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39207       DWConv2DMicrokernelTester()
39208         .input_width(input_width)
39209         .input_height(input_height)
39210         .kernel_height(5)
39211         .kernel_width(5)
39212         .subsampling(2)
39213         .padding_left(2)
39214         .padding_right(2)
39215         .padding_top(2)
39216         .padding_bottom(2)
39217         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39218     }
39219   }
39220 }
39221 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2,output_height_lt_2)39222 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2, output_height_lt_2) {
39223   for (size_t input_height = 1; input_height < 3; input_height++) {
39224     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39225       DWConv2DMicrokernelTester()
39226         .input_width(input_width)
39227         .input_height(input_height)
39228         .kernel_height(5)
39229         .kernel_width(5)
39230         .subsampling(2)
39231         .padding_left(2)
39232         .padding_right(2)
39233         .padding_top(2)
39234         .padding_bottom(2)
39235         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39236     }
39237   }
39238 }
39239 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2,output_height_gt_2)39240 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2, output_height_gt_2) {
39241   for (size_t input_height = 5; input_height < 21; input_height++) {
39242     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39243       DWConv2DMicrokernelTester()
39244         .input_width(input_width)
39245         .input_height(input_height)
39246         .kernel_height(5)
39247         .kernel_width(5)
39248         .subsampling(2)
39249         .padding_left(2)
39250         .padding_right(2)
39251         .padding_top(2)
39252         .padding_bottom(2)
39253         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39254     }
39255   }
39256 }
39257 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2,padding_top_eq_1)39258 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC2, padding_top_eq_1) {
39259   for (size_t input_height = 2; input_height < 14; input_height++) {
39260     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39261       DWConv2DMicrokernelTester()
39262         .input_width(input_width)
39263         .input_height(input_height)
39264         .kernel_height(5)
39265         .kernel_width(5)
39266         .subsampling(2)
39267         .padding_left(2)
39268         .padding_right(2)
39269         .padding_top(1)
39270         .padding_bottom(2)
39271         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39272     }
39273   }
39274 }
39275 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3,output_width_eq_1)39276 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3, output_width_eq_1) {
39277   for (size_t input_width = 1; input_width < 3; input_width++) {
39278     DWConv2DMicrokernelTester()
39279       .input_width(input_width)
39280       .input_height(4)
39281       .kernel_height(5)
39282       .kernel_width(5)
39283       .subsampling(2)
39284       .padding_left(2)
39285       .padding_right(2)
39286       .padding_top(2)
39287       .padding_bottom(2)
39288       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
39289   }
39290 }
39291 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3,output_width_gt_1)39292 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3, output_width_gt_1) {
39293   for (size_t input_width = 3; input_width < 11; input_width++) {
39294     DWConv2DMicrokernelTester()
39295       .input_width(input_width)
39296       .input_height(4)
39297       .kernel_height(5)
39298       .kernel_width(5)
39299       .subsampling(2)
39300       .padding_left(2)
39301       .padding_right(2)
39302       .padding_top(2)
39303       .padding_bottom(2)
39304       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
39305   }
39306 }
39307 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3,output_height_eq_2)39308 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3, output_height_eq_2) {
39309   for (size_t input_height = 3; input_height < 5; input_height++) {
39310     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39311       DWConv2DMicrokernelTester()
39312         .input_width(input_width)
39313         .input_height(input_height)
39314         .kernel_height(5)
39315         .kernel_width(5)
39316         .subsampling(2)
39317         .padding_left(2)
39318         .padding_right(2)
39319         .padding_top(2)
39320         .padding_bottom(2)
39321         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
39322     }
39323   }
39324 }
39325 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3,output_height_div_2)39326 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3, output_height_div_2) {
39327   for (size_t input_height = 8; input_height < 32; input_height += 4) {
39328     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39329       DWConv2DMicrokernelTester()
39330         .input_width(input_width)
39331         .input_height(input_height)
39332         .kernel_height(5)
39333         .kernel_width(5)
39334         .subsampling(2)
39335         .padding_left(2)
39336         .padding_right(2)
39337         .padding_top(2)
39338         .padding_bottom(2)
39339         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
39340     }
39341   }
39342 }
39343 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3,output_height_lt_2)39344 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3, output_height_lt_2) {
39345   for (size_t input_height = 1; input_height < 3; input_height++) {
39346     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39347       DWConv2DMicrokernelTester()
39348         .input_width(input_width)
39349         .input_height(input_height)
39350         .kernel_height(5)
39351         .kernel_width(5)
39352         .subsampling(2)
39353         .padding_left(2)
39354         .padding_right(2)
39355         .padding_top(2)
39356         .padding_bottom(2)
39357         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
39358     }
39359   }
39360 }
39361 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3,output_height_gt_2)39362 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3, output_height_gt_2) {
39363   for (size_t input_height = 5; input_height < 21; input_height++) {
39364     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39365       DWConv2DMicrokernelTester()
39366         .input_width(input_width)
39367         .input_height(input_height)
39368         .kernel_height(5)
39369         .kernel_width(5)
39370         .subsampling(2)
39371         .padding_left(2)
39372         .padding_right(2)
39373         .padding_top(2)
39374         .padding_bottom(2)
39375         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
39376     }
39377   }
39378 }
39379 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3,padding_top_eq_1)39380 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_2X1_ACC3, padding_top_eq_1) {
39381   for (size_t input_height = 2; input_height < 14; input_height++) {
39382     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39383       DWConv2DMicrokernelTester()
39384         .input_width(input_width)
39385         .input_height(input_height)
39386         .kernel_height(5)
39387         .kernel_width(5)
39388         .subsampling(2)
39389         .padding_left(2)
39390         .padding_right(2)
39391         .padding_top(1)
39392         .padding_bottom(2)
39393         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_2x1_acc3, DWConv2DMicrokernelTester::Variant::Scalar);
39394     }
39395   }
39396 }
39397 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1,output_width_eq_1)39398 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1, output_width_eq_1) {
39399   for (size_t input_width = 1; input_width < 3; input_width++) {
39400     DWConv2DMicrokernelTester()
39401       .input_width(input_width)
39402       .input_height(6)
39403       .kernel_height(5)
39404       .kernel_width(5)
39405       .subsampling(2)
39406       .padding_left(2)
39407       .padding_right(2)
39408       .padding_top(2)
39409       .padding_bottom(2)
39410       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
39411   }
39412 }
39413 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1,output_width_gt_1)39414 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1, output_width_gt_1) {
39415   for (size_t input_width = 3; input_width < 11; input_width++) {
39416     DWConv2DMicrokernelTester()
39417       .input_width(input_width)
39418       .input_height(6)
39419       .kernel_height(5)
39420       .kernel_width(5)
39421       .subsampling(2)
39422       .padding_left(2)
39423       .padding_right(2)
39424       .padding_top(2)
39425       .padding_bottom(2)
39426       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
39427   }
39428 }
39429 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1,output_height_eq_3)39430 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1, output_height_eq_3) {
39431   for (size_t input_height = 5; input_height < 7; input_height++) {
39432     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39433       DWConv2DMicrokernelTester()
39434         .input_width(input_width)
39435         .input_height(input_height)
39436         .kernel_height(5)
39437         .kernel_width(5)
39438         .subsampling(2)
39439         .padding_left(2)
39440         .padding_right(2)
39441         .padding_top(2)
39442         .padding_bottom(2)
39443         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
39444     }
39445   }
39446 }
39447 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1,output_height_div_3)39448 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1, output_height_div_3) {
39449   for (size_t input_height = 12; input_height < 48; input_height += 6) {
39450     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39451       DWConv2DMicrokernelTester()
39452         .input_width(input_width)
39453         .input_height(input_height)
39454         .kernel_height(5)
39455         .kernel_width(5)
39456         .subsampling(2)
39457         .padding_left(2)
39458         .padding_right(2)
39459         .padding_top(2)
39460         .padding_bottom(2)
39461         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
39462     }
39463   }
39464 }
39465 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1,output_height_lt_3)39466 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1, output_height_lt_3) {
39467   for (size_t input_height = 1; input_height < 5; input_height++) {
39468     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39469       DWConv2DMicrokernelTester()
39470         .input_width(input_width)
39471         .input_height(input_height)
39472         .kernel_height(5)
39473         .kernel_width(5)
39474         .subsampling(2)
39475         .padding_left(2)
39476         .padding_right(2)
39477         .padding_top(2)
39478         .padding_bottom(2)
39479         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
39480     }
39481   }
39482 }
39483 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1,output_height_gt_3)39484 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1, output_height_gt_3) {
39485   for (size_t input_height = 7; input_height < 31; input_height++) {
39486     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39487       DWConv2DMicrokernelTester()
39488         .input_width(input_width)
39489         .input_height(input_height)
39490         .kernel_height(5)
39491         .kernel_width(5)
39492         .subsampling(2)
39493         .padding_left(2)
39494         .padding_right(2)
39495         .padding_top(2)
39496         .padding_bottom(2)
39497         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
39498     }
39499   }
39500 }
39501 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1,padding_top_eq_1)39502 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1, padding_top_eq_1) {
39503   for (size_t input_height = 2; input_height < 20; input_height++) {
39504     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39505       DWConv2DMicrokernelTester()
39506         .input_width(input_width)
39507         .input_height(input_height)
39508         .kernel_height(5)
39509         .kernel_width(5)
39510         .subsampling(2)
39511         .padding_left(2)
39512         .padding_right(2)
39513         .padding_top(1)
39514         .padding_bottom(2)
39515         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1, DWConv2DMicrokernelTester::Variant::Scalar);
39516     }
39517   }
39518 }
39519 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2,output_width_eq_1)39520 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2, output_width_eq_1) {
39521   for (size_t input_width = 1; input_width < 3; input_width++) {
39522     DWConv2DMicrokernelTester()
39523       .input_width(input_width)
39524       .input_height(6)
39525       .kernel_height(5)
39526       .kernel_width(5)
39527       .subsampling(2)
39528       .padding_left(2)
39529       .padding_right(2)
39530       .padding_top(2)
39531       .padding_bottom(2)
39532       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39533   }
39534 }
39535 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2,output_width_gt_1)39536 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2, output_width_gt_1) {
39537   for (size_t input_width = 3; input_width < 11; input_width++) {
39538     DWConv2DMicrokernelTester()
39539       .input_width(input_width)
39540       .input_height(6)
39541       .kernel_height(5)
39542       .kernel_width(5)
39543       .subsampling(2)
39544       .padding_left(2)
39545       .padding_right(2)
39546       .padding_top(2)
39547       .padding_bottom(2)
39548       .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39549   }
39550 }
39551 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2,output_height_eq_3)39552 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2, output_height_eq_3) {
39553   for (size_t input_height = 5; input_height < 7; input_height++) {
39554     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39555       DWConv2DMicrokernelTester()
39556         .input_width(input_width)
39557         .input_height(input_height)
39558         .kernel_height(5)
39559         .kernel_width(5)
39560         .subsampling(2)
39561         .padding_left(2)
39562         .padding_right(2)
39563         .padding_top(2)
39564         .padding_bottom(2)
39565         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39566     }
39567   }
39568 }
39569 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2,output_height_div_3)39570 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2, output_height_div_3) {
39571   for (size_t input_height = 12; input_height < 48; input_height += 6) {
39572     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39573       DWConv2DMicrokernelTester()
39574         .input_width(input_width)
39575         .input_height(input_height)
39576         .kernel_height(5)
39577         .kernel_width(5)
39578         .subsampling(2)
39579         .padding_left(2)
39580         .padding_right(2)
39581         .padding_top(2)
39582         .padding_bottom(2)
39583         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39584     }
39585   }
39586 }
39587 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2,output_height_lt_3)39588 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2, output_height_lt_3) {
39589   for (size_t input_height = 1; input_height < 5; input_height++) {
39590     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39591       DWConv2DMicrokernelTester()
39592         .input_width(input_width)
39593         .input_height(input_height)
39594         .kernel_height(5)
39595         .kernel_width(5)
39596         .subsampling(2)
39597         .padding_left(2)
39598         .padding_right(2)
39599         .padding_top(2)
39600         .padding_bottom(2)
39601         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39602     }
39603   }
39604 }
39605 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2,output_height_gt_3)39606 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2, output_height_gt_3) {
39607   for (size_t input_height = 7; input_height < 31; input_height++) {
39608     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39609       DWConv2DMicrokernelTester()
39610         .input_width(input_width)
39611         .input_height(input_height)
39612         .kernel_height(5)
39613         .kernel_width(5)
39614         .subsampling(2)
39615         .padding_left(2)
39616         .padding_right(2)
39617         .padding_top(2)
39618         .padding_bottom(2)
39619         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39620     }
39621   }
39622 }
39623 
TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2,padding_top_eq_1)39624 TEST(F32_DWCONV2D_CHW_5X5S2P2__SCALAR_3X1_ACC2, padding_top_eq_1) {
39625   for (size_t input_height = 2; input_height < 20; input_height++) {
39626     for (size_t input_width = 1; input_width < 11; input_width += 1) {
39627       DWConv2DMicrokernelTester()
39628         .input_width(input_width)
39629         .input_height(input_height)
39630         .kernel_height(5)
39631         .kernel_width(5)
39632         .subsampling(2)
39633         .padding_left(2)
39634         .padding_right(2)
39635         .padding_top(1)
39636         .padding_bottom(2)
39637         .Test(xnn_f32_dwconv2d_chw_ukernel_5x5s2p2__scalar_3x1_acc2, DWConv2DMicrokernelTester::Variant::Scalar);
39638     }
39639   }
39640 }