xref: /aosp_15_r20/external/XNNPACK/test/f32-dwconv-minmax.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1 // Copyright (c) Facebook, Inc. and its affiliates.
2 // All rights reserved.
3 //
4 // Copyright 2019 Google LLC
5 //
6 // This source code is licensed under the BSD-style license found in the
7 // LICENSE file in the root directory of this source tree.
8 //
9 // Auto-generated file. Do not edit!
10 //   Specification: test/f32-dwconv-minmax.yaml
11 //   Generator: tools/generate-dwconv-test.py
12 
13 
14 #include <gtest/gtest.h>
15 
16 #include <xnnpack/common.h>
17 #include <xnnpack/isa-checks.h>
18 
19 #include <xnnpack/dwconv.h>
20 #include "dwconv-microkernel-tester.h"
21 
22 
23 #if XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,c_eq_4)24   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_eq_4) {
25     TEST_REQUIRES_ARM_NEON_FMA;
26     DWConvMicrokernelTester()
27       .cr(4)
28       .kr(9)
29       .channels(4)
30       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
31   }
32 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,c_div_4)33   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_div_4) {
34     TEST_REQUIRES_ARM_NEON_FMA;
35     for (uint32_t channels = 8; channels < 64; channels += 12) {
36       DWConvMicrokernelTester()
37         .cr(4)
38         .kr(9)
39         .channels(channels)
40         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
41     }
42   }
43 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,c_div_4_with_qmin)44   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_div_4_with_qmin) {
45     TEST_REQUIRES_ARM_NEON_FMA;
46     for (uint32_t channels = 8; channels < 64; channels += 12) {
47       DWConvMicrokernelTester()
48         .cr(4)
49         .kr(9)
50         .channels(channels)
51         .qmin(128)
52         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
53     }
54   }
55 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,c_div_4_with_qmax)56   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_div_4_with_qmax) {
57     TEST_REQUIRES_ARM_NEON_FMA;
58     for (uint32_t channels = 8; channels < 64; channels += 12) {
59       DWConvMicrokernelTester()
60         .cr(4)
61         .kr(9)
62         .channels(channels)
63         .qmax(128)
64         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
65     }
66   }
67 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,c_lt_4)68   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_lt_4) {
69     TEST_REQUIRES_ARM_NEON_FMA;
70     for (uint32_t channels = 1; channels < 4; channels++) {
71       DWConvMicrokernelTester()
72         .cr(4)
73         .kr(9)
74         .channels(channels)
75         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
76     }
77   }
78 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,c_gt_4)79   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_gt_4) {
80     TEST_REQUIRES_ARM_NEON_FMA;
81     for (uint32_t channels = 5; channels < 8; channels++) {
82       DWConvMicrokernelTester()
83         .cr(4)
84         .kr(9)
85         .channels(channels)
86         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
87     }
88   }
89 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,c_gt_4_with_qmin)90   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_gt_4_with_qmin) {
91     TEST_REQUIRES_ARM_NEON_FMA;
92     for (uint32_t channels = 5; channels < 8; channels++) {
93       DWConvMicrokernelTester()
94         .cr(4)
95         .kr(9)
96         .channels(channels)
97         .qmin(128)
98         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
99     }
100   }
101 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,c_gt_4_with_qmax)102   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_gt_4_with_qmax) {
103     TEST_REQUIRES_ARM_NEON_FMA;
104     for (uint32_t channels = 5; channels < 8; channels++) {
105       DWConvMicrokernelTester()
106         .cr(4)
107         .kr(9)
108         .channels(channels)
109         .qmax(128)
110         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
111     }
112   }
113 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,multipixel)114   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, multipixel) {
115     TEST_REQUIRES_ARM_NEON_FMA;
116     for (size_t channels = 1; channels <= 20; channels += 3) {
117       DWConvMicrokernelTester()
118         .cr(4)
119         .kr(9)
120         .channels(channels)
121         .width(3)
122         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
123     }
124   }
125 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,multipixel_with_step)126   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, multipixel_with_step) {
127     TEST_REQUIRES_ARM_NEON_FMA;
128     for (size_t channels = 1; channels <= 20; channels += 3) {
129       for (size_t step = 2; step <= 9; step++) {
130         DWConvMicrokernelTester()
131           .cr(4)
132           .kr(9)
133           .channels(channels)
134           .width(3)
135           .step(step)
136           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
137       }
138     }
139   }
140 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,multipixel_with_output_stride)141   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, multipixel_with_output_stride) {
142     TEST_REQUIRES_ARM_NEON_FMA;
143     for (size_t channels = 1; channels <= 20; channels += 3) {
144       DWConvMicrokernelTester()
145         .cr(4)
146         .kr(9)
147         .channels(4)
148         .width(5)
149         .output_stride(23)
150         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
151     }
152   }
153 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,multipixel_with_qmin)154   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, multipixel_with_qmin) {
155     TEST_REQUIRES_ARM_NEON_FMA;
156     for (size_t channels = 1; channels <= 20; channels += 3) {
157       DWConvMicrokernelTester()
158         .cr(4)
159         .kr(9)
160         .channels(channels)
161         .width(3)
162         .qmin(128)
163         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
164     }
165   }
166 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,multipixel_with_qmax)167   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, multipixel_with_qmax) {
168     TEST_REQUIRES_ARM_NEON_FMA;
169     for (size_t channels = 1; channels <= 20; channels += 3) {
170       DWConvMicrokernelTester()
171         .cr(4)
172         .kr(9)
173         .channels(channels)
174         .width(3)
175         .qmax(128)
176         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
177     }
178   }
179 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,input_offset)180   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, input_offset) {
181     TEST_REQUIRES_ARM_NEON_FMA;
182     for (uint32_t channels = 8; channels < 64; channels += 12) {
183       DWConvMicrokernelTester()
184         .cr(4)
185         .kr(9)
186         .channels(channels)
187         .input_offset(112)
188         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
189     }
190   }
191 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA,zero)192   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, zero) {
193     TEST_REQUIRES_ARM_NEON_FMA;
194     for (uint32_t mz = 0; mz < 9; mz++) {
195       for (uint32_t channels = 8; channels < 64; channels += 12) {
196         DWConvMicrokernelTester()
197           .cr(4)
198           .kr(9)
199           .channels(channels)
200           .input_offset(112)
201           .zero_index(mz)
202           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
203       }
204     }
205   }
206 #endif  // XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
207 
208 
209 #if XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,c_eq_4)210   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_eq_4) {
211     TEST_REQUIRES_ARM_NEON_FMA;
212     DWConvMicrokernelTester()
213       .cr(4)
214       .kr(9)
215       .channels(4)
216       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
217   }
218 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,c_eq_8)219   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_eq_8) {
220     TEST_REQUIRES_ARM_NEON_FMA;
221     DWConvMicrokernelTester()
222       .cr(4)
223       .kr(9)
224       .channels(8)
225       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
226   }
227 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,c_div_4)228   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_div_4) {
229     TEST_REQUIRES_ARM_NEON_FMA;
230     for (uint32_t channels = 12; channels < 64; channels += 12) {
231       DWConvMicrokernelTester()
232         .cr(4)
233         .kr(9)
234         .channels(channels)
235         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
236     }
237   }
238 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,c_div_4_with_qmin)239   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_div_4_with_qmin) {
240     TEST_REQUIRES_ARM_NEON_FMA;
241     for (uint32_t channels = 12; channels < 64; channels += 12) {
242       DWConvMicrokernelTester()
243         .cr(4)
244         .kr(9)
245         .channels(channels)
246         .qmin(128)
247         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
248     }
249   }
250 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,c_div_4_with_qmax)251   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_div_4_with_qmax) {
252     TEST_REQUIRES_ARM_NEON_FMA;
253     for (uint32_t channels = 12; channels < 64; channels += 12) {
254       DWConvMicrokernelTester()
255         .cr(4)
256         .kr(9)
257         .channels(channels)
258         .qmax(128)
259         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
260     }
261   }
262 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,c_lt_8)263   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_lt_8) {
264     TEST_REQUIRES_ARM_NEON_FMA;
265     for (uint32_t channels = 1; channels < 8; channels++) {
266       DWConvMicrokernelTester()
267         .cr(4)
268         .kr(9)
269         .channels(channels)
270         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
271     }
272   }
273 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,c_gt_8)274   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_gt_8) {
275     TEST_REQUIRES_ARM_NEON_FMA;
276     for (uint32_t channels = 9; channels < 12; channels++) {
277       DWConvMicrokernelTester()
278         .cr(4)
279         .kr(9)
280         .channels(channels)
281         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
282     }
283   }
284 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,c_gt_8_with_qmin)285   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_gt_8_with_qmin) {
286     TEST_REQUIRES_ARM_NEON_FMA;
287     for (uint32_t channels = 9; channels < 12; channels++) {
288       DWConvMicrokernelTester()
289         .cr(4)
290         .kr(9)
291         .channels(channels)
292         .qmin(128)
293         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
294     }
295   }
296 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,c_gt_8_with_qmax)297   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_gt_8_with_qmax) {
298     TEST_REQUIRES_ARM_NEON_FMA;
299     for (uint32_t channels = 9; channels < 12; channels++) {
300       DWConvMicrokernelTester()
301         .cr(4)
302         .kr(9)
303         .channels(channels)
304         .qmax(128)
305         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
306     }
307   }
308 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,multipixel)309   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel) {
310     TEST_REQUIRES_ARM_NEON_FMA;
311     for (size_t channels = 1; channels <= 20; channels += 3) {
312       DWConvMicrokernelTester()
313         .cr(4)
314         .kr(9)
315         .channels(channels)
316         .width(3)
317         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
318     }
319   }
320 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,multipixel_with_step)321   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_step) {
322     TEST_REQUIRES_ARM_NEON_FMA;
323     for (size_t channels = 1; channels <= 20; channels += 3) {
324       for (size_t step = 2; step <= 9; step++) {
325         DWConvMicrokernelTester()
326           .cr(4)
327           .kr(9)
328           .channels(channels)
329           .width(3)
330           .step(step)
331           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
332       }
333     }
334   }
335 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,multipixel_with_output_stride)336   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_output_stride) {
337     TEST_REQUIRES_ARM_NEON_FMA;
338     for (size_t channels = 1; channels <= 20; channels += 3) {
339       DWConvMicrokernelTester()
340         .cr(4)
341         .kr(9)
342         .channels(4)
343         .width(5)
344         .output_stride(23)
345         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
346     }
347   }
348 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,multipixel_with_qmin)349   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_qmin) {
350     TEST_REQUIRES_ARM_NEON_FMA;
351     for (size_t channels = 1; channels <= 20; channels += 3) {
352       DWConvMicrokernelTester()
353         .cr(4)
354         .kr(9)
355         .channels(channels)
356         .width(3)
357         .qmin(128)
358         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
359     }
360   }
361 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,multipixel_with_qmax)362   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_qmax) {
363     TEST_REQUIRES_ARM_NEON_FMA;
364     for (size_t channels = 1; channels <= 20; channels += 3) {
365       DWConvMicrokernelTester()
366         .cr(4)
367         .kr(9)
368         .channels(channels)
369         .width(3)
370         .qmax(128)
371         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
372     }
373   }
374 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,input_offset)375   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, input_offset) {
376     TEST_REQUIRES_ARM_NEON_FMA;
377     for (uint32_t channels = 12; channels < 64; channels += 12) {
378       DWConvMicrokernelTester()
379         .cr(4)
380         .kr(9)
381         .channels(channels)
382         .input_offset(112)
383         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
384     }
385   }
386 
TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55,zero)387   TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, zero) {
388     TEST_REQUIRES_ARM_NEON_FMA;
389     for (uint32_t mz = 0; mz < 9; mz++) {
390       for (uint32_t channels = 12; channels < 64; channels += 12) {
391         DWConvMicrokernelTester()
392           .cr(4)
393           .kr(9)
394           .channels(channels)
395           .input_offset(112)
396           .zero_index(mz)
397           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
398       }
399     }
400   }
401 #endif  // XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
402 
403 
404 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,c_eq_4)405   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_eq_4) {
406     TEST_REQUIRES_ARM_NEON;
407     DWConvMicrokernelTester()
408       .cr(4)
409       .kr(3)
410       .channels(4)
411       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
412   }
413 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,c_div_4)414   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_div_4) {
415     TEST_REQUIRES_ARM_NEON;
416     for (uint32_t channels = 8; channels < 64; channels += 12) {
417       DWConvMicrokernelTester()
418         .cr(4)
419         .kr(3)
420         .channels(channels)
421         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
422     }
423   }
424 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,c_div_4_with_qmin)425   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_div_4_with_qmin) {
426     TEST_REQUIRES_ARM_NEON;
427     for (uint32_t channels = 8; channels < 64; channels += 12) {
428       DWConvMicrokernelTester()
429         .cr(4)
430         .kr(3)
431         .channels(channels)
432         .qmin(128)
433         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
434     }
435   }
436 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,c_div_4_with_qmax)437   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_div_4_with_qmax) {
438     TEST_REQUIRES_ARM_NEON;
439     for (uint32_t channels = 8; channels < 64; channels += 12) {
440       DWConvMicrokernelTester()
441         .cr(4)
442         .kr(3)
443         .channels(channels)
444         .qmax(128)
445         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
446     }
447   }
448 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,c_lt_4)449   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_lt_4) {
450     TEST_REQUIRES_ARM_NEON;
451     for (uint32_t channels = 1; channels < 4; channels++) {
452       DWConvMicrokernelTester()
453         .cr(4)
454         .kr(3)
455         .channels(channels)
456         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
457     }
458   }
459 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,c_gt_4)460   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_gt_4) {
461     TEST_REQUIRES_ARM_NEON;
462     for (uint32_t channels = 5; channels < 8; channels++) {
463       DWConvMicrokernelTester()
464         .cr(4)
465         .kr(3)
466         .channels(channels)
467         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
468     }
469   }
470 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,c_gt_4_with_qmin)471   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_gt_4_with_qmin) {
472     TEST_REQUIRES_ARM_NEON;
473     for (uint32_t channels = 5; channels < 8; channels++) {
474       DWConvMicrokernelTester()
475         .cr(4)
476         .kr(3)
477         .channels(channels)
478         .qmin(128)
479         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
480     }
481   }
482 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,c_gt_4_with_qmax)483   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_gt_4_with_qmax) {
484     TEST_REQUIRES_ARM_NEON;
485     for (uint32_t channels = 5; channels < 8; channels++) {
486       DWConvMicrokernelTester()
487         .cr(4)
488         .kr(3)
489         .channels(channels)
490         .qmax(128)
491         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
492     }
493   }
494 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,multipixel)495   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, multipixel) {
496     TEST_REQUIRES_ARM_NEON;
497     for (size_t channels = 1; channels <= 20; channels += 3) {
498       DWConvMicrokernelTester()
499         .cr(4)
500         .kr(3)
501         .channels(channels)
502         .width(3)
503         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
504     }
505   }
506 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,multipixel_with_step)507   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, multipixel_with_step) {
508     TEST_REQUIRES_ARM_NEON;
509     for (size_t channels = 1; channels <= 20; channels += 3) {
510       for (size_t step = 2; step <= 3; step++) {
511         DWConvMicrokernelTester()
512           .cr(4)
513           .kr(3)
514           .channels(channels)
515           .width(3)
516           .step(step)
517           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
518       }
519     }
520   }
521 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,multipixel_with_output_stride)522   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, multipixel_with_output_stride) {
523     TEST_REQUIRES_ARM_NEON;
524     for (size_t channels = 1; channels <= 20; channels += 3) {
525       DWConvMicrokernelTester()
526         .cr(4)
527         .kr(3)
528         .channels(4)
529         .width(5)
530         .output_stride(23)
531         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
532     }
533   }
534 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,multipixel_with_qmin)535   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, multipixel_with_qmin) {
536     TEST_REQUIRES_ARM_NEON;
537     for (size_t channels = 1; channels <= 20; channels += 3) {
538       DWConvMicrokernelTester()
539         .cr(4)
540         .kr(3)
541         .channels(channels)
542         .width(3)
543         .qmin(128)
544         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
545     }
546   }
547 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,multipixel_with_qmax)548   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, multipixel_with_qmax) {
549     TEST_REQUIRES_ARM_NEON;
550     for (size_t channels = 1; channels <= 20; channels += 3) {
551       DWConvMicrokernelTester()
552         .cr(4)
553         .kr(3)
554         .channels(channels)
555         .width(3)
556         .qmax(128)
557         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
558     }
559   }
560 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,input_offset)561   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, input_offset) {
562     TEST_REQUIRES_ARM_NEON;
563     for (uint32_t channels = 8; channels < 64; channels += 12) {
564       DWConvMicrokernelTester()
565         .cr(4)
566         .kr(3)
567         .channels(channels)
568         .input_offset(112)
569         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
570     }
571   }
572 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON,zero)573   TEST(F32_DWCONV_MINMAX_UP4X3__NEON, zero) {
574     TEST_REQUIRES_ARM_NEON;
575     for (uint32_t mz = 0; mz < 3; mz++) {
576       for (uint32_t channels = 8; channels < 64; channels += 12) {
577         DWConvMicrokernelTester()
578           .cr(4)
579           .kr(3)
580           .channels(channels)
581           .input_offset(112)
582           .zero_index(mz)
583           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
584       }
585     }
586   }
587 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
588 
589 
590 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,c_eq_4)591   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_eq_4) {
592     TEST_REQUIRES_ARM_NEON;
593     DWConvMicrokernelTester()
594       .cr(4)
595       .kr(3)
596       .channels(4)
597       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
598   }
599 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,c_div_4)600   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_div_4) {
601     TEST_REQUIRES_ARM_NEON;
602     for (uint32_t channels = 8; channels < 64; channels += 12) {
603       DWConvMicrokernelTester()
604         .cr(4)
605         .kr(3)
606         .channels(channels)
607         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
608     }
609   }
610 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,c_div_4_with_qmin)611   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_div_4_with_qmin) {
612     TEST_REQUIRES_ARM_NEON;
613     for (uint32_t channels = 8; channels < 64; channels += 12) {
614       DWConvMicrokernelTester()
615         .cr(4)
616         .kr(3)
617         .channels(channels)
618         .qmin(128)
619         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
620     }
621   }
622 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,c_div_4_with_qmax)623   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_div_4_with_qmax) {
624     TEST_REQUIRES_ARM_NEON;
625     for (uint32_t channels = 8; channels < 64; channels += 12) {
626       DWConvMicrokernelTester()
627         .cr(4)
628         .kr(3)
629         .channels(channels)
630         .qmax(128)
631         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
632     }
633   }
634 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,c_lt_4)635   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_lt_4) {
636     TEST_REQUIRES_ARM_NEON;
637     for (uint32_t channels = 1; channels < 4; channels++) {
638       DWConvMicrokernelTester()
639         .cr(4)
640         .kr(3)
641         .channels(channels)
642         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
643     }
644   }
645 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,c_gt_4)646   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_gt_4) {
647     TEST_REQUIRES_ARM_NEON;
648     for (uint32_t channels = 5; channels < 8; channels++) {
649       DWConvMicrokernelTester()
650         .cr(4)
651         .kr(3)
652         .channels(channels)
653         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
654     }
655   }
656 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,c_gt_4_with_qmin)657   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_gt_4_with_qmin) {
658     TEST_REQUIRES_ARM_NEON;
659     for (uint32_t channels = 5; channels < 8; channels++) {
660       DWConvMicrokernelTester()
661         .cr(4)
662         .kr(3)
663         .channels(channels)
664         .qmin(128)
665         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
666     }
667   }
668 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,c_gt_4_with_qmax)669   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_gt_4_with_qmax) {
670     TEST_REQUIRES_ARM_NEON;
671     for (uint32_t channels = 5; channels < 8; channels++) {
672       DWConvMicrokernelTester()
673         .cr(4)
674         .kr(3)
675         .channels(channels)
676         .qmax(128)
677         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
678     }
679   }
680 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,multipixel)681   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, multipixel) {
682     TEST_REQUIRES_ARM_NEON;
683     for (size_t channels = 1; channels <= 20; channels += 3) {
684       DWConvMicrokernelTester()
685         .cr(4)
686         .kr(3)
687         .channels(channels)
688         .width(3)
689         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
690     }
691   }
692 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,multipixel_with_step)693   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, multipixel_with_step) {
694     TEST_REQUIRES_ARM_NEON;
695     for (size_t channels = 1; channels <= 20; channels += 3) {
696       for (size_t step = 2; step <= 3; step++) {
697         DWConvMicrokernelTester()
698           .cr(4)
699           .kr(3)
700           .channels(channels)
701           .width(3)
702           .step(step)
703           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
704       }
705     }
706   }
707 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,multipixel_with_output_stride)708   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, multipixel_with_output_stride) {
709     TEST_REQUIRES_ARM_NEON;
710     for (size_t channels = 1; channels <= 20; channels += 3) {
711       DWConvMicrokernelTester()
712         .cr(4)
713         .kr(3)
714         .channels(4)
715         .width(5)
716         .output_stride(23)
717         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
718     }
719   }
720 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,multipixel_with_qmin)721   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, multipixel_with_qmin) {
722     TEST_REQUIRES_ARM_NEON;
723     for (size_t channels = 1; channels <= 20; channels += 3) {
724       DWConvMicrokernelTester()
725         .cr(4)
726         .kr(3)
727         .channels(channels)
728         .width(3)
729         .qmin(128)
730         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
731     }
732   }
733 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,multipixel_with_qmax)734   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, multipixel_with_qmax) {
735     TEST_REQUIRES_ARM_NEON;
736     for (size_t channels = 1; channels <= 20; channels += 3) {
737       DWConvMicrokernelTester()
738         .cr(4)
739         .kr(3)
740         .channels(channels)
741         .width(3)
742         .qmax(128)
743         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
744     }
745   }
746 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,input_offset)747   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, input_offset) {
748     TEST_REQUIRES_ARM_NEON;
749     for (uint32_t channels = 8; channels < 64; channels += 12) {
750       DWConvMicrokernelTester()
751         .cr(4)
752         .kr(3)
753         .channels(channels)
754         .input_offset(112)
755         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
756     }
757   }
758 
TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2,zero)759   TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, zero) {
760     TEST_REQUIRES_ARM_NEON;
761     for (uint32_t mz = 0; mz < 3; mz++) {
762       for (uint32_t channels = 8; channels < 64; channels += 12) {
763         DWConvMicrokernelTester()
764           .cr(4)
765           .kr(3)
766           .channels(channels)
767           .input_offset(112)
768           .zero_index(mz)
769           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
770       }
771     }
772   }
773 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
774 
775 
776 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,c_eq_4)777   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_eq_4) {
778     TEST_REQUIRES_ARM_NEON_FMA;
779     DWConvMicrokernelTester()
780       .cr(4)
781       .kr(3)
782       .channels(4)
783       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
784   }
785 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,c_div_4)786   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_div_4) {
787     TEST_REQUIRES_ARM_NEON_FMA;
788     for (uint32_t channels = 8; channels < 64; channels += 12) {
789       DWConvMicrokernelTester()
790         .cr(4)
791         .kr(3)
792         .channels(channels)
793         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
794     }
795   }
796 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,c_div_4_with_qmin)797   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_div_4_with_qmin) {
798     TEST_REQUIRES_ARM_NEON_FMA;
799     for (uint32_t channels = 8; channels < 64; channels += 12) {
800       DWConvMicrokernelTester()
801         .cr(4)
802         .kr(3)
803         .channels(channels)
804         .qmin(128)
805         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
806     }
807   }
808 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,c_div_4_with_qmax)809   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_div_4_with_qmax) {
810     TEST_REQUIRES_ARM_NEON_FMA;
811     for (uint32_t channels = 8; channels < 64; channels += 12) {
812       DWConvMicrokernelTester()
813         .cr(4)
814         .kr(3)
815         .channels(channels)
816         .qmax(128)
817         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
818     }
819   }
820 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,c_lt_4)821   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_lt_4) {
822     TEST_REQUIRES_ARM_NEON_FMA;
823     for (uint32_t channels = 1; channels < 4; channels++) {
824       DWConvMicrokernelTester()
825         .cr(4)
826         .kr(3)
827         .channels(channels)
828         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
829     }
830   }
831 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,c_gt_4)832   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_gt_4) {
833     TEST_REQUIRES_ARM_NEON_FMA;
834     for (uint32_t channels = 5; channels < 8; channels++) {
835       DWConvMicrokernelTester()
836         .cr(4)
837         .kr(3)
838         .channels(channels)
839         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
840     }
841   }
842 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,c_gt_4_with_qmin)843   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_gt_4_with_qmin) {
844     TEST_REQUIRES_ARM_NEON_FMA;
845     for (uint32_t channels = 5; channels < 8; channels++) {
846       DWConvMicrokernelTester()
847         .cr(4)
848         .kr(3)
849         .channels(channels)
850         .qmin(128)
851         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
852     }
853   }
854 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,c_gt_4_with_qmax)855   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_gt_4_with_qmax) {
856     TEST_REQUIRES_ARM_NEON_FMA;
857     for (uint32_t channels = 5; channels < 8; channels++) {
858       DWConvMicrokernelTester()
859         .cr(4)
860         .kr(3)
861         .channels(channels)
862         .qmax(128)
863         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
864     }
865   }
866 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,multipixel)867   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, multipixel) {
868     TEST_REQUIRES_ARM_NEON_FMA;
869     for (size_t channels = 1; channels <= 20; channels += 3) {
870       DWConvMicrokernelTester()
871         .cr(4)
872         .kr(3)
873         .channels(channels)
874         .width(3)
875         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
876     }
877   }
878 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,multipixel_with_step)879   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, multipixel_with_step) {
880     TEST_REQUIRES_ARM_NEON_FMA;
881     for (size_t channels = 1; channels <= 20; channels += 3) {
882       for (size_t step = 2; step <= 3; step++) {
883         DWConvMicrokernelTester()
884           .cr(4)
885           .kr(3)
886           .channels(channels)
887           .width(3)
888           .step(step)
889           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
890       }
891     }
892   }
893 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,multipixel_with_output_stride)894   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, multipixel_with_output_stride) {
895     TEST_REQUIRES_ARM_NEON_FMA;
896     for (size_t channels = 1; channels <= 20; channels += 3) {
897       DWConvMicrokernelTester()
898         .cr(4)
899         .kr(3)
900         .channels(4)
901         .width(5)
902         .output_stride(23)
903         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
904     }
905   }
906 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,multipixel_with_qmin)907   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, multipixel_with_qmin) {
908     TEST_REQUIRES_ARM_NEON_FMA;
909     for (size_t channels = 1; channels <= 20; channels += 3) {
910       DWConvMicrokernelTester()
911         .cr(4)
912         .kr(3)
913         .channels(channels)
914         .width(3)
915         .qmin(128)
916         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
917     }
918   }
919 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,multipixel_with_qmax)920   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, multipixel_with_qmax) {
921     TEST_REQUIRES_ARM_NEON_FMA;
922     for (size_t channels = 1; channels <= 20; channels += 3) {
923       DWConvMicrokernelTester()
924         .cr(4)
925         .kr(3)
926         .channels(channels)
927         .width(3)
928         .qmax(128)
929         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
930     }
931   }
932 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,input_offset)933   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, input_offset) {
934     TEST_REQUIRES_ARM_NEON_FMA;
935     for (uint32_t channels = 8; channels < 64; channels += 12) {
936       DWConvMicrokernelTester()
937         .cr(4)
938         .kr(3)
939         .channels(channels)
940         .input_offset(112)
941         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
942     }
943   }
944 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA,zero)945   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, zero) {
946     TEST_REQUIRES_ARM_NEON_FMA;
947     for (uint32_t mz = 0; mz < 3; mz++) {
948       for (uint32_t channels = 8; channels < 64; channels += 12) {
949         DWConvMicrokernelTester()
950           .cr(4)
951           .kr(3)
952           .channels(channels)
953           .input_offset(112)
954           .zero_index(mz)
955           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
956       }
957     }
958   }
959 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
960 
961 
962 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,c_eq_4)963   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_eq_4) {
964     TEST_REQUIRES_ARM_NEON_FMA;
965     DWConvMicrokernelTester()
966       .cr(4)
967       .kr(3)
968       .channels(4)
969       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
970   }
971 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,c_div_4)972   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_div_4) {
973     TEST_REQUIRES_ARM_NEON_FMA;
974     for (uint32_t channels = 8; channels < 64; channels += 12) {
975       DWConvMicrokernelTester()
976         .cr(4)
977         .kr(3)
978         .channels(channels)
979         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
980     }
981   }
982 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,c_div_4_with_qmin)983   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_div_4_with_qmin) {
984     TEST_REQUIRES_ARM_NEON_FMA;
985     for (uint32_t channels = 8; channels < 64; channels += 12) {
986       DWConvMicrokernelTester()
987         .cr(4)
988         .kr(3)
989         .channels(channels)
990         .qmin(128)
991         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
992     }
993   }
994 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,c_div_4_with_qmax)995   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_div_4_with_qmax) {
996     TEST_REQUIRES_ARM_NEON_FMA;
997     for (uint32_t channels = 8; channels < 64; channels += 12) {
998       DWConvMicrokernelTester()
999         .cr(4)
1000         .kr(3)
1001         .channels(channels)
1002         .qmax(128)
1003         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1004     }
1005   }
1006 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,c_lt_4)1007   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_lt_4) {
1008     TEST_REQUIRES_ARM_NEON_FMA;
1009     for (uint32_t channels = 1; channels < 4; channels++) {
1010       DWConvMicrokernelTester()
1011         .cr(4)
1012         .kr(3)
1013         .channels(channels)
1014         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1015     }
1016   }
1017 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,c_gt_4)1018   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_gt_4) {
1019     TEST_REQUIRES_ARM_NEON_FMA;
1020     for (uint32_t channels = 5; channels < 8; channels++) {
1021       DWConvMicrokernelTester()
1022         .cr(4)
1023         .kr(3)
1024         .channels(channels)
1025         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1026     }
1027   }
1028 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,c_gt_4_with_qmin)1029   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_gt_4_with_qmin) {
1030     TEST_REQUIRES_ARM_NEON_FMA;
1031     for (uint32_t channels = 5; channels < 8; channels++) {
1032       DWConvMicrokernelTester()
1033         .cr(4)
1034         .kr(3)
1035         .channels(channels)
1036         .qmin(128)
1037         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1038     }
1039   }
1040 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,c_gt_4_with_qmax)1041   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_gt_4_with_qmax) {
1042     TEST_REQUIRES_ARM_NEON_FMA;
1043     for (uint32_t channels = 5; channels < 8; channels++) {
1044       DWConvMicrokernelTester()
1045         .cr(4)
1046         .kr(3)
1047         .channels(channels)
1048         .qmax(128)
1049         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1050     }
1051   }
1052 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,multipixel)1053   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, multipixel) {
1054     TEST_REQUIRES_ARM_NEON_FMA;
1055     for (size_t channels = 1; channels <= 20; channels += 3) {
1056       DWConvMicrokernelTester()
1057         .cr(4)
1058         .kr(3)
1059         .channels(channels)
1060         .width(3)
1061         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1062     }
1063   }
1064 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,multipixel_with_step)1065   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, multipixel_with_step) {
1066     TEST_REQUIRES_ARM_NEON_FMA;
1067     for (size_t channels = 1; channels <= 20; channels += 3) {
1068       for (size_t step = 2; step <= 3; step++) {
1069         DWConvMicrokernelTester()
1070           .cr(4)
1071           .kr(3)
1072           .channels(channels)
1073           .width(3)
1074           .step(step)
1075           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1076       }
1077     }
1078   }
1079 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,multipixel_with_output_stride)1080   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, multipixel_with_output_stride) {
1081     TEST_REQUIRES_ARM_NEON_FMA;
1082     for (size_t channels = 1; channels <= 20; channels += 3) {
1083       DWConvMicrokernelTester()
1084         .cr(4)
1085         .kr(3)
1086         .channels(4)
1087         .width(5)
1088         .output_stride(23)
1089         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1090     }
1091   }
1092 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,multipixel_with_qmin)1093   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, multipixel_with_qmin) {
1094     TEST_REQUIRES_ARM_NEON_FMA;
1095     for (size_t channels = 1; channels <= 20; channels += 3) {
1096       DWConvMicrokernelTester()
1097         .cr(4)
1098         .kr(3)
1099         .channels(channels)
1100         .width(3)
1101         .qmin(128)
1102         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1103     }
1104   }
1105 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,multipixel_with_qmax)1106   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, multipixel_with_qmax) {
1107     TEST_REQUIRES_ARM_NEON_FMA;
1108     for (size_t channels = 1; channels <= 20; channels += 3) {
1109       DWConvMicrokernelTester()
1110         .cr(4)
1111         .kr(3)
1112         .channels(channels)
1113         .width(3)
1114         .qmax(128)
1115         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1116     }
1117   }
1118 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,input_offset)1119   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, input_offset) {
1120     TEST_REQUIRES_ARM_NEON_FMA;
1121     for (uint32_t channels = 8; channels < 64; channels += 12) {
1122       DWConvMicrokernelTester()
1123         .cr(4)
1124         .kr(3)
1125         .channels(channels)
1126         .input_offset(112)
1127         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1128     }
1129   }
1130 
TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2,zero)1131   TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, zero) {
1132     TEST_REQUIRES_ARM_NEON_FMA;
1133     for (uint32_t mz = 0; mz < 3; mz++) {
1134       for (uint32_t channels = 8; channels < 64; channels += 12) {
1135         DWConvMicrokernelTester()
1136           .cr(4)
1137           .kr(3)
1138           .channels(channels)
1139           .input_offset(112)
1140           .zero_index(mz)
1141           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1142       }
1143     }
1144   }
1145 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
1146 
1147 
1148 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,c_eq_4)1149   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_eq_4) {
1150     TEST_REQUIRES_ARM_NEON;
1151     DWConvMicrokernelTester()
1152       .cr(4)
1153       .kr(4)
1154       .channels(4)
1155       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1156   }
1157 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,c_div_4)1158   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_div_4) {
1159     TEST_REQUIRES_ARM_NEON;
1160     for (uint32_t channels = 8; channels < 64; channels += 12) {
1161       DWConvMicrokernelTester()
1162         .cr(4)
1163         .kr(4)
1164         .channels(channels)
1165         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1166     }
1167   }
1168 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,c_div_4_with_qmin)1169   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_div_4_with_qmin) {
1170     TEST_REQUIRES_ARM_NEON;
1171     for (uint32_t channels = 8; channels < 64; channels += 12) {
1172       DWConvMicrokernelTester()
1173         .cr(4)
1174         .kr(4)
1175         .channels(channels)
1176         .qmin(128)
1177         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1178     }
1179   }
1180 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,c_div_4_with_qmax)1181   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_div_4_with_qmax) {
1182     TEST_REQUIRES_ARM_NEON;
1183     for (uint32_t channels = 8; channels < 64; channels += 12) {
1184       DWConvMicrokernelTester()
1185         .cr(4)
1186         .kr(4)
1187         .channels(channels)
1188         .qmax(128)
1189         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1190     }
1191   }
1192 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,c_lt_4)1193   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_lt_4) {
1194     TEST_REQUIRES_ARM_NEON;
1195     for (uint32_t channels = 1; channels < 4; channels++) {
1196       DWConvMicrokernelTester()
1197         .cr(4)
1198         .kr(4)
1199         .channels(channels)
1200         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1201     }
1202   }
1203 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,c_gt_4)1204   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_gt_4) {
1205     TEST_REQUIRES_ARM_NEON;
1206     for (uint32_t channels = 5; channels < 8; channels++) {
1207       DWConvMicrokernelTester()
1208         .cr(4)
1209         .kr(4)
1210         .channels(channels)
1211         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1212     }
1213   }
1214 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,c_gt_4_with_qmin)1215   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_gt_4_with_qmin) {
1216     TEST_REQUIRES_ARM_NEON;
1217     for (uint32_t channels = 5; channels < 8; channels++) {
1218       DWConvMicrokernelTester()
1219         .cr(4)
1220         .kr(4)
1221         .channels(channels)
1222         .qmin(128)
1223         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1224     }
1225   }
1226 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,c_gt_4_with_qmax)1227   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_gt_4_with_qmax) {
1228     TEST_REQUIRES_ARM_NEON;
1229     for (uint32_t channels = 5; channels < 8; channels++) {
1230       DWConvMicrokernelTester()
1231         .cr(4)
1232         .kr(4)
1233         .channels(channels)
1234         .qmax(128)
1235         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1236     }
1237   }
1238 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,multipixel)1239   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel) {
1240     TEST_REQUIRES_ARM_NEON;
1241     for (size_t channels = 1; channels <= 20; channels += 3) {
1242       DWConvMicrokernelTester()
1243         .cr(4)
1244         .kr(4)
1245         .channels(channels)
1246         .width(3)
1247         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1248     }
1249   }
1250 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,multipixel_with_step)1251   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel_with_step) {
1252     TEST_REQUIRES_ARM_NEON;
1253     for (size_t channels = 1; channels <= 20; channels += 3) {
1254       for (size_t step = 2; step <= 4; step++) {
1255         DWConvMicrokernelTester()
1256           .cr(4)
1257           .kr(4)
1258           .channels(channels)
1259           .width(3)
1260           .step(step)
1261           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1262       }
1263     }
1264   }
1265 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,multipixel_with_output_stride)1266   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel_with_output_stride) {
1267     TEST_REQUIRES_ARM_NEON;
1268     for (size_t channels = 1; channels <= 20; channels += 3) {
1269       DWConvMicrokernelTester()
1270         .cr(4)
1271         .kr(4)
1272         .channels(4)
1273         .width(5)
1274         .output_stride(23)
1275         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1276     }
1277   }
1278 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,multipixel_with_qmin)1279   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel_with_qmin) {
1280     TEST_REQUIRES_ARM_NEON;
1281     for (size_t channels = 1; channels <= 20; channels += 3) {
1282       DWConvMicrokernelTester()
1283         .cr(4)
1284         .kr(4)
1285         .channels(channels)
1286         .width(3)
1287         .qmin(128)
1288         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1289     }
1290   }
1291 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,multipixel_with_qmax)1292   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel_with_qmax) {
1293     TEST_REQUIRES_ARM_NEON;
1294     for (size_t channels = 1; channels <= 20; channels += 3) {
1295       DWConvMicrokernelTester()
1296         .cr(4)
1297         .kr(4)
1298         .channels(channels)
1299         .width(3)
1300         .qmax(128)
1301         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1302     }
1303   }
1304 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,input_offset)1305   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, input_offset) {
1306     TEST_REQUIRES_ARM_NEON;
1307     for (uint32_t channels = 8; channels < 64; channels += 12) {
1308       DWConvMicrokernelTester()
1309         .cr(4)
1310         .kr(4)
1311         .channels(channels)
1312         .input_offset(112)
1313         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1314     }
1315   }
1316 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON,zero)1317   TEST(F32_DWCONV_MINMAX_UP4X4__NEON, zero) {
1318     TEST_REQUIRES_ARM_NEON;
1319     for (uint32_t mz = 0; mz < 4; mz++) {
1320       for (uint32_t channels = 8; channels < 64; channels += 12) {
1321         DWConvMicrokernelTester()
1322           .cr(4)
1323           .kr(4)
1324           .channels(channels)
1325           .input_offset(112)
1326           .zero_index(mz)
1327           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
1328       }
1329     }
1330   }
1331 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
1332 
1333 
1334 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,c_eq_4)1335   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_eq_4) {
1336     TEST_REQUIRES_ARM_NEON;
1337     DWConvMicrokernelTester()
1338       .cr(4)
1339       .kr(4)
1340       .channels(4)
1341       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1342   }
1343 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,c_div_4)1344   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_div_4) {
1345     TEST_REQUIRES_ARM_NEON;
1346     for (uint32_t channels = 8; channels < 64; channels += 12) {
1347       DWConvMicrokernelTester()
1348         .cr(4)
1349         .kr(4)
1350         .channels(channels)
1351         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1352     }
1353   }
1354 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,c_div_4_with_qmin)1355   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_div_4_with_qmin) {
1356     TEST_REQUIRES_ARM_NEON;
1357     for (uint32_t channels = 8; channels < 64; channels += 12) {
1358       DWConvMicrokernelTester()
1359         .cr(4)
1360         .kr(4)
1361         .channels(channels)
1362         .qmin(128)
1363         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1364     }
1365   }
1366 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,c_div_4_with_qmax)1367   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_div_4_with_qmax) {
1368     TEST_REQUIRES_ARM_NEON;
1369     for (uint32_t channels = 8; channels < 64; channels += 12) {
1370       DWConvMicrokernelTester()
1371         .cr(4)
1372         .kr(4)
1373         .channels(channels)
1374         .qmax(128)
1375         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1376     }
1377   }
1378 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,c_lt_4)1379   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_lt_4) {
1380     TEST_REQUIRES_ARM_NEON;
1381     for (uint32_t channels = 1; channels < 4; channels++) {
1382       DWConvMicrokernelTester()
1383         .cr(4)
1384         .kr(4)
1385         .channels(channels)
1386         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1387     }
1388   }
1389 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,c_gt_4)1390   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_gt_4) {
1391     TEST_REQUIRES_ARM_NEON;
1392     for (uint32_t channels = 5; channels < 8; channels++) {
1393       DWConvMicrokernelTester()
1394         .cr(4)
1395         .kr(4)
1396         .channels(channels)
1397         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1398     }
1399   }
1400 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,c_gt_4_with_qmin)1401   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_gt_4_with_qmin) {
1402     TEST_REQUIRES_ARM_NEON;
1403     for (uint32_t channels = 5; channels < 8; channels++) {
1404       DWConvMicrokernelTester()
1405         .cr(4)
1406         .kr(4)
1407         .channels(channels)
1408         .qmin(128)
1409         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1410     }
1411   }
1412 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,c_gt_4_with_qmax)1413   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_gt_4_with_qmax) {
1414     TEST_REQUIRES_ARM_NEON;
1415     for (uint32_t channels = 5; channels < 8; channels++) {
1416       DWConvMicrokernelTester()
1417         .cr(4)
1418         .kr(4)
1419         .channels(channels)
1420         .qmax(128)
1421         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1422     }
1423   }
1424 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,multipixel)1425   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel) {
1426     TEST_REQUIRES_ARM_NEON;
1427     for (size_t channels = 1; channels <= 20; channels += 3) {
1428       DWConvMicrokernelTester()
1429         .cr(4)
1430         .kr(4)
1431         .channels(channels)
1432         .width(3)
1433         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1434     }
1435   }
1436 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,multipixel_with_step)1437   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel_with_step) {
1438     TEST_REQUIRES_ARM_NEON;
1439     for (size_t channels = 1; channels <= 20; channels += 3) {
1440       for (size_t step = 2; step <= 4; step++) {
1441         DWConvMicrokernelTester()
1442           .cr(4)
1443           .kr(4)
1444           .channels(channels)
1445           .width(3)
1446           .step(step)
1447           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1448       }
1449     }
1450   }
1451 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,multipixel_with_output_stride)1452   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel_with_output_stride) {
1453     TEST_REQUIRES_ARM_NEON;
1454     for (size_t channels = 1; channels <= 20; channels += 3) {
1455       DWConvMicrokernelTester()
1456         .cr(4)
1457         .kr(4)
1458         .channels(4)
1459         .width(5)
1460         .output_stride(23)
1461         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1462     }
1463   }
1464 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,multipixel_with_qmin)1465   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel_with_qmin) {
1466     TEST_REQUIRES_ARM_NEON;
1467     for (size_t channels = 1; channels <= 20; channels += 3) {
1468       DWConvMicrokernelTester()
1469         .cr(4)
1470         .kr(4)
1471         .channels(channels)
1472         .width(3)
1473         .qmin(128)
1474         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1475     }
1476   }
1477 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,multipixel_with_qmax)1478   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel_with_qmax) {
1479     TEST_REQUIRES_ARM_NEON;
1480     for (size_t channels = 1; channels <= 20; channels += 3) {
1481       DWConvMicrokernelTester()
1482         .cr(4)
1483         .kr(4)
1484         .channels(channels)
1485         .width(3)
1486         .qmax(128)
1487         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1488     }
1489   }
1490 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,input_offset)1491   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, input_offset) {
1492     TEST_REQUIRES_ARM_NEON;
1493     for (uint32_t channels = 8; channels < 64; channels += 12) {
1494       DWConvMicrokernelTester()
1495         .cr(4)
1496         .kr(4)
1497         .channels(channels)
1498         .input_offset(112)
1499         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1500     }
1501   }
1502 
TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2,zero)1503   TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, zero) {
1504     TEST_REQUIRES_ARM_NEON;
1505     for (uint32_t mz = 0; mz < 4; mz++) {
1506       for (uint32_t channels = 8; channels < 64; channels += 12) {
1507         DWConvMicrokernelTester()
1508           .cr(4)
1509           .kr(4)
1510           .channels(channels)
1511           .input_offset(112)
1512           .zero_index(mz)
1513           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
1514       }
1515     }
1516   }
1517 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
1518 
1519 
1520 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,c_eq_4)1521   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_eq_4) {
1522     TEST_REQUIRES_ARM_NEON_FMA;
1523     DWConvMicrokernelTester()
1524       .cr(4)
1525       .kr(4)
1526       .channels(4)
1527       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1528   }
1529 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,c_div_4)1530   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_div_4) {
1531     TEST_REQUIRES_ARM_NEON_FMA;
1532     for (uint32_t channels = 8; channels < 64; channels += 12) {
1533       DWConvMicrokernelTester()
1534         .cr(4)
1535         .kr(4)
1536         .channels(channels)
1537         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1538     }
1539   }
1540 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,c_div_4_with_qmin)1541   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_div_4_with_qmin) {
1542     TEST_REQUIRES_ARM_NEON_FMA;
1543     for (uint32_t channels = 8; channels < 64; channels += 12) {
1544       DWConvMicrokernelTester()
1545         .cr(4)
1546         .kr(4)
1547         .channels(channels)
1548         .qmin(128)
1549         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1550     }
1551   }
1552 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,c_div_4_with_qmax)1553   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_div_4_with_qmax) {
1554     TEST_REQUIRES_ARM_NEON_FMA;
1555     for (uint32_t channels = 8; channels < 64; channels += 12) {
1556       DWConvMicrokernelTester()
1557         .cr(4)
1558         .kr(4)
1559         .channels(channels)
1560         .qmax(128)
1561         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1562     }
1563   }
1564 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,c_lt_4)1565   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_lt_4) {
1566     TEST_REQUIRES_ARM_NEON_FMA;
1567     for (uint32_t channels = 1; channels < 4; channels++) {
1568       DWConvMicrokernelTester()
1569         .cr(4)
1570         .kr(4)
1571         .channels(channels)
1572         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1573     }
1574   }
1575 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,c_gt_4)1576   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_gt_4) {
1577     TEST_REQUIRES_ARM_NEON_FMA;
1578     for (uint32_t channels = 5; channels < 8; channels++) {
1579       DWConvMicrokernelTester()
1580         .cr(4)
1581         .kr(4)
1582         .channels(channels)
1583         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1584     }
1585   }
1586 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,c_gt_4_with_qmin)1587   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_gt_4_with_qmin) {
1588     TEST_REQUIRES_ARM_NEON_FMA;
1589     for (uint32_t channels = 5; channels < 8; channels++) {
1590       DWConvMicrokernelTester()
1591         .cr(4)
1592         .kr(4)
1593         .channels(channels)
1594         .qmin(128)
1595         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1596     }
1597   }
1598 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,c_gt_4_with_qmax)1599   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_gt_4_with_qmax) {
1600     TEST_REQUIRES_ARM_NEON_FMA;
1601     for (uint32_t channels = 5; channels < 8; channels++) {
1602       DWConvMicrokernelTester()
1603         .cr(4)
1604         .kr(4)
1605         .channels(channels)
1606         .qmax(128)
1607         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1608     }
1609   }
1610 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,multipixel)1611   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, multipixel) {
1612     TEST_REQUIRES_ARM_NEON_FMA;
1613     for (size_t channels = 1; channels <= 20; channels += 3) {
1614       DWConvMicrokernelTester()
1615         .cr(4)
1616         .kr(4)
1617         .channels(channels)
1618         .width(3)
1619         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1620     }
1621   }
1622 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,multipixel_with_step)1623   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, multipixel_with_step) {
1624     TEST_REQUIRES_ARM_NEON_FMA;
1625     for (size_t channels = 1; channels <= 20; channels += 3) {
1626       for (size_t step = 2; step <= 4; step++) {
1627         DWConvMicrokernelTester()
1628           .cr(4)
1629           .kr(4)
1630           .channels(channels)
1631           .width(3)
1632           .step(step)
1633           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1634       }
1635     }
1636   }
1637 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,multipixel_with_output_stride)1638   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, multipixel_with_output_stride) {
1639     TEST_REQUIRES_ARM_NEON_FMA;
1640     for (size_t channels = 1; channels <= 20; channels += 3) {
1641       DWConvMicrokernelTester()
1642         .cr(4)
1643         .kr(4)
1644         .channels(4)
1645         .width(5)
1646         .output_stride(23)
1647         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1648     }
1649   }
1650 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,multipixel_with_qmin)1651   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, multipixel_with_qmin) {
1652     TEST_REQUIRES_ARM_NEON_FMA;
1653     for (size_t channels = 1; channels <= 20; channels += 3) {
1654       DWConvMicrokernelTester()
1655         .cr(4)
1656         .kr(4)
1657         .channels(channels)
1658         .width(3)
1659         .qmin(128)
1660         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1661     }
1662   }
1663 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,multipixel_with_qmax)1664   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, multipixel_with_qmax) {
1665     TEST_REQUIRES_ARM_NEON_FMA;
1666     for (size_t channels = 1; channels <= 20; channels += 3) {
1667       DWConvMicrokernelTester()
1668         .cr(4)
1669         .kr(4)
1670         .channels(channels)
1671         .width(3)
1672         .qmax(128)
1673         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1674     }
1675   }
1676 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,input_offset)1677   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, input_offset) {
1678     TEST_REQUIRES_ARM_NEON_FMA;
1679     for (uint32_t channels = 8; channels < 64; channels += 12) {
1680       DWConvMicrokernelTester()
1681         .cr(4)
1682         .kr(4)
1683         .channels(channels)
1684         .input_offset(112)
1685         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1686     }
1687   }
1688 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA,zero)1689   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, zero) {
1690     TEST_REQUIRES_ARM_NEON_FMA;
1691     for (uint32_t mz = 0; mz < 4; mz++) {
1692       for (uint32_t channels = 8; channels < 64; channels += 12) {
1693         DWConvMicrokernelTester()
1694           .cr(4)
1695           .kr(4)
1696           .channels(channels)
1697           .input_offset(112)
1698           .zero_index(mz)
1699           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
1700       }
1701     }
1702   }
1703 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
1704 
1705 
1706 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,c_eq_4)1707   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_eq_4) {
1708     TEST_REQUIRES_ARM_NEON_FMA;
1709     DWConvMicrokernelTester()
1710       .cr(4)
1711       .kr(4)
1712       .channels(4)
1713       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1714   }
1715 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,c_div_4)1716   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_div_4) {
1717     TEST_REQUIRES_ARM_NEON_FMA;
1718     for (uint32_t channels = 8; channels < 64; channels += 12) {
1719       DWConvMicrokernelTester()
1720         .cr(4)
1721         .kr(4)
1722         .channels(channels)
1723         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1724     }
1725   }
1726 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,c_div_4_with_qmin)1727   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_div_4_with_qmin) {
1728     TEST_REQUIRES_ARM_NEON_FMA;
1729     for (uint32_t channels = 8; channels < 64; channels += 12) {
1730       DWConvMicrokernelTester()
1731         .cr(4)
1732         .kr(4)
1733         .channels(channels)
1734         .qmin(128)
1735         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1736     }
1737   }
1738 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,c_div_4_with_qmax)1739   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_div_4_with_qmax) {
1740     TEST_REQUIRES_ARM_NEON_FMA;
1741     for (uint32_t channels = 8; channels < 64; channels += 12) {
1742       DWConvMicrokernelTester()
1743         .cr(4)
1744         .kr(4)
1745         .channels(channels)
1746         .qmax(128)
1747         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1748     }
1749   }
1750 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,c_lt_4)1751   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_lt_4) {
1752     TEST_REQUIRES_ARM_NEON_FMA;
1753     for (uint32_t channels = 1; channels < 4; channels++) {
1754       DWConvMicrokernelTester()
1755         .cr(4)
1756         .kr(4)
1757         .channels(channels)
1758         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1759     }
1760   }
1761 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,c_gt_4)1762   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_gt_4) {
1763     TEST_REQUIRES_ARM_NEON_FMA;
1764     for (uint32_t channels = 5; channels < 8; channels++) {
1765       DWConvMicrokernelTester()
1766         .cr(4)
1767         .kr(4)
1768         .channels(channels)
1769         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1770     }
1771   }
1772 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,c_gt_4_with_qmin)1773   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_gt_4_with_qmin) {
1774     TEST_REQUIRES_ARM_NEON_FMA;
1775     for (uint32_t channels = 5; channels < 8; channels++) {
1776       DWConvMicrokernelTester()
1777         .cr(4)
1778         .kr(4)
1779         .channels(channels)
1780         .qmin(128)
1781         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1782     }
1783   }
1784 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,c_gt_4_with_qmax)1785   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_gt_4_with_qmax) {
1786     TEST_REQUIRES_ARM_NEON_FMA;
1787     for (uint32_t channels = 5; channels < 8; channels++) {
1788       DWConvMicrokernelTester()
1789         .cr(4)
1790         .kr(4)
1791         .channels(channels)
1792         .qmax(128)
1793         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1794     }
1795   }
1796 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,multipixel)1797   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, multipixel) {
1798     TEST_REQUIRES_ARM_NEON_FMA;
1799     for (size_t channels = 1; channels <= 20; channels += 3) {
1800       DWConvMicrokernelTester()
1801         .cr(4)
1802         .kr(4)
1803         .channels(channels)
1804         .width(3)
1805         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1806     }
1807   }
1808 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,multipixel_with_step)1809   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, multipixel_with_step) {
1810     TEST_REQUIRES_ARM_NEON_FMA;
1811     for (size_t channels = 1; channels <= 20; channels += 3) {
1812       for (size_t step = 2; step <= 4; step++) {
1813         DWConvMicrokernelTester()
1814           .cr(4)
1815           .kr(4)
1816           .channels(channels)
1817           .width(3)
1818           .step(step)
1819           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1820       }
1821     }
1822   }
1823 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,multipixel_with_output_stride)1824   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, multipixel_with_output_stride) {
1825     TEST_REQUIRES_ARM_NEON_FMA;
1826     for (size_t channels = 1; channels <= 20; channels += 3) {
1827       DWConvMicrokernelTester()
1828         .cr(4)
1829         .kr(4)
1830         .channels(4)
1831         .width(5)
1832         .output_stride(23)
1833         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1834     }
1835   }
1836 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,multipixel_with_qmin)1837   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, multipixel_with_qmin) {
1838     TEST_REQUIRES_ARM_NEON_FMA;
1839     for (size_t channels = 1; channels <= 20; channels += 3) {
1840       DWConvMicrokernelTester()
1841         .cr(4)
1842         .kr(4)
1843         .channels(channels)
1844         .width(3)
1845         .qmin(128)
1846         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1847     }
1848   }
1849 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,multipixel_with_qmax)1850   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, multipixel_with_qmax) {
1851     TEST_REQUIRES_ARM_NEON_FMA;
1852     for (size_t channels = 1; channels <= 20; channels += 3) {
1853       DWConvMicrokernelTester()
1854         .cr(4)
1855         .kr(4)
1856         .channels(channels)
1857         .width(3)
1858         .qmax(128)
1859         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1860     }
1861   }
1862 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,input_offset)1863   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, input_offset) {
1864     TEST_REQUIRES_ARM_NEON_FMA;
1865     for (uint32_t channels = 8; channels < 64; channels += 12) {
1866       DWConvMicrokernelTester()
1867         .cr(4)
1868         .kr(4)
1869         .channels(channels)
1870         .input_offset(112)
1871         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1872     }
1873   }
1874 
TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2,zero)1875   TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, zero) {
1876     TEST_REQUIRES_ARM_NEON_FMA;
1877     for (uint32_t mz = 0; mz < 4; mz++) {
1878       for (uint32_t channels = 8; channels < 64; channels += 12) {
1879         DWConvMicrokernelTester()
1880           .cr(4)
1881           .kr(4)
1882           .channels(channels)
1883           .input_offset(112)
1884           .zero_index(mz)
1885           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1886       }
1887     }
1888   }
1889 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
1890 
1891 
1892 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,c_eq_4)1893   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_eq_4) {
1894     TEST_REQUIRES_ARM_NEON;
1895     DWConvMicrokernelTester()
1896       .cr(4)
1897       .kr(9)
1898       .channels(4)
1899       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
1900   }
1901 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,c_div_4)1902   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_div_4) {
1903     TEST_REQUIRES_ARM_NEON;
1904     for (uint32_t channels = 8; channels < 64; channels += 12) {
1905       DWConvMicrokernelTester()
1906         .cr(4)
1907         .kr(9)
1908         .channels(channels)
1909         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
1910     }
1911   }
1912 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,c_div_4_with_qmin)1913   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_div_4_with_qmin) {
1914     TEST_REQUIRES_ARM_NEON;
1915     for (uint32_t channels = 8; channels < 64; channels += 12) {
1916       DWConvMicrokernelTester()
1917         .cr(4)
1918         .kr(9)
1919         .channels(channels)
1920         .qmin(128)
1921         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
1922     }
1923   }
1924 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,c_div_4_with_qmax)1925   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_div_4_with_qmax) {
1926     TEST_REQUIRES_ARM_NEON;
1927     for (uint32_t channels = 8; channels < 64; channels += 12) {
1928       DWConvMicrokernelTester()
1929         .cr(4)
1930         .kr(9)
1931         .channels(channels)
1932         .qmax(128)
1933         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
1934     }
1935   }
1936 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,c_lt_4)1937   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_lt_4) {
1938     TEST_REQUIRES_ARM_NEON;
1939     for (uint32_t channels = 1; channels < 4; channels++) {
1940       DWConvMicrokernelTester()
1941         .cr(4)
1942         .kr(9)
1943         .channels(channels)
1944         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
1945     }
1946   }
1947 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,c_gt_4)1948   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_gt_4) {
1949     TEST_REQUIRES_ARM_NEON;
1950     for (uint32_t channels = 5; channels < 8; channels++) {
1951       DWConvMicrokernelTester()
1952         .cr(4)
1953         .kr(9)
1954         .channels(channels)
1955         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
1956     }
1957   }
1958 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,c_gt_4_with_qmin)1959   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_gt_4_with_qmin) {
1960     TEST_REQUIRES_ARM_NEON;
1961     for (uint32_t channels = 5; channels < 8; channels++) {
1962       DWConvMicrokernelTester()
1963         .cr(4)
1964         .kr(9)
1965         .channels(channels)
1966         .qmin(128)
1967         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
1968     }
1969   }
1970 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,c_gt_4_with_qmax)1971   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_gt_4_with_qmax) {
1972     TEST_REQUIRES_ARM_NEON;
1973     for (uint32_t channels = 5; channels < 8; channels++) {
1974       DWConvMicrokernelTester()
1975         .cr(4)
1976         .kr(9)
1977         .channels(channels)
1978         .qmax(128)
1979         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
1980     }
1981   }
1982 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,multipixel)1983   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel) {
1984     TEST_REQUIRES_ARM_NEON;
1985     for (size_t channels = 1; channels <= 20; channels += 3) {
1986       DWConvMicrokernelTester()
1987         .cr(4)
1988         .kr(9)
1989         .channels(channels)
1990         .width(3)
1991         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
1992     }
1993   }
1994 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,multipixel_with_step)1995   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_step) {
1996     TEST_REQUIRES_ARM_NEON;
1997     for (size_t channels = 1; channels <= 20; channels += 3) {
1998       for (size_t step = 2; step <= 9; step++) {
1999         DWConvMicrokernelTester()
2000           .cr(4)
2001           .kr(9)
2002           .channels(channels)
2003           .width(3)
2004           .step(step)
2005           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
2006       }
2007     }
2008   }
2009 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,multipixel_with_output_stride)2010   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_output_stride) {
2011     TEST_REQUIRES_ARM_NEON;
2012     for (size_t channels = 1; channels <= 20; channels += 3) {
2013       DWConvMicrokernelTester()
2014         .cr(4)
2015         .kr(9)
2016         .channels(4)
2017         .width(5)
2018         .output_stride(23)
2019         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
2020     }
2021   }
2022 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,multipixel_with_qmin)2023   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_qmin) {
2024     TEST_REQUIRES_ARM_NEON;
2025     for (size_t channels = 1; channels <= 20; channels += 3) {
2026       DWConvMicrokernelTester()
2027         .cr(4)
2028         .kr(9)
2029         .channels(channels)
2030         .width(3)
2031         .qmin(128)
2032         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
2033     }
2034   }
2035 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,multipixel_with_qmax)2036   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_qmax) {
2037     TEST_REQUIRES_ARM_NEON;
2038     for (size_t channels = 1; channels <= 20; channels += 3) {
2039       DWConvMicrokernelTester()
2040         .cr(4)
2041         .kr(9)
2042         .channels(channels)
2043         .width(3)
2044         .qmax(128)
2045         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
2046     }
2047   }
2048 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,input_offset)2049   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, input_offset) {
2050     TEST_REQUIRES_ARM_NEON;
2051     for (uint32_t channels = 8; channels < 64; channels += 12) {
2052       DWConvMicrokernelTester()
2053         .cr(4)
2054         .kr(9)
2055         .channels(channels)
2056         .input_offset(112)
2057         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
2058     }
2059   }
2060 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON,zero)2061   TEST(F32_DWCONV_MINMAX_UP4X9__NEON, zero) {
2062     TEST_REQUIRES_ARM_NEON;
2063     for (uint32_t mz = 0; mz < 9; mz++) {
2064       for (uint32_t channels = 8; channels < 64; channels += 12) {
2065         DWConvMicrokernelTester()
2066           .cr(4)
2067           .kr(9)
2068           .channels(channels)
2069           .input_offset(112)
2070           .zero_index(mz)
2071           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
2072       }
2073     }
2074   }
2075 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2076 
2077 
2078 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,c_eq_4)2079   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_eq_4) {
2080     TEST_REQUIRES_ARM_NEON;
2081     DWConvMicrokernelTester()
2082       .cr(4)
2083       .kr(9)
2084       .channels(4)
2085       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2086   }
2087 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,c_div_4)2088   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_div_4) {
2089     TEST_REQUIRES_ARM_NEON;
2090     for (uint32_t channels = 8; channels < 64; channels += 12) {
2091       DWConvMicrokernelTester()
2092         .cr(4)
2093         .kr(9)
2094         .channels(channels)
2095         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2096     }
2097   }
2098 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,c_div_4_with_qmin)2099   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_div_4_with_qmin) {
2100     TEST_REQUIRES_ARM_NEON;
2101     for (uint32_t channels = 8; channels < 64; channels += 12) {
2102       DWConvMicrokernelTester()
2103         .cr(4)
2104         .kr(9)
2105         .channels(channels)
2106         .qmin(128)
2107         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2108     }
2109   }
2110 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,c_div_4_with_qmax)2111   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_div_4_with_qmax) {
2112     TEST_REQUIRES_ARM_NEON;
2113     for (uint32_t channels = 8; channels < 64; channels += 12) {
2114       DWConvMicrokernelTester()
2115         .cr(4)
2116         .kr(9)
2117         .channels(channels)
2118         .qmax(128)
2119         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2120     }
2121   }
2122 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,c_lt_4)2123   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_lt_4) {
2124     TEST_REQUIRES_ARM_NEON;
2125     for (uint32_t channels = 1; channels < 4; channels++) {
2126       DWConvMicrokernelTester()
2127         .cr(4)
2128         .kr(9)
2129         .channels(channels)
2130         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2131     }
2132   }
2133 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,c_gt_4)2134   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_gt_4) {
2135     TEST_REQUIRES_ARM_NEON;
2136     for (uint32_t channels = 5; channels < 8; channels++) {
2137       DWConvMicrokernelTester()
2138         .cr(4)
2139         .kr(9)
2140         .channels(channels)
2141         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2142     }
2143   }
2144 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,c_gt_4_with_qmin)2145   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_gt_4_with_qmin) {
2146     TEST_REQUIRES_ARM_NEON;
2147     for (uint32_t channels = 5; channels < 8; channels++) {
2148       DWConvMicrokernelTester()
2149         .cr(4)
2150         .kr(9)
2151         .channels(channels)
2152         .qmin(128)
2153         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2154     }
2155   }
2156 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,c_gt_4_with_qmax)2157   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_gt_4_with_qmax) {
2158     TEST_REQUIRES_ARM_NEON;
2159     for (uint32_t channels = 5; channels < 8; channels++) {
2160       DWConvMicrokernelTester()
2161         .cr(4)
2162         .kr(9)
2163         .channels(channels)
2164         .qmax(128)
2165         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2166     }
2167   }
2168 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,multipixel)2169   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel) {
2170     TEST_REQUIRES_ARM_NEON;
2171     for (size_t channels = 1; channels <= 20; channels += 3) {
2172       DWConvMicrokernelTester()
2173         .cr(4)
2174         .kr(9)
2175         .channels(channels)
2176         .width(3)
2177         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2178     }
2179   }
2180 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,multipixel_with_step)2181   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_step) {
2182     TEST_REQUIRES_ARM_NEON;
2183     for (size_t channels = 1; channels <= 20; channels += 3) {
2184       for (size_t step = 2; step <= 9; step++) {
2185         DWConvMicrokernelTester()
2186           .cr(4)
2187           .kr(9)
2188           .channels(channels)
2189           .width(3)
2190           .step(step)
2191           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2192       }
2193     }
2194   }
2195 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,multipixel_with_output_stride)2196   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_output_stride) {
2197     TEST_REQUIRES_ARM_NEON;
2198     for (size_t channels = 1; channels <= 20; channels += 3) {
2199       DWConvMicrokernelTester()
2200         .cr(4)
2201         .kr(9)
2202         .channels(4)
2203         .width(5)
2204         .output_stride(23)
2205         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2206     }
2207   }
2208 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,multipixel_with_qmin)2209   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_qmin) {
2210     TEST_REQUIRES_ARM_NEON;
2211     for (size_t channels = 1; channels <= 20; channels += 3) {
2212       DWConvMicrokernelTester()
2213         .cr(4)
2214         .kr(9)
2215         .channels(channels)
2216         .width(3)
2217         .qmin(128)
2218         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2219     }
2220   }
2221 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,multipixel_with_qmax)2222   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_qmax) {
2223     TEST_REQUIRES_ARM_NEON;
2224     for (size_t channels = 1; channels <= 20; channels += 3) {
2225       DWConvMicrokernelTester()
2226         .cr(4)
2227         .kr(9)
2228         .channels(channels)
2229         .width(3)
2230         .qmax(128)
2231         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2232     }
2233   }
2234 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,input_offset)2235   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, input_offset) {
2236     TEST_REQUIRES_ARM_NEON;
2237     for (uint32_t channels = 8; channels < 64; channels += 12) {
2238       DWConvMicrokernelTester()
2239         .cr(4)
2240         .kr(9)
2241         .channels(channels)
2242         .input_offset(112)
2243         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2244     }
2245   }
2246 
TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2,zero)2247   TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, zero) {
2248     TEST_REQUIRES_ARM_NEON;
2249     for (uint32_t mz = 0; mz < 9; mz++) {
2250       for (uint32_t channels = 8; channels < 64; channels += 12) {
2251         DWConvMicrokernelTester()
2252           .cr(4)
2253           .kr(9)
2254           .channels(channels)
2255           .input_offset(112)
2256           .zero_index(mz)
2257           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
2258       }
2259     }
2260   }
2261 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2262 
2263 
2264 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,c_eq_4)2265   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_eq_4) {
2266     TEST_REQUIRES_ARM_NEON_FMA;
2267     DWConvMicrokernelTester()
2268       .cr(4)
2269       .kr(9)
2270       .channels(4)
2271       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2272   }
2273 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,c_div_4)2274   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_div_4) {
2275     TEST_REQUIRES_ARM_NEON_FMA;
2276     for (uint32_t channels = 8; channels < 64; channels += 12) {
2277       DWConvMicrokernelTester()
2278         .cr(4)
2279         .kr(9)
2280         .channels(channels)
2281         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2282     }
2283   }
2284 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,c_div_4_with_qmin)2285   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_div_4_with_qmin) {
2286     TEST_REQUIRES_ARM_NEON_FMA;
2287     for (uint32_t channels = 8; channels < 64; channels += 12) {
2288       DWConvMicrokernelTester()
2289         .cr(4)
2290         .kr(9)
2291         .channels(channels)
2292         .qmin(128)
2293         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2294     }
2295   }
2296 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,c_div_4_with_qmax)2297   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_div_4_with_qmax) {
2298     TEST_REQUIRES_ARM_NEON_FMA;
2299     for (uint32_t channels = 8; channels < 64; channels += 12) {
2300       DWConvMicrokernelTester()
2301         .cr(4)
2302         .kr(9)
2303         .channels(channels)
2304         .qmax(128)
2305         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2306     }
2307   }
2308 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,c_lt_4)2309   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_lt_4) {
2310     TEST_REQUIRES_ARM_NEON_FMA;
2311     for (uint32_t channels = 1; channels < 4; channels++) {
2312       DWConvMicrokernelTester()
2313         .cr(4)
2314         .kr(9)
2315         .channels(channels)
2316         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2317     }
2318   }
2319 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,c_gt_4)2320   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_gt_4) {
2321     TEST_REQUIRES_ARM_NEON_FMA;
2322     for (uint32_t channels = 5; channels < 8; channels++) {
2323       DWConvMicrokernelTester()
2324         .cr(4)
2325         .kr(9)
2326         .channels(channels)
2327         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2328     }
2329   }
2330 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,c_gt_4_with_qmin)2331   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_gt_4_with_qmin) {
2332     TEST_REQUIRES_ARM_NEON_FMA;
2333     for (uint32_t channels = 5; channels < 8; channels++) {
2334       DWConvMicrokernelTester()
2335         .cr(4)
2336         .kr(9)
2337         .channels(channels)
2338         .qmin(128)
2339         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2340     }
2341   }
2342 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,c_gt_4_with_qmax)2343   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_gt_4_with_qmax) {
2344     TEST_REQUIRES_ARM_NEON_FMA;
2345     for (uint32_t channels = 5; channels < 8; channels++) {
2346       DWConvMicrokernelTester()
2347         .cr(4)
2348         .kr(9)
2349         .channels(channels)
2350         .qmax(128)
2351         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2352     }
2353   }
2354 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,multipixel)2355   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel) {
2356     TEST_REQUIRES_ARM_NEON_FMA;
2357     for (size_t channels = 1; channels <= 20; channels += 3) {
2358       DWConvMicrokernelTester()
2359         .cr(4)
2360         .kr(9)
2361         .channels(channels)
2362         .width(3)
2363         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2364     }
2365   }
2366 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,multipixel_with_step)2367   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_step) {
2368     TEST_REQUIRES_ARM_NEON_FMA;
2369     for (size_t channels = 1; channels <= 20; channels += 3) {
2370       for (size_t step = 2; step <= 9; step++) {
2371         DWConvMicrokernelTester()
2372           .cr(4)
2373           .kr(9)
2374           .channels(channels)
2375           .width(3)
2376           .step(step)
2377           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2378       }
2379     }
2380   }
2381 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,multipixel_with_output_stride)2382   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_output_stride) {
2383     TEST_REQUIRES_ARM_NEON_FMA;
2384     for (size_t channels = 1; channels <= 20; channels += 3) {
2385       DWConvMicrokernelTester()
2386         .cr(4)
2387         .kr(9)
2388         .channels(4)
2389         .width(5)
2390         .output_stride(23)
2391         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2392     }
2393   }
2394 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,multipixel_with_qmin)2395   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_qmin) {
2396     TEST_REQUIRES_ARM_NEON_FMA;
2397     for (size_t channels = 1; channels <= 20; channels += 3) {
2398       DWConvMicrokernelTester()
2399         .cr(4)
2400         .kr(9)
2401         .channels(channels)
2402         .width(3)
2403         .qmin(128)
2404         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2405     }
2406   }
2407 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,multipixel_with_qmax)2408   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_qmax) {
2409     TEST_REQUIRES_ARM_NEON_FMA;
2410     for (size_t channels = 1; channels <= 20; channels += 3) {
2411       DWConvMicrokernelTester()
2412         .cr(4)
2413         .kr(9)
2414         .channels(channels)
2415         .width(3)
2416         .qmax(128)
2417         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2418     }
2419   }
2420 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,input_offset)2421   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, input_offset) {
2422     TEST_REQUIRES_ARM_NEON_FMA;
2423     for (uint32_t channels = 8; channels < 64; channels += 12) {
2424       DWConvMicrokernelTester()
2425         .cr(4)
2426         .kr(9)
2427         .channels(channels)
2428         .input_offset(112)
2429         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2430     }
2431   }
2432 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA,zero)2433   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, zero) {
2434     TEST_REQUIRES_ARM_NEON_FMA;
2435     for (uint32_t mz = 0; mz < 9; mz++) {
2436       for (uint32_t channels = 8; channels < 64; channels += 12) {
2437         DWConvMicrokernelTester()
2438           .cr(4)
2439           .kr(9)
2440           .channels(channels)
2441           .input_offset(112)
2442           .zero_index(mz)
2443           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
2444       }
2445     }
2446   }
2447 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2448 
2449 
2450 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,c_eq_4)2451   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_eq_4) {
2452     TEST_REQUIRES_ARM_NEON_FMA;
2453     DWConvMicrokernelTester()
2454       .cr(4)
2455       .kr(9)
2456       .channels(4)
2457       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2458   }
2459 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,c_div_4)2460   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_div_4) {
2461     TEST_REQUIRES_ARM_NEON_FMA;
2462     for (uint32_t channels = 8; channels < 64; channels += 12) {
2463       DWConvMicrokernelTester()
2464         .cr(4)
2465         .kr(9)
2466         .channels(channels)
2467         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2468     }
2469   }
2470 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,c_div_4_with_qmin)2471   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_div_4_with_qmin) {
2472     TEST_REQUIRES_ARM_NEON_FMA;
2473     for (uint32_t channels = 8; channels < 64; channels += 12) {
2474       DWConvMicrokernelTester()
2475         .cr(4)
2476         .kr(9)
2477         .channels(channels)
2478         .qmin(128)
2479         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2480     }
2481   }
2482 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,c_div_4_with_qmax)2483   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_div_4_with_qmax) {
2484     TEST_REQUIRES_ARM_NEON_FMA;
2485     for (uint32_t channels = 8; channels < 64; channels += 12) {
2486       DWConvMicrokernelTester()
2487         .cr(4)
2488         .kr(9)
2489         .channels(channels)
2490         .qmax(128)
2491         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2492     }
2493   }
2494 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,c_lt_4)2495   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_lt_4) {
2496     TEST_REQUIRES_ARM_NEON_FMA;
2497     for (uint32_t channels = 1; channels < 4; channels++) {
2498       DWConvMicrokernelTester()
2499         .cr(4)
2500         .kr(9)
2501         .channels(channels)
2502         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2503     }
2504   }
2505 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,c_gt_4)2506   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_gt_4) {
2507     TEST_REQUIRES_ARM_NEON_FMA;
2508     for (uint32_t channels = 5; channels < 8; channels++) {
2509       DWConvMicrokernelTester()
2510         .cr(4)
2511         .kr(9)
2512         .channels(channels)
2513         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2514     }
2515   }
2516 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,c_gt_4_with_qmin)2517   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_gt_4_with_qmin) {
2518     TEST_REQUIRES_ARM_NEON_FMA;
2519     for (uint32_t channels = 5; channels < 8; channels++) {
2520       DWConvMicrokernelTester()
2521         .cr(4)
2522         .kr(9)
2523         .channels(channels)
2524         .qmin(128)
2525         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2526     }
2527   }
2528 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,c_gt_4_with_qmax)2529   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_gt_4_with_qmax) {
2530     TEST_REQUIRES_ARM_NEON_FMA;
2531     for (uint32_t channels = 5; channels < 8; channels++) {
2532       DWConvMicrokernelTester()
2533         .cr(4)
2534         .kr(9)
2535         .channels(channels)
2536         .qmax(128)
2537         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2538     }
2539   }
2540 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,multipixel)2541   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel) {
2542     TEST_REQUIRES_ARM_NEON_FMA;
2543     for (size_t channels = 1; channels <= 20; channels += 3) {
2544       DWConvMicrokernelTester()
2545         .cr(4)
2546         .kr(9)
2547         .channels(channels)
2548         .width(3)
2549         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2550     }
2551   }
2552 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,multipixel_with_step)2553   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_step) {
2554     TEST_REQUIRES_ARM_NEON_FMA;
2555     for (size_t channels = 1; channels <= 20; channels += 3) {
2556       for (size_t step = 2; step <= 9; step++) {
2557         DWConvMicrokernelTester()
2558           .cr(4)
2559           .kr(9)
2560           .channels(channels)
2561           .width(3)
2562           .step(step)
2563           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2564       }
2565     }
2566   }
2567 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,multipixel_with_output_stride)2568   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_output_stride) {
2569     TEST_REQUIRES_ARM_NEON_FMA;
2570     for (size_t channels = 1; channels <= 20; channels += 3) {
2571       DWConvMicrokernelTester()
2572         .cr(4)
2573         .kr(9)
2574         .channels(4)
2575         .width(5)
2576         .output_stride(23)
2577         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2578     }
2579   }
2580 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,multipixel_with_qmin)2581   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_qmin) {
2582     TEST_REQUIRES_ARM_NEON_FMA;
2583     for (size_t channels = 1; channels <= 20; channels += 3) {
2584       DWConvMicrokernelTester()
2585         .cr(4)
2586         .kr(9)
2587         .channels(channels)
2588         .width(3)
2589         .qmin(128)
2590         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2591     }
2592   }
2593 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,multipixel_with_qmax)2594   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_qmax) {
2595     TEST_REQUIRES_ARM_NEON_FMA;
2596     for (size_t channels = 1; channels <= 20; channels += 3) {
2597       DWConvMicrokernelTester()
2598         .cr(4)
2599         .kr(9)
2600         .channels(channels)
2601         .width(3)
2602         .qmax(128)
2603         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2604     }
2605   }
2606 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,input_offset)2607   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, input_offset) {
2608     TEST_REQUIRES_ARM_NEON_FMA;
2609     for (uint32_t channels = 8; channels < 64; channels += 12) {
2610       DWConvMicrokernelTester()
2611         .cr(4)
2612         .kr(9)
2613         .channels(channels)
2614         .input_offset(112)
2615         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2616     }
2617   }
2618 
TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2,zero)2619   TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, zero) {
2620     TEST_REQUIRES_ARM_NEON_FMA;
2621     for (uint32_t mz = 0; mz < 9; mz++) {
2622       for (uint32_t channels = 8; channels < 64; channels += 12) {
2623         DWConvMicrokernelTester()
2624           .cr(4)
2625           .kr(9)
2626           .channels(channels)
2627           .input_offset(112)
2628           .zero_index(mz)
2629           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2630       }
2631     }
2632   }
2633 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2634 
2635 
2636 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,c_eq_4)2637   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_eq_4) {
2638     TEST_REQUIRES_ARM_NEON;
2639     DWConvMicrokernelTester()
2640       .cr(4)
2641       .kr(25)
2642       .channels(4)
2643       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2644   }
2645 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,c_div_4)2646   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_div_4) {
2647     TEST_REQUIRES_ARM_NEON;
2648     for (uint32_t channels = 8; channels < 64; channels += 12) {
2649       DWConvMicrokernelTester()
2650         .cr(4)
2651         .kr(25)
2652         .channels(channels)
2653         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2654     }
2655   }
2656 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,c_div_4_with_qmin)2657   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_div_4_with_qmin) {
2658     TEST_REQUIRES_ARM_NEON;
2659     for (uint32_t channels = 8; channels < 64; channels += 12) {
2660       DWConvMicrokernelTester()
2661         .cr(4)
2662         .kr(25)
2663         .channels(channels)
2664         .qmin(128)
2665         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2666     }
2667   }
2668 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,c_div_4_with_qmax)2669   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_div_4_with_qmax) {
2670     TEST_REQUIRES_ARM_NEON;
2671     for (uint32_t channels = 8; channels < 64; channels += 12) {
2672       DWConvMicrokernelTester()
2673         .cr(4)
2674         .kr(25)
2675         .channels(channels)
2676         .qmax(128)
2677         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2678     }
2679   }
2680 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,c_lt_4)2681   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_lt_4) {
2682     TEST_REQUIRES_ARM_NEON;
2683     for (uint32_t channels = 1; channels < 4; channels++) {
2684       DWConvMicrokernelTester()
2685         .cr(4)
2686         .kr(25)
2687         .channels(channels)
2688         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2689     }
2690   }
2691 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,c_gt_4)2692   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_gt_4) {
2693     TEST_REQUIRES_ARM_NEON;
2694     for (uint32_t channels = 5; channels < 8; channels++) {
2695       DWConvMicrokernelTester()
2696         .cr(4)
2697         .kr(25)
2698         .channels(channels)
2699         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2700     }
2701   }
2702 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,c_gt_4_with_qmin)2703   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_gt_4_with_qmin) {
2704     TEST_REQUIRES_ARM_NEON;
2705     for (uint32_t channels = 5; channels < 8; channels++) {
2706       DWConvMicrokernelTester()
2707         .cr(4)
2708         .kr(25)
2709         .channels(channels)
2710         .qmin(128)
2711         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2712     }
2713   }
2714 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,c_gt_4_with_qmax)2715   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_gt_4_with_qmax) {
2716     TEST_REQUIRES_ARM_NEON;
2717     for (uint32_t channels = 5; channels < 8; channels++) {
2718       DWConvMicrokernelTester()
2719         .cr(4)
2720         .kr(25)
2721         .channels(channels)
2722         .qmax(128)
2723         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2724     }
2725   }
2726 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,multipixel)2727   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel) {
2728     TEST_REQUIRES_ARM_NEON;
2729     for (size_t channels = 1; channels <= 20; channels += 3) {
2730       DWConvMicrokernelTester()
2731         .cr(4)
2732         .kr(25)
2733         .channels(channels)
2734         .width(3)
2735         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2736     }
2737   }
2738 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,multipixel_with_step)2739   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel_with_step) {
2740     TEST_REQUIRES_ARM_NEON;
2741     for (size_t channels = 1; channels <= 20; channels += 3) {
2742       for (size_t step = 2; step <= 25; step++) {
2743         DWConvMicrokernelTester()
2744           .cr(4)
2745           .kr(25)
2746           .channels(channels)
2747           .width(3)
2748           .step(step)
2749           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2750       }
2751     }
2752   }
2753 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,multipixel_with_output_stride)2754   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel_with_output_stride) {
2755     TEST_REQUIRES_ARM_NEON;
2756     for (size_t channels = 1; channels <= 20; channels += 3) {
2757       DWConvMicrokernelTester()
2758         .cr(4)
2759         .kr(25)
2760         .channels(4)
2761         .width(5)
2762         .output_stride(23)
2763         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2764     }
2765   }
2766 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,multipixel_with_qmin)2767   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel_with_qmin) {
2768     TEST_REQUIRES_ARM_NEON;
2769     for (size_t channels = 1; channels <= 20; channels += 3) {
2770       DWConvMicrokernelTester()
2771         .cr(4)
2772         .kr(25)
2773         .channels(channels)
2774         .width(3)
2775         .qmin(128)
2776         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2777     }
2778   }
2779 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,multipixel_with_qmax)2780   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel_with_qmax) {
2781     TEST_REQUIRES_ARM_NEON;
2782     for (size_t channels = 1; channels <= 20; channels += 3) {
2783       DWConvMicrokernelTester()
2784         .cr(4)
2785         .kr(25)
2786         .channels(channels)
2787         .width(3)
2788         .qmax(128)
2789         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2790     }
2791   }
2792 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,input_offset)2793   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, input_offset) {
2794     TEST_REQUIRES_ARM_NEON;
2795     for (uint32_t channels = 8; channels < 64; channels += 12) {
2796       DWConvMicrokernelTester()
2797         .cr(4)
2798         .kr(25)
2799         .channels(channels)
2800         .input_offset(112)
2801         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2802     }
2803   }
2804 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON,zero)2805   TEST(F32_DWCONV_MINMAX_UP4X25__NEON, zero) {
2806     TEST_REQUIRES_ARM_NEON;
2807     for (uint32_t mz = 0; mz < 25; mz++) {
2808       for (uint32_t channels = 8; channels < 64; channels += 12) {
2809         DWConvMicrokernelTester()
2810           .cr(4)
2811           .kr(25)
2812           .channels(channels)
2813           .input_offset(112)
2814           .zero_index(mz)
2815           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
2816       }
2817     }
2818   }
2819 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2820 
2821 
2822 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,c_eq_4)2823   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_eq_4) {
2824     TEST_REQUIRES_ARM_NEON;
2825     DWConvMicrokernelTester()
2826       .cr(4)
2827       .kr(25)
2828       .channels(4)
2829       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2830   }
2831 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,c_div_4)2832   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_div_4) {
2833     TEST_REQUIRES_ARM_NEON;
2834     for (uint32_t channels = 8; channels < 64; channels += 12) {
2835       DWConvMicrokernelTester()
2836         .cr(4)
2837         .kr(25)
2838         .channels(channels)
2839         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2840     }
2841   }
2842 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,c_div_4_with_qmin)2843   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_div_4_with_qmin) {
2844     TEST_REQUIRES_ARM_NEON;
2845     for (uint32_t channels = 8; channels < 64; channels += 12) {
2846       DWConvMicrokernelTester()
2847         .cr(4)
2848         .kr(25)
2849         .channels(channels)
2850         .qmin(128)
2851         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2852     }
2853   }
2854 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,c_div_4_with_qmax)2855   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_div_4_with_qmax) {
2856     TEST_REQUIRES_ARM_NEON;
2857     for (uint32_t channels = 8; channels < 64; channels += 12) {
2858       DWConvMicrokernelTester()
2859         .cr(4)
2860         .kr(25)
2861         .channels(channels)
2862         .qmax(128)
2863         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2864     }
2865   }
2866 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,c_lt_4)2867   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_lt_4) {
2868     TEST_REQUIRES_ARM_NEON;
2869     for (uint32_t channels = 1; channels < 4; channels++) {
2870       DWConvMicrokernelTester()
2871         .cr(4)
2872         .kr(25)
2873         .channels(channels)
2874         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2875     }
2876   }
2877 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,c_gt_4)2878   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_gt_4) {
2879     TEST_REQUIRES_ARM_NEON;
2880     for (uint32_t channels = 5; channels < 8; channels++) {
2881       DWConvMicrokernelTester()
2882         .cr(4)
2883         .kr(25)
2884         .channels(channels)
2885         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2886     }
2887   }
2888 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,c_gt_4_with_qmin)2889   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_gt_4_with_qmin) {
2890     TEST_REQUIRES_ARM_NEON;
2891     for (uint32_t channels = 5; channels < 8; channels++) {
2892       DWConvMicrokernelTester()
2893         .cr(4)
2894         .kr(25)
2895         .channels(channels)
2896         .qmin(128)
2897         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2898     }
2899   }
2900 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,c_gt_4_with_qmax)2901   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_gt_4_with_qmax) {
2902     TEST_REQUIRES_ARM_NEON;
2903     for (uint32_t channels = 5; channels < 8; channels++) {
2904       DWConvMicrokernelTester()
2905         .cr(4)
2906         .kr(25)
2907         .channels(channels)
2908         .qmax(128)
2909         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2910     }
2911   }
2912 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,multipixel)2913   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel) {
2914     TEST_REQUIRES_ARM_NEON;
2915     for (size_t channels = 1; channels <= 20; channels += 3) {
2916       DWConvMicrokernelTester()
2917         .cr(4)
2918         .kr(25)
2919         .channels(channels)
2920         .width(3)
2921         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2922     }
2923   }
2924 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,multipixel_with_step)2925   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel_with_step) {
2926     TEST_REQUIRES_ARM_NEON;
2927     for (size_t channels = 1; channels <= 20; channels += 3) {
2928       for (size_t step = 2; step <= 25; step++) {
2929         DWConvMicrokernelTester()
2930           .cr(4)
2931           .kr(25)
2932           .channels(channels)
2933           .width(3)
2934           .step(step)
2935           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2936       }
2937     }
2938   }
2939 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,multipixel_with_output_stride)2940   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel_with_output_stride) {
2941     TEST_REQUIRES_ARM_NEON;
2942     for (size_t channels = 1; channels <= 20; channels += 3) {
2943       DWConvMicrokernelTester()
2944         .cr(4)
2945         .kr(25)
2946         .channels(4)
2947         .width(5)
2948         .output_stride(23)
2949         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2950     }
2951   }
2952 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,multipixel_with_qmin)2953   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel_with_qmin) {
2954     TEST_REQUIRES_ARM_NEON;
2955     for (size_t channels = 1; channels <= 20; channels += 3) {
2956       DWConvMicrokernelTester()
2957         .cr(4)
2958         .kr(25)
2959         .channels(channels)
2960         .width(3)
2961         .qmin(128)
2962         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2963     }
2964   }
2965 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,multipixel_with_qmax)2966   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel_with_qmax) {
2967     TEST_REQUIRES_ARM_NEON;
2968     for (size_t channels = 1; channels <= 20; channels += 3) {
2969       DWConvMicrokernelTester()
2970         .cr(4)
2971         .kr(25)
2972         .channels(channels)
2973         .width(3)
2974         .qmax(128)
2975         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2976     }
2977   }
2978 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,input_offset)2979   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, input_offset) {
2980     TEST_REQUIRES_ARM_NEON;
2981     for (uint32_t channels = 8; channels < 64; channels += 12) {
2982       DWConvMicrokernelTester()
2983         .cr(4)
2984         .kr(25)
2985         .channels(channels)
2986         .input_offset(112)
2987         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
2988     }
2989   }
2990 
TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2,zero)2991   TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, zero) {
2992     TEST_REQUIRES_ARM_NEON;
2993     for (uint32_t mz = 0; mz < 25; mz++) {
2994       for (uint32_t channels = 8; channels < 64; channels += 12) {
2995         DWConvMicrokernelTester()
2996           .cr(4)
2997           .kr(25)
2998           .channels(channels)
2999           .input_offset(112)
3000           .zero_index(mz)
3001           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
3002       }
3003     }
3004   }
3005 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
3006 
3007 
3008 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,c_eq_4)3009   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_eq_4) {
3010     TEST_REQUIRES_ARM_NEON_FMA;
3011     DWConvMicrokernelTester()
3012       .cr(4)
3013       .kr(25)
3014       .channels(4)
3015       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3016   }
3017 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,c_div_4)3018   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_div_4) {
3019     TEST_REQUIRES_ARM_NEON_FMA;
3020     for (uint32_t channels = 8; channels < 64; channels += 12) {
3021       DWConvMicrokernelTester()
3022         .cr(4)
3023         .kr(25)
3024         .channels(channels)
3025         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3026     }
3027   }
3028 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,c_div_4_with_qmin)3029   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_div_4_with_qmin) {
3030     TEST_REQUIRES_ARM_NEON_FMA;
3031     for (uint32_t channels = 8; channels < 64; channels += 12) {
3032       DWConvMicrokernelTester()
3033         .cr(4)
3034         .kr(25)
3035         .channels(channels)
3036         .qmin(128)
3037         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3038     }
3039   }
3040 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,c_div_4_with_qmax)3041   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_div_4_with_qmax) {
3042     TEST_REQUIRES_ARM_NEON_FMA;
3043     for (uint32_t channels = 8; channels < 64; channels += 12) {
3044       DWConvMicrokernelTester()
3045         .cr(4)
3046         .kr(25)
3047         .channels(channels)
3048         .qmax(128)
3049         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3050     }
3051   }
3052 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,c_lt_4)3053   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_lt_4) {
3054     TEST_REQUIRES_ARM_NEON_FMA;
3055     for (uint32_t channels = 1; channels < 4; channels++) {
3056       DWConvMicrokernelTester()
3057         .cr(4)
3058         .kr(25)
3059         .channels(channels)
3060         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3061     }
3062   }
3063 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,c_gt_4)3064   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_gt_4) {
3065     TEST_REQUIRES_ARM_NEON_FMA;
3066     for (uint32_t channels = 5; channels < 8; channels++) {
3067       DWConvMicrokernelTester()
3068         .cr(4)
3069         .kr(25)
3070         .channels(channels)
3071         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3072     }
3073   }
3074 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,c_gt_4_with_qmin)3075   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_gt_4_with_qmin) {
3076     TEST_REQUIRES_ARM_NEON_FMA;
3077     for (uint32_t channels = 5; channels < 8; channels++) {
3078       DWConvMicrokernelTester()
3079         .cr(4)
3080         .kr(25)
3081         .channels(channels)
3082         .qmin(128)
3083         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3084     }
3085   }
3086 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,c_gt_4_with_qmax)3087   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_gt_4_with_qmax) {
3088     TEST_REQUIRES_ARM_NEON_FMA;
3089     for (uint32_t channels = 5; channels < 8; channels++) {
3090       DWConvMicrokernelTester()
3091         .cr(4)
3092         .kr(25)
3093         .channels(channels)
3094         .qmax(128)
3095         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3096     }
3097   }
3098 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,multipixel)3099   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel) {
3100     TEST_REQUIRES_ARM_NEON_FMA;
3101     for (size_t channels = 1; channels <= 20; channels += 3) {
3102       DWConvMicrokernelTester()
3103         .cr(4)
3104         .kr(25)
3105         .channels(channels)
3106         .width(3)
3107         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3108     }
3109   }
3110 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,multipixel_with_step)3111   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel_with_step) {
3112     TEST_REQUIRES_ARM_NEON_FMA;
3113     for (size_t channels = 1; channels <= 20; channels += 3) {
3114       for (size_t step = 2; step <= 25; step++) {
3115         DWConvMicrokernelTester()
3116           .cr(4)
3117           .kr(25)
3118           .channels(channels)
3119           .width(3)
3120           .step(step)
3121           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3122       }
3123     }
3124   }
3125 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,multipixel_with_output_stride)3126   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel_with_output_stride) {
3127     TEST_REQUIRES_ARM_NEON_FMA;
3128     for (size_t channels = 1; channels <= 20; channels += 3) {
3129       DWConvMicrokernelTester()
3130         .cr(4)
3131         .kr(25)
3132         .channels(4)
3133         .width(5)
3134         .output_stride(23)
3135         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3136     }
3137   }
3138 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,multipixel_with_qmin)3139   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel_with_qmin) {
3140     TEST_REQUIRES_ARM_NEON_FMA;
3141     for (size_t channels = 1; channels <= 20; channels += 3) {
3142       DWConvMicrokernelTester()
3143         .cr(4)
3144         .kr(25)
3145         .channels(channels)
3146         .width(3)
3147         .qmin(128)
3148         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3149     }
3150   }
3151 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,multipixel_with_qmax)3152   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel_with_qmax) {
3153     TEST_REQUIRES_ARM_NEON_FMA;
3154     for (size_t channels = 1; channels <= 20; channels += 3) {
3155       DWConvMicrokernelTester()
3156         .cr(4)
3157         .kr(25)
3158         .channels(channels)
3159         .width(3)
3160         .qmax(128)
3161         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3162     }
3163   }
3164 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,input_offset)3165   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, input_offset) {
3166     TEST_REQUIRES_ARM_NEON_FMA;
3167     for (uint32_t channels = 8; channels < 64; channels += 12) {
3168       DWConvMicrokernelTester()
3169         .cr(4)
3170         .kr(25)
3171         .channels(channels)
3172         .input_offset(112)
3173         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3174     }
3175   }
3176 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA,zero)3177   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, zero) {
3178     TEST_REQUIRES_ARM_NEON_FMA;
3179     for (uint32_t mz = 0; mz < 25; mz++) {
3180       for (uint32_t channels = 8; channels < 64; channels += 12) {
3181         DWConvMicrokernelTester()
3182           .cr(4)
3183           .kr(25)
3184           .channels(channels)
3185           .input_offset(112)
3186           .zero_index(mz)
3187           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
3188       }
3189     }
3190   }
3191 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
3192 
3193 
3194 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,c_eq_4)3195   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_eq_4) {
3196     TEST_REQUIRES_ARM_NEON_FMA;
3197     DWConvMicrokernelTester()
3198       .cr(4)
3199       .kr(25)
3200       .channels(4)
3201       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3202   }
3203 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,c_div_4)3204   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_div_4) {
3205     TEST_REQUIRES_ARM_NEON_FMA;
3206     for (uint32_t channels = 8; channels < 64; channels += 12) {
3207       DWConvMicrokernelTester()
3208         .cr(4)
3209         .kr(25)
3210         .channels(channels)
3211         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3212     }
3213   }
3214 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,c_div_4_with_qmin)3215   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_div_4_with_qmin) {
3216     TEST_REQUIRES_ARM_NEON_FMA;
3217     for (uint32_t channels = 8; channels < 64; channels += 12) {
3218       DWConvMicrokernelTester()
3219         .cr(4)
3220         .kr(25)
3221         .channels(channels)
3222         .qmin(128)
3223         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3224     }
3225   }
3226 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,c_div_4_with_qmax)3227   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_div_4_with_qmax) {
3228     TEST_REQUIRES_ARM_NEON_FMA;
3229     for (uint32_t channels = 8; channels < 64; channels += 12) {
3230       DWConvMicrokernelTester()
3231         .cr(4)
3232         .kr(25)
3233         .channels(channels)
3234         .qmax(128)
3235         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3236     }
3237   }
3238 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,c_lt_4)3239   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_lt_4) {
3240     TEST_REQUIRES_ARM_NEON_FMA;
3241     for (uint32_t channels = 1; channels < 4; channels++) {
3242       DWConvMicrokernelTester()
3243         .cr(4)
3244         .kr(25)
3245         .channels(channels)
3246         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3247     }
3248   }
3249 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,c_gt_4)3250   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_gt_4) {
3251     TEST_REQUIRES_ARM_NEON_FMA;
3252     for (uint32_t channels = 5; channels < 8; channels++) {
3253       DWConvMicrokernelTester()
3254         .cr(4)
3255         .kr(25)
3256         .channels(channels)
3257         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3258     }
3259   }
3260 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,c_gt_4_with_qmin)3261   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_gt_4_with_qmin) {
3262     TEST_REQUIRES_ARM_NEON_FMA;
3263     for (uint32_t channels = 5; channels < 8; channels++) {
3264       DWConvMicrokernelTester()
3265         .cr(4)
3266         .kr(25)
3267         .channels(channels)
3268         .qmin(128)
3269         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3270     }
3271   }
3272 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,c_gt_4_with_qmax)3273   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_gt_4_with_qmax) {
3274     TEST_REQUIRES_ARM_NEON_FMA;
3275     for (uint32_t channels = 5; channels < 8; channels++) {
3276       DWConvMicrokernelTester()
3277         .cr(4)
3278         .kr(25)
3279         .channels(channels)
3280         .qmax(128)
3281         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3282     }
3283   }
3284 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,multipixel)3285   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel) {
3286     TEST_REQUIRES_ARM_NEON_FMA;
3287     for (size_t channels = 1; channels <= 20; channels += 3) {
3288       DWConvMicrokernelTester()
3289         .cr(4)
3290         .kr(25)
3291         .channels(channels)
3292         .width(3)
3293         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3294     }
3295   }
3296 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,multipixel_with_step)3297   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel_with_step) {
3298     TEST_REQUIRES_ARM_NEON_FMA;
3299     for (size_t channels = 1; channels <= 20; channels += 3) {
3300       for (size_t step = 2; step <= 25; step++) {
3301         DWConvMicrokernelTester()
3302           .cr(4)
3303           .kr(25)
3304           .channels(channels)
3305           .width(3)
3306           .step(step)
3307           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3308       }
3309     }
3310   }
3311 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,multipixel_with_output_stride)3312   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel_with_output_stride) {
3313     TEST_REQUIRES_ARM_NEON_FMA;
3314     for (size_t channels = 1; channels <= 20; channels += 3) {
3315       DWConvMicrokernelTester()
3316         .cr(4)
3317         .kr(25)
3318         .channels(4)
3319         .width(5)
3320         .output_stride(23)
3321         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3322     }
3323   }
3324 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,multipixel_with_qmin)3325   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel_with_qmin) {
3326     TEST_REQUIRES_ARM_NEON_FMA;
3327     for (size_t channels = 1; channels <= 20; channels += 3) {
3328       DWConvMicrokernelTester()
3329         .cr(4)
3330         .kr(25)
3331         .channels(channels)
3332         .width(3)
3333         .qmin(128)
3334         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3335     }
3336   }
3337 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,multipixel_with_qmax)3338   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel_with_qmax) {
3339     TEST_REQUIRES_ARM_NEON_FMA;
3340     for (size_t channels = 1; channels <= 20; channels += 3) {
3341       DWConvMicrokernelTester()
3342         .cr(4)
3343         .kr(25)
3344         .channels(channels)
3345         .width(3)
3346         .qmax(128)
3347         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3348     }
3349   }
3350 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,input_offset)3351   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, input_offset) {
3352     TEST_REQUIRES_ARM_NEON_FMA;
3353     for (uint32_t channels = 8; channels < 64; channels += 12) {
3354       DWConvMicrokernelTester()
3355         .cr(4)
3356         .kr(25)
3357         .channels(channels)
3358         .input_offset(112)
3359         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3360     }
3361   }
3362 
TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2,zero)3363   TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, zero) {
3364     TEST_REQUIRES_ARM_NEON_FMA;
3365     for (uint32_t mz = 0; mz < 25; mz++) {
3366       for (uint32_t channels = 8; channels < 64; channels += 12) {
3367         DWConvMicrokernelTester()
3368           .cr(4)
3369           .kr(25)
3370           .channels(channels)
3371           .input_offset(112)
3372           .zero_index(mz)
3373           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3374       }
3375     }
3376   }
3377 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
3378 
3379 
3380 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,c_eq_8)3381   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_eq_8) {
3382     TEST_REQUIRES_ARM_NEON;
3383     DWConvMicrokernelTester()
3384       .cr(8)
3385       .kr(3)
3386       .channels(8)
3387       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3388   }
3389 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,c_div_8)3390   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_div_8) {
3391     TEST_REQUIRES_ARM_NEON;
3392     for (uint32_t channels = 16; channels < 128; channels += 24) {
3393       DWConvMicrokernelTester()
3394         .cr(8)
3395         .kr(3)
3396         .channels(channels)
3397         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3398     }
3399   }
3400 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,c_div_8_with_qmin)3401   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_div_8_with_qmin) {
3402     TEST_REQUIRES_ARM_NEON;
3403     for (uint32_t channels = 16; channels < 128; channels += 24) {
3404       DWConvMicrokernelTester()
3405         .cr(8)
3406         .kr(3)
3407         .channels(channels)
3408         .qmin(128)
3409         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3410     }
3411   }
3412 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,c_div_8_with_qmax)3413   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_div_8_with_qmax) {
3414     TEST_REQUIRES_ARM_NEON;
3415     for (uint32_t channels = 16; channels < 128; channels += 24) {
3416       DWConvMicrokernelTester()
3417         .cr(8)
3418         .kr(3)
3419         .channels(channels)
3420         .qmax(128)
3421         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3422     }
3423   }
3424 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,c_lt_8)3425   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_lt_8) {
3426     TEST_REQUIRES_ARM_NEON;
3427     for (uint32_t channels = 1; channels < 8; channels++) {
3428       DWConvMicrokernelTester()
3429         .cr(8)
3430         .kr(3)
3431         .channels(channels)
3432         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3433     }
3434   }
3435 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,c_gt_8)3436   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_gt_8) {
3437     TEST_REQUIRES_ARM_NEON;
3438     for (uint32_t channels = 9; channels < 16; channels++) {
3439       DWConvMicrokernelTester()
3440         .cr(8)
3441         .kr(3)
3442         .channels(channels)
3443         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3444     }
3445   }
3446 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,c_gt_8_with_qmin)3447   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_gt_8_with_qmin) {
3448     TEST_REQUIRES_ARM_NEON;
3449     for (uint32_t channels = 9; channels < 16; channels++) {
3450       DWConvMicrokernelTester()
3451         .cr(8)
3452         .kr(3)
3453         .channels(channels)
3454         .qmin(128)
3455         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3456     }
3457   }
3458 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,c_gt_8_with_qmax)3459   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_gt_8_with_qmax) {
3460     TEST_REQUIRES_ARM_NEON;
3461     for (uint32_t channels = 9; channels < 16; channels++) {
3462       DWConvMicrokernelTester()
3463         .cr(8)
3464         .kr(3)
3465         .channels(channels)
3466         .qmax(128)
3467         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3468     }
3469   }
3470 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,multipixel)3471   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, multipixel) {
3472     TEST_REQUIRES_ARM_NEON;
3473     for (size_t channels = 1; channels <= 40; channels += 7) {
3474       DWConvMicrokernelTester()
3475         .cr(8)
3476         .kr(3)
3477         .channels(channels)
3478         .width(3)
3479         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3480     }
3481   }
3482 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,multipixel_with_step)3483   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, multipixel_with_step) {
3484     TEST_REQUIRES_ARM_NEON;
3485     for (size_t channels = 1; channels <= 40; channels += 7) {
3486       for (size_t step = 2; step <= 3; step++) {
3487         DWConvMicrokernelTester()
3488           .cr(8)
3489           .kr(3)
3490           .channels(channels)
3491           .width(3)
3492           .step(step)
3493           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3494       }
3495     }
3496   }
3497 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,multipixel_with_output_stride)3498   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, multipixel_with_output_stride) {
3499     TEST_REQUIRES_ARM_NEON;
3500     for (size_t channels = 1; channels <= 40; channels += 7) {
3501       DWConvMicrokernelTester()
3502         .cr(8)
3503         .kr(3)
3504         .channels(8)
3505         .width(5)
3506         .output_stride(43)
3507         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3508     }
3509   }
3510 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,multipixel_with_qmin)3511   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, multipixel_with_qmin) {
3512     TEST_REQUIRES_ARM_NEON;
3513     for (size_t channels = 1; channels <= 40; channels += 7) {
3514       DWConvMicrokernelTester()
3515         .cr(8)
3516         .kr(3)
3517         .channels(channels)
3518         .width(3)
3519         .qmin(128)
3520         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3521     }
3522   }
3523 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,multipixel_with_qmax)3524   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, multipixel_with_qmax) {
3525     TEST_REQUIRES_ARM_NEON;
3526     for (size_t channels = 1; channels <= 40; channels += 7) {
3527       DWConvMicrokernelTester()
3528         .cr(8)
3529         .kr(3)
3530         .channels(channels)
3531         .width(3)
3532         .qmax(128)
3533         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3534     }
3535   }
3536 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,input_offset)3537   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, input_offset) {
3538     TEST_REQUIRES_ARM_NEON;
3539     for (uint32_t channels = 16; channels < 128; channels += 24) {
3540       DWConvMicrokernelTester()
3541         .cr(8)
3542         .kr(3)
3543         .channels(channels)
3544         .input_offset(176)
3545         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3546     }
3547   }
3548 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON,zero)3549   TEST(F32_DWCONV_MINMAX_UP8X3__NEON, zero) {
3550     TEST_REQUIRES_ARM_NEON;
3551     for (uint32_t mz = 0; mz < 3; mz++) {
3552       for (uint32_t channels = 16; channels < 128; channels += 24) {
3553         DWConvMicrokernelTester()
3554           .cr(8)
3555           .kr(3)
3556           .channels(channels)
3557           .input_offset(176)
3558           .zero_index(mz)
3559           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
3560       }
3561     }
3562   }
3563 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
3564 
3565 
3566 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,c_eq_8)3567   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_eq_8) {
3568     TEST_REQUIRES_ARM_NEON;
3569     DWConvMicrokernelTester()
3570       .cr(8)
3571       .kr(3)
3572       .channels(8)
3573       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3574   }
3575 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,c_div_8)3576   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_div_8) {
3577     TEST_REQUIRES_ARM_NEON;
3578     for (uint32_t channels = 16; channels < 128; channels += 24) {
3579       DWConvMicrokernelTester()
3580         .cr(8)
3581         .kr(3)
3582         .channels(channels)
3583         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3584     }
3585   }
3586 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,c_div_8_with_qmin)3587   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_div_8_with_qmin) {
3588     TEST_REQUIRES_ARM_NEON;
3589     for (uint32_t channels = 16; channels < 128; channels += 24) {
3590       DWConvMicrokernelTester()
3591         .cr(8)
3592         .kr(3)
3593         .channels(channels)
3594         .qmin(128)
3595         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3596     }
3597   }
3598 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,c_div_8_with_qmax)3599   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_div_8_with_qmax) {
3600     TEST_REQUIRES_ARM_NEON;
3601     for (uint32_t channels = 16; channels < 128; channels += 24) {
3602       DWConvMicrokernelTester()
3603         .cr(8)
3604         .kr(3)
3605         .channels(channels)
3606         .qmax(128)
3607         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3608     }
3609   }
3610 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,c_lt_8)3611   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_lt_8) {
3612     TEST_REQUIRES_ARM_NEON;
3613     for (uint32_t channels = 1; channels < 8; channels++) {
3614       DWConvMicrokernelTester()
3615         .cr(8)
3616         .kr(3)
3617         .channels(channels)
3618         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3619     }
3620   }
3621 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,c_gt_8)3622   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_gt_8) {
3623     TEST_REQUIRES_ARM_NEON;
3624     for (uint32_t channels = 9; channels < 16; channels++) {
3625       DWConvMicrokernelTester()
3626         .cr(8)
3627         .kr(3)
3628         .channels(channels)
3629         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3630     }
3631   }
3632 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,c_gt_8_with_qmin)3633   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_gt_8_with_qmin) {
3634     TEST_REQUIRES_ARM_NEON;
3635     for (uint32_t channels = 9; channels < 16; channels++) {
3636       DWConvMicrokernelTester()
3637         .cr(8)
3638         .kr(3)
3639         .channels(channels)
3640         .qmin(128)
3641         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3642     }
3643   }
3644 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,c_gt_8_with_qmax)3645   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_gt_8_with_qmax) {
3646     TEST_REQUIRES_ARM_NEON;
3647     for (uint32_t channels = 9; channels < 16; channels++) {
3648       DWConvMicrokernelTester()
3649         .cr(8)
3650         .kr(3)
3651         .channels(channels)
3652         .qmax(128)
3653         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3654     }
3655   }
3656 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,multipixel)3657   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, multipixel) {
3658     TEST_REQUIRES_ARM_NEON;
3659     for (size_t channels = 1; channels <= 40; channels += 7) {
3660       DWConvMicrokernelTester()
3661         .cr(8)
3662         .kr(3)
3663         .channels(channels)
3664         .width(3)
3665         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3666     }
3667   }
3668 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,multipixel_with_step)3669   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, multipixel_with_step) {
3670     TEST_REQUIRES_ARM_NEON;
3671     for (size_t channels = 1; channels <= 40; channels += 7) {
3672       for (size_t step = 2; step <= 3; step++) {
3673         DWConvMicrokernelTester()
3674           .cr(8)
3675           .kr(3)
3676           .channels(channels)
3677           .width(3)
3678           .step(step)
3679           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3680       }
3681     }
3682   }
3683 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,multipixel_with_output_stride)3684   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, multipixel_with_output_stride) {
3685     TEST_REQUIRES_ARM_NEON;
3686     for (size_t channels = 1; channels <= 40; channels += 7) {
3687       DWConvMicrokernelTester()
3688         .cr(8)
3689         .kr(3)
3690         .channels(8)
3691         .width(5)
3692         .output_stride(43)
3693         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3694     }
3695   }
3696 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,multipixel_with_qmin)3697   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, multipixel_with_qmin) {
3698     TEST_REQUIRES_ARM_NEON;
3699     for (size_t channels = 1; channels <= 40; channels += 7) {
3700       DWConvMicrokernelTester()
3701         .cr(8)
3702         .kr(3)
3703         .channels(channels)
3704         .width(3)
3705         .qmin(128)
3706         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3707     }
3708   }
3709 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,multipixel_with_qmax)3710   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, multipixel_with_qmax) {
3711     TEST_REQUIRES_ARM_NEON;
3712     for (size_t channels = 1; channels <= 40; channels += 7) {
3713       DWConvMicrokernelTester()
3714         .cr(8)
3715         .kr(3)
3716         .channels(channels)
3717         .width(3)
3718         .qmax(128)
3719         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3720     }
3721   }
3722 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,input_offset)3723   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, input_offset) {
3724     TEST_REQUIRES_ARM_NEON;
3725     for (uint32_t channels = 16; channels < 128; channels += 24) {
3726       DWConvMicrokernelTester()
3727         .cr(8)
3728         .kr(3)
3729         .channels(channels)
3730         .input_offset(176)
3731         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3732     }
3733   }
3734 
TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2,zero)3735   TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, zero) {
3736     TEST_REQUIRES_ARM_NEON;
3737     for (uint32_t mz = 0; mz < 3; mz++) {
3738       for (uint32_t channels = 16; channels < 128; channels += 24) {
3739         DWConvMicrokernelTester()
3740           .cr(8)
3741           .kr(3)
3742           .channels(channels)
3743           .input_offset(176)
3744           .zero_index(mz)
3745           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
3746       }
3747     }
3748   }
3749 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
3750 
3751 
3752 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,c_eq_8)3753   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_eq_8) {
3754     TEST_REQUIRES_ARM_NEON_FMA;
3755     DWConvMicrokernelTester()
3756       .cr(8)
3757       .kr(3)
3758       .channels(8)
3759       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3760   }
3761 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,c_div_8)3762   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_div_8) {
3763     TEST_REQUIRES_ARM_NEON_FMA;
3764     for (uint32_t channels = 16; channels < 128; channels += 24) {
3765       DWConvMicrokernelTester()
3766         .cr(8)
3767         .kr(3)
3768         .channels(channels)
3769         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3770     }
3771   }
3772 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,c_div_8_with_qmin)3773   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_div_8_with_qmin) {
3774     TEST_REQUIRES_ARM_NEON_FMA;
3775     for (uint32_t channels = 16; channels < 128; channels += 24) {
3776       DWConvMicrokernelTester()
3777         .cr(8)
3778         .kr(3)
3779         .channels(channels)
3780         .qmin(128)
3781         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3782     }
3783   }
3784 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,c_div_8_with_qmax)3785   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_div_8_with_qmax) {
3786     TEST_REQUIRES_ARM_NEON_FMA;
3787     for (uint32_t channels = 16; channels < 128; channels += 24) {
3788       DWConvMicrokernelTester()
3789         .cr(8)
3790         .kr(3)
3791         .channels(channels)
3792         .qmax(128)
3793         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3794     }
3795   }
3796 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,c_lt_8)3797   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_lt_8) {
3798     TEST_REQUIRES_ARM_NEON_FMA;
3799     for (uint32_t channels = 1; channels < 8; channels++) {
3800       DWConvMicrokernelTester()
3801         .cr(8)
3802         .kr(3)
3803         .channels(channels)
3804         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3805     }
3806   }
3807 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,c_gt_8)3808   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_gt_8) {
3809     TEST_REQUIRES_ARM_NEON_FMA;
3810     for (uint32_t channels = 9; channels < 16; channels++) {
3811       DWConvMicrokernelTester()
3812         .cr(8)
3813         .kr(3)
3814         .channels(channels)
3815         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3816     }
3817   }
3818 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,c_gt_8_with_qmin)3819   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_gt_8_with_qmin) {
3820     TEST_REQUIRES_ARM_NEON_FMA;
3821     for (uint32_t channels = 9; channels < 16; channels++) {
3822       DWConvMicrokernelTester()
3823         .cr(8)
3824         .kr(3)
3825         .channels(channels)
3826         .qmin(128)
3827         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3828     }
3829   }
3830 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,c_gt_8_with_qmax)3831   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_gt_8_with_qmax) {
3832     TEST_REQUIRES_ARM_NEON_FMA;
3833     for (uint32_t channels = 9; channels < 16; channels++) {
3834       DWConvMicrokernelTester()
3835         .cr(8)
3836         .kr(3)
3837         .channels(channels)
3838         .qmax(128)
3839         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3840     }
3841   }
3842 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,multipixel)3843   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, multipixel) {
3844     TEST_REQUIRES_ARM_NEON_FMA;
3845     for (size_t channels = 1; channels <= 40; channels += 7) {
3846       DWConvMicrokernelTester()
3847         .cr(8)
3848         .kr(3)
3849         .channels(channels)
3850         .width(3)
3851         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3852     }
3853   }
3854 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,multipixel_with_step)3855   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, multipixel_with_step) {
3856     TEST_REQUIRES_ARM_NEON_FMA;
3857     for (size_t channels = 1; channels <= 40; channels += 7) {
3858       for (size_t step = 2; step <= 3; step++) {
3859         DWConvMicrokernelTester()
3860           .cr(8)
3861           .kr(3)
3862           .channels(channels)
3863           .width(3)
3864           .step(step)
3865           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3866       }
3867     }
3868   }
3869 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,multipixel_with_output_stride)3870   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, multipixel_with_output_stride) {
3871     TEST_REQUIRES_ARM_NEON_FMA;
3872     for (size_t channels = 1; channels <= 40; channels += 7) {
3873       DWConvMicrokernelTester()
3874         .cr(8)
3875         .kr(3)
3876         .channels(8)
3877         .width(5)
3878         .output_stride(43)
3879         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3880     }
3881   }
3882 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,multipixel_with_qmin)3883   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, multipixel_with_qmin) {
3884     TEST_REQUIRES_ARM_NEON_FMA;
3885     for (size_t channels = 1; channels <= 40; channels += 7) {
3886       DWConvMicrokernelTester()
3887         .cr(8)
3888         .kr(3)
3889         .channels(channels)
3890         .width(3)
3891         .qmin(128)
3892         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3893     }
3894   }
3895 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,multipixel_with_qmax)3896   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, multipixel_with_qmax) {
3897     TEST_REQUIRES_ARM_NEON_FMA;
3898     for (size_t channels = 1; channels <= 40; channels += 7) {
3899       DWConvMicrokernelTester()
3900         .cr(8)
3901         .kr(3)
3902         .channels(channels)
3903         .width(3)
3904         .qmax(128)
3905         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3906     }
3907   }
3908 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,input_offset)3909   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, input_offset) {
3910     TEST_REQUIRES_ARM_NEON_FMA;
3911     for (uint32_t channels = 16; channels < 128; channels += 24) {
3912       DWConvMicrokernelTester()
3913         .cr(8)
3914         .kr(3)
3915         .channels(channels)
3916         .input_offset(176)
3917         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3918     }
3919   }
3920 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA,zero)3921   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, zero) {
3922     TEST_REQUIRES_ARM_NEON_FMA;
3923     for (uint32_t mz = 0; mz < 3; mz++) {
3924       for (uint32_t channels = 16; channels < 128; channels += 24) {
3925         DWConvMicrokernelTester()
3926           .cr(8)
3927           .kr(3)
3928           .channels(channels)
3929           .input_offset(176)
3930           .zero_index(mz)
3931           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3932       }
3933     }
3934   }
3935 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
3936 
3937 
3938 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,c_eq_8)3939   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_eq_8) {
3940     TEST_REQUIRES_ARM_NEON_FMA;
3941     DWConvMicrokernelTester()
3942       .cr(8)
3943       .kr(3)
3944       .channels(8)
3945       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3946   }
3947 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,c_div_8)3948   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_div_8) {
3949     TEST_REQUIRES_ARM_NEON_FMA;
3950     for (uint32_t channels = 16; channels < 128; channels += 24) {
3951       DWConvMicrokernelTester()
3952         .cr(8)
3953         .kr(3)
3954         .channels(channels)
3955         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3956     }
3957   }
3958 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,c_div_8_with_qmin)3959   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_div_8_with_qmin) {
3960     TEST_REQUIRES_ARM_NEON_FMA;
3961     for (uint32_t channels = 16; channels < 128; channels += 24) {
3962       DWConvMicrokernelTester()
3963         .cr(8)
3964         .kr(3)
3965         .channels(channels)
3966         .qmin(128)
3967         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3968     }
3969   }
3970 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,c_div_8_with_qmax)3971   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_div_8_with_qmax) {
3972     TEST_REQUIRES_ARM_NEON_FMA;
3973     for (uint32_t channels = 16; channels < 128; channels += 24) {
3974       DWConvMicrokernelTester()
3975         .cr(8)
3976         .kr(3)
3977         .channels(channels)
3978         .qmax(128)
3979         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3980     }
3981   }
3982 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,c_lt_8)3983   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_lt_8) {
3984     TEST_REQUIRES_ARM_NEON_FMA;
3985     for (uint32_t channels = 1; channels < 8; channels++) {
3986       DWConvMicrokernelTester()
3987         .cr(8)
3988         .kr(3)
3989         .channels(channels)
3990         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3991     }
3992   }
3993 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,c_gt_8)3994   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_gt_8) {
3995     TEST_REQUIRES_ARM_NEON_FMA;
3996     for (uint32_t channels = 9; channels < 16; channels++) {
3997       DWConvMicrokernelTester()
3998         .cr(8)
3999         .kr(3)
4000         .channels(channels)
4001         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4002     }
4003   }
4004 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,c_gt_8_with_qmin)4005   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_gt_8_with_qmin) {
4006     TEST_REQUIRES_ARM_NEON_FMA;
4007     for (uint32_t channels = 9; channels < 16; channels++) {
4008       DWConvMicrokernelTester()
4009         .cr(8)
4010         .kr(3)
4011         .channels(channels)
4012         .qmin(128)
4013         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4014     }
4015   }
4016 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,c_gt_8_with_qmax)4017   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_gt_8_with_qmax) {
4018     TEST_REQUIRES_ARM_NEON_FMA;
4019     for (uint32_t channels = 9; channels < 16; channels++) {
4020       DWConvMicrokernelTester()
4021         .cr(8)
4022         .kr(3)
4023         .channels(channels)
4024         .qmax(128)
4025         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4026     }
4027   }
4028 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,multipixel)4029   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, multipixel) {
4030     TEST_REQUIRES_ARM_NEON_FMA;
4031     for (size_t channels = 1; channels <= 40; channels += 7) {
4032       DWConvMicrokernelTester()
4033         .cr(8)
4034         .kr(3)
4035         .channels(channels)
4036         .width(3)
4037         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4038     }
4039   }
4040 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,multipixel_with_step)4041   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, multipixel_with_step) {
4042     TEST_REQUIRES_ARM_NEON_FMA;
4043     for (size_t channels = 1; channels <= 40; channels += 7) {
4044       for (size_t step = 2; step <= 3; step++) {
4045         DWConvMicrokernelTester()
4046           .cr(8)
4047           .kr(3)
4048           .channels(channels)
4049           .width(3)
4050           .step(step)
4051           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4052       }
4053     }
4054   }
4055 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,multipixel_with_output_stride)4056   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, multipixel_with_output_stride) {
4057     TEST_REQUIRES_ARM_NEON_FMA;
4058     for (size_t channels = 1; channels <= 40; channels += 7) {
4059       DWConvMicrokernelTester()
4060         .cr(8)
4061         .kr(3)
4062         .channels(8)
4063         .width(5)
4064         .output_stride(43)
4065         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4066     }
4067   }
4068 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,multipixel_with_qmin)4069   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, multipixel_with_qmin) {
4070     TEST_REQUIRES_ARM_NEON_FMA;
4071     for (size_t channels = 1; channels <= 40; channels += 7) {
4072       DWConvMicrokernelTester()
4073         .cr(8)
4074         .kr(3)
4075         .channels(channels)
4076         .width(3)
4077         .qmin(128)
4078         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4079     }
4080   }
4081 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,multipixel_with_qmax)4082   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, multipixel_with_qmax) {
4083     TEST_REQUIRES_ARM_NEON_FMA;
4084     for (size_t channels = 1; channels <= 40; channels += 7) {
4085       DWConvMicrokernelTester()
4086         .cr(8)
4087         .kr(3)
4088         .channels(channels)
4089         .width(3)
4090         .qmax(128)
4091         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4092     }
4093   }
4094 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,input_offset)4095   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, input_offset) {
4096     TEST_REQUIRES_ARM_NEON_FMA;
4097     for (uint32_t channels = 16; channels < 128; channels += 24) {
4098       DWConvMicrokernelTester()
4099         .cr(8)
4100         .kr(3)
4101         .channels(channels)
4102         .input_offset(176)
4103         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4104     }
4105   }
4106 
TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2,zero)4107   TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, zero) {
4108     TEST_REQUIRES_ARM_NEON_FMA;
4109     for (uint32_t mz = 0; mz < 3; mz++) {
4110       for (uint32_t channels = 16; channels < 128; channels += 24) {
4111         DWConvMicrokernelTester()
4112           .cr(8)
4113           .kr(3)
4114           .channels(channels)
4115           .input_offset(176)
4116           .zero_index(mz)
4117           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4118       }
4119     }
4120   }
4121 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
4122 
4123 
4124 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,c_eq_8)4125   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_eq_8) {
4126     TEST_REQUIRES_ARM_NEON;
4127     DWConvMicrokernelTester()
4128       .cr(8)
4129       .kr(4)
4130       .channels(8)
4131       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4132   }
4133 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,c_div_8)4134   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_div_8) {
4135     TEST_REQUIRES_ARM_NEON;
4136     for (uint32_t channels = 16; channels < 128; channels += 24) {
4137       DWConvMicrokernelTester()
4138         .cr(8)
4139         .kr(4)
4140         .channels(channels)
4141         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4142     }
4143   }
4144 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,c_div_8_with_qmin)4145   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_div_8_with_qmin) {
4146     TEST_REQUIRES_ARM_NEON;
4147     for (uint32_t channels = 16; channels < 128; channels += 24) {
4148       DWConvMicrokernelTester()
4149         .cr(8)
4150         .kr(4)
4151         .channels(channels)
4152         .qmin(128)
4153         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4154     }
4155   }
4156 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,c_div_8_with_qmax)4157   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_div_8_with_qmax) {
4158     TEST_REQUIRES_ARM_NEON;
4159     for (uint32_t channels = 16; channels < 128; channels += 24) {
4160       DWConvMicrokernelTester()
4161         .cr(8)
4162         .kr(4)
4163         .channels(channels)
4164         .qmax(128)
4165         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4166     }
4167   }
4168 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,c_lt_8)4169   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_lt_8) {
4170     TEST_REQUIRES_ARM_NEON;
4171     for (uint32_t channels = 1; channels < 8; channels++) {
4172       DWConvMicrokernelTester()
4173         .cr(8)
4174         .kr(4)
4175         .channels(channels)
4176         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4177     }
4178   }
4179 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,c_gt_8)4180   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_gt_8) {
4181     TEST_REQUIRES_ARM_NEON;
4182     for (uint32_t channels = 9; channels < 16; channels++) {
4183       DWConvMicrokernelTester()
4184         .cr(8)
4185         .kr(4)
4186         .channels(channels)
4187         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4188     }
4189   }
4190 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,c_gt_8_with_qmin)4191   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_gt_8_with_qmin) {
4192     TEST_REQUIRES_ARM_NEON;
4193     for (uint32_t channels = 9; channels < 16; channels++) {
4194       DWConvMicrokernelTester()
4195         .cr(8)
4196         .kr(4)
4197         .channels(channels)
4198         .qmin(128)
4199         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4200     }
4201   }
4202 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,c_gt_8_with_qmax)4203   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_gt_8_with_qmax) {
4204     TEST_REQUIRES_ARM_NEON;
4205     for (uint32_t channels = 9; channels < 16; channels++) {
4206       DWConvMicrokernelTester()
4207         .cr(8)
4208         .kr(4)
4209         .channels(channels)
4210         .qmax(128)
4211         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4212     }
4213   }
4214 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,multipixel)4215   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel) {
4216     TEST_REQUIRES_ARM_NEON;
4217     for (size_t channels = 1; channels <= 40; channels += 7) {
4218       DWConvMicrokernelTester()
4219         .cr(8)
4220         .kr(4)
4221         .channels(channels)
4222         .width(3)
4223         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4224     }
4225   }
4226 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,multipixel_with_step)4227   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel_with_step) {
4228     TEST_REQUIRES_ARM_NEON;
4229     for (size_t channels = 1; channels <= 40; channels += 7) {
4230       for (size_t step = 2; step <= 4; step++) {
4231         DWConvMicrokernelTester()
4232           .cr(8)
4233           .kr(4)
4234           .channels(channels)
4235           .width(3)
4236           .step(step)
4237           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4238       }
4239     }
4240   }
4241 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,multipixel_with_output_stride)4242   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel_with_output_stride) {
4243     TEST_REQUIRES_ARM_NEON;
4244     for (size_t channels = 1; channels <= 40; channels += 7) {
4245       DWConvMicrokernelTester()
4246         .cr(8)
4247         .kr(4)
4248         .channels(8)
4249         .width(5)
4250         .output_stride(43)
4251         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4252     }
4253   }
4254 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,multipixel_with_qmin)4255   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel_with_qmin) {
4256     TEST_REQUIRES_ARM_NEON;
4257     for (size_t channels = 1; channels <= 40; channels += 7) {
4258       DWConvMicrokernelTester()
4259         .cr(8)
4260         .kr(4)
4261         .channels(channels)
4262         .width(3)
4263         .qmin(128)
4264         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4265     }
4266   }
4267 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,multipixel_with_qmax)4268   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel_with_qmax) {
4269     TEST_REQUIRES_ARM_NEON;
4270     for (size_t channels = 1; channels <= 40; channels += 7) {
4271       DWConvMicrokernelTester()
4272         .cr(8)
4273         .kr(4)
4274         .channels(channels)
4275         .width(3)
4276         .qmax(128)
4277         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4278     }
4279   }
4280 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,input_offset)4281   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, input_offset) {
4282     TEST_REQUIRES_ARM_NEON;
4283     for (uint32_t channels = 16; channels < 128; channels += 24) {
4284       DWConvMicrokernelTester()
4285         .cr(8)
4286         .kr(4)
4287         .channels(channels)
4288         .input_offset(176)
4289         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4290     }
4291   }
4292 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON,zero)4293   TEST(F32_DWCONV_MINMAX_UP8X4__NEON, zero) {
4294     TEST_REQUIRES_ARM_NEON;
4295     for (uint32_t mz = 0; mz < 4; mz++) {
4296       for (uint32_t channels = 16; channels < 128; channels += 24) {
4297         DWConvMicrokernelTester()
4298           .cr(8)
4299           .kr(4)
4300           .channels(channels)
4301           .input_offset(176)
4302           .zero_index(mz)
4303           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
4304       }
4305     }
4306   }
4307 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
4308 
4309 
4310 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,c_eq_8)4311   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_eq_8) {
4312     TEST_REQUIRES_ARM_NEON;
4313     DWConvMicrokernelTester()
4314       .cr(8)
4315       .kr(4)
4316       .channels(8)
4317       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4318   }
4319 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,c_div_8)4320   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_div_8) {
4321     TEST_REQUIRES_ARM_NEON;
4322     for (uint32_t channels = 16; channels < 128; channels += 24) {
4323       DWConvMicrokernelTester()
4324         .cr(8)
4325         .kr(4)
4326         .channels(channels)
4327         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4328     }
4329   }
4330 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,c_div_8_with_qmin)4331   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_div_8_with_qmin) {
4332     TEST_REQUIRES_ARM_NEON;
4333     for (uint32_t channels = 16; channels < 128; channels += 24) {
4334       DWConvMicrokernelTester()
4335         .cr(8)
4336         .kr(4)
4337         .channels(channels)
4338         .qmin(128)
4339         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4340     }
4341   }
4342 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,c_div_8_with_qmax)4343   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_div_8_with_qmax) {
4344     TEST_REQUIRES_ARM_NEON;
4345     for (uint32_t channels = 16; channels < 128; channels += 24) {
4346       DWConvMicrokernelTester()
4347         .cr(8)
4348         .kr(4)
4349         .channels(channels)
4350         .qmax(128)
4351         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4352     }
4353   }
4354 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,c_lt_8)4355   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_lt_8) {
4356     TEST_REQUIRES_ARM_NEON;
4357     for (uint32_t channels = 1; channels < 8; channels++) {
4358       DWConvMicrokernelTester()
4359         .cr(8)
4360         .kr(4)
4361         .channels(channels)
4362         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4363     }
4364   }
4365 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,c_gt_8)4366   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_gt_8) {
4367     TEST_REQUIRES_ARM_NEON;
4368     for (uint32_t channels = 9; channels < 16; channels++) {
4369       DWConvMicrokernelTester()
4370         .cr(8)
4371         .kr(4)
4372         .channels(channels)
4373         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4374     }
4375   }
4376 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,c_gt_8_with_qmin)4377   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_gt_8_with_qmin) {
4378     TEST_REQUIRES_ARM_NEON;
4379     for (uint32_t channels = 9; channels < 16; channels++) {
4380       DWConvMicrokernelTester()
4381         .cr(8)
4382         .kr(4)
4383         .channels(channels)
4384         .qmin(128)
4385         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4386     }
4387   }
4388 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,c_gt_8_with_qmax)4389   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_gt_8_with_qmax) {
4390     TEST_REQUIRES_ARM_NEON;
4391     for (uint32_t channels = 9; channels < 16; channels++) {
4392       DWConvMicrokernelTester()
4393         .cr(8)
4394         .kr(4)
4395         .channels(channels)
4396         .qmax(128)
4397         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4398     }
4399   }
4400 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,multipixel)4401   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel) {
4402     TEST_REQUIRES_ARM_NEON;
4403     for (size_t channels = 1; channels <= 40; channels += 7) {
4404       DWConvMicrokernelTester()
4405         .cr(8)
4406         .kr(4)
4407         .channels(channels)
4408         .width(3)
4409         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4410     }
4411   }
4412 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,multipixel_with_step)4413   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel_with_step) {
4414     TEST_REQUIRES_ARM_NEON;
4415     for (size_t channels = 1; channels <= 40; channels += 7) {
4416       for (size_t step = 2; step <= 4; step++) {
4417         DWConvMicrokernelTester()
4418           .cr(8)
4419           .kr(4)
4420           .channels(channels)
4421           .width(3)
4422           .step(step)
4423           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4424       }
4425     }
4426   }
4427 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,multipixel_with_output_stride)4428   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel_with_output_stride) {
4429     TEST_REQUIRES_ARM_NEON;
4430     for (size_t channels = 1; channels <= 40; channels += 7) {
4431       DWConvMicrokernelTester()
4432         .cr(8)
4433         .kr(4)
4434         .channels(8)
4435         .width(5)
4436         .output_stride(43)
4437         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4438     }
4439   }
4440 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,multipixel_with_qmin)4441   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel_with_qmin) {
4442     TEST_REQUIRES_ARM_NEON;
4443     for (size_t channels = 1; channels <= 40; channels += 7) {
4444       DWConvMicrokernelTester()
4445         .cr(8)
4446         .kr(4)
4447         .channels(channels)
4448         .width(3)
4449         .qmin(128)
4450         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4451     }
4452   }
4453 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,multipixel_with_qmax)4454   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel_with_qmax) {
4455     TEST_REQUIRES_ARM_NEON;
4456     for (size_t channels = 1; channels <= 40; channels += 7) {
4457       DWConvMicrokernelTester()
4458         .cr(8)
4459         .kr(4)
4460         .channels(channels)
4461         .width(3)
4462         .qmax(128)
4463         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4464     }
4465   }
4466 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,input_offset)4467   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, input_offset) {
4468     TEST_REQUIRES_ARM_NEON;
4469     for (uint32_t channels = 16; channels < 128; channels += 24) {
4470       DWConvMicrokernelTester()
4471         .cr(8)
4472         .kr(4)
4473         .channels(channels)
4474         .input_offset(176)
4475         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4476     }
4477   }
4478 
TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2,zero)4479   TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, zero) {
4480     TEST_REQUIRES_ARM_NEON;
4481     for (uint32_t mz = 0; mz < 4; mz++) {
4482       for (uint32_t channels = 16; channels < 128; channels += 24) {
4483         DWConvMicrokernelTester()
4484           .cr(8)
4485           .kr(4)
4486           .channels(channels)
4487           .input_offset(176)
4488           .zero_index(mz)
4489           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
4490       }
4491     }
4492   }
4493 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
4494 
4495 
4496 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,c_eq_8)4497   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_eq_8) {
4498     TEST_REQUIRES_ARM_NEON_FMA;
4499     DWConvMicrokernelTester()
4500       .cr(8)
4501       .kr(4)
4502       .channels(8)
4503       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4504   }
4505 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,c_div_8)4506   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_div_8) {
4507     TEST_REQUIRES_ARM_NEON_FMA;
4508     for (uint32_t channels = 16; channels < 128; channels += 24) {
4509       DWConvMicrokernelTester()
4510         .cr(8)
4511         .kr(4)
4512         .channels(channels)
4513         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4514     }
4515   }
4516 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,c_div_8_with_qmin)4517   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_div_8_with_qmin) {
4518     TEST_REQUIRES_ARM_NEON_FMA;
4519     for (uint32_t channels = 16; channels < 128; channels += 24) {
4520       DWConvMicrokernelTester()
4521         .cr(8)
4522         .kr(4)
4523         .channels(channels)
4524         .qmin(128)
4525         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4526     }
4527   }
4528 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,c_div_8_with_qmax)4529   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_div_8_with_qmax) {
4530     TEST_REQUIRES_ARM_NEON_FMA;
4531     for (uint32_t channels = 16; channels < 128; channels += 24) {
4532       DWConvMicrokernelTester()
4533         .cr(8)
4534         .kr(4)
4535         .channels(channels)
4536         .qmax(128)
4537         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4538     }
4539   }
4540 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,c_lt_8)4541   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_lt_8) {
4542     TEST_REQUIRES_ARM_NEON_FMA;
4543     for (uint32_t channels = 1; channels < 8; channels++) {
4544       DWConvMicrokernelTester()
4545         .cr(8)
4546         .kr(4)
4547         .channels(channels)
4548         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4549     }
4550   }
4551 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,c_gt_8)4552   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_gt_8) {
4553     TEST_REQUIRES_ARM_NEON_FMA;
4554     for (uint32_t channels = 9; channels < 16; channels++) {
4555       DWConvMicrokernelTester()
4556         .cr(8)
4557         .kr(4)
4558         .channels(channels)
4559         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4560     }
4561   }
4562 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,c_gt_8_with_qmin)4563   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_gt_8_with_qmin) {
4564     TEST_REQUIRES_ARM_NEON_FMA;
4565     for (uint32_t channels = 9; channels < 16; channels++) {
4566       DWConvMicrokernelTester()
4567         .cr(8)
4568         .kr(4)
4569         .channels(channels)
4570         .qmin(128)
4571         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4572     }
4573   }
4574 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,c_gt_8_with_qmax)4575   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_gt_8_with_qmax) {
4576     TEST_REQUIRES_ARM_NEON_FMA;
4577     for (uint32_t channels = 9; channels < 16; channels++) {
4578       DWConvMicrokernelTester()
4579         .cr(8)
4580         .kr(4)
4581         .channels(channels)
4582         .qmax(128)
4583         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4584     }
4585   }
4586 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,multipixel)4587   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, multipixel) {
4588     TEST_REQUIRES_ARM_NEON_FMA;
4589     for (size_t channels = 1; channels <= 40; channels += 7) {
4590       DWConvMicrokernelTester()
4591         .cr(8)
4592         .kr(4)
4593         .channels(channels)
4594         .width(3)
4595         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4596     }
4597   }
4598 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,multipixel_with_step)4599   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, multipixel_with_step) {
4600     TEST_REQUIRES_ARM_NEON_FMA;
4601     for (size_t channels = 1; channels <= 40; channels += 7) {
4602       for (size_t step = 2; step <= 4; step++) {
4603         DWConvMicrokernelTester()
4604           .cr(8)
4605           .kr(4)
4606           .channels(channels)
4607           .width(3)
4608           .step(step)
4609           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4610       }
4611     }
4612   }
4613 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,multipixel_with_output_stride)4614   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, multipixel_with_output_stride) {
4615     TEST_REQUIRES_ARM_NEON_FMA;
4616     for (size_t channels = 1; channels <= 40; channels += 7) {
4617       DWConvMicrokernelTester()
4618         .cr(8)
4619         .kr(4)
4620         .channels(8)
4621         .width(5)
4622         .output_stride(43)
4623         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4624     }
4625   }
4626 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,multipixel_with_qmin)4627   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, multipixel_with_qmin) {
4628     TEST_REQUIRES_ARM_NEON_FMA;
4629     for (size_t channels = 1; channels <= 40; channels += 7) {
4630       DWConvMicrokernelTester()
4631         .cr(8)
4632         .kr(4)
4633         .channels(channels)
4634         .width(3)
4635         .qmin(128)
4636         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4637     }
4638   }
4639 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,multipixel_with_qmax)4640   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, multipixel_with_qmax) {
4641     TEST_REQUIRES_ARM_NEON_FMA;
4642     for (size_t channels = 1; channels <= 40; channels += 7) {
4643       DWConvMicrokernelTester()
4644         .cr(8)
4645         .kr(4)
4646         .channels(channels)
4647         .width(3)
4648         .qmax(128)
4649         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4650     }
4651   }
4652 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,input_offset)4653   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, input_offset) {
4654     TEST_REQUIRES_ARM_NEON_FMA;
4655     for (uint32_t channels = 16; channels < 128; channels += 24) {
4656       DWConvMicrokernelTester()
4657         .cr(8)
4658         .kr(4)
4659         .channels(channels)
4660         .input_offset(176)
4661         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4662     }
4663   }
4664 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA,zero)4665   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, zero) {
4666     TEST_REQUIRES_ARM_NEON_FMA;
4667     for (uint32_t mz = 0; mz < 4; mz++) {
4668       for (uint32_t channels = 16; channels < 128; channels += 24) {
4669         DWConvMicrokernelTester()
4670           .cr(8)
4671           .kr(4)
4672           .channels(channels)
4673           .input_offset(176)
4674           .zero_index(mz)
4675           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
4676       }
4677     }
4678   }
4679 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
4680 
4681 
4682 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,c_eq_8)4683   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_eq_8) {
4684     TEST_REQUIRES_ARM_NEON_FMA;
4685     DWConvMicrokernelTester()
4686       .cr(8)
4687       .kr(4)
4688       .channels(8)
4689       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4690   }
4691 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,c_div_8)4692   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_div_8) {
4693     TEST_REQUIRES_ARM_NEON_FMA;
4694     for (uint32_t channels = 16; channels < 128; channels += 24) {
4695       DWConvMicrokernelTester()
4696         .cr(8)
4697         .kr(4)
4698         .channels(channels)
4699         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4700     }
4701   }
4702 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,c_div_8_with_qmin)4703   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_div_8_with_qmin) {
4704     TEST_REQUIRES_ARM_NEON_FMA;
4705     for (uint32_t channels = 16; channels < 128; channels += 24) {
4706       DWConvMicrokernelTester()
4707         .cr(8)
4708         .kr(4)
4709         .channels(channels)
4710         .qmin(128)
4711         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4712     }
4713   }
4714 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,c_div_8_with_qmax)4715   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_div_8_with_qmax) {
4716     TEST_REQUIRES_ARM_NEON_FMA;
4717     for (uint32_t channels = 16; channels < 128; channels += 24) {
4718       DWConvMicrokernelTester()
4719         .cr(8)
4720         .kr(4)
4721         .channels(channels)
4722         .qmax(128)
4723         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4724     }
4725   }
4726 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,c_lt_8)4727   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_lt_8) {
4728     TEST_REQUIRES_ARM_NEON_FMA;
4729     for (uint32_t channels = 1; channels < 8; channels++) {
4730       DWConvMicrokernelTester()
4731         .cr(8)
4732         .kr(4)
4733         .channels(channels)
4734         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4735     }
4736   }
4737 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,c_gt_8)4738   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_gt_8) {
4739     TEST_REQUIRES_ARM_NEON_FMA;
4740     for (uint32_t channels = 9; channels < 16; channels++) {
4741       DWConvMicrokernelTester()
4742         .cr(8)
4743         .kr(4)
4744         .channels(channels)
4745         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4746     }
4747   }
4748 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,c_gt_8_with_qmin)4749   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_gt_8_with_qmin) {
4750     TEST_REQUIRES_ARM_NEON_FMA;
4751     for (uint32_t channels = 9; channels < 16; channels++) {
4752       DWConvMicrokernelTester()
4753         .cr(8)
4754         .kr(4)
4755         .channels(channels)
4756         .qmin(128)
4757         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4758     }
4759   }
4760 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,c_gt_8_with_qmax)4761   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_gt_8_with_qmax) {
4762     TEST_REQUIRES_ARM_NEON_FMA;
4763     for (uint32_t channels = 9; channels < 16; channels++) {
4764       DWConvMicrokernelTester()
4765         .cr(8)
4766         .kr(4)
4767         .channels(channels)
4768         .qmax(128)
4769         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4770     }
4771   }
4772 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,multipixel)4773   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, multipixel) {
4774     TEST_REQUIRES_ARM_NEON_FMA;
4775     for (size_t channels = 1; channels <= 40; channels += 7) {
4776       DWConvMicrokernelTester()
4777         .cr(8)
4778         .kr(4)
4779         .channels(channels)
4780         .width(3)
4781         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4782     }
4783   }
4784 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,multipixel_with_step)4785   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, multipixel_with_step) {
4786     TEST_REQUIRES_ARM_NEON_FMA;
4787     for (size_t channels = 1; channels <= 40; channels += 7) {
4788       for (size_t step = 2; step <= 4; step++) {
4789         DWConvMicrokernelTester()
4790           .cr(8)
4791           .kr(4)
4792           .channels(channels)
4793           .width(3)
4794           .step(step)
4795           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4796       }
4797     }
4798   }
4799 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,multipixel_with_output_stride)4800   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, multipixel_with_output_stride) {
4801     TEST_REQUIRES_ARM_NEON_FMA;
4802     for (size_t channels = 1; channels <= 40; channels += 7) {
4803       DWConvMicrokernelTester()
4804         .cr(8)
4805         .kr(4)
4806         .channels(8)
4807         .width(5)
4808         .output_stride(43)
4809         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4810     }
4811   }
4812 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,multipixel_with_qmin)4813   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, multipixel_with_qmin) {
4814     TEST_REQUIRES_ARM_NEON_FMA;
4815     for (size_t channels = 1; channels <= 40; channels += 7) {
4816       DWConvMicrokernelTester()
4817         .cr(8)
4818         .kr(4)
4819         .channels(channels)
4820         .width(3)
4821         .qmin(128)
4822         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4823     }
4824   }
4825 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,multipixel_with_qmax)4826   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, multipixel_with_qmax) {
4827     TEST_REQUIRES_ARM_NEON_FMA;
4828     for (size_t channels = 1; channels <= 40; channels += 7) {
4829       DWConvMicrokernelTester()
4830         .cr(8)
4831         .kr(4)
4832         .channels(channels)
4833         .width(3)
4834         .qmax(128)
4835         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4836     }
4837   }
4838 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,input_offset)4839   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, input_offset) {
4840     TEST_REQUIRES_ARM_NEON_FMA;
4841     for (uint32_t channels = 16; channels < 128; channels += 24) {
4842       DWConvMicrokernelTester()
4843         .cr(8)
4844         .kr(4)
4845         .channels(channels)
4846         .input_offset(176)
4847         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4848     }
4849   }
4850 
TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2,zero)4851   TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, zero) {
4852     TEST_REQUIRES_ARM_NEON_FMA;
4853     for (uint32_t mz = 0; mz < 4; mz++) {
4854       for (uint32_t channels = 16; channels < 128; channels += 24) {
4855         DWConvMicrokernelTester()
4856           .cr(8)
4857           .kr(4)
4858           .channels(channels)
4859           .input_offset(176)
4860           .zero_index(mz)
4861           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4862       }
4863     }
4864   }
4865 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
4866 
4867 
4868 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,c_eq_8)4869   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_eq_8) {
4870     TEST_REQUIRES_ARM_NEON;
4871     DWConvMicrokernelTester()
4872       .cr(8)
4873       .kr(9)
4874       .channels(8)
4875       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
4876   }
4877 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,c_div_8)4878   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_div_8) {
4879     TEST_REQUIRES_ARM_NEON;
4880     for (uint32_t channels = 16; channels < 128; channels += 24) {
4881       DWConvMicrokernelTester()
4882         .cr(8)
4883         .kr(9)
4884         .channels(channels)
4885         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
4886     }
4887   }
4888 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,c_div_8_with_qmin)4889   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_div_8_with_qmin) {
4890     TEST_REQUIRES_ARM_NEON;
4891     for (uint32_t channels = 16; channels < 128; channels += 24) {
4892       DWConvMicrokernelTester()
4893         .cr(8)
4894         .kr(9)
4895         .channels(channels)
4896         .qmin(128)
4897         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
4898     }
4899   }
4900 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,c_div_8_with_qmax)4901   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_div_8_with_qmax) {
4902     TEST_REQUIRES_ARM_NEON;
4903     for (uint32_t channels = 16; channels < 128; channels += 24) {
4904       DWConvMicrokernelTester()
4905         .cr(8)
4906         .kr(9)
4907         .channels(channels)
4908         .qmax(128)
4909         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
4910     }
4911   }
4912 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,c_lt_8)4913   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_lt_8) {
4914     TEST_REQUIRES_ARM_NEON;
4915     for (uint32_t channels = 1; channels < 8; channels++) {
4916       DWConvMicrokernelTester()
4917         .cr(8)
4918         .kr(9)
4919         .channels(channels)
4920         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
4921     }
4922   }
4923 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,c_gt_8)4924   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_gt_8) {
4925     TEST_REQUIRES_ARM_NEON;
4926     for (uint32_t channels = 9; channels < 16; channels++) {
4927       DWConvMicrokernelTester()
4928         .cr(8)
4929         .kr(9)
4930         .channels(channels)
4931         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
4932     }
4933   }
4934 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,c_gt_8_with_qmin)4935   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_gt_8_with_qmin) {
4936     TEST_REQUIRES_ARM_NEON;
4937     for (uint32_t channels = 9; channels < 16; channels++) {
4938       DWConvMicrokernelTester()
4939         .cr(8)
4940         .kr(9)
4941         .channels(channels)
4942         .qmin(128)
4943         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
4944     }
4945   }
4946 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,c_gt_8_with_qmax)4947   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_gt_8_with_qmax) {
4948     TEST_REQUIRES_ARM_NEON;
4949     for (uint32_t channels = 9; channels < 16; channels++) {
4950       DWConvMicrokernelTester()
4951         .cr(8)
4952         .kr(9)
4953         .channels(channels)
4954         .qmax(128)
4955         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
4956     }
4957   }
4958 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,multipixel)4959   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel) {
4960     TEST_REQUIRES_ARM_NEON;
4961     for (size_t channels = 1; channels <= 40; channels += 7) {
4962       DWConvMicrokernelTester()
4963         .cr(8)
4964         .kr(9)
4965         .channels(channels)
4966         .width(3)
4967         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
4968     }
4969   }
4970 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,multipixel_with_step)4971   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_step) {
4972     TEST_REQUIRES_ARM_NEON;
4973     for (size_t channels = 1; channels <= 40; channels += 7) {
4974       for (size_t step = 2; step <= 9; step++) {
4975         DWConvMicrokernelTester()
4976           .cr(8)
4977           .kr(9)
4978           .channels(channels)
4979           .width(3)
4980           .step(step)
4981           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
4982       }
4983     }
4984   }
4985 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,multipixel_with_output_stride)4986   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_output_stride) {
4987     TEST_REQUIRES_ARM_NEON;
4988     for (size_t channels = 1; channels <= 40; channels += 7) {
4989       DWConvMicrokernelTester()
4990         .cr(8)
4991         .kr(9)
4992         .channels(8)
4993         .width(5)
4994         .output_stride(43)
4995         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
4996     }
4997   }
4998 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,multipixel_with_qmin)4999   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_qmin) {
5000     TEST_REQUIRES_ARM_NEON;
5001     for (size_t channels = 1; channels <= 40; channels += 7) {
5002       DWConvMicrokernelTester()
5003         .cr(8)
5004         .kr(9)
5005         .channels(channels)
5006         .width(3)
5007         .qmin(128)
5008         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
5009     }
5010   }
5011 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,multipixel_with_qmax)5012   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_qmax) {
5013     TEST_REQUIRES_ARM_NEON;
5014     for (size_t channels = 1; channels <= 40; channels += 7) {
5015       DWConvMicrokernelTester()
5016         .cr(8)
5017         .kr(9)
5018         .channels(channels)
5019         .width(3)
5020         .qmax(128)
5021         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
5022     }
5023   }
5024 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,input_offset)5025   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, input_offset) {
5026     TEST_REQUIRES_ARM_NEON;
5027     for (uint32_t channels = 16; channels < 128; channels += 24) {
5028       DWConvMicrokernelTester()
5029         .cr(8)
5030         .kr(9)
5031         .channels(channels)
5032         .input_offset(176)
5033         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
5034     }
5035   }
5036 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON,zero)5037   TEST(F32_DWCONV_MINMAX_UP8X9__NEON, zero) {
5038     TEST_REQUIRES_ARM_NEON;
5039     for (uint32_t mz = 0; mz < 9; mz++) {
5040       for (uint32_t channels = 16; channels < 128; channels += 24) {
5041         DWConvMicrokernelTester()
5042           .cr(8)
5043           .kr(9)
5044           .channels(channels)
5045           .input_offset(176)
5046           .zero_index(mz)
5047           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
5048       }
5049     }
5050   }
5051 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5052 
5053 
5054 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,c_eq_8)5055   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_eq_8) {
5056     TEST_REQUIRES_ARM_NEON;
5057     DWConvMicrokernelTester()
5058       .cr(8)
5059       .kr(9)
5060       .channels(8)
5061       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5062   }
5063 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,c_div_8)5064   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_div_8) {
5065     TEST_REQUIRES_ARM_NEON;
5066     for (uint32_t channels = 16; channels < 128; channels += 24) {
5067       DWConvMicrokernelTester()
5068         .cr(8)
5069         .kr(9)
5070         .channels(channels)
5071         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5072     }
5073   }
5074 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,c_div_8_with_qmin)5075   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_div_8_with_qmin) {
5076     TEST_REQUIRES_ARM_NEON;
5077     for (uint32_t channels = 16; channels < 128; channels += 24) {
5078       DWConvMicrokernelTester()
5079         .cr(8)
5080         .kr(9)
5081         .channels(channels)
5082         .qmin(128)
5083         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5084     }
5085   }
5086 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,c_div_8_with_qmax)5087   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_div_8_with_qmax) {
5088     TEST_REQUIRES_ARM_NEON;
5089     for (uint32_t channels = 16; channels < 128; channels += 24) {
5090       DWConvMicrokernelTester()
5091         .cr(8)
5092         .kr(9)
5093         .channels(channels)
5094         .qmax(128)
5095         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5096     }
5097   }
5098 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,c_lt_8)5099   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_lt_8) {
5100     TEST_REQUIRES_ARM_NEON;
5101     for (uint32_t channels = 1; channels < 8; channels++) {
5102       DWConvMicrokernelTester()
5103         .cr(8)
5104         .kr(9)
5105         .channels(channels)
5106         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5107     }
5108   }
5109 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,c_gt_8)5110   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_gt_8) {
5111     TEST_REQUIRES_ARM_NEON;
5112     for (uint32_t channels = 9; channels < 16; channels++) {
5113       DWConvMicrokernelTester()
5114         .cr(8)
5115         .kr(9)
5116         .channels(channels)
5117         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5118     }
5119   }
5120 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,c_gt_8_with_qmin)5121   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_gt_8_with_qmin) {
5122     TEST_REQUIRES_ARM_NEON;
5123     for (uint32_t channels = 9; channels < 16; channels++) {
5124       DWConvMicrokernelTester()
5125         .cr(8)
5126         .kr(9)
5127         .channels(channels)
5128         .qmin(128)
5129         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5130     }
5131   }
5132 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,c_gt_8_with_qmax)5133   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_gt_8_with_qmax) {
5134     TEST_REQUIRES_ARM_NEON;
5135     for (uint32_t channels = 9; channels < 16; channels++) {
5136       DWConvMicrokernelTester()
5137         .cr(8)
5138         .kr(9)
5139         .channels(channels)
5140         .qmax(128)
5141         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5142     }
5143   }
5144 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,multipixel)5145   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel) {
5146     TEST_REQUIRES_ARM_NEON;
5147     for (size_t channels = 1; channels <= 40; channels += 7) {
5148       DWConvMicrokernelTester()
5149         .cr(8)
5150         .kr(9)
5151         .channels(channels)
5152         .width(3)
5153         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5154     }
5155   }
5156 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,multipixel_with_step)5157   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_step) {
5158     TEST_REQUIRES_ARM_NEON;
5159     for (size_t channels = 1; channels <= 40; channels += 7) {
5160       for (size_t step = 2; step <= 9; step++) {
5161         DWConvMicrokernelTester()
5162           .cr(8)
5163           .kr(9)
5164           .channels(channels)
5165           .width(3)
5166           .step(step)
5167           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5168       }
5169     }
5170   }
5171 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,multipixel_with_output_stride)5172   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_output_stride) {
5173     TEST_REQUIRES_ARM_NEON;
5174     for (size_t channels = 1; channels <= 40; channels += 7) {
5175       DWConvMicrokernelTester()
5176         .cr(8)
5177         .kr(9)
5178         .channels(8)
5179         .width(5)
5180         .output_stride(43)
5181         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5182     }
5183   }
5184 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,multipixel_with_qmin)5185   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_qmin) {
5186     TEST_REQUIRES_ARM_NEON;
5187     for (size_t channels = 1; channels <= 40; channels += 7) {
5188       DWConvMicrokernelTester()
5189         .cr(8)
5190         .kr(9)
5191         .channels(channels)
5192         .width(3)
5193         .qmin(128)
5194         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5195     }
5196   }
5197 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,multipixel_with_qmax)5198   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_qmax) {
5199     TEST_REQUIRES_ARM_NEON;
5200     for (size_t channels = 1; channels <= 40; channels += 7) {
5201       DWConvMicrokernelTester()
5202         .cr(8)
5203         .kr(9)
5204         .channels(channels)
5205         .width(3)
5206         .qmax(128)
5207         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5208     }
5209   }
5210 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,input_offset)5211   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, input_offset) {
5212     TEST_REQUIRES_ARM_NEON;
5213     for (uint32_t channels = 16; channels < 128; channels += 24) {
5214       DWConvMicrokernelTester()
5215         .cr(8)
5216         .kr(9)
5217         .channels(channels)
5218         .input_offset(176)
5219         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5220     }
5221   }
5222 
TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2,zero)5223   TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, zero) {
5224     TEST_REQUIRES_ARM_NEON;
5225     for (uint32_t mz = 0; mz < 9; mz++) {
5226       for (uint32_t channels = 16; channels < 128; channels += 24) {
5227         DWConvMicrokernelTester()
5228           .cr(8)
5229           .kr(9)
5230           .channels(channels)
5231           .input_offset(176)
5232           .zero_index(mz)
5233           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
5234       }
5235     }
5236   }
5237 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5238 
5239 
5240 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,c_eq_8)5241   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_eq_8) {
5242     TEST_REQUIRES_ARM_NEON_FMA;
5243     DWConvMicrokernelTester()
5244       .cr(8)
5245       .kr(9)
5246       .channels(8)
5247       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5248   }
5249 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,c_div_8)5250   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_div_8) {
5251     TEST_REQUIRES_ARM_NEON_FMA;
5252     for (uint32_t channels = 16; channels < 128; channels += 24) {
5253       DWConvMicrokernelTester()
5254         .cr(8)
5255         .kr(9)
5256         .channels(channels)
5257         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5258     }
5259   }
5260 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,c_div_8_with_qmin)5261   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_div_8_with_qmin) {
5262     TEST_REQUIRES_ARM_NEON_FMA;
5263     for (uint32_t channels = 16; channels < 128; channels += 24) {
5264       DWConvMicrokernelTester()
5265         .cr(8)
5266         .kr(9)
5267         .channels(channels)
5268         .qmin(128)
5269         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5270     }
5271   }
5272 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,c_div_8_with_qmax)5273   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_div_8_with_qmax) {
5274     TEST_REQUIRES_ARM_NEON_FMA;
5275     for (uint32_t channels = 16; channels < 128; channels += 24) {
5276       DWConvMicrokernelTester()
5277         .cr(8)
5278         .kr(9)
5279         .channels(channels)
5280         .qmax(128)
5281         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5282     }
5283   }
5284 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,c_lt_8)5285   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_lt_8) {
5286     TEST_REQUIRES_ARM_NEON_FMA;
5287     for (uint32_t channels = 1; channels < 8; channels++) {
5288       DWConvMicrokernelTester()
5289         .cr(8)
5290         .kr(9)
5291         .channels(channels)
5292         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5293     }
5294   }
5295 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,c_gt_8)5296   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_gt_8) {
5297     TEST_REQUIRES_ARM_NEON_FMA;
5298     for (uint32_t channels = 9; channels < 16; channels++) {
5299       DWConvMicrokernelTester()
5300         .cr(8)
5301         .kr(9)
5302         .channels(channels)
5303         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5304     }
5305   }
5306 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,c_gt_8_with_qmin)5307   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_gt_8_with_qmin) {
5308     TEST_REQUIRES_ARM_NEON_FMA;
5309     for (uint32_t channels = 9; channels < 16; channels++) {
5310       DWConvMicrokernelTester()
5311         .cr(8)
5312         .kr(9)
5313         .channels(channels)
5314         .qmin(128)
5315         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5316     }
5317   }
5318 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,c_gt_8_with_qmax)5319   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_gt_8_with_qmax) {
5320     TEST_REQUIRES_ARM_NEON_FMA;
5321     for (uint32_t channels = 9; channels < 16; channels++) {
5322       DWConvMicrokernelTester()
5323         .cr(8)
5324         .kr(9)
5325         .channels(channels)
5326         .qmax(128)
5327         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5328     }
5329   }
5330 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,multipixel)5331   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel) {
5332     TEST_REQUIRES_ARM_NEON_FMA;
5333     for (size_t channels = 1; channels <= 40; channels += 7) {
5334       DWConvMicrokernelTester()
5335         .cr(8)
5336         .kr(9)
5337         .channels(channels)
5338         .width(3)
5339         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5340     }
5341   }
5342 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,multipixel_with_step)5343   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_step) {
5344     TEST_REQUIRES_ARM_NEON_FMA;
5345     for (size_t channels = 1; channels <= 40; channels += 7) {
5346       for (size_t step = 2; step <= 9; step++) {
5347         DWConvMicrokernelTester()
5348           .cr(8)
5349           .kr(9)
5350           .channels(channels)
5351           .width(3)
5352           .step(step)
5353           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5354       }
5355     }
5356   }
5357 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,multipixel_with_output_stride)5358   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_output_stride) {
5359     TEST_REQUIRES_ARM_NEON_FMA;
5360     for (size_t channels = 1; channels <= 40; channels += 7) {
5361       DWConvMicrokernelTester()
5362         .cr(8)
5363         .kr(9)
5364         .channels(8)
5365         .width(5)
5366         .output_stride(43)
5367         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5368     }
5369   }
5370 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,multipixel_with_qmin)5371   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_qmin) {
5372     TEST_REQUIRES_ARM_NEON_FMA;
5373     for (size_t channels = 1; channels <= 40; channels += 7) {
5374       DWConvMicrokernelTester()
5375         .cr(8)
5376         .kr(9)
5377         .channels(channels)
5378         .width(3)
5379         .qmin(128)
5380         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5381     }
5382   }
5383 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,multipixel_with_qmax)5384   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_qmax) {
5385     TEST_REQUIRES_ARM_NEON_FMA;
5386     for (size_t channels = 1; channels <= 40; channels += 7) {
5387       DWConvMicrokernelTester()
5388         .cr(8)
5389         .kr(9)
5390         .channels(channels)
5391         .width(3)
5392         .qmax(128)
5393         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5394     }
5395   }
5396 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,input_offset)5397   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, input_offset) {
5398     TEST_REQUIRES_ARM_NEON_FMA;
5399     for (uint32_t channels = 16; channels < 128; channels += 24) {
5400       DWConvMicrokernelTester()
5401         .cr(8)
5402         .kr(9)
5403         .channels(channels)
5404         .input_offset(176)
5405         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5406     }
5407   }
5408 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA,zero)5409   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, zero) {
5410     TEST_REQUIRES_ARM_NEON_FMA;
5411     for (uint32_t mz = 0; mz < 9; mz++) {
5412       for (uint32_t channels = 16; channels < 128; channels += 24) {
5413         DWConvMicrokernelTester()
5414           .cr(8)
5415           .kr(9)
5416           .channels(channels)
5417           .input_offset(176)
5418           .zero_index(mz)
5419           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
5420       }
5421     }
5422   }
5423 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5424 
5425 
5426 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,c_eq_8)5427   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_eq_8) {
5428     TEST_REQUIRES_ARM_NEON_FMA;
5429     DWConvMicrokernelTester()
5430       .cr(8)
5431       .kr(9)
5432       .channels(8)
5433       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5434   }
5435 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,c_div_8)5436   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_div_8) {
5437     TEST_REQUIRES_ARM_NEON_FMA;
5438     for (uint32_t channels = 16; channels < 128; channels += 24) {
5439       DWConvMicrokernelTester()
5440         .cr(8)
5441         .kr(9)
5442         .channels(channels)
5443         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5444     }
5445   }
5446 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,c_div_8_with_qmin)5447   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_div_8_with_qmin) {
5448     TEST_REQUIRES_ARM_NEON_FMA;
5449     for (uint32_t channels = 16; channels < 128; channels += 24) {
5450       DWConvMicrokernelTester()
5451         .cr(8)
5452         .kr(9)
5453         .channels(channels)
5454         .qmin(128)
5455         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5456     }
5457   }
5458 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,c_div_8_with_qmax)5459   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_div_8_with_qmax) {
5460     TEST_REQUIRES_ARM_NEON_FMA;
5461     for (uint32_t channels = 16; channels < 128; channels += 24) {
5462       DWConvMicrokernelTester()
5463         .cr(8)
5464         .kr(9)
5465         .channels(channels)
5466         .qmax(128)
5467         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5468     }
5469   }
5470 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,c_lt_8)5471   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_lt_8) {
5472     TEST_REQUIRES_ARM_NEON_FMA;
5473     for (uint32_t channels = 1; channels < 8; channels++) {
5474       DWConvMicrokernelTester()
5475         .cr(8)
5476         .kr(9)
5477         .channels(channels)
5478         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5479     }
5480   }
5481 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,c_gt_8)5482   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_gt_8) {
5483     TEST_REQUIRES_ARM_NEON_FMA;
5484     for (uint32_t channels = 9; channels < 16; channels++) {
5485       DWConvMicrokernelTester()
5486         .cr(8)
5487         .kr(9)
5488         .channels(channels)
5489         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5490     }
5491   }
5492 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,c_gt_8_with_qmin)5493   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_gt_8_with_qmin) {
5494     TEST_REQUIRES_ARM_NEON_FMA;
5495     for (uint32_t channels = 9; channels < 16; channels++) {
5496       DWConvMicrokernelTester()
5497         .cr(8)
5498         .kr(9)
5499         .channels(channels)
5500         .qmin(128)
5501         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5502     }
5503   }
5504 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,c_gt_8_with_qmax)5505   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_gt_8_with_qmax) {
5506     TEST_REQUIRES_ARM_NEON_FMA;
5507     for (uint32_t channels = 9; channels < 16; channels++) {
5508       DWConvMicrokernelTester()
5509         .cr(8)
5510         .kr(9)
5511         .channels(channels)
5512         .qmax(128)
5513         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5514     }
5515   }
5516 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,multipixel)5517   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel) {
5518     TEST_REQUIRES_ARM_NEON_FMA;
5519     for (size_t channels = 1; channels <= 40; channels += 7) {
5520       DWConvMicrokernelTester()
5521         .cr(8)
5522         .kr(9)
5523         .channels(channels)
5524         .width(3)
5525         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5526     }
5527   }
5528 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,multipixel_with_step)5529   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_step) {
5530     TEST_REQUIRES_ARM_NEON_FMA;
5531     for (size_t channels = 1; channels <= 40; channels += 7) {
5532       for (size_t step = 2; step <= 9; step++) {
5533         DWConvMicrokernelTester()
5534           .cr(8)
5535           .kr(9)
5536           .channels(channels)
5537           .width(3)
5538           .step(step)
5539           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5540       }
5541     }
5542   }
5543 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,multipixel_with_output_stride)5544   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_output_stride) {
5545     TEST_REQUIRES_ARM_NEON_FMA;
5546     for (size_t channels = 1; channels <= 40; channels += 7) {
5547       DWConvMicrokernelTester()
5548         .cr(8)
5549         .kr(9)
5550         .channels(8)
5551         .width(5)
5552         .output_stride(43)
5553         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5554     }
5555   }
5556 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,multipixel_with_qmin)5557   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_qmin) {
5558     TEST_REQUIRES_ARM_NEON_FMA;
5559     for (size_t channels = 1; channels <= 40; channels += 7) {
5560       DWConvMicrokernelTester()
5561         .cr(8)
5562         .kr(9)
5563         .channels(channels)
5564         .width(3)
5565         .qmin(128)
5566         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5567     }
5568   }
5569 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,multipixel_with_qmax)5570   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_qmax) {
5571     TEST_REQUIRES_ARM_NEON_FMA;
5572     for (size_t channels = 1; channels <= 40; channels += 7) {
5573       DWConvMicrokernelTester()
5574         .cr(8)
5575         .kr(9)
5576         .channels(channels)
5577         .width(3)
5578         .qmax(128)
5579         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5580     }
5581   }
5582 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,input_offset)5583   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, input_offset) {
5584     TEST_REQUIRES_ARM_NEON_FMA;
5585     for (uint32_t channels = 16; channels < 128; channels += 24) {
5586       DWConvMicrokernelTester()
5587         .cr(8)
5588         .kr(9)
5589         .channels(channels)
5590         .input_offset(176)
5591         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5592     }
5593   }
5594 
TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2,zero)5595   TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, zero) {
5596     TEST_REQUIRES_ARM_NEON_FMA;
5597     for (uint32_t mz = 0; mz < 9; mz++) {
5598       for (uint32_t channels = 16; channels < 128; channels += 24) {
5599         DWConvMicrokernelTester()
5600           .cr(8)
5601           .kr(9)
5602           .channels(channels)
5603           .input_offset(176)
5604           .zero_index(mz)
5605           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
5606       }
5607     }
5608   }
5609 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5610 
5611 
5612 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,c_eq_8)5613   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_eq_8) {
5614     TEST_REQUIRES_ARM_NEON;
5615     DWConvMicrokernelTester()
5616       .cr(8)
5617       .kr(25)
5618       .channels(8)
5619       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5620   }
5621 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,c_div_8)5622   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_div_8) {
5623     TEST_REQUIRES_ARM_NEON;
5624     for (uint32_t channels = 16; channels < 128; channels += 24) {
5625       DWConvMicrokernelTester()
5626         .cr(8)
5627         .kr(25)
5628         .channels(channels)
5629         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5630     }
5631   }
5632 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,c_div_8_with_qmin)5633   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_div_8_with_qmin) {
5634     TEST_REQUIRES_ARM_NEON;
5635     for (uint32_t channels = 16; channels < 128; channels += 24) {
5636       DWConvMicrokernelTester()
5637         .cr(8)
5638         .kr(25)
5639         .channels(channels)
5640         .qmin(128)
5641         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5642     }
5643   }
5644 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,c_div_8_with_qmax)5645   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_div_8_with_qmax) {
5646     TEST_REQUIRES_ARM_NEON;
5647     for (uint32_t channels = 16; channels < 128; channels += 24) {
5648       DWConvMicrokernelTester()
5649         .cr(8)
5650         .kr(25)
5651         .channels(channels)
5652         .qmax(128)
5653         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5654     }
5655   }
5656 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,c_lt_8)5657   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_lt_8) {
5658     TEST_REQUIRES_ARM_NEON;
5659     for (uint32_t channels = 1; channels < 8; channels++) {
5660       DWConvMicrokernelTester()
5661         .cr(8)
5662         .kr(25)
5663         .channels(channels)
5664         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5665     }
5666   }
5667 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,c_gt_8)5668   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_gt_8) {
5669     TEST_REQUIRES_ARM_NEON;
5670     for (uint32_t channels = 9; channels < 16; channels++) {
5671       DWConvMicrokernelTester()
5672         .cr(8)
5673         .kr(25)
5674         .channels(channels)
5675         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5676     }
5677   }
5678 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,c_gt_8_with_qmin)5679   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_gt_8_with_qmin) {
5680     TEST_REQUIRES_ARM_NEON;
5681     for (uint32_t channels = 9; channels < 16; channels++) {
5682       DWConvMicrokernelTester()
5683         .cr(8)
5684         .kr(25)
5685         .channels(channels)
5686         .qmin(128)
5687         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5688     }
5689   }
5690 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,c_gt_8_with_qmax)5691   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_gt_8_with_qmax) {
5692     TEST_REQUIRES_ARM_NEON;
5693     for (uint32_t channels = 9; channels < 16; channels++) {
5694       DWConvMicrokernelTester()
5695         .cr(8)
5696         .kr(25)
5697         .channels(channels)
5698         .qmax(128)
5699         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5700     }
5701   }
5702 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,multipixel)5703   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel) {
5704     TEST_REQUIRES_ARM_NEON;
5705     for (size_t channels = 1; channels <= 40; channels += 7) {
5706       DWConvMicrokernelTester()
5707         .cr(8)
5708         .kr(25)
5709         .channels(channels)
5710         .width(3)
5711         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5712     }
5713   }
5714 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,multipixel_with_step)5715   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel_with_step) {
5716     TEST_REQUIRES_ARM_NEON;
5717     for (size_t channels = 1; channels <= 40; channels += 7) {
5718       for (size_t step = 2; step <= 25; step++) {
5719         DWConvMicrokernelTester()
5720           .cr(8)
5721           .kr(25)
5722           .channels(channels)
5723           .width(3)
5724           .step(step)
5725           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5726       }
5727     }
5728   }
5729 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,multipixel_with_output_stride)5730   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel_with_output_stride) {
5731     TEST_REQUIRES_ARM_NEON;
5732     for (size_t channels = 1; channels <= 40; channels += 7) {
5733       DWConvMicrokernelTester()
5734         .cr(8)
5735         .kr(25)
5736         .channels(8)
5737         .width(5)
5738         .output_stride(43)
5739         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5740     }
5741   }
5742 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,multipixel_with_qmin)5743   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel_with_qmin) {
5744     TEST_REQUIRES_ARM_NEON;
5745     for (size_t channels = 1; channels <= 40; channels += 7) {
5746       DWConvMicrokernelTester()
5747         .cr(8)
5748         .kr(25)
5749         .channels(channels)
5750         .width(3)
5751         .qmin(128)
5752         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5753     }
5754   }
5755 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,multipixel_with_qmax)5756   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel_with_qmax) {
5757     TEST_REQUIRES_ARM_NEON;
5758     for (size_t channels = 1; channels <= 40; channels += 7) {
5759       DWConvMicrokernelTester()
5760         .cr(8)
5761         .kr(25)
5762         .channels(channels)
5763         .width(3)
5764         .qmax(128)
5765         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5766     }
5767   }
5768 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,input_offset)5769   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, input_offset) {
5770     TEST_REQUIRES_ARM_NEON;
5771     for (uint32_t channels = 16; channels < 128; channels += 24) {
5772       DWConvMicrokernelTester()
5773         .cr(8)
5774         .kr(25)
5775         .channels(channels)
5776         .input_offset(176)
5777         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5778     }
5779   }
5780 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON,zero)5781   TEST(F32_DWCONV_MINMAX_UP8X25__NEON, zero) {
5782     TEST_REQUIRES_ARM_NEON;
5783     for (uint32_t mz = 0; mz < 25; mz++) {
5784       for (uint32_t channels = 16; channels < 128; channels += 24) {
5785         DWConvMicrokernelTester()
5786           .cr(8)
5787           .kr(25)
5788           .channels(channels)
5789           .input_offset(176)
5790           .zero_index(mz)
5791           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
5792       }
5793     }
5794   }
5795 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5796 
5797 
5798 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,c_eq_8)5799   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_eq_8) {
5800     TEST_REQUIRES_ARM_NEON;
5801     DWConvMicrokernelTester()
5802       .cr(8)
5803       .kr(25)
5804       .channels(8)
5805       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5806   }
5807 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,c_div_8)5808   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_div_8) {
5809     TEST_REQUIRES_ARM_NEON;
5810     for (uint32_t channels = 16; channels < 128; channels += 24) {
5811       DWConvMicrokernelTester()
5812         .cr(8)
5813         .kr(25)
5814         .channels(channels)
5815         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5816     }
5817   }
5818 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,c_div_8_with_qmin)5819   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_div_8_with_qmin) {
5820     TEST_REQUIRES_ARM_NEON;
5821     for (uint32_t channels = 16; channels < 128; channels += 24) {
5822       DWConvMicrokernelTester()
5823         .cr(8)
5824         .kr(25)
5825         .channels(channels)
5826         .qmin(128)
5827         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5828     }
5829   }
5830 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,c_div_8_with_qmax)5831   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_div_8_with_qmax) {
5832     TEST_REQUIRES_ARM_NEON;
5833     for (uint32_t channels = 16; channels < 128; channels += 24) {
5834       DWConvMicrokernelTester()
5835         .cr(8)
5836         .kr(25)
5837         .channels(channels)
5838         .qmax(128)
5839         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5840     }
5841   }
5842 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,c_lt_8)5843   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_lt_8) {
5844     TEST_REQUIRES_ARM_NEON;
5845     for (uint32_t channels = 1; channels < 8; channels++) {
5846       DWConvMicrokernelTester()
5847         .cr(8)
5848         .kr(25)
5849         .channels(channels)
5850         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5851     }
5852   }
5853 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,c_gt_8)5854   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_gt_8) {
5855     TEST_REQUIRES_ARM_NEON;
5856     for (uint32_t channels = 9; channels < 16; channels++) {
5857       DWConvMicrokernelTester()
5858         .cr(8)
5859         .kr(25)
5860         .channels(channels)
5861         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5862     }
5863   }
5864 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,c_gt_8_with_qmin)5865   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_gt_8_with_qmin) {
5866     TEST_REQUIRES_ARM_NEON;
5867     for (uint32_t channels = 9; channels < 16; channels++) {
5868       DWConvMicrokernelTester()
5869         .cr(8)
5870         .kr(25)
5871         .channels(channels)
5872         .qmin(128)
5873         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5874     }
5875   }
5876 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,c_gt_8_with_qmax)5877   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_gt_8_with_qmax) {
5878     TEST_REQUIRES_ARM_NEON;
5879     for (uint32_t channels = 9; channels < 16; channels++) {
5880       DWConvMicrokernelTester()
5881         .cr(8)
5882         .kr(25)
5883         .channels(channels)
5884         .qmax(128)
5885         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5886     }
5887   }
5888 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,multipixel)5889   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel) {
5890     TEST_REQUIRES_ARM_NEON;
5891     for (size_t channels = 1; channels <= 40; channels += 7) {
5892       DWConvMicrokernelTester()
5893         .cr(8)
5894         .kr(25)
5895         .channels(channels)
5896         .width(3)
5897         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5898     }
5899   }
5900 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,multipixel_with_step)5901   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel_with_step) {
5902     TEST_REQUIRES_ARM_NEON;
5903     for (size_t channels = 1; channels <= 40; channels += 7) {
5904       for (size_t step = 2; step <= 25; step++) {
5905         DWConvMicrokernelTester()
5906           .cr(8)
5907           .kr(25)
5908           .channels(channels)
5909           .width(3)
5910           .step(step)
5911           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5912       }
5913     }
5914   }
5915 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,multipixel_with_output_stride)5916   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel_with_output_stride) {
5917     TEST_REQUIRES_ARM_NEON;
5918     for (size_t channels = 1; channels <= 40; channels += 7) {
5919       DWConvMicrokernelTester()
5920         .cr(8)
5921         .kr(25)
5922         .channels(8)
5923         .width(5)
5924         .output_stride(43)
5925         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5926     }
5927   }
5928 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,multipixel_with_qmin)5929   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel_with_qmin) {
5930     TEST_REQUIRES_ARM_NEON;
5931     for (size_t channels = 1; channels <= 40; channels += 7) {
5932       DWConvMicrokernelTester()
5933         .cr(8)
5934         .kr(25)
5935         .channels(channels)
5936         .width(3)
5937         .qmin(128)
5938         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5939     }
5940   }
5941 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,multipixel_with_qmax)5942   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel_with_qmax) {
5943     TEST_REQUIRES_ARM_NEON;
5944     for (size_t channels = 1; channels <= 40; channels += 7) {
5945       DWConvMicrokernelTester()
5946         .cr(8)
5947         .kr(25)
5948         .channels(channels)
5949         .width(3)
5950         .qmax(128)
5951         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5952     }
5953   }
5954 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,input_offset)5955   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, input_offset) {
5956     TEST_REQUIRES_ARM_NEON;
5957     for (uint32_t channels = 16; channels < 128; channels += 24) {
5958       DWConvMicrokernelTester()
5959         .cr(8)
5960         .kr(25)
5961         .channels(channels)
5962         .input_offset(176)
5963         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5964     }
5965   }
5966 
TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2,zero)5967   TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, zero) {
5968     TEST_REQUIRES_ARM_NEON;
5969     for (uint32_t mz = 0; mz < 25; mz++) {
5970       for (uint32_t channels = 16; channels < 128; channels += 24) {
5971         DWConvMicrokernelTester()
5972           .cr(8)
5973           .kr(25)
5974           .channels(channels)
5975           .input_offset(176)
5976           .zero_index(mz)
5977           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5978       }
5979     }
5980   }
5981 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5982 
5983 
5984 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,c_eq_8)5985   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_eq_8) {
5986     TEST_REQUIRES_ARM_NEON_FMA;
5987     DWConvMicrokernelTester()
5988       .cr(8)
5989       .kr(25)
5990       .channels(8)
5991       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
5992   }
5993 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,c_div_8)5994   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_div_8) {
5995     TEST_REQUIRES_ARM_NEON_FMA;
5996     for (uint32_t channels = 16; channels < 128; channels += 24) {
5997       DWConvMicrokernelTester()
5998         .cr(8)
5999         .kr(25)
6000         .channels(channels)
6001         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6002     }
6003   }
6004 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,c_div_8_with_qmin)6005   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_div_8_with_qmin) {
6006     TEST_REQUIRES_ARM_NEON_FMA;
6007     for (uint32_t channels = 16; channels < 128; channels += 24) {
6008       DWConvMicrokernelTester()
6009         .cr(8)
6010         .kr(25)
6011         .channels(channels)
6012         .qmin(128)
6013         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6014     }
6015   }
6016 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,c_div_8_with_qmax)6017   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_div_8_with_qmax) {
6018     TEST_REQUIRES_ARM_NEON_FMA;
6019     for (uint32_t channels = 16; channels < 128; channels += 24) {
6020       DWConvMicrokernelTester()
6021         .cr(8)
6022         .kr(25)
6023         .channels(channels)
6024         .qmax(128)
6025         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6026     }
6027   }
6028 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,c_lt_8)6029   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_lt_8) {
6030     TEST_REQUIRES_ARM_NEON_FMA;
6031     for (uint32_t channels = 1; channels < 8; channels++) {
6032       DWConvMicrokernelTester()
6033         .cr(8)
6034         .kr(25)
6035         .channels(channels)
6036         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6037     }
6038   }
6039 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,c_gt_8)6040   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_gt_8) {
6041     TEST_REQUIRES_ARM_NEON_FMA;
6042     for (uint32_t channels = 9; channels < 16; channels++) {
6043       DWConvMicrokernelTester()
6044         .cr(8)
6045         .kr(25)
6046         .channels(channels)
6047         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6048     }
6049   }
6050 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,c_gt_8_with_qmin)6051   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_gt_8_with_qmin) {
6052     TEST_REQUIRES_ARM_NEON_FMA;
6053     for (uint32_t channels = 9; channels < 16; channels++) {
6054       DWConvMicrokernelTester()
6055         .cr(8)
6056         .kr(25)
6057         .channels(channels)
6058         .qmin(128)
6059         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6060     }
6061   }
6062 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,c_gt_8_with_qmax)6063   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_gt_8_with_qmax) {
6064     TEST_REQUIRES_ARM_NEON_FMA;
6065     for (uint32_t channels = 9; channels < 16; channels++) {
6066       DWConvMicrokernelTester()
6067         .cr(8)
6068         .kr(25)
6069         .channels(channels)
6070         .qmax(128)
6071         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6072     }
6073   }
6074 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,multipixel)6075   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel) {
6076     TEST_REQUIRES_ARM_NEON_FMA;
6077     for (size_t channels = 1; channels <= 40; channels += 7) {
6078       DWConvMicrokernelTester()
6079         .cr(8)
6080         .kr(25)
6081         .channels(channels)
6082         .width(3)
6083         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6084     }
6085   }
6086 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,multipixel_with_step)6087   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel_with_step) {
6088     TEST_REQUIRES_ARM_NEON_FMA;
6089     for (size_t channels = 1; channels <= 40; channels += 7) {
6090       for (size_t step = 2; step <= 25; step++) {
6091         DWConvMicrokernelTester()
6092           .cr(8)
6093           .kr(25)
6094           .channels(channels)
6095           .width(3)
6096           .step(step)
6097           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6098       }
6099     }
6100   }
6101 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,multipixel_with_output_stride)6102   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel_with_output_stride) {
6103     TEST_REQUIRES_ARM_NEON_FMA;
6104     for (size_t channels = 1; channels <= 40; channels += 7) {
6105       DWConvMicrokernelTester()
6106         .cr(8)
6107         .kr(25)
6108         .channels(8)
6109         .width(5)
6110         .output_stride(43)
6111         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6112     }
6113   }
6114 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,multipixel_with_qmin)6115   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel_with_qmin) {
6116     TEST_REQUIRES_ARM_NEON_FMA;
6117     for (size_t channels = 1; channels <= 40; channels += 7) {
6118       DWConvMicrokernelTester()
6119         .cr(8)
6120         .kr(25)
6121         .channels(channels)
6122         .width(3)
6123         .qmin(128)
6124         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6125     }
6126   }
6127 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,multipixel_with_qmax)6128   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel_with_qmax) {
6129     TEST_REQUIRES_ARM_NEON_FMA;
6130     for (size_t channels = 1; channels <= 40; channels += 7) {
6131       DWConvMicrokernelTester()
6132         .cr(8)
6133         .kr(25)
6134         .channels(channels)
6135         .width(3)
6136         .qmax(128)
6137         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6138     }
6139   }
6140 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,input_offset)6141   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, input_offset) {
6142     TEST_REQUIRES_ARM_NEON_FMA;
6143     for (uint32_t channels = 16; channels < 128; channels += 24) {
6144       DWConvMicrokernelTester()
6145         .cr(8)
6146         .kr(25)
6147         .channels(channels)
6148         .input_offset(176)
6149         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6150     }
6151   }
6152 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA,zero)6153   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, zero) {
6154     TEST_REQUIRES_ARM_NEON_FMA;
6155     for (uint32_t mz = 0; mz < 25; mz++) {
6156       for (uint32_t channels = 16; channels < 128; channels += 24) {
6157         DWConvMicrokernelTester()
6158           .cr(8)
6159           .kr(25)
6160           .channels(channels)
6161           .input_offset(176)
6162           .zero_index(mz)
6163           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
6164       }
6165     }
6166   }
6167 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
6168 
6169 
6170 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,c_eq_8)6171   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_eq_8) {
6172     TEST_REQUIRES_ARM_NEON_FMA;
6173     DWConvMicrokernelTester()
6174       .cr(8)
6175       .kr(25)
6176       .channels(8)
6177       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6178   }
6179 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,c_div_8)6180   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_div_8) {
6181     TEST_REQUIRES_ARM_NEON_FMA;
6182     for (uint32_t channels = 16; channels < 128; channels += 24) {
6183       DWConvMicrokernelTester()
6184         .cr(8)
6185         .kr(25)
6186         .channels(channels)
6187         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6188     }
6189   }
6190 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,c_div_8_with_qmin)6191   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_div_8_with_qmin) {
6192     TEST_REQUIRES_ARM_NEON_FMA;
6193     for (uint32_t channels = 16; channels < 128; channels += 24) {
6194       DWConvMicrokernelTester()
6195         .cr(8)
6196         .kr(25)
6197         .channels(channels)
6198         .qmin(128)
6199         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6200     }
6201   }
6202 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,c_div_8_with_qmax)6203   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_div_8_with_qmax) {
6204     TEST_REQUIRES_ARM_NEON_FMA;
6205     for (uint32_t channels = 16; channels < 128; channels += 24) {
6206       DWConvMicrokernelTester()
6207         .cr(8)
6208         .kr(25)
6209         .channels(channels)
6210         .qmax(128)
6211         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6212     }
6213   }
6214 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,c_lt_8)6215   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_lt_8) {
6216     TEST_REQUIRES_ARM_NEON_FMA;
6217     for (uint32_t channels = 1; channels < 8; channels++) {
6218       DWConvMicrokernelTester()
6219         .cr(8)
6220         .kr(25)
6221         .channels(channels)
6222         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6223     }
6224   }
6225 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,c_gt_8)6226   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_gt_8) {
6227     TEST_REQUIRES_ARM_NEON_FMA;
6228     for (uint32_t channels = 9; channels < 16; channels++) {
6229       DWConvMicrokernelTester()
6230         .cr(8)
6231         .kr(25)
6232         .channels(channels)
6233         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6234     }
6235   }
6236 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,c_gt_8_with_qmin)6237   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_gt_8_with_qmin) {
6238     TEST_REQUIRES_ARM_NEON_FMA;
6239     for (uint32_t channels = 9; channels < 16; channels++) {
6240       DWConvMicrokernelTester()
6241         .cr(8)
6242         .kr(25)
6243         .channels(channels)
6244         .qmin(128)
6245         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6246     }
6247   }
6248 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,c_gt_8_with_qmax)6249   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_gt_8_with_qmax) {
6250     TEST_REQUIRES_ARM_NEON_FMA;
6251     for (uint32_t channels = 9; channels < 16; channels++) {
6252       DWConvMicrokernelTester()
6253         .cr(8)
6254         .kr(25)
6255         .channels(channels)
6256         .qmax(128)
6257         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6258     }
6259   }
6260 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,multipixel)6261   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel) {
6262     TEST_REQUIRES_ARM_NEON_FMA;
6263     for (size_t channels = 1; channels <= 40; channels += 7) {
6264       DWConvMicrokernelTester()
6265         .cr(8)
6266         .kr(25)
6267         .channels(channels)
6268         .width(3)
6269         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6270     }
6271   }
6272 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,multipixel_with_step)6273   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel_with_step) {
6274     TEST_REQUIRES_ARM_NEON_FMA;
6275     for (size_t channels = 1; channels <= 40; channels += 7) {
6276       for (size_t step = 2; step <= 25; step++) {
6277         DWConvMicrokernelTester()
6278           .cr(8)
6279           .kr(25)
6280           .channels(channels)
6281           .width(3)
6282           .step(step)
6283           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6284       }
6285     }
6286   }
6287 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,multipixel_with_output_stride)6288   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel_with_output_stride) {
6289     TEST_REQUIRES_ARM_NEON_FMA;
6290     for (size_t channels = 1; channels <= 40; channels += 7) {
6291       DWConvMicrokernelTester()
6292         .cr(8)
6293         .kr(25)
6294         .channels(8)
6295         .width(5)
6296         .output_stride(43)
6297         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6298     }
6299   }
6300 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,multipixel_with_qmin)6301   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel_with_qmin) {
6302     TEST_REQUIRES_ARM_NEON_FMA;
6303     for (size_t channels = 1; channels <= 40; channels += 7) {
6304       DWConvMicrokernelTester()
6305         .cr(8)
6306         .kr(25)
6307         .channels(channels)
6308         .width(3)
6309         .qmin(128)
6310         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6311     }
6312   }
6313 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,multipixel_with_qmax)6314   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel_with_qmax) {
6315     TEST_REQUIRES_ARM_NEON_FMA;
6316     for (size_t channels = 1; channels <= 40; channels += 7) {
6317       DWConvMicrokernelTester()
6318         .cr(8)
6319         .kr(25)
6320         .channels(channels)
6321         .width(3)
6322         .qmax(128)
6323         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6324     }
6325   }
6326 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,input_offset)6327   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, input_offset) {
6328     TEST_REQUIRES_ARM_NEON_FMA;
6329     for (uint32_t channels = 16; channels < 128; channels += 24) {
6330       DWConvMicrokernelTester()
6331         .cr(8)
6332         .kr(25)
6333         .channels(channels)
6334         .input_offset(176)
6335         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6336     }
6337   }
6338 
TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2,zero)6339   TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, zero) {
6340     TEST_REQUIRES_ARM_NEON_FMA;
6341     for (uint32_t mz = 0; mz < 25; mz++) {
6342       for (uint32_t channels = 16; channels < 128; channels += 24) {
6343         DWConvMicrokernelTester()
6344           .cr(8)
6345           .kr(25)
6346           .channels(channels)
6347           .input_offset(176)
6348           .zero_index(mz)
6349           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6350       }
6351     }
6352   }
6353 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
6354 
6355 
6356 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,c_eq_16)6357   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, c_eq_16) {
6358     TEST_REQUIRES_ARM_NEON;
6359     DWConvMicrokernelTester()
6360       .cr(16)
6361       .kr(3)
6362       .channels(16)
6363       .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6364   }
6365 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,c_div_16)6366   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, c_div_16) {
6367     TEST_REQUIRES_ARM_NEON;
6368     for (uint32_t channels = 32; channels < 256; channels += 48) {
6369       DWConvMicrokernelTester()
6370         .cr(16)
6371         .kr(3)
6372         .channels(channels)
6373         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6374     }
6375   }
6376 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,c_div_16_with_qmin)6377   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, c_div_16_with_qmin) {
6378     TEST_REQUIRES_ARM_NEON;
6379     for (uint32_t channels = 32; channels < 256; channels += 48) {
6380       DWConvMicrokernelTester()
6381         .cr(16)
6382         .kr(3)
6383         .channels(channels)
6384         .qmin(128)
6385         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6386     }
6387   }
6388 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,c_div_16_with_qmax)6389   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, c_div_16_with_qmax) {
6390     TEST_REQUIRES_ARM_NEON;
6391     for (uint32_t channels = 32; channels < 256; channels += 48) {
6392       DWConvMicrokernelTester()
6393         .cr(16)
6394         .kr(3)
6395         .channels(channels)
6396         .qmax(128)
6397         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6398     }
6399   }
6400 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,c_lt_16)6401   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, c_lt_16) {
6402     TEST_REQUIRES_ARM_NEON;
6403     for (uint32_t channels = 1; channels < 16; channels++) {
6404       DWConvMicrokernelTester()
6405         .cr(16)
6406         .kr(3)
6407         .channels(channels)
6408         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6409     }
6410   }
6411 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,c_gt_16)6412   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, c_gt_16) {
6413     TEST_REQUIRES_ARM_NEON;
6414     for (uint32_t channels = 17; channels < 32; channels++) {
6415       DWConvMicrokernelTester()
6416         .cr(16)
6417         .kr(3)
6418         .channels(channels)
6419         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6420     }
6421   }
6422 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,c_gt_16_with_qmin)6423   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, c_gt_16_with_qmin) {
6424     TEST_REQUIRES_ARM_NEON;
6425     for (uint32_t channels = 17; channels < 32; channels++) {
6426       DWConvMicrokernelTester()
6427         .cr(16)
6428         .kr(3)
6429         .channels(channels)
6430         .qmin(128)
6431         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6432     }
6433   }
6434 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,c_gt_16_with_qmax)6435   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, c_gt_16_with_qmax) {
6436     TEST_REQUIRES_ARM_NEON;
6437     for (uint32_t channels = 17; channels < 32; channels++) {
6438       DWConvMicrokernelTester()
6439         .cr(16)
6440         .kr(3)
6441         .channels(channels)
6442         .qmax(128)
6443         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6444     }
6445   }
6446 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,multipixel)6447   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, multipixel) {
6448     TEST_REQUIRES_ARM_NEON;
6449     for (size_t channels = 1; channels <= 80; channels += 15) {
6450       DWConvMicrokernelTester()
6451         .cr(16)
6452         .kr(3)
6453         .channels(channels)
6454         .width(3)
6455         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6456     }
6457   }
6458 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,multipixel_with_step)6459   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, multipixel_with_step) {
6460     TEST_REQUIRES_ARM_NEON;
6461     for (size_t channels = 1; channels <= 80; channels += 15) {
6462       for (size_t step = 2; step <= 3; step++) {
6463         DWConvMicrokernelTester()
6464           .cr(16)
6465           .kr(3)
6466           .channels(channels)
6467           .width(3)
6468           .step(step)
6469           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6470       }
6471     }
6472   }
6473 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,multipixel_with_output_stride)6474   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, multipixel_with_output_stride) {
6475     TEST_REQUIRES_ARM_NEON;
6476     for (size_t channels = 1; channels <= 80; channels += 15) {
6477       DWConvMicrokernelTester()
6478         .cr(16)
6479         .kr(3)
6480         .channels(16)
6481         .width(5)
6482         .output_stride(83)
6483         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6484     }
6485   }
6486 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,multipixel_with_qmin)6487   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, multipixel_with_qmin) {
6488     TEST_REQUIRES_ARM_NEON;
6489     for (size_t channels = 1; channels <= 80; channels += 15) {
6490       DWConvMicrokernelTester()
6491         .cr(16)
6492         .kr(3)
6493         .channels(channels)
6494         .width(3)
6495         .qmin(128)
6496         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6497     }
6498   }
6499 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,multipixel_with_qmax)6500   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, multipixel_with_qmax) {
6501     TEST_REQUIRES_ARM_NEON;
6502     for (size_t channels = 1; channels <= 80; channels += 15) {
6503       DWConvMicrokernelTester()
6504         .cr(16)
6505         .kr(3)
6506         .channels(channels)
6507         .width(3)
6508         .qmax(128)
6509         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6510     }
6511   }
6512 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,input_offset)6513   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, input_offset) {
6514     TEST_REQUIRES_ARM_NEON;
6515     for (uint32_t channels = 32; channels < 256; channels += 48) {
6516       DWConvMicrokernelTester()
6517         .cr(16)
6518         .kr(3)
6519         .channels(channels)
6520         .input_offset(304)
6521         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6522     }
6523   }
6524 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON,zero)6525   TEST(F32_DWCONV_MINMAX_UP16X3__NEON, zero) {
6526     TEST_REQUIRES_ARM_NEON;
6527     for (uint32_t mz = 0; mz < 3; mz++) {
6528       for (uint32_t channels = 32; channels < 256; channels += 48) {
6529         DWConvMicrokernelTester()
6530           .cr(16)
6531           .kr(3)
6532           .channels(channels)
6533           .input_offset(304)
6534           .zero_index(mz)
6535           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
6536       }
6537     }
6538   }
6539 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
6540 
6541 
6542 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,c_eq_16)6543   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, c_eq_16) {
6544     TEST_REQUIRES_ARM_NEON;
6545     DWConvMicrokernelTester()
6546       .cr(16)
6547       .kr(3)
6548       .channels(16)
6549       .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6550   }
6551 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,c_div_16)6552   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, c_div_16) {
6553     TEST_REQUIRES_ARM_NEON;
6554     for (uint32_t channels = 32; channels < 256; channels += 48) {
6555       DWConvMicrokernelTester()
6556         .cr(16)
6557         .kr(3)
6558         .channels(channels)
6559         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6560     }
6561   }
6562 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,c_div_16_with_qmin)6563   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, c_div_16_with_qmin) {
6564     TEST_REQUIRES_ARM_NEON;
6565     for (uint32_t channels = 32; channels < 256; channels += 48) {
6566       DWConvMicrokernelTester()
6567         .cr(16)
6568         .kr(3)
6569         .channels(channels)
6570         .qmin(128)
6571         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6572     }
6573   }
6574 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,c_div_16_with_qmax)6575   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, c_div_16_with_qmax) {
6576     TEST_REQUIRES_ARM_NEON;
6577     for (uint32_t channels = 32; channels < 256; channels += 48) {
6578       DWConvMicrokernelTester()
6579         .cr(16)
6580         .kr(3)
6581         .channels(channels)
6582         .qmax(128)
6583         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6584     }
6585   }
6586 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,c_lt_16)6587   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, c_lt_16) {
6588     TEST_REQUIRES_ARM_NEON;
6589     for (uint32_t channels = 1; channels < 16; channels++) {
6590       DWConvMicrokernelTester()
6591         .cr(16)
6592         .kr(3)
6593         .channels(channels)
6594         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6595     }
6596   }
6597 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,c_gt_16)6598   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, c_gt_16) {
6599     TEST_REQUIRES_ARM_NEON;
6600     for (uint32_t channels = 17; channels < 32; channels++) {
6601       DWConvMicrokernelTester()
6602         .cr(16)
6603         .kr(3)
6604         .channels(channels)
6605         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6606     }
6607   }
6608 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,c_gt_16_with_qmin)6609   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, c_gt_16_with_qmin) {
6610     TEST_REQUIRES_ARM_NEON;
6611     for (uint32_t channels = 17; channels < 32; channels++) {
6612       DWConvMicrokernelTester()
6613         .cr(16)
6614         .kr(3)
6615         .channels(channels)
6616         .qmin(128)
6617         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6618     }
6619   }
6620 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,c_gt_16_with_qmax)6621   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, c_gt_16_with_qmax) {
6622     TEST_REQUIRES_ARM_NEON;
6623     for (uint32_t channels = 17; channels < 32; channels++) {
6624       DWConvMicrokernelTester()
6625         .cr(16)
6626         .kr(3)
6627         .channels(channels)
6628         .qmax(128)
6629         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6630     }
6631   }
6632 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,multipixel)6633   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, multipixel) {
6634     TEST_REQUIRES_ARM_NEON;
6635     for (size_t channels = 1; channels <= 80; channels += 15) {
6636       DWConvMicrokernelTester()
6637         .cr(16)
6638         .kr(3)
6639         .channels(channels)
6640         .width(3)
6641         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6642     }
6643   }
6644 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,multipixel_with_step)6645   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, multipixel_with_step) {
6646     TEST_REQUIRES_ARM_NEON;
6647     for (size_t channels = 1; channels <= 80; channels += 15) {
6648       for (size_t step = 2; step <= 3; step++) {
6649         DWConvMicrokernelTester()
6650           .cr(16)
6651           .kr(3)
6652           .channels(channels)
6653           .width(3)
6654           .step(step)
6655           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6656       }
6657     }
6658   }
6659 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,multipixel_with_output_stride)6660   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, multipixel_with_output_stride) {
6661     TEST_REQUIRES_ARM_NEON;
6662     for (size_t channels = 1; channels <= 80; channels += 15) {
6663       DWConvMicrokernelTester()
6664         .cr(16)
6665         .kr(3)
6666         .channels(16)
6667         .width(5)
6668         .output_stride(83)
6669         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6670     }
6671   }
6672 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,multipixel_with_qmin)6673   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, multipixel_with_qmin) {
6674     TEST_REQUIRES_ARM_NEON;
6675     for (size_t channels = 1; channels <= 80; channels += 15) {
6676       DWConvMicrokernelTester()
6677         .cr(16)
6678         .kr(3)
6679         .channels(channels)
6680         .width(3)
6681         .qmin(128)
6682         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6683     }
6684   }
6685 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,multipixel_with_qmax)6686   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, multipixel_with_qmax) {
6687     TEST_REQUIRES_ARM_NEON;
6688     for (size_t channels = 1; channels <= 80; channels += 15) {
6689       DWConvMicrokernelTester()
6690         .cr(16)
6691         .kr(3)
6692         .channels(channels)
6693         .width(3)
6694         .qmax(128)
6695         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6696     }
6697   }
6698 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,input_offset)6699   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, input_offset) {
6700     TEST_REQUIRES_ARM_NEON;
6701     for (uint32_t channels = 32; channels < 256; channels += 48) {
6702       DWConvMicrokernelTester()
6703         .cr(16)
6704         .kr(3)
6705         .channels(channels)
6706         .input_offset(304)
6707         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6708     }
6709   }
6710 
TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2,zero)6711   TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, zero) {
6712     TEST_REQUIRES_ARM_NEON;
6713     for (uint32_t mz = 0; mz < 3; mz++) {
6714       for (uint32_t channels = 32; channels < 256; channels += 48) {
6715         DWConvMicrokernelTester()
6716           .cr(16)
6717           .kr(3)
6718           .channels(channels)
6719           .input_offset(304)
6720           .zero_index(mz)
6721           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
6722       }
6723     }
6724   }
6725 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
6726 
6727 
6728 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,c_eq_16)6729   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_eq_16) {
6730     TEST_REQUIRES_ARM_NEON_FMA;
6731     DWConvMicrokernelTester()
6732       .cr(16)
6733       .kr(3)
6734       .channels(16)
6735       .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6736   }
6737 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,c_div_16)6738   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_div_16) {
6739     TEST_REQUIRES_ARM_NEON_FMA;
6740     for (uint32_t channels = 32; channels < 256; channels += 48) {
6741       DWConvMicrokernelTester()
6742         .cr(16)
6743         .kr(3)
6744         .channels(channels)
6745         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6746     }
6747   }
6748 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,c_div_16_with_qmin)6749   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_div_16_with_qmin) {
6750     TEST_REQUIRES_ARM_NEON_FMA;
6751     for (uint32_t channels = 32; channels < 256; channels += 48) {
6752       DWConvMicrokernelTester()
6753         .cr(16)
6754         .kr(3)
6755         .channels(channels)
6756         .qmin(128)
6757         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6758     }
6759   }
6760 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,c_div_16_with_qmax)6761   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_div_16_with_qmax) {
6762     TEST_REQUIRES_ARM_NEON_FMA;
6763     for (uint32_t channels = 32; channels < 256; channels += 48) {
6764       DWConvMicrokernelTester()
6765         .cr(16)
6766         .kr(3)
6767         .channels(channels)
6768         .qmax(128)
6769         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6770     }
6771   }
6772 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,c_lt_16)6773   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_lt_16) {
6774     TEST_REQUIRES_ARM_NEON_FMA;
6775     for (uint32_t channels = 1; channels < 16; channels++) {
6776       DWConvMicrokernelTester()
6777         .cr(16)
6778         .kr(3)
6779         .channels(channels)
6780         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6781     }
6782   }
6783 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,c_gt_16)6784   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_gt_16) {
6785     TEST_REQUIRES_ARM_NEON_FMA;
6786     for (uint32_t channels = 17; channels < 32; channels++) {
6787       DWConvMicrokernelTester()
6788         .cr(16)
6789         .kr(3)
6790         .channels(channels)
6791         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6792     }
6793   }
6794 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,c_gt_16_with_qmin)6795   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_gt_16_with_qmin) {
6796     TEST_REQUIRES_ARM_NEON_FMA;
6797     for (uint32_t channels = 17; channels < 32; channels++) {
6798       DWConvMicrokernelTester()
6799         .cr(16)
6800         .kr(3)
6801         .channels(channels)
6802         .qmin(128)
6803         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6804     }
6805   }
6806 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,c_gt_16_with_qmax)6807   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_gt_16_with_qmax) {
6808     TEST_REQUIRES_ARM_NEON_FMA;
6809     for (uint32_t channels = 17; channels < 32; channels++) {
6810       DWConvMicrokernelTester()
6811         .cr(16)
6812         .kr(3)
6813         .channels(channels)
6814         .qmax(128)
6815         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6816     }
6817   }
6818 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,multipixel)6819   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, multipixel) {
6820     TEST_REQUIRES_ARM_NEON_FMA;
6821     for (size_t channels = 1; channels <= 80; channels += 15) {
6822       DWConvMicrokernelTester()
6823         .cr(16)
6824         .kr(3)
6825         .channels(channels)
6826         .width(3)
6827         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6828     }
6829   }
6830 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,multipixel_with_step)6831   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, multipixel_with_step) {
6832     TEST_REQUIRES_ARM_NEON_FMA;
6833     for (size_t channels = 1; channels <= 80; channels += 15) {
6834       for (size_t step = 2; step <= 3; step++) {
6835         DWConvMicrokernelTester()
6836           .cr(16)
6837           .kr(3)
6838           .channels(channels)
6839           .width(3)
6840           .step(step)
6841           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6842       }
6843     }
6844   }
6845 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,multipixel_with_output_stride)6846   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, multipixel_with_output_stride) {
6847     TEST_REQUIRES_ARM_NEON_FMA;
6848     for (size_t channels = 1; channels <= 80; channels += 15) {
6849       DWConvMicrokernelTester()
6850         .cr(16)
6851         .kr(3)
6852         .channels(16)
6853         .width(5)
6854         .output_stride(83)
6855         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6856     }
6857   }
6858 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,multipixel_with_qmin)6859   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, multipixel_with_qmin) {
6860     TEST_REQUIRES_ARM_NEON_FMA;
6861     for (size_t channels = 1; channels <= 80; channels += 15) {
6862       DWConvMicrokernelTester()
6863         .cr(16)
6864         .kr(3)
6865         .channels(channels)
6866         .width(3)
6867         .qmin(128)
6868         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6869     }
6870   }
6871 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,multipixel_with_qmax)6872   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, multipixel_with_qmax) {
6873     TEST_REQUIRES_ARM_NEON_FMA;
6874     for (size_t channels = 1; channels <= 80; channels += 15) {
6875       DWConvMicrokernelTester()
6876         .cr(16)
6877         .kr(3)
6878         .channels(channels)
6879         .width(3)
6880         .qmax(128)
6881         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6882     }
6883   }
6884 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,input_offset)6885   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, input_offset) {
6886     TEST_REQUIRES_ARM_NEON_FMA;
6887     for (uint32_t channels = 32; channels < 256; channels += 48) {
6888       DWConvMicrokernelTester()
6889         .cr(16)
6890         .kr(3)
6891         .channels(channels)
6892         .input_offset(304)
6893         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6894     }
6895   }
6896 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA,zero)6897   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, zero) {
6898     TEST_REQUIRES_ARM_NEON_FMA;
6899     for (uint32_t mz = 0; mz < 3; mz++) {
6900       for (uint32_t channels = 32; channels < 256; channels += 48) {
6901         DWConvMicrokernelTester()
6902           .cr(16)
6903           .kr(3)
6904           .channels(channels)
6905           .input_offset(304)
6906           .zero_index(mz)
6907           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
6908       }
6909     }
6910   }
6911 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
6912 
6913 
6914 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,c_eq_16)6915   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_eq_16) {
6916     TEST_REQUIRES_ARM_NEON_FMA;
6917     DWConvMicrokernelTester()
6918       .cr(16)
6919       .kr(3)
6920       .channels(16)
6921       .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6922   }
6923 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,c_div_16)6924   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_div_16) {
6925     TEST_REQUIRES_ARM_NEON_FMA;
6926     for (uint32_t channels = 32; channels < 256; channels += 48) {
6927       DWConvMicrokernelTester()
6928         .cr(16)
6929         .kr(3)
6930         .channels(channels)
6931         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6932     }
6933   }
6934 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,c_div_16_with_qmin)6935   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_div_16_with_qmin) {
6936     TEST_REQUIRES_ARM_NEON_FMA;
6937     for (uint32_t channels = 32; channels < 256; channels += 48) {
6938       DWConvMicrokernelTester()
6939         .cr(16)
6940         .kr(3)
6941         .channels(channels)
6942         .qmin(128)
6943         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6944     }
6945   }
6946 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,c_div_16_with_qmax)6947   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_div_16_with_qmax) {
6948     TEST_REQUIRES_ARM_NEON_FMA;
6949     for (uint32_t channels = 32; channels < 256; channels += 48) {
6950       DWConvMicrokernelTester()
6951         .cr(16)
6952         .kr(3)
6953         .channels(channels)
6954         .qmax(128)
6955         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6956     }
6957   }
6958 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,c_lt_16)6959   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_lt_16) {
6960     TEST_REQUIRES_ARM_NEON_FMA;
6961     for (uint32_t channels = 1; channels < 16; channels++) {
6962       DWConvMicrokernelTester()
6963         .cr(16)
6964         .kr(3)
6965         .channels(channels)
6966         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6967     }
6968   }
6969 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,c_gt_16)6970   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_gt_16) {
6971     TEST_REQUIRES_ARM_NEON_FMA;
6972     for (uint32_t channels = 17; channels < 32; channels++) {
6973       DWConvMicrokernelTester()
6974         .cr(16)
6975         .kr(3)
6976         .channels(channels)
6977         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6978     }
6979   }
6980 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,c_gt_16_with_qmin)6981   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_gt_16_with_qmin) {
6982     TEST_REQUIRES_ARM_NEON_FMA;
6983     for (uint32_t channels = 17; channels < 32; channels++) {
6984       DWConvMicrokernelTester()
6985         .cr(16)
6986         .kr(3)
6987         .channels(channels)
6988         .qmin(128)
6989         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
6990     }
6991   }
6992 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,c_gt_16_with_qmax)6993   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_gt_16_with_qmax) {
6994     TEST_REQUIRES_ARM_NEON_FMA;
6995     for (uint32_t channels = 17; channels < 32; channels++) {
6996       DWConvMicrokernelTester()
6997         .cr(16)
6998         .kr(3)
6999         .channels(channels)
7000         .qmax(128)
7001         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7002     }
7003   }
7004 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,multipixel)7005   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, multipixel) {
7006     TEST_REQUIRES_ARM_NEON_FMA;
7007     for (size_t channels = 1; channels <= 80; channels += 15) {
7008       DWConvMicrokernelTester()
7009         .cr(16)
7010         .kr(3)
7011         .channels(channels)
7012         .width(3)
7013         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7014     }
7015   }
7016 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,multipixel_with_step)7017   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, multipixel_with_step) {
7018     TEST_REQUIRES_ARM_NEON_FMA;
7019     for (size_t channels = 1; channels <= 80; channels += 15) {
7020       for (size_t step = 2; step <= 3; step++) {
7021         DWConvMicrokernelTester()
7022           .cr(16)
7023           .kr(3)
7024           .channels(channels)
7025           .width(3)
7026           .step(step)
7027           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7028       }
7029     }
7030   }
7031 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,multipixel_with_output_stride)7032   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, multipixel_with_output_stride) {
7033     TEST_REQUIRES_ARM_NEON_FMA;
7034     for (size_t channels = 1; channels <= 80; channels += 15) {
7035       DWConvMicrokernelTester()
7036         .cr(16)
7037         .kr(3)
7038         .channels(16)
7039         .width(5)
7040         .output_stride(83)
7041         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7042     }
7043   }
7044 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,multipixel_with_qmin)7045   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, multipixel_with_qmin) {
7046     TEST_REQUIRES_ARM_NEON_FMA;
7047     for (size_t channels = 1; channels <= 80; channels += 15) {
7048       DWConvMicrokernelTester()
7049         .cr(16)
7050         .kr(3)
7051         .channels(channels)
7052         .width(3)
7053         .qmin(128)
7054         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7055     }
7056   }
7057 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,multipixel_with_qmax)7058   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, multipixel_with_qmax) {
7059     TEST_REQUIRES_ARM_NEON_FMA;
7060     for (size_t channels = 1; channels <= 80; channels += 15) {
7061       DWConvMicrokernelTester()
7062         .cr(16)
7063         .kr(3)
7064         .channels(channels)
7065         .width(3)
7066         .qmax(128)
7067         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7068     }
7069   }
7070 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,input_offset)7071   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, input_offset) {
7072     TEST_REQUIRES_ARM_NEON_FMA;
7073     for (uint32_t channels = 32; channels < 256; channels += 48) {
7074       DWConvMicrokernelTester()
7075         .cr(16)
7076         .kr(3)
7077         .channels(channels)
7078         .input_offset(304)
7079         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7080     }
7081   }
7082 
TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2,zero)7083   TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, zero) {
7084     TEST_REQUIRES_ARM_NEON_FMA;
7085     for (uint32_t mz = 0; mz < 3; mz++) {
7086       for (uint32_t channels = 32; channels < 256; channels += 48) {
7087         DWConvMicrokernelTester()
7088           .cr(16)
7089           .kr(3)
7090           .channels(channels)
7091           .input_offset(304)
7092           .zero_index(mz)
7093           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7094       }
7095     }
7096   }
7097 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
7098 
7099 
7100 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,c_eq_16)7101   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_eq_16) {
7102     TEST_REQUIRES_ARM_NEON;
7103     DWConvMicrokernelTester()
7104       .cr(16)
7105       .kr(4)
7106       .channels(16)
7107       .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7108   }
7109 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,c_div_16)7110   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_div_16) {
7111     TEST_REQUIRES_ARM_NEON;
7112     for (uint32_t channels = 32; channels < 256; channels += 48) {
7113       DWConvMicrokernelTester()
7114         .cr(16)
7115         .kr(4)
7116         .channels(channels)
7117         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7118     }
7119   }
7120 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,c_div_16_with_qmin)7121   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_div_16_with_qmin) {
7122     TEST_REQUIRES_ARM_NEON;
7123     for (uint32_t channels = 32; channels < 256; channels += 48) {
7124       DWConvMicrokernelTester()
7125         .cr(16)
7126         .kr(4)
7127         .channels(channels)
7128         .qmin(128)
7129         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7130     }
7131   }
7132 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,c_div_16_with_qmax)7133   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_div_16_with_qmax) {
7134     TEST_REQUIRES_ARM_NEON;
7135     for (uint32_t channels = 32; channels < 256; channels += 48) {
7136       DWConvMicrokernelTester()
7137         .cr(16)
7138         .kr(4)
7139         .channels(channels)
7140         .qmax(128)
7141         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7142     }
7143   }
7144 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,c_lt_16)7145   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_lt_16) {
7146     TEST_REQUIRES_ARM_NEON;
7147     for (uint32_t channels = 1; channels < 16; channels++) {
7148       DWConvMicrokernelTester()
7149         .cr(16)
7150         .kr(4)
7151         .channels(channels)
7152         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7153     }
7154   }
7155 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,c_gt_16)7156   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_gt_16) {
7157     TEST_REQUIRES_ARM_NEON;
7158     for (uint32_t channels = 17; channels < 32; channels++) {
7159       DWConvMicrokernelTester()
7160         .cr(16)
7161         .kr(4)
7162         .channels(channels)
7163         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7164     }
7165   }
7166 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,c_gt_16_with_qmin)7167   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_gt_16_with_qmin) {
7168     TEST_REQUIRES_ARM_NEON;
7169     for (uint32_t channels = 17; channels < 32; channels++) {
7170       DWConvMicrokernelTester()
7171         .cr(16)
7172         .kr(4)
7173         .channels(channels)
7174         .qmin(128)
7175         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7176     }
7177   }
7178 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,c_gt_16_with_qmax)7179   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_gt_16_with_qmax) {
7180     TEST_REQUIRES_ARM_NEON;
7181     for (uint32_t channels = 17; channels < 32; channels++) {
7182       DWConvMicrokernelTester()
7183         .cr(16)
7184         .kr(4)
7185         .channels(channels)
7186         .qmax(128)
7187         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7188     }
7189   }
7190 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,multipixel)7191   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, multipixel) {
7192     TEST_REQUIRES_ARM_NEON;
7193     for (size_t channels = 1; channels <= 80; channels += 15) {
7194       DWConvMicrokernelTester()
7195         .cr(16)
7196         .kr(4)
7197         .channels(channels)
7198         .width(3)
7199         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7200     }
7201   }
7202 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,multipixel_with_step)7203   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, multipixel_with_step) {
7204     TEST_REQUIRES_ARM_NEON;
7205     for (size_t channels = 1; channels <= 80; channels += 15) {
7206       for (size_t step = 2; step <= 4; step++) {
7207         DWConvMicrokernelTester()
7208           .cr(16)
7209           .kr(4)
7210           .channels(channels)
7211           .width(3)
7212           .step(step)
7213           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7214       }
7215     }
7216   }
7217 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,multipixel_with_output_stride)7218   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, multipixel_with_output_stride) {
7219     TEST_REQUIRES_ARM_NEON;
7220     for (size_t channels = 1; channels <= 80; channels += 15) {
7221       DWConvMicrokernelTester()
7222         .cr(16)
7223         .kr(4)
7224         .channels(16)
7225         .width(5)
7226         .output_stride(83)
7227         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7228     }
7229   }
7230 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,multipixel_with_qmin)7231   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, multipixel_with_qmin) {
7232     TEST_REQUIRES_ARM_NEON;
7233     for (size_t channels = 1; channels <= 80; channels += 15) {
7234       DWConvMicrokernelTester()
7235         .cr(16)
7236         .kr(4)
7237         .channels(channels)
7238         .width(3)
7239         .qmin(128)
7240         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7241     }
7242   }
7243 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,multipixel_with_qmax)7244   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, multipixel_with_qmax) {
7245     TEST_REQUIRES_ARM_NEON;
7246     for (size_t channels = 1; channels <= 80; channels += 15) {
7247       DWConvMicrokernelTester()
7248         .cr(16)
7249         .kr(4)
7250         .channels(channels)
7251         .width(3)
7252         .qmax(128)
7253         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7254     }
7255   }
7256 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,input_offset)7257   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, input_offset) {
7258     TEST_REQUIRES_ARM_NEON;
7259     for (uint32_t channels = 32; channels < 256; channels += 48) {
7260       DWConvMicrokernelTester()
7261         .cr(16)
7262         .kr(4)
7263         .channels(channels)
7264         .input_offset(304)
7265         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7266     }
7267   }
7268 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON,zero)7269   TEST(F32_DWCONV_MINMAX_UP16X4__NEON, zero) {
7270     TEST_REQUIRES_ARM_NEON;
7271     for (uint32_t mz = 0; mz < 4; mz++) {
7272       for (uint32_t channels = 32; channels < 256; channels += 48) {
7273         DWConvMicrokernelTester()
7274           .cr(16)
7275           .kr(4)
7276           .channels(channels)
7277           .input_offset(304)
7278           .zero_index(mz)
7279           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
7280       }
7281     }
7282   }
7283 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
7284 
7285 
7286 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,c_eq_16)7287   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_eq_16) {
7288     TEST_REQUIRES_ARM_NEON;
7289     DWConvMicrokernelTester()
7290       .cr(16)
7291       .kr(4)
7292       .channels(16)
7293       .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7294   }
7295 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,c_div_16)7296   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_div_16) {
7297     TEST_REQUIRES_ARM_NEON;
7298     for (uint32_t channels = 32; channels < 256; channels += 48) {
7299       DWConvMicrokernelTester()
7300         .cr(16)
7301         .kr(4)
7302         .channels(channels)
7303         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7304     }
7305   }
7306 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,c_div_16_with_qmin)7307   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_div_16_with_qmin) {
7308     TEST_REQUIRES_ARM_NEON;
7309     for (uint32_t channels = 32; channels < 256; channels += 48) {
7310       DWConvMicrokernelTester()
7311         .cr(16)
7312         .kr(4)
7313         .channels(channels)
7314         .qmin(128)
7315         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7316     }
7317   }
7318 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,c_div_16_with_qmax)7319   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_div_16_with_qmax) {
7320     TEST_REQUIRES_ARM_NEON;
7321     for (uint32_t channels = 32; channels < 256; channels += 48) {
7322       DWConvMicrokernelTester()
7323         .cr(16)
7324         .kr(4)
7325         .channels(channels)
7326         .qmax(128)
7327         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7328     }
7329   }
7330 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,c_lt_16)7331   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_lt_16) {
7332     TEST_REQUIRES_ARM_NEON;
7333     for (uint32_t channels = 1; channels < 16; channels++) {
7334       DWConvMicrokernelTester()
7335         .cr(16)
7336         .kr(4)
7337         .channels(channels)
7338         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7339     }
7340   }
7341 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,c_gt_16)7342   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_gt_16) {
7343     TEST_REQUIRES_ARM_NEON;
7344     for (uint32_t channels = 17; channels < 32; channels++) {
7345       DWConvMicrokernelTester()
7346         .cr(16)
7347         .kr(4)
7348         .channels(channels)
7349         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7350     }
7351   }
7352 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,c_gt_16_with_qmin)7353   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_gt_16_with_qmin) {
7354     TEST_REQUIRES_ARM_NEON;
7355     for (uint32_t channels = 17; channels < 32; channels++) {
7356       DWConvMicrokernelTester()
7357         .cr(16)
7358         .kr(4)
7359         .channels(channels)
7360         .qmin(128)
7361         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7362     }
7363   }
7364 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,c_gt_16_with_qmax)7365   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_gt_16_with_qmax) {
7366     TEST_REQUIRES_ARM_NEON;
7367     for (uint32_t channels = 17; channels < 32; channels++) {
7368       DWConvMicrokernelTester()
7369         .cr(16)
7370         .kr(4)
7371         .channels(channels)
7372         .qmax(128)
7373         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7374     }
7375   }
7376 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,multipixel)7377   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, multipixel) {
7378     TEST_REQUIRES_ARM_NEON;
7379     for (size_t channels = 1; channels <= 80; channels += 15) {
7380       DWConvMicrokernelTester()
7381         .cr(16)
7382         .kr(4)
7383         .channels(channels)
7384         .width(3)
7385         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7386     }
7387   }
7388 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,multipixel_with_step)7389   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, multipixel_with_step) {
7390     TEST_REQUIRES_ARM_NEON;
7391     for (size_t channels = 1; channels <= 80; channels += 15) {
7392       for (size_t step = 2; step <= 4; step++) {
7393         DWConvMicrokernelTester()
7394           .cr(16)
7395           .kr(4)
7396           .channels(channels)
7397           .width(3)
7398           .step(step)
7399           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7400       }
7401     }
7402   }
7403 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,multipixel_with_output_stride)7404   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, multipixel_with_output_stride) {
7405     TEST_REQUIRES_ARM_NEON;
7406     for (size_t channels = 1; channels <= 80; channels += 15) {
7407       DWConvMicrokernelTester()
7408         .cr(16)
7409         .kr(4)
7410         .channels(16)
7411         .width(5)
7412         .output_stride(83)
7413         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7414     }
7415   }
7416 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,multipixel_with_qmin)7417   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, multipixel_with_qmin) {
7418     TEST_REQUIRES_ARM_NEON;
7419     for (size_t channels = 1; channels <= 80; channels += 15) {
7420       DWConvMicrokernelTester()
7421         .cr(16)
7422         .kr(4)
7423         .channels(channels)
7424         .width(3)
7425         .qmin(128)
7426         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7427     }
7428   }
7429 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,multipixel_with_qmax)7430   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, multipixel_with_qmax) {
7431     TEST_REQUIRES_ARM_NEON;
7432     for (size_t channels = 1; channels <= 80; channels += 15) {
7433       DWConvMicrokernelTester()
7434         .cr(16)
7435         .kr(4)
7436         .channels(channels)
7437         .width(3)
7438         .qmax(128)
7439         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7440     }
7441   }
7442 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,input_offset)7443   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, input_offset) {
7444     TEST_REQUIRES_ARM_NEON;
7445     for (uint32_t channels = 32; channels < 256; channels += 48) {
7446       DWConvMicrokernelTester()
7447         .cr(16)
7448         .kr(4)
7449         .channels(channels)
7450         .input_offset(304)
7451         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7452     }
7453   }
7454 
TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2,zero)7455   TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, zero) {
7456     TEST_REQUIRES_ARM_NEON;
7457     for (uint32_t mz = 0; mz < 4; mz++) {
7458       for (uint32_t channels = 32; channels < 256; channels += 48) {
7459         DWConvMicrokernelTester()
7460           .cr(16)
7461           .kr(4)
7462           .channels(channels)
7463           .input_offset(304)
7464           .zero_index(mz)
7465           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
7466       }
7467     }
7468   }
7469 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
7470 
7471 
7472 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,c_eq_16)7473   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_eq_16) {
7474     TEST_REQUIRES_ARM_NEON_FMA;
7475     DWConvMicrokernelTester()
7476       .cr(16)
7477       .kr(4)
7478       .channels(16)
7479       .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7480   }
7481 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,c_div_16)7482   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_div_16) {
7483     TEST_REQUIRES_ARM_NEON_FMA;
7484     for (uint32_t channels = 32; channels < 256; channels += 48) {
7485       DWConvMicrokernelTester()
7486         .cr(16)
7487         .kr(4)
7488         .channels(channels)
7489         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7490     }
7491   }
7492 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,c_div_16_with_qmin)7493   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_div_16_with_qmin) {
7494     TEST_REQUIRES_ARM_NEON_FMA;
7495     for (uint32_t channels = 32; channels < 256; channels += 48) {
7496       DWConvMicrokernelTester()
7497         .cr(16)
7498         .kr(4)
7499         .channels(channels)
7500         .qmin(128)
7501         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7502     }
7503   }
7504 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,c_div_16_with_qmax)7505   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_div_16_with_qmax) {
7506     TEST_REQUIRES_ARM_NEON_FMA;
7507     for (uint32_t channels = 32; channels < 256; channels += 48) {
7508       DWConvMicrokernelTester()
7509         .cr(16)
7510         .kr(4)
7511         .channels(channels)
7512         .qmax(128)
7513         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7514     }
7515   }
7516 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,c_lt_16)7517   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_lt_16) {
7518     TEST_REQUIRES_ARM_NEON_FMA;
7519     for (uint32_t channels = 1; channels < 16; channels++) {
7520       DWConvMicrokernelTester()
7521         .cr(16)
7522         .kr(4)
7523         .channels(channels)
7524         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7525     }
7526   }
7527 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,c_gt_16)7528   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_gt_16) {
7529     TEST_REQUIRES_ARM_NEON_FMA;
7530     for (uint32_t channels = 17; channels < 32; channels++) {
7531       DWConvMicrokernelTester()
7532         .cr(16)
7533         .kr(4)
7534         .channels(channels)
7535         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7536     }
7537   }
7538 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,c_gt_16_with_qmin)7539   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_gt_16_with_qmin) {
7540     TEST_REQUIRES_ARM_NEON_FMA;
7541     for (uint32_t channels = 17; channels < 32; channels++) {
7542       DWConvMicrokernelTester()
7543         .cr(16)
7544         .kr(4)
7545         .channels(channels)
7546         .qmin(128)
7547         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7548     }
7549   }
7550 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,c_gt_16_with_qmax)7551   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_gt_16_with_qmax) {
7552     TEST_REQUIRES_ARM_NEON_FMA;
7553     for (uint32_t channels = 17; channels < 32; channels++) {
7554       DWConvMicrokernelTester()
7555         .cr(16)
7556         .kr(4)
7557         .channels(channels)
7558         .qmax(128)
7559         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7560     }
7561   }
7562 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,multipixel)7563   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, multipixel) {
7564     TEST_REQUIRES_ARM_NEON_FMA;
7565     for (size_t channels = 1; channels <= 80; channels += 15) {
7566       DWConvMicrokernelTester()
7567         .cr(16)
7568         .kr(4)
7569         .channels(channels)
7570         .width(3)
7571         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7572     }
7573   }
7574 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,multipixel_with_step)7575   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, multipixel_with_step) {
7576     TEST_REQUIRES_ARM_NEON_FMA;
7577     for (size_t channels = 1; channels <= 80; channels += 15) {
7578       for (size_t step = 2; step <= 4; step++) {
7579         DWConvMicrokernelTester()
7580           .cr(16)
7581           .kr(4)
7582           .channels(channels)
7583           .width(3)
7584           .step(step)
7585           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7586       }
7587     }
7588   }
7589 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,multipixel_with_output_stride)7590   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, multipixel_with_output_stride) {
7591     TEST_REQUIRES_ARM_NEON_FMA;
7592     for (size_t channels = 1; channels <= 80; channels += 15) {
7593       DWConvMicrokernelTester()
7594         .cr(16)
7595         .kr(4)
7596         .channels(16)
7597         .width(5)
7598         .output_stride(83)
7599         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7600     }
7601   }
7602 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,multipixel_with_qmin)7603   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, multipixel_with_qmin) {
7604     TEST_REQUIRES_ARM_NEON_FMA;
7605     for (size_t channels = 1; channels <= 80; channels += 15) {
7606       DWConvMicrokernelTester()
7607         .cr(16)
7608         .kr(4)
7609         .channels(channels)
7610         .width(3)
7611         .qmin(128)
7612         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7613     }
7614   }
7615 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,multipixel_with_qmax)7616   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, multipixel_with_qmax) {
7617     TEST_REQUIRES_ARM_NEON_FMA;
7618     for (size_t channels = 1; channels <= 80; channels += 15) {
7619       DWConvMicrokernelTester()
7620         .cr(16)
7621         .kr(4)
7622         .channels(channels)
7623         .width(3)
7624         .qmax(128)
7625         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7626     }
7627   }
7628 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,input_offset)7629   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, input_offset) {
7630     TEST_REQUIRES_ARM_NEON_FMA;
7631     for (uint32_t channels = 32; channels < 256; channels += 48) {
7632       DWConvMicrokernelTester()
7633         .cr(16)
7634         .kr(4)
7635         .channels(channels)
7636         .input_offset(304)
7637         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7638     }
7639   }
7640 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA,zero)7641   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, zero) {
7642     TEST_REQUIRES_ARM_NEON_FMA;
7643     for (uint32_t mz = 0; mz < 4; mz++) {
7644       for (uint32_t channels = 32; channels < 256; channels += 48) {
7645         DWConvMicrokernelTester()
7646           .cr(16)
7647           .kr(4)
7648           .channels(channels)
7649           .input_offset(304)
7650           .zero_index(mz)
7651           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
7652       }
7653     }
7654   }
7655 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
7656 
7657 
7658 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,c_eq_16)7659   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_eq_16) {
7660     TEST_REQUIRES_ARM_NEON_FMA;
7661     DWConvMicrokernelTester()
7662       .cr(16)
7663       .kr(4)
7664       .channels(16)
7665       .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7666   }
7667 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,c_div_16)7668   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_div_16) {
7669     TEST_REQUIRES_ARM_NEON_FMA;
7670     for (uint32_t channels = 32; channels < 256; channels += 48) {
7671       DWConvMicrokernelTester()
7672         .cr(16)
7673         .kr(4)
7674         .channels(channels)
7675         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7676     }
7677   }
7678 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,c_div_16_with_qmin)7679   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_div_16_with_qmin) {
7680     TEST_REQUIRES_ARM_NEON_FMA;
7681     for (uint32_t channels = 32; channels < 256; channels += 48) {
7682       DWConvMicrokernelTester()
7683         .cr(16)
7684         .kr(4)
7685         .channels(channels)
7686         .qmin(128)
7687         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7688     }
7689   }
7690 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,c_div_16_with_qmax)7691   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_div_16_with_qmax) {
7692     TEST_REQUIRES_ARM_NEON_FMA;
7693     for (uint32_t channels = 32; channels < 256; channels += 48) {
7694       DWConvMicrokernelTester()
7695         .cr(16)
7696         .kr(4)
7697         .channels(channels)
7698         .qmax(128)
7699         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7700     }
7701   }
7702 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,c_lt_16)7703   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_lt_16) {
7704     TEST_REQUIRES_ARM_NEON_FMA;
7705     for (uint32_t channels = 1; channels < 16; channels++) {
7706       DWConvMicrokernelTester()
7707         .cr(16)
7708         .kr(4)
7709         .channels(channels)
7710         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7711     }
7712   }
7713 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,c_gt_16)7714   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_gt_16) {
7715     TEST_REQUIRES_ARM_NEON_FMA;
7716     for (uint32_t channels = 17; channels < 32; channels++) {
7717       DWConvMicrokernelTester()
7718         .cr(16)
7719         .kr(4)
7720         .channels(channels)
7721         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7722     }
7723   }
7724 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,c_gt_16_with_qmin)7725   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_gt_16_with_qmin) {
7726     TEST_REQUIRES_ARM_NEON_FMA;
7727     for (uint32_t channels = 17; channels < 32; channels++) {
7728       DWConvMicrokernelTester()
7729         .cr(16)
7730         .kr(4)
7731         .channels(channels)
7732         .qmin(128)
7733         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7734     }
7735   }
7736 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,c_gt_16_with_qmax)7737   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_gt_16_with_qmax) {
7738     TEST_REQUIRES_ARM_NEON_FMA;
7739     for (uint32_t channels = 17; channels < 32; channels++) {
7740       DWConvMicrokernelTester()
7741         .cr(16)
7742         .kr(4)
7743         .channels(channels)
7744         .qmax(128)
7745         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7746     }
7747   }
7748 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,multipixel)7749   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, multipixel) {
7750     TEST_REQUIRES_ARM_NEON_FMA;
7751     for (size_t channels = 1; channels <= 80; channels += 15) {
7752       DWConvMicrokernelTester()
7753         .cr(16)
7754         .kr(4)
7755         .channels(channels)
7756         .width(3)
7757         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7758     }
7759   }
7760 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,multipixel_with_step)7761   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, multipixel_with_step) {
7762     TEST_REQUIRES_ARM_NEON_FMA;
7763     for (size_t channels = 1; channels <= 80; channels += 15) {
7764       for (size_t step = 2; step <= 4; step++) {
7765         DWConvMicrokernelTester()
7766           .cr(16)
7767           .kr(4)
7768           .channels(channels)
7769           .width(3)
7770           .step(step)
7771           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7772       }
7773     }
7774   }
7775 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,multipixel_with_output_stride)7776   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, multipixel_with_output_stride) {
7777     TEST_REQUIRES_ARM_NEON_FMA;
7778     for (size_t channels = 1; channels <= 80; channels += 15) {
7779       DWConvMicrokernelTester()
7780         .cr(16)
7781         .kr(4)
7782         .channels(16)
7783         .width(5)
7784         .output_stride(83)
7785         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7786     }
7787   }
7788 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,multipixel_with_qmin)7789   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, multipixel_with_qmin) {
7790     TEST_REQUIRES_ARM_NEON_FMA;
7791     for (size_t channels = 1; channels <= 80; channels += 15) {
7792       DWConvMicrokernelTester()
7793         .cr(16)
7794         .kr(4)
7795         .channels(channels)
7796         .width(3)
7797         .qmin(128)
7798         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7799     }
7800   }
7801 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,multipixel_with_qmax)7802   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, multipixel_with_qmax) {
7803     TEST_REQUIRES_ARM_NEON_FMA;
7804     for (size_t channels = 1; channels <= 80; channels += 15) {
7805       DWConvMicrokernelTester()
7806         .cr(16)
7807         .kr(4)
7808         .channels(channels)
7809         .width(3)
7810         .qmax(128)
7811         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7812     }
7813   }
7814 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,input_offset)7815   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, input_offset) {
7816     TEST_REQUIRES_ARM_NEON_FMA;
7817     for (uint32_t channels = 32; channels < 256; channels += 48) {
7818       DWConvMicrokernelTester()
7819         .cr(16)
7820         .kr(4)
7821         .channels(channels)
7822         .input_offset(304)
7823         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7824     }
7825   }
7826 
TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2,zero)7827   TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, zero) {
7828     TEST_REQUIRES_ARM_NEON_FMA;
7829     for (uint32_t mz = 0; mz < 4; mz++) {
7830       for (uint32_t channels = 32; channels < 256; channels += 48) {
7831         DWConvMicrokernelTester()
7832           .cr(16)
7833           .kr(4)
7834           .channels(channels)
7835           .input_offset(304)
7836           .zero_index(mz)
7837           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
7838       }
7839     }
7840   }
7841 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
7842 
7843 
7844 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,c_eq_16)7845   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_eq_16) {
7846     TEST_REQUIRES_ARM_NEON;
7847     DWConvMicrokernelTester()
7848       .cr(16)
7849       .kr(9)
7850       .channels(16)
7851       .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7852   }
7853 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,c_div_16)7854   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_div_16) {
7855     TEST_REQUIRES_ARM_NEON;
7856     for (uint32_t channels = 32; channels < 256; channels += 48) {
7857       DWConvMicrokernelTester()
7858         .cr(16)
7859         .kr(9)
7860         .channels(channels)
7861         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7862     }
7863   }
7864 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,c_div_16_with_qmin)7865   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_div_16_with_qmin) {
7866     TEST_REQUIRES_ARM_NEON;
7867     for (uint32_t channels = 32; channels < 256; channels += 48) {
7868       DWConvMicrokernelTester()
7869         .cr(16)
7870         .kr(9)
7871         .channels(channels)
7872         .qmin(128)
7873         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7874     }
7875   }
7876 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,c_div_16_with_qmax)7877   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_div_16_with_qmax) {
7878     TEST_REQUIRES_ARM_NEON;
7879     for (uint32_t channels = 32; channels < 256; channels += 48) {
7880       DWConvMicrokernelTester()
7881         .cr(16)
7882         .kr(9)
7883         .channels(channels)
7884         .qmax(128)
7885         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7886     }
7887   }
7888 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,c_lt_16)7889   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_lt_16) {
7890     TEST_REQUIRES_ARM_NEON;
7891     for (uint32_t channels = 1; channels < 16; channels++) {
7892       DWConvMicrokernelTester()
7893         .cr(16)
7894         .kr(9)
7895         .channels(channels)
7896         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7897     }
7898   }
7899 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,c_gt_16)7900   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_gt_16) {
7901     TEST_REQUIRES_ARM_NEON;
7902     for (uint32_t channels = 17; channels < 32; channels++) {
7903       DWConvMicrokernelTester()
7904         .cr(16)
7905         .kr(9)
7906         .channels(channels)
7907         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7908     }
7909   }
7910 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,c_gt_16_with_qmin)7911   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_gt_16_with_qmin) {
7912     TEST_REQUIRES_ARM_NEON;
7913     for (uint32_t channels = 17; channels < 32; channels++) {
7914       DWConvMicrokernelTester()
7915         .cr(16)
7916         .kr(9)
7917         .channels(channels)
7918         .qmin(128)
7919         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7920     }
7921   }
7922 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,c_gt_16_with_qmax)7923   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_gt_16_with_qmax) {
7924     TEST_REQUIRES_ARM_NEON;
7925     for (uint32_t channels = 17; channels < 32; channels++) {
7926       DWConvMicrokernelTester()
7927         .cr(16)
7928         .kr(9)
7929         .channels(channels)
7930         .qmax(128)
7931         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7932     }
7933   }
7934 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,multipixel)7935   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, multipixel) {
7936     TEST_REQUIRES_ARM_NEON;
7937     for (size_t channels = 1; channels <= 80; channels += 15) {
7938       DWConvMicrokernelTester()
7939         .cr(16)
7940         .kr(9)
7941         .channels(channels)
7942         .width(3)
7943         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7944     }
7945   }
7946 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,multipixel_with_step)7947   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, multipixel_with_step) {
7948     TEST_REQUIRES_ARM_NEON;
7949     for (size_t channels = 1; channels <= 80; channels += 15) {
7950       for (size_t step = 2; step <= 9; step++) {
7951         DWConvMicrokernelTester()
7952           .cr(16)
7953           .kr(9)
7954           .channels(channels)
7955           .width(3)
7956           .step(step)
7957           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7958       }
7959     }
7960   }
7961 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,multipixel_with_output_stride)7962   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, multipixel_with_output_stride) {
7963     TEST_REQUIRES_ARM_NEON;
7964     for (size_t channels = 1; channels <= 80; channels += 15) {
7965       DWConvMicrokernelTester()
7966         .cr(16)
7967         .kr(9)
7968         .channels(16)
7969         .width(5)
7970         .output_stride(83)
7971         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7972     }
7973   }
7974 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,multipixel_with_qmin)7975   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, multipixel_with_qmin) {
7976     TEST_REQUIRES_ARM_NEON;
7977     for (size_t channels = 1; channels <= 80; channels += 15) {
7978       DWConvMicrokernelTester()
7979         .cr(16)
7980         .kr(9)
7981         .channels(channels)
7982         .width(3)
7983         .qmin(128)
7984         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7985     }
7986   }
7987 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,multipixel_with_qmax)7988   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, multipixel_with_qmax) {
7989     TEST_REQUIRES_ARM_NEON;
7990     for (size_t channels = 1; channels <= 80; channels += 15) {
7991       DWConvMicrokernelTester()
7992         .cr(16)
7993         .kr(9)
7994         .channels(channels)
7995         .width(3)
7996         .qmax(128)
7997         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
7998     }
7999   }
8000 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,input_offset)8001   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, input_offset) {
8002     TEST_REQUIRES_ARM_NEON;
8003     for (uint32_t channels = 32; channels < 256; channels += 48) {
8004       DWConvMicrokernelTester()
8005         .cr(16)
8006         .kr(9)
8007         .channels(channels)
8008         .input_offset(304)
8009         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
8010     }
8011   }
8012 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON,zero)8013   TEST(F32_DWCONV_MINMAX_UP16X9__NEON, zero) {
8014     TEST_REQUIRES_ARM_NEON;
8015     for (uint32_t mz = 0; mz < 9; mz++) {
8016       for (uint32_t channels = 32; channels < 256; channels += 48) {
8017         DWConvMicrokernelTester()
8018           .cr(16)
8019           .kr(9)
8020           .channels(channels)
8021           .input_offset(304)
8022           .zero_index(mz)
8023           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
8024       }
8025     }
8026   }
8027 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8028 
8029 
8030 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,c_eq_16)8031   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_eq_16) {
8032     TEST_REQUIRES_ARM_NEON;
8033     DWConvMicrokernelTester()
8034       .cr(16)
8035       .kr(9)
8036       .channels(16)
8037       .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8038   }
8039 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,c_div_16)8040   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_div_16) {
8041     TEST_REQUIRES_ARM_NEON;
8042     for (uint32_t channels = 32; channels < 256; channels += 48) {
8043       DWConvMicrokernelTester()
8044         .cr(16)
8045         .kr(9)
8046         .channels(channels)
8047         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8048     }
8049   }
8050 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,c_div_16_with_qmin)8051   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_div_16_with_qmin) {
8052     TEST_REQUIRES_ARM_NEON;
8053     for (uint32_t channels = 32; channels < 256; channels += 48) {
8054       DWConvMicrokernelTester()
8055         .cr(16)
8056         .kr(9)
8057         .channels(channels)
8058         .qmin(128)
8059         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8060     }
8061   }
8062 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,c_div_16_with_qmax)8063   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_div_16_with_qmax) {
8064     TEST_REQUIRES_ARM_NEON;
8065     for (uint32_t channels = 32; channels < 256; channels += 48) {
8066       DWConvMicrokernelTester()
8067         .cr(16)
8068         .kr(9)
8069         .channels(channels)
8070         .qmax(128)
8071         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8072     }
8073   }
8074 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,c_lt_16)8075   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_lt_16) {
8076     TEST_REQUIRES_ARM_NEON;
8077     for (uint32_t channels = 1; channels < 16; channels++) {
8078       DWConvMicrokernelTester()
8079         .cr(16)
8080         .kr(9)
8081         .channels(channels)
8082         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8083     }
8084   }
8085 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,c_gt_16)8086   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_gt_16) {
8087     TEST_REQUIRES_ARM_NEON;
8088     for (uint32_t channels = 17; channels < 32; channels++) {
8089       DWConvMicrokernelTester()
8090         .cr(16)
8091         .kr(9)
8092         .channels(channels)
8093         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8094     }
8095   }
8096 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,c_gt_16_with_qmin)8097   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_gt_16_with_qmin) {
8098     TEST_REQUIRES_ARM_NEON;
8099     for (uint32_t channels = 17; channels < 32; channels++) {
8100       DWConvMicrokernelTester()
8101         .cr(16)
8102         .kr(9)
8103         .channels(channels)
8104         .qmin(128)
8105         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8106     }
8107   }
8108 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,c_gt_16_with_qmax)8109   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_gt_16_with_qmax) {
8110     TEST_REQUIRES_ARM_NEON;
8111     for (uint32_t channels = 17; channels < 32; channels++) {
8112       DWConvMicrokernelTester()
8113         .cr(16)
8114         .kr(9)
8115         .channels(channels)
8116         .qmax(128)
8117         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8118     }
8119   }
8120 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,multipixel)8121   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, multipixel) {
8122     TEST_REQUIRES_ARM_NEON;
8123     for (size_t channels = 1; channels <= 80; channels += 15) {
8124       DWConvMicrokernelTester()
8125         .cr(16)
8126         .kr(9)
8127         .channels(channels)
8128         .width(3)
8129         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8130     }
8131   }
8132 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,multipixel_with_step)8133   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, multipixel_with_step) {
8134     TEST_REQUIRES_ARM_NEON;
8135     for (size_t channels = 1; channels <= 80; channels += 15) {
8136       for (size_t step = 2; step <= 9; step++) {
8137         DWConvMicrokernelTester()
8138           .cr(16)
8139           .kr(9)
8140           .channels(channels)
8141           .width(3)
8142           .step(step)
8143           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8144       }
8145     }
8146   }
8147 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,multipixel_with_output_stride)8148   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, multipixel_with_output_stride) {
8149     TEST_REQUIRES_ARM_NEON;
8150     for (size_t channels = 1; channels <= 80; channels += 15) {
8151       DWConvMicrokernelTester()
8152         .cr(16)
8153         .kr(9)
8154         .channels(16)
8155         .width(5)
8156         .output_stride(83)
8157         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8158     }
8159   }
8160 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,multipixel_with_qmin)8161   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, multipixel_with_qmin) {
8162     TEST_REQUIRES_ARM_NEON;
8163     for (size_t channels = 1; channels <= 80; channels += 15) {
8164       DWConvMicrokernelTester()
8165         .cr(16)
8166         .kr(9)
8167         .channels(channels)
8168         .width(3)
8169         .qmin(128)
8170         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8171     }
8172   }
8173 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,multipixel_with_qmax)8174   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, multipixel_with_qmax) {
8175     TEST_REQUIRES_ARM_NEON;
8176     for (size_t channels = 1; channels <= 80; channels += 15) {
8177       DWConvMicrokernelTester()
8178         .cr(16)
8179         .kr(9)
8180         .channels(channels)
8181         .width(3)
8182         .qmax(128)
8183         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8184     }
8185   }
8186 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,input_offset)8187   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, input_offset) {
8188     TEST_REQUIRES_ARM_NEON;
8189     for (uint32_t channels = 32; channels < 256; channels += 48) {
8190       DWConvMicrokernelTester()
8191         .cr(16)
8192         .kr(9)
8193         .channels(channels)
8194         .input_offset(304)
8195         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8196     }
8197   }
8198 
TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2,zero)8199   TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, zero) {
8200     TEST_REQUIRES_ARM_NEON;
8201     for (uint32_t mz = 0; mz < 9; mz++) {
8202       for (uint32_t channels = 32; channels < 256; channels += 48) {
8203         DWConvMicrokernelTester()
8204           .cr(16)
8205           .kr(9)
8206           .channels(channels)
8207           .input_offset(304)
8208           .zero_index(mz)
8209           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
8210       }
8211     }
8212   }
8213 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8214 
8215 
8216 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,c_eq_16)8217   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_eq_16) {
8218     TEST_REQUIRES_ARM_NEON_FMA;
8219     DWConvMicrokernelTester()
8220       .cr(16)
8221       .kr(9)
8222       .channels(16)
8223       .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8224   }
8225 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,c_div_16)8226   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_div_16) {
8227     TEST_REQUIRES_ARM_NEON_FMA;
8228     for (uint32_t channels = 32; channels < 256; channels += 48) {
8229       DWConvMicrokernelTester()
8230         .cr(16)
8231         .kr(9)
8232         .channels(channels)
8233         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8234     }
8235   }
8236 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,c_div_16_with_qmin)8237   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_div_16_with_qmin) {
8238     TEST_REQUIRES_ARM_NEON_FMA;
8239     for (uint32_t channels = 32; channels < 256; channels += 48) {
8240       DWConvMicrokernelTester()
8241         .cr(16)
8242         .kr(9)
8243         .channels(channels)
8244         .qmin(128)
8245         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8246     }
8247   }
8248 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,c_div_16_with_qmax)8249   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_div_16_with_qmax) {
8250     TEST_REQUIRES_ARM_NEON_FMA;
8251     for (uint32_t channels = 32; channels < 256; channels += 48) {
8252       DWConvMicrokernelTester()
8253         .cr(16)
8254         .kr(9)
8255         .channels(channels)
8256         .qmax(128)
8257         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8258     }
8259   }
8260 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,c_lt_16)8261   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_lt_16) {
8262     TEST_REQUIRES_ARM_NEON_FMA;
8263     for (uint32_t channels = 1; channels < 16; channels++) {
8264       DWConvMicrokernelTester()
8265         .cr(16)
8266         .kr(9)
8267         .channels(channels)
8268         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8269     }
8270   }
8271 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,c_gt_16)8272   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_gt_16) {
8273     TEST_REQUIRES_ARM_NEON_FMA;
8274     for (uint32_t channels = 17; channels < 32; channels++) {
8275       DWConvMicrokernelTester()
8276         .cr(16)
8277         .kr(9)
8278         .channels(channels)
8279         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8280     }
8281   }
8282 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,c_gt_16_with_qmin)8283   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_gt_16_with_qmin) {
8284     TEST_REQUIRES_ARM_NEON_FMA;
8285     for (uint32_t channels = 17; channels < 32; channels++) {
8286       DWConvMicrokernelTester()
8287         .cr(16)
8288         .kr(9)
8289         .channels(channels)
8290         .qmin(128)
8291         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8292     }
8293   }
8294 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,c_gt_16_with_qmax)8295   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_gt_16_with_qmax) {
8296     TEST_REQUIRES_ARM_NEON_FMA;
8297     for (uint32_t channels = 17; channels < 32; channels++) {
8298       DWConvMicrokernelTester()
8299         .cr(16)
8300         .kr(9)
8301         .channels(channels)
8302         .qmax(128)
8303         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8304     }
8305   }
8306 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,multipixel)8307   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, multipixel) {
8308     TEST_REQUIRES_ARM_NEON_FMA;
8309     for (size_t channels = 1; channels <= 80; channels += 15) {
8310       DWConvMicrokernelTester()
8311         .cr(16)
8312         .kr(9)
8313         .channels(channels)
8314         .width(3)
8315         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8316     }
8317   }
8318 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,multipixel_with_step)8319   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, multipixel_with_step) {
8320     TEST_REQUIRES_ARM_NEON_FMA;
8321     for (size_t channels = 1; channels <= 80; channels += 15) {
8322       for (size_t step = 2; step <= 9; step++) {
8323         DWConvMicrokernelTester()
8324           .cr(16)
8325           .kr(9)
8326           .channels(channels)
8327           .width(3)
8328           .step(step)
8329           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8330       }
8331     }
8332   }
8333 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,multipixel_with_output_stride)8334   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, multipixel_with_output_stride) {
8335     TEST_REQUIRES_ARM_NEON_FMA;
8336     for (size_t channels = 1; channels <= 80; channels += 15) {
8337       DWConvMicrokernelTester()
8338         .cr(16)
8339         .kr(9)
8340         .channels(16)
8341         .width(5)
8342         .output_stride(83)
8343         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8344     }
8345   }
8346 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,multipixel_with_qmin)8347   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, multipixel_with_qmin) {
8348     TEST_REQUIRES_ARM_NEON_FMA;
8349     for (size_t channels = 1; channels <= 80; channels += 15) {
8350       DWConvMicrokernelTester()
8351         .cr(16)
8352         .kr(9)
8353         .channels(channels)
8354         .width(3)
8355         .qmin(128)
8356         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8357     }
8358   }
8359 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,multipixel_with_qmax)8360   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, multipixel_with_qmax) {
8361     TEST_REQUIRES_ARM_NEON_FMA;
8362     for (size_t channels = 1; channels <= 80; channels += 15) {
8363       DWConvMicrokernelTester()
8364         .cr(16)
8365         .kr(9)
8366         .channels(channels)
8367         .width(3)
8368         .qmax(128)
8369         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8370     }
8371   }
8372 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,input_offset)8373   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, input_offset) {
8374     TEST_REQUIRES_ARM_NEON_FMA;
8375     for (uint32_t channels = 32; channels < 256; channels += 48) {
8376       DWConvMicrokernelTester()
8377         .cr(16)
8378         .kr(9)
8379         .channels(channels)
8380         .input_offset(304)
8381         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8382     }
8383   }
8384 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA,zero)8385   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, zero) {
8386     TEST_REQUIRES_ARM_NEON_FMA;
8387     for (uint32_t mz = 0; mz < 9; mz++) {
8388       for (uint32_t channels = 32; channels < 256; channels += 48) {
8389         DWConvMicrokernelTester()
8390           .cr(16)
8391           .kr(9)
8392           .channels(channels)
8393           .input_offset(304)
8394           .zero_index(mz)
8395           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
8396       }
8397     }
8398   }
8399 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8400 
8401 
8402 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,c_eq_16)8403   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_eq_16) {
8404     TEST_REQUIRES_ARM_NEON_FMA;
8405     DWConvMicrokernelTester()
8406       .cr(16)
8407       .kr(9)
8408       .channels(16)
8409       .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8410   }
8411 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,c_div_16)8412   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_div_16) {
8413     TEST_REQUIRES_ARM_NEON_FMA;
8414     for (uint32_t channels = 32; channels < 256; channels += 48) {
8415       DWConvMicrokernelTester()
8416         .cr(16)
8417         .kr(9)
8418         .channels(channels)
8419         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8420     }
8421   }
8422 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,c_div_16_with_qmin)8423   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_div_16_with_qmin) {
8424     TEST_REQUIRES_ARM_NEON_FMA;
8425     for (uint32_t channels = 32; channels < 256; channels += 48) {
8426       DWConvMicrokernelTester()
8427         .cr(16)
8428         .kr(9)
8429         .channels(channels)
8430         .qmin(128)
8431         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8432     }
8433   }
8434 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,c_div_16_with_qmax)8435   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_div_16_with_qmax) {
8436     TEST_REQUIRES_ARM_NEON_FMA;
8437     for (uint32_t channels = 32; channels < 256; channels += 48) {
8438       DWConvMicrokernelTester()
8439         .cr(16)
8440         .kr(9)
8441         .channels(channels)
8442         .qmax(128)
8443         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8444     }
8445   }
8446 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,c_lt_16)8447   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_lt_16) {
8448     TEST_REQUIRES_ARM_NEON_FMA;
8449     for (uint32_t channels = 1; channels < 16; channels++) {
8450       DWConvMicrokernelTester()
8451         .cr(16)
8452         .kr(9)
8453         .channels(channels)
8454         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8455     }
8456   }
8457 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,c_gt_16)8458   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_gt_16) {
8459     TEST_REQUIRES_ARM_NEON_FMA;
8460     for (uint32_t channels = 17; channels < 32; channels++) {
8461       DWConvMicrokernelTester()
8462         .cr(16)
8463         .kr(9)
8464         .channels(channels)
8465         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8466     }
8467   }
8468 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,c_gt_16_with_qmin)8469   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_gt_16_with_qmin) {
8470     TEST_REQUIRES_ARM_NEON_FMA;
8471     for (uint32_t channels = 17; channels < 32; channels++) {
8472       DWConvMicrokernelTester()
8473         .cr(16)
8474         .kr(9)
8475         .channels(channels)
8476         .qmin(128)
8477         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8478     }
8479   }
8480 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,c_gt_16_with_qmax)8481   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_gt_16_with_qmax) {
8482     TEST_REQUIRES_ARM_NEON_FMA;
8483     for (uint32_t channels = 17; channels < 32; channels++) {
8484       DWConvMicrokernelTester()
8485         .cr(16)
8486         .kr(9)
8487         .channels(channels)
8488         .qmax(128)
8489         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8490     }
8491   }
8492 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,multipixel)8493   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, multipixel) {
8494     TEST_REQUIRES_ARM_NEON_FMA;
8495     for (size_t channels = 1; channels <= 80; channels += 15) {
8496       DWConvMicrokernelTester()
8497         .cr(16)
8498         .kr(9)
8499         .channels(channels)
8500         .width(3)
8501         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8502     }
8503   }
8504 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,multipixel_with_step)8505   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, multipixel_with_step) {
8506     TEST_REQUIRES_ARM_NEON_FMA;
8507     for (size_t channels = 1; channels <= 80; channels += 15) {
8508       for (size_t step = 2; step <= 9; step++) {
8509         DWConvMicrokernelTester()
8510           .cr(16)
8511           .kr(9)
8512           .channels(channels)
8513           .width(3)
8514           .step(step)
8515           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8516       }
8517     }
8518   }
8519 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,multipixel_with_output_stride)8520   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, multipixel_with_output_stride) {
8521     TEST_REQUIRES_ARM_NEON_FMA;
8522     for (size_t channels = 1; channels <= 80; channels += 15) {
8523       DWConvMicrokernelTester()
8524         .cr(16)
8525         .kr(9)
8526         .channels(16)
8527         .width(5)
8528         .output_stride(83)
8529         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8530     }
8531   }
8532 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,multipixel_with_qmin)8533   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, multipixel_with_qmin) {
8534     TEST_REQUIRES_ARM_NEON_FMA;
8535     for (size_t channels = 1; channels <= 80; channels += 15) {
8536       DWConvMicrokernelTester()
8537         .cr(16)
8538         .kr(9)
8539         .channels(channels)
8540         .width(3)
8541         .qmin(128)
8542         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8543     }
8544   }
8545 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,multipixel_with_qmax)8546   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, multipixel_with_qmax) {
8547     TEST_REQUIRES_ARM_NEON_FMA;
8548     for (size_t channels = 1; channels <= 80; channels += 15) {
8549       DWConvMicrokernelTester()
8550         .cr(16)
8551         .kr(9)
8552         .channels(channels)
8553         .width(3)
8554         .qmax(128)
8555         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8556     }
8557   }
8558 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,input_offset)8559   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, input_offset) {
8560     TEST_REQUIRES_ARM_NEON_FMA;
8561     for (uint32_t channels = 32; channels < 256; channels += 48) {
8562       DWConvMicrokernelTester()
8563         .cr(16)
8564         .kr(9)
8565         .channels(channels)
8566         .input_offset(304)
8567         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8568     }
8569   }
8570 
TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2,zero)8571   TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, zero) {
8572     TEST_REQUIRES_ARM_NEON_FMA;
8573     for (uint32_t mz = 0; mz < 9; mz++) {
8574       for (uint32_t channels = 32; channels < 256; channels += 48) {
8575         DWConvMicrokernelTester()
8576           .cr(16)
8577           .kr(9)
8578           .channels(channels)
8579           .input_offset(304)
8580           .zero_index(mz)
8581           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
8582       }
8583     }
8584   }
8585 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8586 
8587 
8588 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,c_eq_16)8589   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_eq_16) {
8590     TEST_REQUIRES_ARM_NEON;
8591     DWConvMicrokernelTester()
8592       .cr(16)
8593       .kr(25)
8594       .channels(16)
8595       .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8596   }
8597 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,c_div_16)8598   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_div_16) {
8599     TEST_REQUIRES_ARM_NEON;
8600     for (uint32_t channels = 32; channels < 256; channels += 48) {
8601       DWConvMicrokernelTester()
8602         .cr(16)
8603         .kr(25)
8604         .channels(channels)
8605         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8606     }
8607   }
8608 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,c_div_16_with_qmin)8609   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_div_16_with_qmin) {
8610     TEST_REQUIRES_ARM_NEON;
8611     for (uint32_t channels = 32; channels < 256; channels += 48) {
8612       DWConvMicrokernelTester()
8613         .cr(16)
8614         .kr(25)
8615         .channels(channels)
8616         .qmin(128)
8617         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8618     }
8619   }
8620 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,c_div_16_with_qmax)8621   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_div_16_with_qmax) {
8622     TEST_REQUIRES_ARM_NEON;
8623     for (uint32_t channels = 32; channels < 256; channels += 48) {
8624       DWConvMicrokernelTester()
8625         .cr(16)
8626         .kr(25)
8627         .channels(channels)
8628         .qmax(128)
8629         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8630     }
8631   }
8632 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,c_lt_16)8633   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_lt_16) {
8634     TEST_REQUIRES_ARM_NEON;
8635     for (uint32_t channels = 1; channels < 16; channels++) {
8636       DWConvMicrokernelTester()
8637         .cr(16)
8638         .kr(25)
8639         .channels(channels)
8640         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8641     }
8642   }
8643 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,c_gt_16)8644   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_gt_16) {
8645     TEST_REQUIRES_ARM_NEON;
8646     for (uint32_t channels = 17; channels < 32; channels++) {
8647       DWConvMicrokernelTester()
8648         .cr(16)
8649         .kr(25)
8650         .channels(channels)
8651         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8652     }
8653   }
8654 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,c_gt_16_with_qmin)8655   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_gt_16_with_qmin) {
8656     TEST_REQUIRES_ARM_NEON;
8657     for (uint32_t channels = 17; channels < 32; channels++) {
8658       DWConvMicrokernelTester()
8659         .cr(16)
8660         .kr(25)
8661         .channels(channels)
8662         .qmin(128)
8663         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8664     }
8665   }
8666 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,c_gt_16_with_qmax)8667   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_gt_16_with_qmax) {
8668     TEST_REQUIRES_ARM_NEON;
8669     for (uint32_t channels = 17; channels < 32; channels++) {
8670       DWConvMicrokernelTester()
8671         .cr(16)
8672         .kr(25)
8673         .channels(channels)
8674         .qmax(128)
8675         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8676     }
8677   }
8678 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,multipixel)8679   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, multipixel) {
8680     TEST_REQUIRES_ARM_NEON;
8681     for (size_t channels = 1; channels <= 80; channels += 15) {
8682       DWConvMicrokernelTester()
8683         .cr(16)
8684         .kr(25)
8685         .channels(channels)
8686         .width(3)
8687         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8688     }
8689   }
8690 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,multipixel_with_step)8691   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, multipixel_with_step) {
8692     TEST_REQUIRES_ARM_NEON;
8693     for (size_t channels = 1; channels <= 80; channels += 15) {
8694       for (size_t step = 2; step <= 25; step++) {
8695         DWConvMicrokernelTester()
8696           .cr(16)
8697           .kr(25)
8698           .channels(channels)
8699           .width(3)
8700           .step(step)
8701           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8702       }
8703     }
8704   }
8705 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,multipixel_with_output_stride)8706   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, multipixel_with_output_stride) {
8707     TEST_REQUIRES_ARM_NEON;
8708     for (size_t channels = 1; channels <= 80; channels += 15) {
8709       DWConvMicrokernelTester()
8710         .cr(16)
8711         .kr(25)
8712         .channels(16)
8713         .width(5)
8714         .output_stride(83)
8715         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8716     }
8717   }
8718 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,multipixel_with_qmin)8719   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, multipixel_with_qmin) {
8720     TEST_REQUIRES_ARM_NEON;
8721     for (size_t channels = 1; channels <= 80; channels += 15) {
8722       DWConvMicrokernelTester()
8723         .cr(16)
8724         .kr(25)
8725         .channels(channels)
8726         .width(3)
8727         .qmin(128)
8728         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8729     }
8730   }
8731 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,multipixel_with_qmax)8732   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, multipixel_with_qmax) {
8733     TEST_REQUIRES_ARM_NEON;
8734     for (size_t channels = 1; channels <= 80; channels += 15) {
8735       DWConvMicrokernelTester()
8736         .cr(16)
8737         .kr(25)
8738         .channels(channels)
8739         .width(3)
8740         .qmax(128)
8741         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8742     }
8743   }
8744 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,input_offset)8745   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, input_offset) {
8746     TEST_REQUIRES_ARM_NEON;
8747     for (uint32_t channels = 32; channels < 256; channels += 48) {
8748       DWConvMicrokernelTester()
8749         .cr(16)
8750         .kr(25)
8751         .channels(channels)
8752         .input_offset(304)
8753         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8754     }
8755   }
8756 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON,zero)8757   TEST(F32_DWCONV_MINMAX_UP16X25__NEON, zero) {
8758     TEST_REQUIRES_ARM_NEON;
8759     for (uint32_t mz = 0; mz < 25; mz++) {
8760       for (uint32_t channels = 32; channels < 256; channels += 48) {
8761         DWConvMicrokernelTester()
8762           .cr(16)
8763           .kr(25)
8764           .channels(channels)
8765           .input_offset(304)
8766           .zero_index(mz)
8767           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
8768       }
8769     }
8770   }
8771 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8772 
8773 
8774 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,c_eq_16)8775   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_eq_16) {
8776     TEST_REQUIRES_ARM_NEON;
8777     DWConvMicrokernelTester()
8778       .cr(16)
8779       .kr(25)
8780       .channels(16)
8781       .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8782   }
8783 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,c_div_16)8784   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_div_16) {
8785     TEST_REQUIRES_ARM_NEON;
8786     for (uint32_t channels = 32; channels < 256; channels += 48) {
8787       DWConvMicrokernelTester()
8788         .cr(16)
8789         .kr(25)
8790         .channels(channels)
8791         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8792     }
8793   }
8794 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,c_div_16_with_qmin)8795   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_div_16_with_qmin) {
8796     TEST_REQUIRES_ARM_NEON;
8797     for (uint32_t channels = 32; channels < 256; channels += 48) {
8798       DWConvMicrokernelTester()
8799         .cr(16)
8800         .kr(25)
8801         .channels(channels)
8802         .qmin(128)
8803         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8804     }
8805   }
8806 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,c_div_16_with_qmax)8807   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_div_16_with_qmax) {
8808     TEST_REQUIRES_ARM_NEON;
8809     for (uint32_t channels = 32; channels < 256; channels += 48) {
8810       DWConvMicrokernelTester()
8811         .cr(16)
8812         .kr(25)
8813         .channels(channels)
8814         .qmax(128)
8815         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8816     }
8817   }
8818 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,c_lt_16)8819   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_lt_16) {
8820     TEST_REQUIRES_ARM_NEON;
8821     for (uint32_t channels = 1; channels < 16; channels++) {
8822       DWConvMicrokernelTester()
8823         .cr(16)
8824         .kr(25)
8825         .channels(channels)
8826         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8827     }
8828   }
8829 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,c_gt_16)8830   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_gt_16) {
8831     TEST_REQUIRES_ARM_NEON;
8832     for (uint32_t channels = 17; channels < 32; channels++) {
8833       DWConvMicrokernelTester()
8834         .cr(16)
8835         .kr(25)
8836         .channels(channels)
8837         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8838     }
8839   }
8840 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,c_gt_16_with_qmin)8841   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_gt_16_with_qmin) {
8842     TEST_REQUIRES_ARM_NEON;
8843     for (uint32_t channels = 17; channels < 32; channels++) {
8844       DWConvMicrokernelTester()
8845         .cr(16)
8846         .kr(25)
8847         .channels(channels)
8848         .qmin(128)
8849         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8850     }
8851   }
8852 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,c_gt_16_with_qmax)8853   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_gt_16_with_qmax) {
8854     TEST_REQUIRES_ARM_NEON;
8855     for (uint32_t channels = 17; channels < 32; channels++) {
8856       DWConvMicrokernelTester()
8857         .cr(16)
8858         .kr(25)
8859         .channels(channels)
8860         .qmax(128)
8861         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8862     }
8863   }
8864 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,multipixel)8865   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, multipixel) {
8866     TEST_REQUIRES_ARM_NEON;
8867     for (size_t channels = 1; channels <= 80; channels += 15) {
8868       DWConvMicrokernelTester()
8869         .cr(16)
8870         .kr(25)
8871         .channels(channels)
8872         .width(3)
8873         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8874     }
8875   }
8876 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,multipixel_with_step)8877   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, multipixel_with_step) {
8878     TEST_REQUIRES_ARM_NEON;
8879     for (size_t channels = 1; channels <= 80; channels += 15) {
8880       for (size_t step = 2; step <= 25; step++) {
8881         DWConvMicrokernelTester()
8882           .cr(16)
8883           .kr(25)
8884           .channels(channels)
8885           .width(3)
8886           .step(step)
8887           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8888       }
8889     }
8890   }
8891 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,multipixel_with_output_stride)8892   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, multipixel_with_output_stride) {
8893     TEST_REQUIRES_ARM_NEON;
8894     for (size_t channels = 1; channels <= 80; channels += 15) {
8895       DWConvMicrokernelTester()
8896         .cr(16)
8897         .kr(25)
8898         .channels(16)
8899         .width(5)
8900         .output_stride(83)
8901         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8902     }
8903   }
8904 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,multipixel_with_qmin)8905   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, multipixel_with_qmin) {
8906     TEST_REQUIRES_ARM_NEON;
8907     for (size_t channels = 1; channels <= 80; channels += 15) {
8908       DWConvMicrokernelTester()
8909         .cr(16)
8910         .kr(25)
8911         .channels(channels)
8912         .width(3)
8913         .qmin(128)
8914         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8915     }
8916   }
8917 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,multipixel_with_qmax)8918   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, multipixel_with_qmax) {
8919     TEST_REQUIRES_ARM_NEON;
8920     for (size_t channels = 1; channels <= 80; channels += 15) {
8921       DWConvMicrokernelTester()
8922         .cr(16)
8923         .kr(25)
8924         .channels(channels)
8925         .width(3)
8926         .qmax(128)
8927         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8928     }
8929   }
8930 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,input_offset)8931   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, input_offset) {
8932     TEST_REQUIRES_ARM_NEON;
8933     for (uint32_t channels = 32; channels < 256; channels += 48) {
8934       DWConvMicrokernelTester()
8935         .cr(16)
8936         .kr(25)
8937         .channels(channels)
8938         .input_offset(304)
8939         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8940     }
8941   }
8942 
TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2,zero)8943   TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, zero) {
8944     TEST_REQUIRES_ARM_NEON;
8945     for (uint32_t mz = 0; mz < 25; mz++) {
8946       for (uint32_t channels = 32; channels < 256; channels += 48) {
8947         DWConvMicrokernelTester()
8948           .cr(16)
8949           .kr(25)
8950           .channels(channels)
8951           .input_offset(304)
8952           .zero_index(mz)
8953           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
8954       }
8955     }
8956   }
8957 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8958 
8959 
8960 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,c_eq_16)8961   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_eq_16) {
8962     TEST_REQUIRES_ARM_NEON_FMA;
8963     DWConvMicrokernelTester()
8964       .cr(16)
8965       .kr(25)
8966       .channels(16)
8967       .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
8968   }
8969 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,c_div_16)8970   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_div_16) {
8971     TEST_REQUIRES_ARM_NEON_FMA;
8972     for (uint32_t channels = 32; channels < 256; channels += 48) {
8973       DWConvMicrokernelTester()
8974         .cr(16)
8975         .kr(25)
8976         .channels(channels)
8977         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
8978     }
8979   }
8980 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,c_div_16_with_qmin)8981   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_div_16_with_qmin) {
8982     TEST_REQUIRES_ARM_NEON_FMA;
8983     for (uint32_t channels = 32; channels < 256; channels += 48) {
8984       DWConvMicrokernelTester()
8985         .cr(16)
8986         .kr(25)
8987         .channels(channels)
8988         .qmin(128)
8989         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
8990     }
8991   }
8992 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,c_div_16_with_qmax)8993   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_div_16_with_qmax) {
8994     TEST_REQUIRES_ARM_NEON_FMA;
8995     for (uint32_t channels = 32; channels < 256; channels += 48) {
8996       DWConvMicrokernelTester()
8997         .cr(16)
8998         .kr(25)
8999         .channels(channels)
9000         .qmax(128)
9001         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
9002     }
9003   }
9004 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,c_lt_16)9005   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_lt_16) {
9006     TEST_REQUIRES_ARM_NEON_FMA;
9007     for (uint32_t channels = 1; channels < 16; channels++) {
9008       DWConvMicrokernelTester()
9009         .cr(16)
9010         .kr(25)
9011         .channels(channels)
9012         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
9013     }
9014   }
9015 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,c_gt_16)9016   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_gt_16) {
9017     TEST_REQUIRES_ARM_NEON_FMA;
9018     for (uint32_t channels = 17; channels < 32; channels++) {
9019       DWConvMicrokernelTester()
9020         .cr(16)
9021         .kr(25)
9022         .channels(channels)
9023         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
9024     }
9025   }
9026 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,c_gt_16_with_qmin)9027   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_gt_16_with_qmin) {
9028     TEST_REQUIRES_ARM_NEON_FMA;
9029     for (uint32_t channels = 17; channels < 32; channels++) {
9030       DWConvMicrokernelTester()
9031         .cr(16)
9032         .kr(25)
9033         .channels(channels)
9034         .qmin(128)
9035         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
9036     }
9037   }
9038 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,c_gt_16_with_qmax)9039   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_gt_16_with_qmax) {
9040     TEST_REQUIRES_ARM_NEON_FMA;
9041     for (uint32_t channels = 17; channels < 32; channels++) {
9042       DWConvMicrokernelTester()
9043         .cr(16)
9044         .kr(25)
9045         .channels(channels)
9046         .qmax(128)
9047         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
9048     }
9049   }
9050 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,multipixel)9051   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, multipixel) {
9052     TEST_REQUIRES_ARM_NEON_FMA;
9053     for (size_t channels = 1; channels <= 80; channels += 15) {
9054       DWConvMicrokernelTester()
9055         .cr(16)
9056         .kr(25)
9057         .channels(channels)
9058         .width(3)
9059         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
9060     }
9061   }
9062 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,multipixel_with_step)9063   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, multipixel_with_step) {
9064     TEST_REQUIRES_ARM_NEON_FMA;
9065     for (size_t channels = 1; channels <= 80; channels += 15) {
9066       for (size_t step = 2; step <= 25; step++) {
9067         DWConvMicrokernelTester()
9068           .cr(16)
9069           .kr(25)
9070           .channels(channels)
9071           .width(3)
9072           .step(step)
9073           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
9074       }
9075     }
9076   }
9077 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,multipixel_with_output_stride)9078   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, multipixel_with_output_stride) {
9079     TEST_REQUIRES_ARM_NEON_FMA;
9080     for (size_t channels = 1; channels <= 80; channels += 15) {
9081       DWConvMicrokernelTester()
9082         .cr(16)
9083         .kr(25)
9084         .channels(16)
9085         .width(5)
9086         .output_stride(83)
9087         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
9088     }
9089   }
9090 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,multipixel_with_qmin)9091   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, multipixel_with_qmin) {
9092     TEST_REQUIRES_ARM_NEON_FMA;
9093     for (size_t channels = 1; channels <= 80; channels += 15) {
9094       DWConvMicrokernelTester()
9095         .cr(16)
9096         .kr(25)
9097         .channels(channels)
9098         .width(3)
9099         .qmin(128)
9100         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
9101     }
9102   }
9103 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,multipixel_with_qmax)9104   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, multipixel_with_qmax) {
9105     TEST_REQUIRES_ARM_NEON_FMA;
9106     for (size_t channels = 1; channels <= 80; channels += 15) {
9107       DWConvMicrokernelTester()
9108         .cr(16)
9109         .kr(25)
9110         .channels(channels)
9111         .width(3)
9112         .qmax(128)
9113         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
9114     }
9115   }
9116 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,input_offset)9117   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, input_offset) {
9118     TEST_REQUIRES_ARM_NEON_FMA;
9119     for (uint32_t channels = 32; channels < 256; channels += 48) {
9120       DWConvMicrokernelTester()
9121         .cr(16)
9122         .kr(25)
9123         .channels(channels)
9124         .input_offset(304)
9125         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
9126     }
9127   }
9128 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA,zero)9129   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, zero) {
9130     TEST_REQUIRES_ARM_NEON_FMA;
9131     for (uint32_t mz = 0; mz < 25; mz++) {
9132       for (uint32_t channels = 32; channels < 256; channels += 48) {
9133         DWConvMicrokernelTester()
9134           .cr(16)
9135           .kr(25)
9136           .channels(channels)
9137           .input_offset(304)
9138           .zero_index(mz)
9139           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
9140       }
9141     }
9142   }
9143 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
9144 
9145 
9146 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,c_eq_16)9147   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_eq_16) {
9148     TEST_REQUIRES_ARM_NEON_FMA;
9149     DWConvMicrokernelTester()
9150       .cr(16)
9151       .kr(25)
9152       .channels(16)
9153       .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9154   }
9155 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,c_div_16)9156   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_div_16) {
9157     TEST_REQUIRES_ARM_NEON_FMA;
9158     for (uint32_t channels = 32; channels < 256; channels += 48) {
9159       DWConvMicrokernelTester()
9160         .cr(16)
9161         .kr(25)
9162         .channels(channels)
9163         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9164     }
9165   }
9166 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,c_div_16_with_qmin)9167   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_div_16_with_qmin) {
9168     TEST_REQUIRES_ARM_NEON_FMA;
9169     for (uint32_t channels = 32; channels < 256; channels += 48) {
9170       DWConvMicrokernelTester()
9171         .cr(16)
9172         .kr(25)
9173         .channels(channels)
9174         .qmin(128)
9175         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9176     }
9177   }
9178 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,c_div_16_with_qmax)9179   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_div_16_with_qmax) {
9180     TEST_REQUIRES_ARM_NEON_FMA;
9181     for (uint32_t channels = 32; channels < 256; channels += 48) {
9182       DWConvMicrokernelTester()
9183         .cr(16)
9184         .kr(25)
9185         .channels(channels)
9186         .qmax(128)
9187         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9188     }
9189   }
9190 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,c_lt_16)9191   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_lt_16) {
9192     TEST_REQUIRES_ARM_NEON_FMA;
9193     for (uint32_t channels = 1; channels < 16; channels++) {
9194       DWConvMicrokernelTester()
9195         .cr(16)
9196         .kr(25)
9197         .channels(channels)
9198         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9199     }
9200   }
9201 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,c_gt_16)9202   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_gt_16) {
9203     TEST_REQUIRES_ARM_NEON_FMA;
9204     for (uint32_t channels = 17; channels < 32; channels++) {
9205       DWConvMicrokernelTester()
9206         .cr(16)
9207         .kr(25)
9208         .channels(channels)
9209         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9210     }
9211   }
9212 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,c_gt_16_with_qmin)9213   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_gt_16_with_qmin) {
9214     TEST_REQUIRES_ARM_NEON_FMA;
9215     for (uint32_t channels = 17; channels < 32; channels++) {
9216       DWConvMicrokernelTester()
9217         .cr(16)
9218         .kr(25)
9219         .channels(channels)
9220         .qmin(128)
9221         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9222     }
9223   }
9224 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,c_gt_16_with_qmax)9225   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_gt_16_with_qmax) {
9226     TEST_REQUIRES_ARM_NEON_FMA;
9227     for (uint32_t channels = 17; channels < 32; channels++) {
9228       DWConvMicrokernelTester()
9229         .cr(16)
9230         .kr(25)
9231         .channels(channels)
9232         .qmax(128)
9233         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9234     }
9235   }
9236 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,multipixel)9237   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, multipixel) {
9238     TEST_REQUIRES_ARM_NEON_FMA;
9239     for (size_t channels = 1; channels <= 80; channels += 15) {
9240       DWConvMicrokernelTester()
9241         .cr(16)
9242         .kr(25)
9243         .channels(channels)
9244         .width(3)
9245         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9246     }
9247   }
9248 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,multipixel_with_step)9249   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, multipixel_with_step) {
9250     TEST_REQUIRES_ARM_NEON_FMA;
9251     for (size_t channels = 1; channels <= 80; channels += 15) {
9252       for (size_t step = 2; step <= 25; step++) {
9253         DWConvMicrokernelTester()
9254           .cr(16)
9255           .kr(25)
9256           .channels(channels)
9257           .width(3)
9258           .step(step)
9259           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9260       }
9261     }
9262   }
9263 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,multipixel_with_output_stride)9264   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, multipixel_with_output_stride) {
9265     TEST_REQUIRES_ARM_NEON_FMA;
9266     for (size_t channels = 1; channels <= 80; channels += 15) {
9267       DWConvMicrokernelTester()
9268         .cr(16)
9269         .kr(25)
9270         .channels(16)
9271         .width(5)
9272         .output_stride(83)
9273         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9274     }
9275   }
9276 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,multipixel_with_qmin)9277   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, multipixel_with_qmin) {
9278     TEST_REQUIRES_ARM_NEON_FMA;
9279     for (size_t channels = 1; channels <= 80; channels += 15) {
9280       DWConvMicrokernelTester()
9281         .cr(16)
9282         .kr(25)
9283         .channels(channels)
9284         .width(3)
9285         .qmin(128)
9286         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9287     }
9288   }
9289 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,multipixel_with_qmax)9290   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, multipixel_with_qmax) {
9291     TEST_REQUIRES_ARM_NEON_FMA;
9292     for (size_t channels = 1; channels <= 80; channels += 15) {
9293       DWConvMicrokernelTester()
9294         .cr(16)
9295         .kr(25)
9296         .channels(channels)
9297         .width(3)
9298         .qmax(128)
9299         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9300     }
9301   }
9302 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,input_offset)9303   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, input_offset) {
9304     TEST_REQUIRES_ARM_NEON_FMA;
9305     for (uint32_t channels = 32; channels < 256; channels += 48) {
9306       DWConvMicrokernelTester()
9307         .cr(16)
9308         .kr(25)
9309         .channels(channels)
9310         .input_offset(304)
9311         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9312     }
9313   }
9314 
TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2,zero)9315   TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, zero) {
9316     TEST_REQUIRES_ARM_NEON_FMA;
9317     for (uint32_t mz = 0; mz < 25; mz++) {
9318       for (uint32_t channels = 32; channels < 256; channels += 48) {
9319         DWConvMicrokernelTester()
9320           .cr(16)
9321           .kr(25)
9322           .channels(channels)
9323           .input_offset(304)
9324           .zero_index(mz)
9325           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
9326       }
9327     }
9328   }
9329 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
9330 
9331 
9332 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,c_eq_4)9333   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_eq_4) {
9334     TEST_REQUIRES_X86_SSE;
9335     DWConvMicrokernelTester()
9336       .cr(4)
9337       .kr(3)
9338       .channels(4)
9339       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9340   }
9341 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,c_div_4)9342   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_div_4) {
9343     TEST_REQUIRES_X86_SSE;
9344     for (uint32_t channels = 8; channels < 64; channels += 12) {
9345       DWConvMicrokernelTester()
9346         .cr(4)
9347         .kr(3)
9348         .channels(channels)
9349         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9350     }
9351   }
9352 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,c_div_4_with_qmin)9353   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_div_4_with_qmin) {
9354     TEST_REQUIRES_X86_SSE;
9355     for (uint32_t channels = 8; channels < 64; channels += 12) {
9356       DWConvMicrokernelTester()
9357         .cr(4)
9358         .kr(3)
9359         .channels(channels)
9360         .qmin(128)
9361         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9362     }
9363   }
9364 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,c_div_4_with_qmax)9365   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_div_4_with_qmax) {
9366     TEST_REQUIRES_X86_SSE;
9367     for (uint32_t channels = 8; channels < 64; channels += 12) {
9368       DWConvMicrokernelTester()
9369         .cr(4)
9370         .kr(3)
9371         .channels(channels)
9372         .qmax(128)
9373         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9374     }
9375   }
9376 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,c_lt_4)9377   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_lt_4) {
9378     TEST_REQUIRES_X86_SSE;
9379     for (uint32_t channels = 1; channels < 4; channels++) {
9380       DWConvMicrokernelTester()
9381         .cr(4)
9382         .kr(3)
9383         .channels(channels)
9384         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9385     }
9386   }
9387 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,c_gt_4)9388   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_gt_4) {
9389     TEST_REQUIRES_X86_SSE;
9390     for (uint32_t channels = 5; channels < 8; channels++) {
9391       DWConvMicrokernelTester()
9392         .cr(4)
9393         .kr(3)
9394         .channels(channels)
9395         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9396     }
9397   }
9398 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,c_gt_4_with_qmin)9399   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_gt_4_with_qmin) {
9400     TEST_REQUIRES_X86_SSE;
9401     for (uint32_t channels = 5; channels < 8; channels++) {
9402       DWConvMicrokernelTester()
9403         .cr(4)
9404         .kr(3)
9405         .channels(channels)
9406         .qmin(128)
9407         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9408     }
9409   }
9410 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,c_gt_4_with_qmax)9411   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_gt_4_with_qmax) {
9412     TEST_REQUIRES_X86_SSE;
9413     for (uint32_t channels = 5; channels < 8; channels++) {
9414       DWConvMicrokernelTester()
9415         .cr(4)
9416         .kr(3)
9417         .channels(channels)
9418         .qmax(128)
9419         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9420     }
9421   }
9422 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,multipixel)9423   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, multipixel) {
9424     TEST_REQUIRES_X86_SSE;
9425     for (size_t channels = 1; channels <= 20; channels += 3) {
9426       DWConvMicrokernelTester()
9427         .cr(4)
9428         .kr(3)
9429         .channels(channels)
9430         .width(3)
9431         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9432     }
9433   }
9434 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,multipixel_with_step)9435   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, multipixel_with_step) {
9436     TEST_REQUIRES_X86_SSE;
9437     for (size_t channels = 1; channels <= 20; channels += 3) {
9438       for (size_t step = 2; step <= 3; step++) {
9439         DWConvMicrokernelTester()
9440           .cr(4)
9441           .kr(3)
9442           .channels(channels)
9443           .width(3)
9444           .step(step)
9445           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9446       }
9447     }
9448   }
9449 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,multipixel_with_output_stride)9450   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, multipixel_with_output_stride) {
9451     TEST_REQUIRES_X86_SSE;
9452     for (size_t channels = 1; channels <= 20; channels += 3) {
9453       DWConvMicrokernelTester()
9454         .cr(4)
9455         .kr(3)
9456         .channels(4)
9457         .width(5)
9458         .output_stride(23)
9459         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9460     }
9461   }
9462 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,multipixel_with_qmin)9463   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, multipixel_with_qmin) {
9464     TEST_REQUIRES_X86_SSE;
9465     for (size_t channels = 1; channels <= 20; channels += 3) {
9466       DWConvMicrokernelTester()
9467         .cr(4)
9468         .kr(3)
9469         .channels(channels)
9470         .width(3)
9471         .qmin(128)
9472         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9473     }
9474   }
9475 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,multipixel_with_qmax)9476   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, multipixel_with_qmax) {
9477     TEST_REQUIRES_X86_SSE;
9478     for (size_t channels = 1; channels <= 20; channels += 3) {
9479       DWConvMicrokernelTester()
9480         .cr(4)
9481         .kr(3)
9482         .channels(channels)
9483         .width(3)
9484         .qmax(128)
9485         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9486     }
9487   }
9488 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,input_offset)9489   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, input_offset) {
9490     TEST_REQUIRES_X86_SSE;
9491     for (uint32_t channels = 8; channels < 64; channels += 12) {
9492       DWConvMicrokernelTester()
9493         .cr(4)
9494         .kr(3)
9495         .channels(channels)
9496         .input_offset(112)
9497         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9498     }
9499   }
9500 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE,zero)9501   TEST(F32_DWCONV_MINMAX_UP4X3__SSE, zero) {
9502     TEST_REQUIRES_X86_SSE;
9503     for (uint32_t mz = 0; mz < 3; mz++) {
9504       for (uint32_t channels = 8; channels < 64; channels += 12) {
9505         DWConvMicrokernelTester()
9506           .cr(4)
9507           .kr(3)
9508           .channels(channels)
9509           .input_offset(112)
9510           .zero_index(mz)
9511           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
9512       }
9513     }
9514   }
9515 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
9516 
9517 
9518 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,c_eq_4)9519   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_eq_4) {
9520     TEST_REQUIRES_X86_SSE;
9521     DWConvMicrokernelTester()
9522       .cr(4)
9523       .kr(3)
9524       .channels(4)
9525       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9526   }
9527 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,c_div_4)9528   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_div_4) {
9529     TEST_REQUIRES_X86_SSE;
9530     for (uint32_t channels = 8; channels < 64; channels += 12) {
9531       DWConvMicrokernelTester()
9532         .cr(4)
9533         .kr(3)
9534         .channels(channels)
9535         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9536     }
9537   }
9538 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,c_div_4_with_qmin)9539   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_div_4_with_qmin) {
9540     TEST_REQUIRES_X86_SSE;
9541     for (uint32_t channels = 8; channels < 64; channels += 12) {
9542       DWConvMicrokernelTester()
9543         .cr(4)
9544         .kr(3)
9545         .channels(channels)
9546         .qmin(128)
9547         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9548     }
9549   }
9550 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,c_div_4_with_qmax)9551   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_div_4_with_qmax) {
9552     TEST_REQUIRES_X86_SSE;
9553     for (uint32_t channels = 8; channels < 64; channels += 12) {
9554       DWConvMicrokernelTester()
9555         .cr(4)
9556         .kr(3)
9557         .channels(channels)
9558         .qmax(128)
9559         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9560     }
9561   }
9562 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,c_lt_4)9563   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_lt_4) {
9564     TEST_REQUIRES_X86_SSE;
9565     for (uint32_t channels = 1; channels < 4; channels++) {
9566       DWConvMicrokernelTester()
9567         .cr(4)
9568         .kr(3)
9569         .channels(channels)
9570         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9571     }
9572   }
9573 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,c_gt_4)9574   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_gt_4) {
9575     TEST_REQUIRES_X86_SSE;
9576     for (uint32_t channels = 5; channels < 8; channels++) {
9577       DWConvMicrokernelTester()
9578         .cr(4)
9579         .kr(3)
9580         .channels(channels)
9581         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9582     }
9583   }
9584 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,c_gt_4_with_qmin)9585   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_gt_4_with_qmin) {
9586     TEST_REQUIRES_X86_SSE;
9587     for (uint32_t channels = 5; channels < 8; channels++) {
9588       DWConvMicrokernelTester()
9589         .cr(4)
9590         .kr(3)
9591         .channels(channels)
9592         .qmin(128)
9593         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9594     }
9595   }
9596 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,c_gt_4_with_qmax)9597   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_gt_4_with_qmax) {
9598     TEST_REQUIRES_X86_SSE;
9599     for (uint32_t channels = 5; channels < 8; channels++) {
9600       DWConvMicrokernelTester()
9601         .cr(4)
9602         .kr(3)
9603         .channels(channels)
9604         .qmax(128)
9605         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9606     }
9607   }
9608 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,multipixel)9609   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, multipixel) {
9610     TEST_REQUIRES_X86_SSE;
9611     for (size_t channels = 1; channels <= 20; channels += 3) {
9612       DWConvMicrokernelTester()
9613         .cr(4)
9614         .kr(3)
9615         .channels(channels)
9616         .width(3)
9617         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9618     }
9619   }
9620 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,multipixel_with_step)9621   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, multipixel_with_step) {
9622     TEST_REQUIRES_X86_SSE;
9623     for (size_t channels = 1; channels <= 20; channels += 3) {
9624       for (size_t step = 2; step <= 3; step++) {
9625         DWConvMicrokernelTester()
9626           .cr(4)
9627           .kr(3)
9628           .channels(channels)
9629           .width(3)
9630           .step(step)
9631           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9632       }
9633     }
9634   }
9635 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,multipixel_with_output_stride)9636   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, multipixel_with_output_stride) {
9637     TEST_REQUIRES_X86_SSE;
9638     for (size_t channels = 1; channels <= 20; channels += 3) {
9639       DWConvMicrokernelTester()
9640         .cr(4)
9641         .kr(3)
9642         .channels(4)
9643         .width(5)
9644         .output_stride(23)
9645         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9646     }
9647   }
9648 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,multipixel_with_qmin)9649   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, multipixel_with_qmin) {
9650     TEST_REQUIRES_X86_SSE;
9651     for (size_t channels = 1; channels <= 20; channels += 3) {
9652       DWConvMicrokernelTester()
9653         .cr(4)
9654         .kr(3)
9655         .channels(channels)
9656         .width(3)
9657         .qmin(128)
9658         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9659     }
9660   }
9661 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,multipixel_with_qmax)9662   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, multipixel_with_qmax) {
9663     TEST_REQUIRES_X86_SSE;
9664     for (size_t channels = 1; channels <= 20; channels += 3) {
9665       DWConvMicrokernelTester()
9666         .cr(4)
9667         .kr(3)
9668         .channels(channels)
9669         .width(3)
9670         .qmax(128)
9671         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9672     }
9673   }
9674 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,input_offset)9675   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, input_offset) {
9676     TEST_REQUIRES_X86_SSE;
9677     for (uint32_t channels = 8; channels < 64; channels += 12) {
9678       DWConvMicrokernelTester()
9679         .cr(4)
9680         .kr(3)
9681         .channels(channels)
9682         .input_offset(112)
9683         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9684     }
9685   }
9686 
TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2,zero)9687   TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, zero) {
9688     TEST_REQUIRES_X86_SSE;
9689     for (uint32_t mz = 0; mz < 3; mz++) {
9690       for (uint32_t channels = 8; channels < 64; channels += 12) {
9691         DWConvMicrokernelTester()
9692           .cr(4)
9693           .kr(3)
9694           .channels(channels)
9695           .input_offset(112)
9696           .zero_index(mz)
9697           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
9698       }
9699     }
9700   }
9701 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
9702 
9703 
9704 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,c_eq_4)9705   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_eq_4) {
9706     TEST_REQUIRES_X86_SSE;
9707     DWConvMicrokernelTester()
9708       .cr(4)
9709       .kr(4)
9710       .channels(4)
9711       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9712   }
9713 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,c_div_4)9714   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_div_4) {
9715     TEST_REQUIRES_X86_SSE;
9716     for (uint32_t channels = 8; channels < 64; channels += 12) {
9717       DWConvMicrokernelTester()
9718         .cr(4)
9719         .kr(4)
9720         .channels(channels)
9721         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9722     }
9723   }
9724 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,c_div_4_with_qmin)9725   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_div_4_with_qmin) {
9726     TEST_REQUIRES_X86_SSE;
9727     for (uint32_t channels = 8; channels < 64; channels += 12) {
9728       DWConvMicrokernelTester()
9729         .cr(4)
9730         .kr(4)
9731         .channels(channels)
9732         .qmin(128)
9733         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9734     }
9735   }
9736 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,c_div_4_with_qmax)9737   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_div_4_with_qmax) {
9738     TEST_REQUIRES_X86_SSE;
9739     for (uint32_t channels = 8; channels < 64; channels += 12) {
9740       DWConvMicrokernelTester()
9741         .cr(4)
9742         .kr(4)
9743         .channels(channels)
9744         .qmax(128)
9745         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9746     }
9747   }
9748 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,c_lt_4)9749   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_lt_4) {
9750     TEST_REQUIRES_X86_SSE;
9751     for (uint32_t channels = 1; channels < 4; channels++) {
9752       DWConvMicrokernelTester()
9753         .cr(4)
9754         .kr(4)
9755         .channels(channels)
9756         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9757     }
9758   }
9759 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,c_gt_4)9760   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_gt_4) {
9761     TEST_REQUIRES_X86_SSE;
9762     for (uint32_t channels = 5; channels < 8; channels++) {
9763       DWConvMicrokernelTester()
9764         .cr(4)
9765         .kr(4)
9766         .channels(channels)
9767         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9768     }
9769   }
9770 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,c_gt_4_with_qmin)9771   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_gt_4_with_qmin) {
9772     TEST_REQUIRES_X86_SSE;
9773     for (uint32_t channels = 5; channels < 8; channels++) {
9774       DWConvMicrokernelTester()
9775         .cr(4)
9776         .kr(4)
9777         .channels(channels)
9778         .qmin(128)
9779         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9780     }
9781   }
9782 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,c_gt_4_with_qmax)9783   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_gt_4_with_qmax) {
9784     TEST_REQUIRES_X86_SSE;
9785     for (uint32_t channels = 5; channels < 8; channels++) {
9786       DWConvMicrokernelTester()
9787         .cr(4)
9788         .kr(4)
9789         .channels(channels)
9790         .qmax(128)
9791         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9792     }
9793   }
9794 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,multipixel)9795   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel) {
9796     TEST_REQUIRES_X86_SSE;
9797     for (size_t channels = 1; channels <= 20; channels += 3) {
9798       DWConvMicrokernelTester()
9799         .cr(4)
9800         .kr(4)
9801         .channels(channels)
9802         .width(3)
9803         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9804     }
9805   }
9806 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,multipixel_with_step)9807   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_step) {
9808     TEST_REQUIRES_X86_SSE;
9809     for (size_t channels = 1; channels <= 20; channels += 3) {
9810       for (size_t step = 2; step <= 4; step++) {
9811         DWConvMicrokernelTester()
9812           .cr(4)
9813           .kr(4)
9814           .channels(channels)
9815           .width(3)
9816           .step(step)
9817           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9818       }
9819     }
9820   }
9821 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,multipixel_with_output_stride)9822   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_output_stride) {
9823     TEST_REQUIRES_X86_SSE;
9824     for (size_t channels = 1; channels <= 20; channels += 3) {
9825       DWConvMicrokernelTester()
9826         .cr(4)
9827         .kr(4)
9828         .channels(4)
9829         .width(5)
9830         .output_stride(23)
9831         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9832     }
9833   }
9834 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,multipixel_with_qmin)9835   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_qmin) {
9836     TEST_REQUIRES_X86_SSE;
9837     for (size_t channels = 1; channels <= 20; channels += 3) {
9838       DWConvMicrokernelTester()
9839         .cr(4)
9840         .kr(4)
9841         .channels(channels)
9842         .width(3)
9843         .qmin(128)
9844         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9845     }
9846   }
9847 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,multipixel_with_qmax)9848   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_qmax) {
9849     TEST_REQUIRES_X86_SSE;
9850     for (size_t channels = 1; channels <= 20; channels += 3) {
9851       DWConvMicrokernelTester()
9852         .cr(4)
9853         .kr(4)
9854         .channels(channels)
9855         .width(3)
9856         .qmax(128)
9857         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9858     }
9859   }
9860 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,input_offset)9861   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, input_offset) {
9862     TEST_REQUIRES_X86_SSE;
9863     for (uint32_t channels = 8; channels < 64; channels += 12) {
9864       DWConvMicrokernelTester()
9865         .cr(4)
9866         .kr(4)
9867         .channels(channels)
9868         .input_offset(112)
9869         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9870     }
9871   }
9872 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE,zero)9873   TEST(F32_DWCONV_MINMAX_UP4X4__SSE, zero) {
9874     TEST_REQUIRES_X86_SSE;
9875     for (uint32_t mz = 0; mz < 4; mz++) {
9876       for (uint32_t channels = 8; channels < 64; channels += 12) {
9877         DWConvMicrokernelTester()
9878           .cr(4)
9879           .kr(4)
9880           .channels(channels)
9881           .input_offset(112)
9882           .zero_index(mz)
9883           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
9884       }
9885     }
9886   }
9887 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
9888 
9889 
9890 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,c_eq_4)9891   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_eq_4) {
9892     TEST_REQUIRES_X86_SSE;
9893     DWConvMicrokernelTester()
9894       .cr(4)
9895       .kr(4)
9896       .channels(4)
9897       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
9898   }
9899 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,c_div_4)9900   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_div_4) {
9901     TEST_REQUIRES_X86_SSE;
9902     for (uint32_t channels = 8; channels < 64; channels += 12) {
9903       DWConvMicrokernelTester()
9904         .cr(4)
9905         .kr(4)
9906         .channels(channels)
9907         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
9908     }
9909   }
9910 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,c_div_4_with_qmin)9911   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_div_4_with_qmin) {
9912     TEST_REQUIRES_X86_SSE;
9913     for (uint32_t channels = 8; channels < 64; channels += 12) {
9914       DWConvMicrokernelTester()
9915         .cr(4)
9916         .kr(4)
9917         .channels(channels)
9918         .qmin(128)
9919         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
9920     }
9921   }
9922 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,c_div_4_with_qmax)9923   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_div_4_with_qmax) {
9924     TEST_REQUIRES_X86_SSE;
9925     for (uint32_t channels = 8; channels < 64; channels += 12) {
9926       DWConvMicrokernelTester()
9927         .cr(4)
9928         .kr(4)
9929         .channels(channels)
9930         .qmax(128)
9931         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
9932     }
9933   }
9934 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,c_lt_4)9935   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_lt_4) {
9936     TEST_REQUIRES_X86_SSE;
9937     for (uint32_t channels = 1; channels < 4; channels++) {
9938       DWConvMicrokernelTester()
9939         .cr(4)
9940         .kr(4)
9941         .channels(channels)
9942         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
9943     }
9944   }
9945 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,c_gt_4)9946   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_gt_4) {
9947     TEST_REQUIRES_X86_SSE;
9948     for (uint32_t channels = 5; channels < 8; channels++) {
9949       DWConvMicrokernelTester()
9950         .cr(4)
9951         .kr(4)
9952         .channels(channels)
9953         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
9954     }
9955   }
9956 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,c_gt_4_with_qmin)9957   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_gt_4_with_qmin) {
9958     TEST_REQUIRES_X86_SSE;
9959     for (uint32_t channels = 5; channels < 8; channels++) {
9960       DWConvMicrokernelTester()
9961         .cr(4)
9962         .kr(4)
9963         .channels(channels)
9964         .qmin(128)
9965         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
9966     }
9967   }
9968 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,c_gt_4_with_qmax)9969   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_gt_4_with_qmax) {
9970     TEST_REQUIRES_X86_SSE;
9971     for (uint32_t channels = 5; channels < 8; channels++) {
9972       DWConvMicrokernelTester()
9973         .cr(4)
9974         .kr(4)
9975         .channels(channels)
9976         .qmax(128)
9977         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
9978     }
9979   }
9980 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,multipixel)9981   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel) {
9982     TEST_REQUIRES_X86_SSE;
9983     for (size_t channels = 1; channels <= 20; channels += 3) {
9984       DWConvMicrokernelTester()
9985         .cr(4)
9986         .kr(4)
9987         .channels(channels)
9988         .width(3)
9989         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
9990     }
9991   }
9992 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,multipixel_with_step)9993   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_step) {
9994     TEST_REQUIRES_X86_SSE;
9995     for (size_t channels = 1; channels <= 20; channels += 3) {
9996       for (size_t step = 2; step <= 4; step++) {
9997         DWConvMicrokernelTester()
9998           .cr(4)
9999           .kr(4)
10000           .channels(channels)
10001           .width(3)
10002           .step(step)
10003           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
10004       }
10005     }
10006   }
10007 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,multipixel_with_output_stride)10008   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_output_stride) {
10009     TEST_REQUIRES_X86_SSE;
10010     for (size_t channels = 1; channels <= 20; channels += 3) {
10011       DWConvMicrokernelTester()
10012         .cr(4)
10013         .kr(4)
10014         .channels(4)
10015         .width(5)
10016         .output_stride(23)
10017         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
10018     }
10019   }
10020 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,multipixel_with_qmin)10021   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_qmin) {
10022     TEST_REQUIRES_X86_SSE;
10023     for (size_t channels = 1; channels <= 20; channels += 3) {
10024       DWConvMicrokernelTester()
10025         .cr(4)
10026         .kr(4)
10027         .channels(channels)
10028         .width(3)
10029         .qmin(128)
10030         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
10031     }
10032   }
10033 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,multipixel_with_qmax)10034   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_qmax) {
10035     TEST_REQUIRES_X86_SSE;
10036     for (size_t channels = 1; channels <= 20; channels += 3) {
10037       DWConvMicrokernelTester()
10038         .cr(4)
10039         .kr(4)
10040         .channels(channels)
10041         .width(3)
10042         .qmax(128)
10043         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
10044     }
10045   }
10046 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,input_offset)10047   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, input_offset) {
10048     TEST_REQUIRES_X86_SSE;
10049     for (uint32_t channels = 8; channels < 64; channels += 12) {
10050       DWConvMicrokernelTester()
10051         .cr(4)
10052         .kr(4)
10053         .channels(channels)
10054         .input_offset(112)
10055         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
10056     }
10057   }
10058 
TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2,zero)10059   TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, zero) {
10060     TEST_REQUIRES_X86_SSE;
10061     for (uint32_t mz = 0; mz < 4; mz++) {
10062       for (uint32_t channels = 8; channels < 64; channels += 12) {
10063         DWConvMicrokernelTester()
10064           .cr(4)
10065           .kr(4)
10066           .channels(channels)
10067           .input_offset(112)
10068           .zero_index(mz)
10069           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
10070       }
10071     }
10072   }
10073 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10074 
10075 
10076 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,c_eq_4)10077   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_eq_4) {
10078     TEST_REQUIRES_X86_SSE;
10079     DWConvMicrokernelTester()
10080       .cr(4)
10081       .kr(9)
10082       .channels(4)
10083       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10084   }
10085 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,c_div_4)10086   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_div_4) {
10087     TEST_REQUIRES_X86_SSE;
10088     for (uint32_t channels = 8; channels < 64; channels += 12) {
10089       DWConvMicrokernelTester()
10090         .cr(4)
10091         .kr(9)
10092         .channels(channels)
10093         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10094     }
10095   }
10096 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,c_div_4_with_qmin)10097   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_div_4_with_qmin) {
10098     TEST_REQUIRES_X86_SSE;
10099     for (uint32_t channels = 8; channels < 64; channels += 12) {
10100       DWConvMicrokernelTester()
10101         .cr(4)
10102         .kr(9)
10103         .channels(channels)
10104         .qmin(128)
10105         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10106     }
10107   }
10108 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,c_div_4_with_qmax)10109   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_div_4_with_qmax) {
10110     TEST_REQUIRES_X86_SSE;
10111     for (uint32_t channels = 8; channels < 64; channels += 12) {
10112       DWConvMicrokernelTester()
10113         .cr(4)
10114         .kr(9)
10115         .channels(channels)
10116         .qmax(128)
10117         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10118     }
10119   }
10120 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,c_lt_4)10121   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_lt_4) {
10122     TEST_REQUIRES_X86_SSE;
10123     for (uint32_t channels = 1; channels < 4; channels++) {
10124       DWConvMicrokernelTester()
10125         .cr(4)
10126         .kr(9)
10127         .channels(channels)
10128         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10129     }
10130   }
10131 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,c_gt_4)10132   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_gt_4) {
10133     TEST_REQUIRES_X86_SSE;
10134     for (uint32_t channels = 5; channels < 8; channels++) {
10135       DWConvMicrokernelTester()
10136         .cr(4)
10137         .kr(9)
10138         .channels(channels)
10139         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10140     }
10141   }
10142 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,c_gt_4_with_qmin)10143   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_gt_4_with_qmin) {
10144     TEST_REQUIRES_X86_SSE;
10145     for (uint32_t channels = 5; channels < 8; channels++) {
10146       DWConvMicrokernelTester()
10147         .cr(4)
10148         .kr(9)
10149         .channels(channels)
10150         .qmin(128)
10151         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10152     }
10153   }
10154 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,c_gt_4_with_qmax)10155   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_gt_4_with_qmax) {
10156     TEST_REQUIRES_X86_SSE;
10157     for (uint32_t channels = 5; channels < 8; channels++) {
10158       DWConvMicrokernelTester()
10159         .cr(4)
10160         .kr(9)
10161         .channels(channels)
10162         .qmax(128)
10163         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10164     }
10165   }
10166 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,multipixel)10167   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel) {
10168     TEST_REQUIRES_X86_SSE;
10169     for (size_t channels = 1; channels <= 20; channels += 3) {
10170       DWConvMicrokernelTester()
10171         .cr(4)
10172         .kr(9)
10173         .channels(channels)
10174         .width(3)
10175         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10176     }
10177   }
10178 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,multipixel_with_step)10179   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_step) {
10180     TEST_REQUIRES_X86_SSE;
10181     for (size_t channels = 1; channels <= 20; channels += 3) {
10182       for (size_t step = 2; step <= 9; step++) {
10183         DWConvMicrokernelTester()
10184           .cr(4)
10185           .kr(9)
10186           .channels(channels)
10187           .width(3)
10188           .step(step)
10189           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10190       }
10191     }
10192   }
10193 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,multipixel_with_output_stride)10194   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_output_stride) {
10195     TEST_REQUIRES_X86_SSE;
10196     for (size_t channels = 1; channels <= 20; channels += 3) {
10197       DWConvMicrokernelTester()
10198         .cr(4)
10199         .kr(9)
10200         .channels(4)
10201         .width(5)
10202         .output_stride(23)
10203         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10204     }
10205   }
10206 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,multipixel_with_qmin)10207   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_qmin) {
10208     TEST_REQUIRES_X86_SSE;
10209     for (size_t channels = 1; channels <= 20; channels += 3) {
10210       DWConvMicrokernelTester()
10211         .cr(4)
10212         .kr(9)
10213         .channels(channels)
10214         .width(3)
10215         .qmin(128)
10216         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10217     }
10218   }
10219 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,multipixel_with_qmax)10220   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_qmax) {
10221     TEST_REQUIRES_X86_SSE;
10222     for (size_t channels = 1; channels <= 20; channels += 3) {
10223       DWConvMicrokernelTester()
10224         .cr(4)
10225         .kr(9)
10226         .channels(channels)
10227         .width(3)
10228         .qmax(128)
10229         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10230     }
10231   }
10232 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,input_offset)10233   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, input_offset) {
10234     TEST_REQUIRES_X86_SSE;
10235     for (uint32_t channels = 8; channels < 64; channels += 12) {
10236       DWConvMicrokernelTester()
10237         .cr(4)
10238         .kr(9)
10239         .channels(channels)
10240         .input_offset(112)
10241         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10242     }
10243   }
10244 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE,zero)10245   TEST(F32_DWCONV_MINMAX_UP4X9__SSE, zero) {
10246     TEST_REQUIRES_X86_SSE;
10247     for (uint32_t mz = 0; mz < 9; mz++) {
10248       for (uint32_t channels = 8; channels < 64; channels += 12) {
10249         DWConvMicrokernelTester()
10250           .cr(4)
10251           .kr(9)
10252           .channels(channels)
10253           .input_offset(112)
10254           .zero_index(mz)
10255           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
10256       }
10257     }
10258   }
10259 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10260 
10261 
10262 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,c_eq_4)10263   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_eq_4) {
10264     TEST_REQUIRES_X86_SSE;
10265     DWConvMicrokernelTester()
10266       .cr(4)
10267       .kr(9)
10268       .channels(4)
10269       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10270   }
10271 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,c_div_4)10272   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_div_4) {
10273     TEST_REQUIRES_X86_SSE;
10274     for (uint32_t channels = 8; channels < 64; channels += 12) {
10275       DWConvMicrokernelTester()
10276         .cr(4)
10277         .kr(9)
10278         .channels(channels)
10279         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10280     }
10281   }
10282 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,c_div_4_with_qmin)10283   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_div_4_with_qmin) {
10284     TEST_REQUIRES_X86_SSE;
10285     for (uint32_t channels = 8; channels < 64; channels += 12) {
10286       DWConvMicrokernelTester()
10287         .cr(4)
10288         .kr(9)
10289         .channels(channels)
10290         .qmin(128)
10291         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10292     }
10293   }
10294 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,c_div_4_with_qmax)10295   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_div_4_with_qmax) {
10296     TEST_REQUIRES_X86_SSE;
10297     for (uint32_t channels = 8; channels < 64; channels += 12) {
10298       DWConvMicrokernelTester()
10299         .cr(4)
10300         .kr(9)
10301         .channels(channels)
10302         .qmax(128)
10303         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10304     }
10305   }
10306 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,c_lt_4)10307   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_lt_4) {
10308     TEST_REQUIRES_X86_SSE;
10309     for (uint32_t channels = 1; channels < 4; channels++) {
10310       DWConvMicrokernelTester()
10311         .cr(4)
10312         .kr(9)
10313         .channels(channels)
10314         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10315     }
10316   }
10317 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,c_gt_4)10318   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_gt_4) {
10319     TEST_REQUIRES_X86_SSE;
10320     for (uint32_t channels = 5; channels < 8; channels++) {
10321       DWConvMicrokernelTester()
10322         .cr(4)
10323         .kr(9)
10324         .channels(channels)
10325         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10326     }
10327   }
10328 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,c_gt_4_with_qmin)10329   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_gt_4_with_qmin) {
10330     TEST_REQUIRES_X86_SSE;
10331     for (uint32_t channels = 5; channels < 8; channels++) {
10332       DWConvMicrokernelTester()
10333         .cr(4)
10334         .kr(9)
10335         .channels(channels)
10336         .qmin(128)
10337         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10338     }
10339   }
10340 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,c_gt_4_with_qmax)10341   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_gt_4_with_qmax) {
10342     TEST_REQUIRES_X86_SSE;
10343     for (uint32_t channels = 5; channels < 8; channels++) {
10344       DWConvMicrokernelTester()
10345         .cr(4)
10346         .kr(9)
10347         .channels(channels)
10348         .qmax(128)
10349         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10350     }
10351   }
10352 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,multipixel)10353   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel) {
10354     TEST_REQUIRES_X86_SSE;
10355     for (size_t channels = 1; channels <= 20; channels += 3) {
10356       DWConvMicrokernelTester()
10357         .cr(4)
10358         .kr(9)
10359         .channels(channels)
10360         .width(3)
10361         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10362     }
10363   }
10364 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,multipixel_with_step)10365   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_step) {
10366     TEST_REQUIRES_X86_SSE;
10367     for (size_t channels = 1; channels <= 20; channels += 3) {
10368       for (size_t step = 2; step <= 9; step++) {
10369         DWConvMicrokernelTester()
10370           .cr(4)
10371           .kr(9)
10372           .channels(channels)
10373           .width(3)
10374           .step(step)
10375           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10376       }
10377     }
10378   }
10379 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,multipixel_with_output_stride)10380   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_output_stride) {
10381     TEST_REQUIRES_X86_SSE;
10382     for (size_t channels = 1; channels <= 20; channels += 3) {
10383       DWConvMicrokernelTester()
10384         .cr(4)
10385         .kr(9)
10386         .channels(4)
10387         .width(5)
10388         .output_stride(23)
10389         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10390     }
10391   }
10392 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,multipixel_with_qmin)10393   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_qmin) {
10394     TEST_REQUIRES_X86_SSE;
10395     for (size_t channels = 1; channels <= 20; channels += 3) {
10396       DWConvMicrokernelTester()
10397         .cr(4)
10398         .kr(9)
10399         .channels(channels)
10400         .width(3)
10401         .qmin(128)
10402         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10403     }
10404   }
10405 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,multipixel_with_qmax)10406   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_qmax) {
10407     TEST_REQUIRES_X86_SSE;
10408     for (size_t channels = 1; channels <= 20; channels += 3) {
10409       DWConvMicrokernelTester()
10410         .cr(4)
10411         .kr(9)
10412         .channels(channels)
10413         .width(3)
10414         .qmax(128)
10415         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10416     }
10417   }
10418 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,input_offset)10419   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, input_offset) {
10420     TEST_REQUIRES_X86_SSE;
10421     for (uint32_t channels = 8; channels < 64; channels += 12) {
10422       DWConvMicrokernelTester()
10423         .cr(4)
10424         .kr(9)
10425         .channels(channels)
10426         .input_offset(112)
10427         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10428     }
10429   }
10430 
TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2,zero)10431   TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, zero) {
10432     TEST_REQUIRES_X86_SSE;
10433     for (uint32_t mz = 0; mz < 9; mz++) {
10434       for (uint32_t channels = 8; channels < 64; channels += 12) {
10435         DWConvMicrokernelTester()
10436           .cr(4)
10437           .kr(9)
10438           .channels(channels)
10439           .input_offset(112)
10440           .zero_index(mz)
10441           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
10442       }
10443     }
10444   }
10445 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10446 
10447 
10448 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,c_eq_4)10449   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_eq_4) {
10450     TEST_REQUIRES_X86_SSE;
10451     DWConvMicrokernelTester()
10452       .cr(4)
10453       .kr(25)
10454       .channels(4)
10455       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10456   }
10457 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,c_div_4)10458   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_div_4) {
10459     TEST_REQUIRES_X86_SSE;
10460     for (uint32_t channels = 8; channels < 64; channels += 12) {
10461       DWConvMicrokernelTester()
10462         .cr(4)
10463         .kr(25)
10464         .channels(channels)
10465         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10466     }
10467   }
10468 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,c_div_4_with_qmin)10469   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_div_4_with_qmin) {
10470     TEST_REQUIRES_X86_SSE;
10471     for (uint32_t channels = 8; channels < 64; channels += 12) {
10472       DWConvMicrokernelTester()
10473         .cr(4)
10474         .kr(25)
10475         .channels(channels)
10476         .qmin(128)
10477         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10478     }
10479   }
10480 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,c_div_4_with_qmax)10481   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_div_4_with_qmax) {
10482     TEST_REQUIRES_X86_SSE;
10483     for (uint32_t channels = 8; channels < 64; channels += 12) {
10484       DWConvMicrokernelTester()
10485         .cr(4)
10486         .kr(25)
10487         .channels(channels)
10488         .qmax(128)
10489         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10490     }
10491   }
10492 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,c_lt_4)10493   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_lt_4) {
10494     TEST_REQUIRES_X86_SSE;
10495     for (uint32_t channels = 1; channels < 4; channels++) {
10496       DWConvMicrokernelTester()
10497         .cr(4)
10498         .kr(25)
10499         .channels(channels)
10500         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10501     }
10502   }
10503 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,c_gt_4)10504   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_gt_4) {
10505     TEST_REQUIRES_X86_SSE;
10506     for (uint32_t channels = 5; channels < 8; channels++) {
10507       DWConvMicrokernelTester()
10508         .cr(4)
10509         .kr(25)
10510         .channels(channels)
10511         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10512     }
10513   }
10514 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,c_gt_4_with_qmin)10515   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_gt_4_with_qmin) {
10516     TEST_REQUIRES_X86_SSE;
10517     for (uint32_t channels = 5; channels < 8; channels++) {
10518       DWConvMicrokernelTester()
10519         .cr(4)
10520         .kr(25)
10521         .channels(channels)
10522         .qmin(128)
10523         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10524     }
10525   }
10526 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,c_gt_4_with_qmax)10527   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_gt_4_with_qmax) {
10528     TEST_REQUIRES_X86_SSE;
10529     for (uint32_t channels = 5; channels < 8; channels++) {
10530       DWConvMicrokernelTester()
10531         .cr(4)
10532         .kr(25)
10533         .channels(channels)
10534         .qmax(128)
10535         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10536     }
10537   }
10538 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,multipixel)10539   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel) {
10540     TEST_REQUIRES_X86_SSE;
10541     for (size_t channels = 1; channels <= 20; channels += 3) {
10542       DWConvMicrokernelTester()
10543         .cr(4)
10544         .kr(25)
10545         .channels(channels)
10546         .width(3)
10547         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10548     }
10549   }
10550 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,multipixel_with_step)10551   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_step) {
10552     TEST_REQUIRES_X86_SSE;
10553     for (size_t channels = 1; channels <= 20; channels += 3) {
10554       for (size_t step = 2; step <= 25; step++) {
10555         DWConvMicrokernelTester()
10556           .cr(4)
10557           .kr(25)
10558           .channels(channels)
10559           .width(3)
10560           .step(step)
10561           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10562       }
10563     }
10564   }
10565 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,multipixel_with_output_stride)10566   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_output_stride) {
10567     TEST_REQUIRES_X86_SSE;
10568     for (size_t channels = 1; channels <= 20; channels += 3) {
10569       DWConvMicrokernelTester()
10570         .cr(4)
10571         .kr(25)
10572         .channels(4)
10573         .width(5)
10574         .output_stride(23)
10575         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10576     }
10577   }
10578 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,multipixel_with_qmin)10579   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_qmin) {
10580     TEST_REQUIRES_X86_SSE;
10581     for (size_t channels = 1; channels <= 20; channels += 3) {
10582       DWConvMicrokernelTester()
10583         .cr(4)
10584         .kr(25)
10585         .channels(channels)
10586         .width(3)
10587         .qmin(128)
10588         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10589     }
10590   }
10591 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,multipixel_with_qmax)10592   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_qmax) {
10593     TEST_REQUIRES_X86_SSE;
10594     for (size_t channels = 1; channels <= 20; channels += 3) {
10595       DWConvMicrokernelTester()
10596         .cr(4)
10597         .kr(25)
10598         .channels(channels)
10599         .width(3)
10600         .qmax(128)
10601         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10602     }
10603   }
10604 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,input_offset)10605   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, input_offset) {
10606     TEST_REQUIRES_X86_SSE;
10607     for (uint32_t channels = 8; channels < 64; channels += 12) {
10608       DWConvMicrokernelTester()
10609         .cr(4)
10610         .kr(25)
10611         .channels(channels)
10612         .input_offset(112)
10613         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10614     }
10615   }
10616 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE,zero)10617   TEST(F32_DWCONV_MINMAX_UP4X25__SSE, zero) {
10618     TEST_REQUIRES_X86_SSE;
10619     for (uint32_t mz = 0; mz < 25; mz++) {
10620       for (uint32_t channels = 8; channels < 64; channels += 12) {
10621         DWConvMicrokernelTester()
10622           .cr(4)
10623           .kr(25)
10624           .channels(channels)
10625           .input_offset(112)
10626           .zero_index(mz)
10627           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
10628       }
10629     }
10630   }
10631 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10632 
10633 
10634 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,c_eq_4)10635   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_eq_4) {
10636     TEST_REQUIRES_X86_SSE;
10637     DWConvMicrokernelTester()
10638       .cr(4)
10639       .kr(25)
10640       .channels(4)
10641       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10642   }
10643 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,c_div_4)10644   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_div_4) {
10645     TEST_REQUIRES_X86_SSE;
10646     for (uint32_t channels = 8; channels < 64; channels += 12) {
10647       DWConvMicrokernelTester()
10648         .cr(4)
10649         .kr(25)
10650         .channels(channels)
10651         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10652     }
10653   }
10654 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,c_div_4_with_qmin)10655   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_div_4_with_qmin) {
10656     TEST_REQUIRES_X86_SSE;
10657     for (uint32_t channels = 8; channels < 64; channels += 12) {
10658       DWConvMicrokernelTester()
10659         .cr(4)
10660         .kr(25)
10661         .channels(channels)
10662         .qmin(128)
10663         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10664     }
10665   }
10666 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,c_div_4_with_qmax)10667   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_div_4_with_qmax) {
10668     TEST_REQUIRES_X86_SSE;
10669     for (uint32_t channels = 8; channels < 64; channels += 12) {
10670       DWConvMicrokernelTester()
10671         .cr(4)
10672         .kr(25)
10673         .channels(channels)
10674         .qmax(128)
10675         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10676     }
10677   }
10678 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,c_lt_4)10679   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_lt_4) {
10680     TEST_REQUIRES_X86_SSE;
10681     for (uint32_t channels = 1; channels < 4; channels++) {
10682       DWConvMicrokernelTester()
10683         .cr(4)
10684         .kr(25)
10685         .channels(channels)
10686         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10687     }
10688   }
10689 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,c_gt_4)10690   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_gt_4) {
10691     TEST_REQUIRES_X86_SSE;
10692     for (uint32_t channels = 5; channels < 8; channels++) {
10693       DWConvMicrokernelTester()
10694         .cr(4)
10695         .kr(25)
10696         .channels(channels)
10697         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10698     }
10699   }
10700 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,c_gt_4_with_qmin)10701   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_gt_4_with_qmin) {
10702     TEST_REQUIRES_X86_SSE;
10703     for (uint32_t channels = 5; channels < 8; channels++) {
10704       DWConvMicrokernelTester()
10705         .cr(4)
10706         .kr(25)
10707         .channels(channels)
10708         .qmin(128)
10709         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10710     }
10711   }
10712 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,c_gt_4_with_qmax)10713   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_gt_4_with_qmax) {
10714     TEST_REQUIRES_X86_SSE;
10715     for (uint32_t channels = 5; channels < 8; channels++) {
10716       DWConvMicrokernelTester()
10717         .cr(4)
10718         .kr(25)
10719         .channels(channels)
10720         .qmax(128)
10721         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10722     }
10723   }
10724 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,multipixel)10725   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel) {
10726     TEST_REQUIRES_X86_SSE;
10727     for (size_t channels = 1; channels <= 20; channels += 3) {
10728       DWConvMicrokernelTester()
10729         .cr(4)
10730         .kr(25)
10731         .channels(channels)
10732         .width(3)
10733         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10734     }
10735   }
10736 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,multipixel_with_step)10737   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_step) {
10738     TEST_REQUIRES_X86_SSE;
10739     for (size_t channels = 1; channels <= 20; channels += 3) {
10740       for (size_t step = 2; step <= 25; step++) {
10741         DWConvMicrokernelTester()
10742           .cr(4)
10743           .kr(25)
10744           .channels(channels)
10745           .width(3)
10746           .step(step)
10747           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10748       }
10749     }
10750   }
10751 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,multipixel_with_output_stride)10752   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_output_stride) {
10753     TEST_REQUIRES_X86_SSE;
10754     for (size_t channels = 1; channels <= 20; channels += 3) {
10755       DWConvMicrokernelTester()
10756         .cr(4)
10757         .kr(25)
10758         .channels(4)
10759         .width(5)
10760         .output_stride(23)
10761         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10762     }
10763   }
10764 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,multipixel_with_qmin)10765   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_qmin) {
10766     TEST_REQUIRES_X86_SSE;
10767     for (size_t channels = 1; channels <= 20; channels += 3) {
10768       DWConvMicrokernelTester()
10769         .cr(4)
10770         .kr(25)
10771         .channels(channels)
10772         .width(3)
10773         .qmin(128)
10774         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10775     }
10776   }
10777 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,multipixel_with_qmax)10778   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_qmax) {
10779     TEST_REQUIRES_X86_SSE;
10780     for (size_t channels = 1; channels <= 20; channels += 3) {
10781       DWConvMicrokernelTester()
10782         .cr(4)
10783         .kr(25)
10784         .channels(channels)
10785         .width(3)
10786         .qmax(128)
10787         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10788     }
10789   }
10790 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,input_offset)10791   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, input_offset) {
10792     TEST_REQUIRES_X86_SSE;
10793     for (uint32_t channels = 8; channels < 64; channels += 12) {
10794       DWConvMicrokernelTester()
10795         .cr(4)
10796         .kr(25)
10797         .channels(channels)
10798         .input_offset(112)
10799         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10800     }
10801   }
10802 
TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2,zero)10803   TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, zero) {
10804     TEST_REQUIRES_X86_SSE;
10805     for (uint32_t mz = 0; mz < 25; mz++) {
10806       for (uint32_t channels = 8; channels < 64; channels += 12) {
10807         DWConvMicrokernelTester()
10808           .cr(4)
10809           .kr(25)
10810           .channels(channels)
10811           .input_offset(112)
10812           .zero_index(mz)
10813           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
10814       }
10815     }
10816   }
10817 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10818 
10819 
10820 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,c_eq_8)10821   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, c_eq_8) {
10822     TEST_REQUIRES_X86_SSE;
10823     DWConvMicrokernelTester()
10824       .cr(8)
10825       .kr(3)
10826       .channels(8)
10827       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10828   }
10829 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,c_div_8)10830   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, c_div_8) {
10831     TEST_REQUIRES_X86_SSE;
10832     for (uint32_t channels = 16; channels < 128; channels += 24) {
10833       DWConvMicrokernelTester()
10834         .cr(8)
10835         .kr(3)
10836         .channels(channels)
10837         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10838     }
10839   }
10840 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,c_div_8_with_qmin)10841   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, c_div_8_with_qmin) {
10842     TEST_REQUIRES_X86_SSE;
10843     for (uint32_t channels = 16; channels < 128; channels += 24) {
10844       DWConvMicrokernelTester()
10845         .cr(8)
10846         .kr(3)
10847         .channels(channels)
10848         .qmin(128)
10849         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10850     }
10851   }
10852 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,c_div_8_with_qmax)10853   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, c_div_8_with_qmax) {
10854     TEST_REQUIRES_X86_SSE;
10855     for (uint32_t channels = 16; channels < 128; channels += 24) {
10856       DWConvMicrokernelTester()
10857         .cr(8)
10858         .kr(3)
10859         .channels(channels)
10860         .qmax(128)
10861         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10862     }
10863   }
10864 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,c_lt_8)10865   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, c_lt_8) {
10866     TEST_REQUIRES_X86_SSE;
10867     for (uint32_t channels = 1; channels < 8; channels++) {
10868       DWConvMicrokernelTester()
10869         .cr(8)
10870         .kr(3)
10871         .channels(channels)
10872         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10873     }
10874   }
10875 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,c_gt_8)10876   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, c_gt_8) {
10877     TEST_REQUIRES_X86_SSE;
10878     for (uint32_t channels = 9; channels < 16; channels++) {
10879       DWConvMicrokernelTester()
10880         .cr(8)
10881         .kr(3)
10882         .channels(channels)
10883         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10884     }
10885   }
10886 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,c_gt_8_with_qmin)10887   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, c_gt_8_with_qmin) {
10888     TEST_REQUIRES_X86_SSE;
10889     for (uint32_t channels = 9; channels < 16; channels++) {
10890       DWConvMicrokernelTester()
10891         .cr(8)
10892         .kr(3)
10893         .channels(channels)
10894         .qmin(128)
10895         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10896     }
10897   }
10898 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,c_gt_8_with_qmax)10899   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, c_gt_8_with_qmax) {
10900     TEST_REQUIRES_X86_SSE;
10901     for (uint32_t channels = 9; channels < 16; channels++) {
10902       DWConvMicrokernelTester()
10903         .cr(8)
10904         .kr(3)
10905         .channels(channels)
10906         .qmax(128)
10907         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10908     }
10909   }
10910 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,multipixel)10911   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, multipixel) {
10912     TEST_REQUIRES_X86_SSE;
10913     for (size_t channels = 1; channels <= 40; channels += 7) {
10914       DWConvMicrokernelTester()
10915         .cr(8)
10916         .kr(3)
10917         .channels(channels)
10918         .width(3)
10919         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10920     }
10921   }
10922 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,multipixel_with_step)10923   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, multipixel_with_step) {
10924     TEST_REQUIRES_X86_SSE;
10925     for (size_t channels = 1; channels <= 40; channels += 7) {
10926       for (size_t step = 2; step <= 3; step++) {
10927         DWConvMicrokernelTester()
10928           .cr(8)
10929           .kr(3)
10930           .channels(channels)
10931           .width(3)
10932           .step(step)
10933           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10934       }
10935     }
10936   }
10937 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,multipixel_with_output_stride)10938   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, multipixel_with_output_stride) {
10939     TEST_REQUIRES_X86_SSE;
10940     for (size_t channels = 1; channels <= 40; channels += 7) {
10941       DWConvMicrokernelTester()
10942         .cr(8)
10943         .kr(3)
10944         .channels(8)
10945         .width(5)
10946         .output_stride(43)
10947         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10948     }
10949   }
10950 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,multipixel_with_qmin)10951   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, multipixel_with_qmin) {
10952     TEST_REQUIRES_X86_SSE;
10953     for (size_t channels = 1; channels <= 40; channels += 7) {
10954       DWConvMicrokernelTester()
10955         .cr(8)
10956         .kr(3)
10957         .channels(channels)
10958         .width(3)
10959         .qmin(128)
10960         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10961     }
10962   }
10963 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,multipixel_with_qmax)10964   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, multipixel_with_qmax) {
10965     TEST_REQUIRES_X86_SSE;
10966     for (size_t channels = 1; channels <= 40; channels += 7) {
10967       DWConvMicrokernelTester()
10968         .cr(8)
10969         .kr(3)
10970         .channels(channels)
10971         .width(3)
10972         .qmax(128)
10973         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10974     }
10975   }
10976 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,input_offset)10977   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, input_offset) {
10978     TEST_REQUIRES_X86_SSE;
10979     for (uint32_t channels = 16; channels < 128; channels += 24) {
10980       DWConvMicrokernelTester()
10981         .cr(8)
10982         .kr(3)
10983         .channels(channels)
10984         .input_offset(176)
10985         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
10986     }
10987   }
10988 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE,zero)10989   TEST(F32_DWCONV_MINMAX_UP8X3__SSE, zero) {
10990     TEST_REQUIRES_X86_SSE;
10991     for (uint32_t mz = 0; mz < 3; mz++) {
10992       for (uint32_t channels = 16; channels < 128; channels += 24) {
10993         DWConvMicrokernelTester()
10994           .cr(8)
10995           .kr(3)
10996           .channels(channels)
10997           .input_offset(176)
10998           .zero_index(mz)
10999           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11000       }
11001     }
11002   }
11003 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11004 
11005 
11006 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,c_eq_8)11007   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, c_eq_8) {
11008     TEST_REQUIRES_X86_SSE;
11009     DWConvMicrokernelTester()
11010       .cr(8)
11011       .kr(3)
11012       .channels(8)
11013       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11014   }
11015 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,c_div_8)11016   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, c_div_8) {
11017     TEST_REQUIRES_X86_SSE;
11018     for (uint32_t channels = 16; channels < 128; channels += 24) {
11019       DWConvMicrokernelTester()
11020         .cr(8)
11021         .kr(3)
11022         .channels(channels)
11023         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11024     }
11025   }
11026 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,c_div_8_with_qmin)11027   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, c_div_8_with_qmin) {
11028     TEST_REQUIRES_X86_SSE;
11029     for (uint32_t channels = 16; channels < 128; channels += 24) {
11030       DWConvMicrokernelTester()
11031         .cr(8)
11032         .kr(3)
11033         .channels(channels)
11034         .qmin(128)
11035         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11036     }
11037   }
11038 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,c_div_8_with_qmax)11039   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, c_div_8_with_qmax) {
11040     TEST_REQUIRES_X86_SSE;
11041     for (uint32_t channels = 16; channels < 128; channels += 24) {
11042       DWConvMicrokernelTester()
11043         .cr(8)
11044         .kr(3)
11045         .channels(channels)
11046         .qmax(128)
11047         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11048     }
11049   }
11050 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,c_lt_8)11051   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, c_lt_8) {
11052     TEST_REQUIRES_X86_SSE;
11053     for (uint32_t channels = 1; channels < 8; channels++) {
11054       DWConvMicrokernelTester()
11055         .cr(8)
11056         .kr(3)
11057         .channels(channels)
11058         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11059     }
11060   }
11061 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,c_gt_8)11062   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, c_gt_8) {
11063     TEST_REQUIRES_X86_SSE;
11064     for (uint32_t channels = 9; channels < 16; channels++) {
11065       DWConvMicrokernelTester()
11066         .cr(8)
11067         .kr(3)
11068         .channels(channels)
11069         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11070     }
11071   }
11072 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,c_gt_8_with_qmin)11073   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, c_gt_8_with_qmin) {
11074     TEST_REQUIRES_X86_SSE;
11075     for (uint32_t channels = 9; channels < 16; channels++) {
11076       DWConvMicrokernelTester()
11077         .cr(8)
11078         .kr(3)
11079         .channels(channels)
11080         .qmin(128)
11081         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11082     }
11083   }
11084 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,c_gt_8_with_qmax)11085   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, c_gt_8_with_qmax) {
11086     TEST_REQUIRES_X86_SSE;
11087     for (uint32_t channels = 9; channels < 16; channels++) {
11088       DWConvMicrokernelTester()
11089         .cr(8)
11090         .kr(3)
11091         .channels(channels)
11092         .qmax(128)
11093         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11094     }
11095   }
11096 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,multipixel)11097   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, multipixel) {
11098     TEST_REQUIRES_X86_SSE;
11099     for (size_t channels = 1; channels <= 40; channels += 7) {
11100       DWConvMicrokernelTester()
11101         .cr(8)
11102         .kr(3)
11103         .channels(channels)
11104         .width(3)
11105         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11106     }
11107   }
11108 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,multipixel_with_step)11109   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, multipixel_with_step) {
11110     TEST_REQUIRES_X86_SSE;
11111     for (size_t channels = 1; channels <= 40; channels += 7) {
11112       for (size_t step = 2; step <= 3; step++) {
11113         DWConvMicrokernelTester()
11114           .cr(8)
11115           .kr(3)
11116           .channels(channels)
11117           .width(3)
11118           .step(step)
11119           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11120       }
11121     }
11122   }
11123 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,multipixel_with_output_stride)11124   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, multipixel_with_output_stride) {
11125     TEST_REQUIRES_X86_SSE;
11126     for (size_t channels = 1; channels <= 40; channels += 7) {
11127       DWConvMicrokernelTester()
11128         .cr(8)
11129         .kr(3)
11130         .channels(8)
11131         .width(5)
11132         .output_stride(43)
11133         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11134     }
11135   }
11136 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,multipixel_with_qmin)11137   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, multipixel_with_qmin) {
11138     TEST_REQUIRES_X86_SSE;
11139     for (size_t channels = 1; channels <= 40; channels += 7) {
11140       DWConvMicrokernelTester()
11141         .cr(8)
11142         .kr(3)
11143         .channels(channels)
11144         .width(3)
11145         .qmin(128)
11146         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11147     }
11148   }
11149 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,multipixel_with_qmax)11150   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, multipixel_with_qmax) {
11151     TEST_REQUIRES_X86_SSE;
11152     for (size_t channels = 1; channels <= 40; channels += 7) {
11153       DWConvMicrokernelTester()
11154         .cr(8)
11155         .kr(3)
11156         .channels(channels)
11157         .width(3)
11158         .qmax(128)
11159         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11160     }
11161   }
11162 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,input_offset)11163   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, input_offset) {
11164     TEST_REQUIRES_X86_SSE;
11165     for (uint32_t channels = 16; channels < 128; channels += 24) {
11166       DWConvMicrokernelTester()
11167         .cr(8)
11168         .kr(3)
11169         .channels(channels)
11170         .input_offset(176)
11171         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11172     }
11173   }
11174 
TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2,zero)11175   TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, zero) {
11176     TEST_REQUIRES_X86_SSE;
11177     for (uint32_t mz = 0; mz < 3; mz++) {
11178       for (uint32_t channels = 16; channels < 128; channels += 24) {
11179         DWConvMicrokernelTester()
11180           .cr(8)
11181           .kr(3)
11182           .channels(channels)
11183           .input_offset(176)
11184           .zero_index(mz)
11185           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11186       }
11187     }
11188   }
11189 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11190 
11191 
11192 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,c_eq_8)11193   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_eq_8) {
11194     TEST_REQUIRES_X86_SSE;
11195     DWConvMicrokernelTester()
11196       .cr(8)
11197       .kr(4)
11198       .channels(8)
11199       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11200   }
11201 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,c_div_8)11202   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_div_8) {
11203     TEST_REQUIRES_X86_SSE;
11204     for (uint32_t channels = 16; channels < 128; channels += 24) {
11205       DWConvMicrokernelTester()
11206         .cr(8)
11207         .kr(4)
11208         .channels(channels)
11209         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11210     }
11211   }
11212 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,c_div_8_with_qmin)11213   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_div_8_with_qmin) {
11214     TEST_REQUIRES_X86_SSE;
11215     for (uint32_t channels = 16; channels < 128; channels += 24) {
11216       DWConvMicrokernelTester()
11217         .cr(8)
11218         .kr(4)
11219         .channels(channels)
11220         .qmin(128)
11221         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11222     }
11223   }
11224 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,c_div_8_with_qmax)11225   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_div_8_with_qmax) {
11226     TEST_REQUIRES_X86_SSE;
11227     for (uint32_t channels = 16; channels < 128; channels += 24) {
11228       DWConvMicrokernelTester()
11229         .cr(8)
11230         .kr(4)
11231         .channels(channels)
11232         .qmax(128)
11233         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11234     }
11235   }
11236 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,c_lt_8)11237   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_lt_8) {
11238     TEST_REQUIRES_X86_SSE;
11239     for (uint32_t channels = 1; channels < 8; channels++) {
11240       DWConvMicrokernelTester()
11241         .cr(8)
11242         .kr(4)
11243         .channels(channels)
11244         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11245     }
11246   }
11247 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,c_gt_8)11248   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_gt_8) {
11249     TEST_REQUIRES_X86_SSE;
11250     for (uint32_t channels = 9; channels < 16; channels++) {
11251       DWConvMicrokernelTester()
11252         .cr(8)
11253         .kr(4)
11254         .channels(channels)
11255         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11256     }
11257   }
11258 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,c_gt_8_with_qmin)11259   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_gt_8_with_qmin) {
11260     TEST_REQUIRES_X86_SSE;
11261     for (uint32_t channels = 9; channels < 16; channels++) {
11262       DWConvMicrokernelTester()
11263         .cr(8)
11264         .kr(4)
11265         .channels(channels)
11266         .qmin(128)
11267         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11268     }
11269   }
11270 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,c_gt_8_with_qmax)11271   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_gt_8_with_qmax) {
11272     TEST_REQUIRES_X86_SSE;
11273     for (uint32_t channels = 9; channels < 16; channels++) {
11274       DWConvMicrokernelTester()
11275         .cr(8)
11276         .kr(4)
11277         .channels(channels)
11278         .qmax(128)
11279         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11280     }
11281   }
11282 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,multipixel)11283   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel) {
11284     TEST_REQUIRES_X86_SSE;
11285     for (size_t channels = 1; channels <= 40; channels += 7) {
11286       DWConvMicrokernelTester()
11287         .cr(8)
11288         .kr(4)
11289         .channels(channels)
11290         .width(3)
11291         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11292     }
11293   }
11294 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,multipixel_with_step)11295   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_step) {
11296     TEST_REQUIRES_X86_SSE;
11297     for (size_t channels = 1; channels <= 40; channels += 7) {
11298       for (size_t step = 2; step <= 4; step++) {
11299         DWConvMicrokernelTester()
11300           .cr(8)
11301           .kr(4)
11302           .channels(channels)
11303           .width(3)
11304           .step(step)
11305           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11306       }
11307     }
11308   }
11309 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,multipixel_with_output_stride)11310   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_output_stride) {
11311     TEST_REQUIRES_X86_SSE;
11312     for (size_t channels = 1; channels <= 40; channels += 7) {
11313       DWConvMicrokernelTester()
11314         .cr(8)
11315         .kr(4)
11316         .channels(8)
11317         .width(5)
11318         .output_stride(43)
11319         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11320     }
11321   }
11322 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,multipixel_with_qmin)11323   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_qmin) {
11324     TEST_REQUIRES_X86_SSE;
11325     for (size_t channels = 1; channels <= 40; channels += 7) {
11326       DWConvMicrokernelTester()
11327         .cr(8)
11328         .kr(4)
11329         .channels(channels)
11330         .width(3)
11331         .qmin(128)
11332         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11333     }
11334   }
11335 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,multipixel_with_qmax)11336   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_qmax) {
11337     TEST_REQUIRES_X86_SSE;
11338     for (size_t channels = 1; channels <= 40; channels += 7) {
11339       DWConvMicrokernelTester()
11340         .cr(8)
11341         .kr(4)
11342         .channels(channels)
11343         .width(3)
11344         .qmax(128)
11345         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11346     }
11347   }
11348 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,input_offset)11349   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, input_offset) {
11350     TEST_REQUIRES_X86_SSE;
11351     for (uint32_t channels = 16; channels < 128; channels += 24) {
11352       DWConvMicrokernelTester()
11353         .cr(8)
11354         .kr(4)
11355         .channels(channels)
11356         .input_offset(176)
11357         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11358     }
11359   }
11360 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE,zero)11361   TEST(F32_DWCONV_MINMAX_UP8X4__SSE, zero) {
11362     TEST_REQUIRES_X86_SSE;
11363     for (uint32_t mz = 0; mz < 4; mz++) {
11364       for (uint32_t channels = 16; channels < 128; channels += 24) {
11365         DWConvMicrokernelTester()
11366           .cr(8)
11367           .kr(4)
11368           .channels(channels)
11369           .input_offset(176)
11370           .zero_index(mz)
11371           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
11372       }
11373     }
11374   }
11375 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11376 
11377 
11378 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,c_eq_8)11379   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_eq_8) {
11380     TEST_REQUIRES_X86_SSE;
11381     DWConvMicrokernelTester()
11382       .cr(8)
11383       .kr(4)
11384       .channels(8)
11385       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11386   }
11387 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,c_div_8)11388   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_div_8) {
11389     TEST_REQUIRES_X86_SSE;
11390     for (uint32_t channels = 16; channels < 128; channels += 24) {
11391       DWConvMicrokernelTester()
11392         .cr(8)
11393         .kr(4)
11394         .channels(channels)
11395         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11396     }
11397   }
11398 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,c_div_8_with_qmin)11399   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_div_8_with_qmin) {
11400     TEST_REQUIRES_X86_SSE;
11401     for (uint32_t channels = 16; channels < 128; channels += 24) {
11402       DWConvMicrokernelTester()
11403         .cr(8)
11404         .kr(4)
11405         .channels(channels)
11406         .qmin(128)
11407         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11408     }
11409   }
11410 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,c_div_8_with_qmax)11411   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_div_8_with_qmax) {
11412     TEST_REQUIRES_X86_SSE;
11413     for (uint32_t channels = 16; channels < 128; channels += 24) {
11414       DWConvMicrokernelTester()
11415         .cr(8)
11416         .kr(4)
11417         .channels(channels)
11418         .qmax(128)
11419         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11420     }
11421   }
11422 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,c_lt_8)11423   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_lt_8) {
11424     TEST_REQUIRES_X86_SSE;
11425     for (uint32_t channels = 1; channels < 8; channels++) {
11426       DWConvMicrokernelTester()
11427         .cr(8)
11428         .kr(4)
11429         .channels(channels)
11430         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11431     }
11432   }
11433 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,c_gt_8)11434   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_gt_8) {
11435     TEST_REQUIRES_X86_SSE;
11436     for (uint32_t channels = 9; channels < 16; channels++) {
11437       DWConvMicrokernelTester()
11438         .cr(8)
11439         .kr(4)
11440         .channels(channels)
11441         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11442     }
11443   }
11444 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,c_gt_8_with_qmin)11445   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_gt_8_with_qmin) {
11446     TEST_REQUIRES_X86_SSE;
11447     for (uint32_t channels = 9; channels < 16; channels++) {
11448       DWConvMicrokernelTester()
11449         .cr(8)
11450         .kr(4)
11451         .channels(channels)
11452         .qmin(128)
11453         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11454     }
11455   }
11456 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,c_gt_8_with_qmax)11457   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_gt_8_with_qmax) {
11458     TEST_REQUIRES_X86_SSE;
11459     for (uint32_t channels = 9; channels < 16; channels++) {
11460       DWConvMicrokernelTester()
11461         .cr(8)
11462         .kr(4)
11463         .channels(channels)
11464         .qmax(128)
11465         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11466     }
11467   }
11468 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,multipixel)11469   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel) {
11470     TEST_REQUIRES_X86_SSE;
11471     for (size_t channels = 1; channels <= 40; channels += 7) {
11472       DWConvMicrokernelTester()
11473         .cr(8)
11474         .kr(4)
11475         .channels(channels)
11476         .width(3)
11477         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11478     }
11479   }
11480 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,multipixel_with_step)11481   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_step) {
11482     TEST_REQUIRES_X86_SSE;
11483     for (size_t channels = 1; channels <= 40; channels += 7) {
11484       for (size_t step = 2; step <= 4; step++) {
11485         DWConvMicrokernelTester()
11486           .cr(8)
11487           .kr(4)
11488           .channels(channels)
11489           .width(3)
11490           .step(step)
11491           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11492       }
11493     }
11494   }
11495 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,multipixel_with_output_stride)11496   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_output_stride) {
11497     TEST_REQUIRES_X86_SSE;
11498     for (size_t channels = 1; channels <= 40; channels += 7) {
11499       DWConvMicrokernelTester()
11500         .cr(8)
11501         .kr(4)
11502         .channels(8)
11503         .width(5)
11504         .output_stride(43)
11505         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11506     }
11507   }
11508 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,multipixel_with_qmin)11509   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_qmin) {
11510     TEST_REQUIRES_X86_SSE;
11511     for (size_t channels = 1; channels <= 40; channels += 7) {
11512       DWConvMicrokernelTester()
11513         .cr(8)
11514         .kr(4)
11515         .channels(channels)
11516         .width(3)
11517         .qmin(128)
11518         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11519     }
11520   }
11521 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,multipixel_with_qmax)11522   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_qmax) {
11523     TEST_REQUIRES_X86_SSE;
11524     for (size_t channels = 1; channels <= 40; channels += 7) {
11525       DWConvMicrokernelTester()
11526         .cr(8)
11527         .kr(4)
11528         .channels(channels)
11529         .width(3)
11530         .qmax(128)
11531         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11532     }
11533   }
11534 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,input_offset)11535   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, input_offset) {
11536     TEST_REQUIRES_X86_SSE;
11537     for (uint32_t channels = 16; channels < 128; channels += 24) {
11538       DWConvMicrokernelTester()
11539         .cr(8)
11540         .kr(4)
11541         .channels(channels)
11542         .input_offset(176)
11543         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11544     }
11545   }
11546 
TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2,zero)11547   TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, zero) {
11548     TEST_REQUIRES_X86_SSE;
11549     for (uint32_t mz = 0; mz < 4; mz++) {
11550       for (uint32_t channels = 16; channels < 128; channels += 24) {
11551         DWConvMicrokernelTester()
11552           .cr(8)
11553           .kr(4)
11554           .channels(channels)
11555           .input_offset(176)
11556           .zero_index(mz)
11557           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
11558       }
11559     }
11560   }
11561 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11562 
11563 
11564 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,c_eq_8)11565   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_eq_8) {
11566     TEST_REQUIRES_X86_SSE;
11567     DWConvMicrokernelTester()
11568       .cr(8)
11569       .kr(9)
11570       .channels(8)
11571       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11572   }
11573 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,c_div_8)11574   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_div_8) {
11575     TEST_REQUIRES_X86_SSE;
11576     for (uint32_t channels = 16; channels < 128; channels += 24) {
11577       DWConvMicrokernelTester()
11578         .cr(8)
11579         .kr(9)
11580         .channels(channels)
11581         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11582     }
11583   }
11584 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,c_div_8_with_qmin)11585   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_div_8_with_qmin) {
11586     TEST_REQUIRES_X86_SSE;
11587     for (uint32_t channels = 16; channels < 128; channels += 24) {
11588       DWConvMicrokernelTester()
11589         .cr(8)
11590         .kr(9)
11591         .channels(channels)
11592         .qmin(128)
11593         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11594     }
11595   }
11596 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,c_div_8_with_qmax)11597   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_div_8_with_qmax) {
11598     TEST_REQUIRES_X86_SSE;
11599     for (uint32_t channels = 16; channels < 128; channels += 24) {
11600       DWConvMicrokernelTester()
11601         .cr(8)
11602         .kr(9)
11603         .channels(channels)
11604         .qmax(128)
11605         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11606     }
11607   }
11608 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,c_lt_8)11609   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_lt_8) {
11610     TEST_REQUIRES_X86_SSE;
11611     for (uint32_t channels = 1; channels < 8; channels++) {
11612       DWConvMicrokernelTester()
11613         .cr(8)
11614         .kr(9)
11615         .channels(channels)
11616         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11617     }
11618   }
11619 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,c_gt_8)11620   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_gt_8) {
11621     TEST_REQUIRES_X86_SSE;
11622     for (uint32_t channels = 9; channels < 16; channels++) {
11623       DWConvMicrokernelTester()
11624         .cr(8)
11625         .kr(9)
11626         .channels(channels)
11627         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11628     }
11629   }
11630 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,c_gt_8_with_qmin)11631   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_gt_8_with_qmin) {
11632     TEST_REQUIRES_X86_SSE;
11633     for (uint32_t channels = 9; channels < 16; channels++) {
11634       DWConvMicrokernelTester()
11635         .cr(8)
11636         .kr(9)
11637         .channels(channels)
11638         .qmin(128)
11639         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11640     }
11641   }
11642 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,c_gt_8_with_qmax)11643   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_gt_8_with_qmax) {
11644     TEST_REQUIRES_X86_SSE;
11645     for (uint32_t channels = 9; channels < 16; channels++) {
11646       DWConvMicrokernelTester()
11647         .cr(8)
11648         .kr(9)
11649         .channels(channels)
11650         .qmax(128)
11651         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11652     }
11653   }
11654 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,multipixel)11655   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel) {
11656     TEST_REQUIRES_X86_SSE;
11657     for (size_t channels = 1; channels <= 40; channels += 7) {
11658       DWConvMicrokernelTester()
11659         .cr(8)
11660         .kr(9)
11661         .channels(channels)
11662         .width(3)
11663         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11664     }
11665   }
11666 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,multipixel_with_step)11667   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_step) {
11668     TEST_REQUIRES_X86_SSE;
11669     for (size_t channels = 1; channels <= 40; channels += 7) {
11670       for (size_t step = 2; step <= 9; step++) {
11671         DWConvMicrokernelTester()
11672           .cr(8)
11673           .kr(9)
11674           .channels(channels)
11675           .width(3)
11676           .step(step)
11677           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11678       }
11679     }
11680   }
11681 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,multipixel_with_output_stride)11682   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_output_stride) {
11683     TEST_REQUIRES_X86_SSE;
11684     for (size_t channels = 1; channels <= 40; channels += 7) {
11685       DWConvMicrokernelTester()
11686         .cr(8)
11687         .kr(9)
11688         .channels(8)
11689         .width(5)
11690         .output_stride(43)
11691         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11692     }
11693   }
11694 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,multipixel_with_qmin)11695   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_qmin) {
11696     TEST_REQUIRES_X86_SSE;
11697     for (size_t channels = 1; channels <= 40; channels += 7) {
11698       DWConvMicrokernelTester()
11699         .cr(8)
11700         .kr(9)
11701         .channels(channels)
11702         .width(3)
11703         .qmin(128)
11704         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11705     }
11706   }
11707 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,multipixel_with_qmax)11708   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_qmax) {
11709     TEST_REQUIRES_X86_SSE;
11710     for (size_t channels = 1; channels <= 40; channels += 7) {
11711       DWConvMicrokernelTester()
11712         .cr(8)
11713         .kr(9)
11714         .channels(channels)
11715         .width(3)
11716         .qmax(128)
11717         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11718     }
11719   }
11720 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,input_offset)11721   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, input_offset) {
11722     TEST_REQUIRES_X86_SSE;
11723     for (uint32_t channels = 16; channels < 128; channels += 24) {
11724       DWConvMicrokernelTester()
11725         .cr(8)
11726         .kr(9)
11727         .channels(channels)
11728         .input_offset(176)
11729         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11730     }
11731   }
11732 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE,zero)11733   TEST(F32_DWCONV_MINMAX_UP8X9__SSE, zero) {
11734     TEST_REQUIRES_X86_SSE;
11735     for (uint32_t mz = 0; mz < 9; mz++) {
11736       for (uint32_t channels = 16; channels < 128; channels += 24) {
11737         DWConvMicrokernelTester()
11738           .cr(8)
11739           .kr(9)
11740           .channels(channels)
11741           .input_offset(176)
11742           .zero_index(mz)
11743           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
11744       }
11745     }
11746   }
11747 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11748 
11749 
11750 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,c_eq_8)11751   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_eq_8) {
11752     TEST_REQUIRES_X86_SSE;
11753     DWConvMicrokernelTester()
11754       .cr(8)
11755       .kr(9)
11756       .channels(8)
11757       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11758   }
11759 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,c_div_8)11760   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_div_8) {
11761     TEST_REQUIRES_X86_SSE;
11762     for (uint32_t channels = 16; channels < 128; channels += 24) {
11763       DWConvMicrokernelTester()
11764         .cr(8)
11765         .kr(9)
11766         .channels(channels)
11767         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11768     }
11769   }
11770 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,c_div_8_with_qmin)11771   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_div_8_with_qmin) {
11772     TEST_REQUIRES_X86_SSE;
11773     for (uint32_t channels = 16; channels < 128; channels += 24) {
11774       DWConvMicrokernelTester()
11775         .cr(8)
11776         .kr(9)
11777         .channels(channels)
11778         .qmin(128)
11779         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11780     }
11781   }
11782 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,c_div_8_with_qmax)11783   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_div_8_with_qmax) {
11784     TEST_REQUIRES_X86_SSE;
11785     for (uint32_t channels = 16; channels < 128; channels += 24) {
11786       DWConvMicrokernelTester()
11787         .cr(8)
11788         .kr(9)
11789         .channels(channels)
11790         .qmax(128)
11791         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11792     }
11793   }
11794 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,c_lt_8)11795   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_lt_8) {
11796     TEST_REQUIRES_X86_SSE;
11797     for (uint32_t channels = 1; channels < 8; channels++) {
11798       DWConvMicrokernelTester()
11799         .cr(8)
11800         .kr(9)
11801         .channels(channels)
11802         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11803     }
11804   }
11805 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,c_gt_8)11806   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_gt_8) {
11807     TEST_REQUIRES_X86_SSE;
11808     for (uint32_t channels = 9; channels < 16; channels++) {
11809       DWConvMicrokernelTester()
11810         .cr(8)
11811         .kr(9)
11812         .channels(channels)
11813         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11814     }
11815   }
11816 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,c_gt_8_with_qmin)11817   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_gt_8_with_qmin) {
11818     TEST_REQUIRES_X86_SSE;
11819     for (uint32_t channels = 9; channels < 16; channels++) {
11820       DWConvMicrokernelTester()
11821         .cr(8)
11822         .kr(9)
11823         .channels(channels)
11824         .qmin(128)
11825         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11826     }
11827   }
11828 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,c_gt_8_with_qmax)11829   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_gt_8_with_qmax) {
11830     TEST_REQUIRES_X86_SSE;
11831     for (uint32_t channels = 9; channels < 16; channels++) {
11832       DWConvMicrokernelTester()
11833         .cr(8)
11834         .kr(9)
11835         .channels(channels)
11836         .qmax(128)
11837         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11838     }
11839   }
11840 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,multipixel)11841   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel) {
11842     TEST_REQUIRES_X86_SSE;
11843     for (size_t channels = 1; channels <= 40; channels += 7) {
11844       DWConvMicrokernelTester()
11845         .cr(8)
11846         .kr(9)
11847         .channels(channels)
11848         .width(3)
11849         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11850     }
11851   }
11852 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,multipixel_with_step)11853   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_step) {
11854     TEST_REQUIRES_X86_SSE;
11855     for (size_t channels = 1; channels <= 40; channels += 7) {
11856       for (size_t step = 2; step <= 9; step++) {
11857         DWConvMicrokernelTester()
11858           .cr(8)
11859           .kr(9)
11860           .channels(channels)
11861           .width(3)
11862           .step(step)
11863           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11864       }
11865     }
11866   }
11867 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,multipixel_with_output_stride)11868   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_output_stride) {
11869     TEST_REQUIRES_X86_SSE;
11870     for (size_t channels = 1; channels <= 40; channels += 7) {
11871       DWConvMicrokernelTester()
11872         .cr(8)
11873         .kr(9)
11874         .channels(8)
11875         .width(5)
11876         .output_stride(43)
11877         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11878     }
11879   }
11880 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,multipixel_with_qmin)11881   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_qmin) {
11882     TEST_REQUIRES_X86_SSE;
11883     for (size_t channels = 1; channels <= 40; channels += 7) {
11884       DWConvMicrokernelTester()
11885         .cr(8)
11886         .kr(9)
11887         .channels(channels)
11888         .width(3)
11889         .qmin(128)
11890         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11891     }
11892   }
11893 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,multipixel_with_qmax)11894   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_qmax) {
11895     TEST_REQUIRES_X86_SSE;
11896     for (size_t channels = 1; channels <= 40; channels += 7) {
11897       DWConvMicrokernelTester()
11898         .cr(8)
11899         .kr(9)
11900         .channels(channels)
11901         .width(3)
11902         .qmax(128)
11903         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11904     }
11905   }
11906 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,input_offset)11907   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, input_offset) {
11908     TEST_REQUIRES_X86_SSE;
11909     for (uint32_t channels = 16; channels < 128; channels += 24) {
11910       DWConvMicrokernelTester()
11911         .cr(8)
11912         .kr(9)
11913         .channels(channels)
11914         .input_offset(176)
11915         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11916     }
11917   }
11918 
TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2,zero)11919   TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, zero) {
11920     TEST_REQUIRES_X86_SSE;
11921     for (uint32_t mz = 0; mz < 9; mz++) {
11922       for (uint32_t channels = 16; channels < 128; channels += 24) {
11923         DWConvMicrokernelTester()
11924           .cr(8)
11925           .kr(9)
11926           .channels(channels)
11927           .input_offset(176)
11928           .zero_index(mz)
11929           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
11930       }
11931     }
11932   }
11933 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
11934 
11935 
11936 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,c_eq_8)11937   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_eq_8) {
11938     TEST_REQUIRES_X86_SSE;
11939     DWConvMicrokernelTester()
11940       .cr(8)
11941       .kr(25)
11942       .channels(8)
11943       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
11944   }
11945 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,c_div_8)11946   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_div_8) {
11947     TEST_REQUIRES_X86_SSE;
11948     for (uint32_t channels = 16; channels < 128; channels += 24) {
11949       DWConvMicrokernelTester()
11950         .cr(8)
11951         .kr(25)
11952         .channels(channels)
11953         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
11954     }
11955   }
11956 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,c_div_8_with_qmin)11957   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_div_8_with_qmin) {
11958     TEST_REQUIRES_X86_SSE;
11959     for (uint32_t channels = 16; channels < 128; channels += 24) {
11960       DWConvMicrokernelTester()
11961         .cr(8)
11962         .kr(25)
11963         .channels(channels)
11964         .qmin(128)
11965         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
11966     }
11967   }
11968 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,c_div_8_with_qmax)11969   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_div_8_with_qmax) {
11970     TEST_REQUIRES_X86_SSE;
11971     for (uint32_t channels = 16; channels < 128; channels += 24) {
11972       DWConvMicrokernelTester()
11973         .cr(8)
11974         .kr(25)
11975         .channels(channels)
11976         .qmax(128)
11977         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
11978     }
11979   }
11980 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,c_lt_8)11981   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_lt_8) {
11982     TEST_REQUIRES_X86_SSE;
11983     for (uint32_t channels = 1; channels < 8; channels++) {
11984       DWConvMicrokernelTester()
11985         .cr(8)
11986         .kr(25)
11987         .channels(channels)
11988         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
11989     }
11990   }
11991 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,c_gt_8)11992   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_gt_8) {
11993     TEST_REQUIRES_X86_SSE;
11994     for (uint32_t channels = 9; channels < 16; channels++) {
11995       DWConvMicrokernelTester()
11996         .cr(8)
11997         .kr(25)
11998         .channels(channels)
11999         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
12000     }
12001   }
12002 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,c_gt_8_with_qmin)12003   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_gt_8_with_qmin) {
12004     TEST_REQUIRES_X86_SSE;
12005     for (uint32_t channels = 9; channels < 16; channels++) {
12006       DWConvMicrokernelTester()
12007         .cr(8)
12008         .kr(25)
12009         .channels(channels)
12010         .qmin(128)
12011         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
12012     }
12013   }
12014 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,c_gt_8_with_qmax)12015   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_gt_8_with_qmax) {
12016     TEST_REQUIRES_X86_SSE;
12017     for (uint32_t channels = 9; channels < 16; channels++) {
12018       DWConvMicrokernelTester()
12019         .cr(8)
12020         .kr(25)
12021         .channels(channels)
12022         .qmax(128)
12023         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
12024     }
12025   }
12026 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,multipixel)12027   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel) {
12028     TEST_REQUIRES_X86_SSE;
12029     for (size_t channels = 1; channels <= 40; channels += 7) {
12030       DWConvMicrokernelTester()
12031         .cr(8)
12032         .kr(25)
12033         .channels(channels)
12034         .width(3)
12035         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
12036     }
12037   }
12038 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,multipixel_with_step)12039   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_step) {
12040     TEST_REQUIRES_X86_SSE;
12041     for (size_t channels = 1; channels <= 40; channels += 7) {
12042       for (size_t step = 2; step <= 25; step++) {
12043         DWConvMicrokernelTester()
12044           .cr(8)
12045           .kr(25)
12046           .channels(channels)
12047           .width(3)
12048           .step(step)
12049           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
12050       }
12051     }
12052   }
12053 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,multipixel_with_output_stride)12054   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_output_stride) {
12055     TEST_REQUIRES_X86_SSE;
12056     for (size_t channels = 1; channels <= 40; channels += 7) {
12057       DWConvMicrokernelTester()
12058         .cr(8)
12059         .kr(25)
12060         .channels(8)
12061         .width(5)
12062         .output_stride(43)
12063         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
12064     }
12065   }
12066 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,multipixel_with_qmin)12067   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_qmin) {
12068     TEST_REQUIRES_X86_SSE;
12069     for (size_t channels = 1; channels <= 40; channels += 7) {
12070       DWConvMicrokernelTester()
12071         .cr(8)
12072         .kr(25)
12073         .channels(channels)
12074         .width(3)
12075         .qmin(128)
12076         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
12077     }
12078   }
12079 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,multipixel_with_qmax)12080   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_qmax) {
12081     TEST_REQUIRES_X86_SSE;
12082     for (size_t channels = 1; channels <= 40; channels += 7) {
12083       DWConvMicrokernelTester()
12084         .cr(8)
12085         .kr(25)
12086         .channels(channels)
12087         .width(3)
12088         .qmax(128)
12089         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
12090     }
12091   }
12092 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,input_offset)12093   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, input_offset) {
12094     TEST_REQUIRES_X86_SSE;
12095     for (uint32_t channels = 16; channels < 128; channels += 24) {
12096       DWConvMicrokernelTester()
12097         .cr(8)
12098         .kr(25)
12099         .channels(channels)
12100         .input_offset(176)
12101         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
12102     }
12103   }
12104 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE,zero)12105   TEST(F32_DWCONV_MINMAX_UP8X25__SSE, zero) {
12106     TEST_REQUIRES_X86_SSE;
12107     for (uint32_t mz = 0; mz < 25; mz++) {
12108       for (uint32_t channels = 16; channels < 128; channels += 24) {
12109         DWConvMicrokernelTester()
12110           .cr(8)
12111           .kr(25)
12112           .channels(channels)
12113           .input_offset(176)
12114           .zero_index(mz)
12115           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
12116       }
12117     }
12118   }
12119 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12120 
12121 
12122 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,c_eq_8)12123   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_eq_8) {
12124     TEST_REQUIRES_X86_SSE;
12125     DWConvMicrokernelTester()
12126       .cr(8)
12127       .kr(25)
12128       .channels(8)
12129       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12130   }
12131 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,c_div_8)12132   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_div_8) {
12133     TEST_REQUIRES_X86_SSE;
12134     for (uint32_t channels = 16; channels < 128; channels += 24) {
12135       DWConvMicrokernelTester()
12136         .cr(8)
12137         .kr(25)
12138         .channels(channels)
12139         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12140     }
12141   }
12142 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,c_div_8_with_qmin)12143   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_div_8_with_qmin) {
12144     TEST_REQUIRES_X86_SSE;
12145     for (uint32_t channels = 16; channels < 128; channels += 24) {
12146       DWConvMicrokernelTester()
12147         .cr(8)
12148         .kr(25)
12149         .channels(channels)
12150         .qmin(128)
12151         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12152     }
12153   }
12154 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,c_div_8_with_qmax)12155   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_div_8_with_qmax) {
12156     TEST_REQUIRES_X86_SSE;
12157     for (uint32_t channels = 16; channels < 128; channels += 24) {
12158       DWConvMicrokernelTester()
12159         .cr(8)
12160         .kr(25)
12161         .channels(channels)
12162         .qmax(128)
12163         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12164     }
12165   }
12166 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,c_lt_8)12167   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_lt_8) {
12168     TEST_REQUIRES_X86_SSE;
12169     for (uint32_t channels = 1; channels < 8; channels++) {
12170       DWConvMicrokernelTester()
12171         .cr(8)
12172         .kr(25)
12173         .channels(channels)
12174         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12175     }
12176   }
12177 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,c_gt_8)12178   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_gt_8) {
12179     TEST_REQUIRES_X86_SSE;
12180     for (uint32_t channels = 9; channels < 16; channels++) {
12181       DWConvMicrokernelTester()
12182         .cr(8)
12183         .kr(25)
12184         .channels(channels)
12185         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12186     }
12187   }
12188 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,c_gt_8_with_qmin)12189   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_gt_8_with_qmin) {
12190     TEST_REQUIRES_X86_SSE;
12191     for (uint32_t channels = 9; channels < 16; channels++) {
12192       DWConvMicrokernelTester()
12193         .cr(8)
12194         .kr(25)
12195         .channels(channels)
12196         .qmin(128)
12197         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12198     }
12199   }
12200 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,c_gt_8_with_qmax)12201   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_gt_8_with_qmax) {
12202     TEST_REQUIRES_X86_SSE;
12203     for (uint32_t channels = 9; channels < 16; channels++) {
12204       DWConvMicrokernelTester()
12205         .cr(8)
12206         .kr(25)
12207         .channels(channels)
12208         .qmax(128)
12209         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12210     }
12211   }
12212 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,multipixel)12213   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel) {
12214     TEST_REQUIRES_X86_SSE;
12215     for (size_t channels = 1; channels <= 40; channels += 7) {
12216       DWConvMicrokernelTester()
12217         .cr(8)
12218         .kr(25)
12219         .channels(channels)
12220         .width(3)
12221         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12222     }
12223   }
12224 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,multipixel_with_step)12225   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_step) {
12226     TEST_REQUIRES_X86_SSE;
12227     for (size_t channels = 1; channels <= 40; channels += 7) {
12228       for (size_t step = 2; step <= 25; step++) {
12229         DWConvMicrokernelTester()
12230           .cr(8)
12231           .kr(25)
12232           .channels(channels)
12233           .width(3)
12234           .step(step)
12235           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12236       }
12237     }
12238   }
12239 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,multipixel_with_output_stride)12240   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_output_stride) {
12241     TEST_REQUIRES_X86_SSE;
12242     for (size_t channels = 1; channels <= 40; channels += 7) {
12243       DWConvMicrokernelTester()
12244         .cr(8)
12245         .kr(25)
12246         .channels(8)
12247         .width(5)
12248         .output_stride(43)
12249         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12250     }
12251   }
12252 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,multipixel_with_qmin)12253   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_qmin) {
12254     TEST_REQUIRES_X86_SSE;
12255     for (size_t channels = 1; channels <= 40; channels += 7) {
12256       DWConvMicrokernelTester()
12257         .cr(8)
12258         .kr(25)
12259         .channels(channels)
12260         .width(3)
12261         .qmin(128)
12262         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12263     }
12264   }
12265 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,multipixel_with_qmax)12266   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_qmax) {
12267     TEST_REQUIRES_X86_SSE;
12268     for (size_t channels = 1; channels <= 40; channels += 7) {
12269       DWConvMicrokernelTester()
12270         .cr(8)
12271         .kr(25)
12272         .channels(channels)
12273         .width(3)
12274         .qmax(128)
12275         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12276     }
12277   }
12278 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,input_offset)12279   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, input_offset) {
12280     TEST_REQUIRES_X86_SSE;
12281     for (uint32_t channels = 16; channels < 128; channels += 24) {
12282       DWConvMicrokernelTester()
12283         .cr(8)
12284         .kr(25)
12285         .channels(channels)
12286         .input_offset(176)
12287         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12288     }
12289   }
12290 
TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2,zero)12291   TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, zero) {
12292     TEST_REQUIRES_X86_SSE;
12293     for (uint32_t mz = 0; mz < 25; mz++) {
12294       for (uint32_t channels = 16; channels < 128; channels += 24) {
12295         DWConvMicrokernelTester()
12296           .cr(8)
12297           .kr(25)
12298           .channels(channels)
12299           .input_offset(176)
12300           .zero_index(mz)
12301           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
12302       }
12303     }
12304   }
12305 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12306 
12307 
12308 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,c_eq_8)12309   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_eq_8) {
12310     TEST_REQUIRES_X86_AVX;
12311     DWConvMicrokernelTester()
12312       .cr(8)
12313       .kr(3)
12314       .channels(8)
12315       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12316   }
12317 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,c_div_8)12318   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_div_8) {
12319     TEST_REQUIRES_X86_AVX;
12320     for (uint32_t channels = 16; channels < 128; channels += 24) {
12321       DWConvMicrokernelTester()
12322         .cr(8)
12323         .kr(3)
12324         .channels(channels)
12325         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12326     }
12327   }
12328 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,c_div_8_with_qmin)12329   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_div_8_with_qmin) {
12330     TEST_REQUIRES_X86_AVX;
12331     for (uint32_t channels = 16; channels < 128; channels += 24) {
12332       DWConvMicrokernelTester()
12333         .cr(8)
12334         .kr(3)
12335         .channels(channels)
12336         .qmin(128)
12337         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12338     }
12339   }
12340 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,c_div_8_with_qmax)12341   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_div_8_with_qmax) {
12342     TEST_REQUIRES_X86_AVX;
12343     for (uint32_t channels = 16; channels < 128; channels += 24) {
12344       DWConvMicrokernelTester()
12345         .cr(8)
12346         .kr(3)
12347         .channels(channels)
12348         .qmax(128)
12349         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12350     }
12351   }
12352 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,c_lt_8)12353   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_lt_8) {
12354     TEST_REQUIRES_X86_AVX;
12355     for (uint32_t channels = 1; channels < 8; channels++) {
12356       DWConvMicrokernelTester()
12357         .cr(8)
12358         .kr(3)
12359         .channels(channels)
12360         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12361     }
12362   }
12363 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,c_gt_8)12364   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_gt_8) {
12365     TEST_REQUIRES_X86_AVX;
12366     for (uint32_t channels = 9; channels < 16; channels++) {
12367       DWConvMicrokernelTester()
12368         .cr(8)
12369         .kr(3)
12370         .channels(channels)
12371         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12372     }
12373   }
12374 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,c_gt_8_with_qmin)12375   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_gt_8_with_qmin) {
12376     TEST_REQUIRES_X86_AVX;
12377     for (uint32_t channels = 9; channels < 16; channels++) {
12378       DWConvMicrokernelTester()
12379         .cr(8)
12380         .kr(3)
12381         .channels(channels)
12382         .qmin(128)
12383         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12384     }
12385   }
12386 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,c_gt_8_with_qmax)12387   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_gt_8_with_qmax) {
12388     TEST_REQUIRES_X86_AVX;
12389     for (uint32_t channels = 9; channels < 16; channels++) {
12390       DWConvMicrokernelTester()
12391         .cr(8)
12392         .kr(3)
12393         .channels(channels)
12394         .qmax(128)
12395         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12396     }
12397   }
12398 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,multipixel)12399   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, multipixel) {
12400     TEST_REQUIRES_X86_AVX;
12401     for (size_t channels = 1; channels <= 40; channels += 7) {
12402       DWConvMicrokernelTester()
12403         .cr(8)
12404         .kr(3)
12405         .channels(channels)
12406         .width(3)
12407         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12408     }
12409   }
12410 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,multipixel_with_step)12411   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, multipixel_with_step) {
12412     TEST_REQUIRES_X86_AVX;
12413     for (size_t channels = 1; channels <= 40; channels += 7) {
12414       for (size_t step = 2; step <= 3; step++) {
12415         DWConvMicrokernelTester()
12416           .cr(8)
12417           .kr(3)
12418           .channels(channels)
12419           .width(3)
12420           .step(step)
12421           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12422       }
12423     }
12424   }
12425 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,multipixel_with_output_stride)12426   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, multipixel_with_output_stride) {
12427     TEST_REQUIRES_X86_AVX;
12428     for (size_t channels = 1; channels <= 40; channels += 7) {
12429       DWConvMicrokernelTester()
12430         .cr(8)
12431         .kr(3)
12432         .channels(8)
12433         .width(5)
12434         .output_stride(43)
12435         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12436     }
12437   }
12438 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,multipixel_with_qmin)12439   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, multipixel_with_qmin) {
12440     TEST_REQUIRES_X86_AVX;
12441     for (size_t channels = 1; channels <= 40; channels += 7) {
12442       DWConvMicrokernelTester()
12443         .cr(8)
12444         .kr(3)
12445         .channels(channels)
12446         .width(3)
12447         .qmin(128)
12448         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12449     }
12450   }
12451 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,multipixel_with_qmax)12452   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, multipixel_with_qmax) {
12453     TEST_REQUIRES_X86_AVX;
12454     for (size_t channels = 1; channels <= 40; channels += 7) {
12455       DWConvMicrokernelTester()
12456         .cr(8)
12457         .kr(3)
12458         .channels(channels)
12459         .width(3)
12460         .qmax(128)
12461         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12462     }
12463   }
12464 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,input_offset)12465   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, input_offset) {
12466     TEST_REQUIRES_X86_AVX;
12467     for (uint32_t channels = 16; channels < 128; channels += 24) {
12468       DWConvMicrokernelTester()
12469         .cr(8)
12470         .kr(3)
12471         .channels(channels)
12472         .input_offset(176)
12473         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12474     }
12475   }
12476 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX,zero)12477   TEST(F32_DWCONV_MINMAX_UP8X3__AVX, zero) {
12478     TEST_REQUIRES_X86_AVX;
12479     for (uint32_t mz = 0; mz < 3; mz++) {
12480       for (uint32_t channels = 16; channels < 128; channels += 24) {
12481         DWConvMicrokernelTester()
12482           .cr(8)
12483           .kr(3)
12484           .channels(channels)
12485           .input_offset(176)
12486           .zero_index(mz)
12487           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
12488       }
12489     }
12490   }
12491 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12492 
12493 
12494 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,c_eq_8)12495   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_eq_8) {
12496     TEST_REQUIRES_X86_AVX;
12497     DWConvMicrokernelTester()
12498       .cr(8)
12499       .kr(3)
12500       .channels(8)
12501       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12502   }
12503 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,c_div_8)12504   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_div_8) {
12505     TEST_REQUIRES_X86_AVX;
12506     for (uint32_t channels = 16; channels < 128; channels += 24) {
12507       DWConvMicrokernelTester()
12508         .cr(8)
12509         .kr(3)
12510         .channels(channels)
12511         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12512     }
12513   }
12514 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,c_div_8_with_qmin)12515   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_div_8_with_qmin) {
12516     TEST_REQUIRES_X86_AVX;
12517     for (uint32_t channels = 16; channels < 128; channels += 24) {
12518       DWConvMicrokernelTester()
12519         .cr(8)
12520         .kr(3)
12521         .channels(channels)
12522         .qmin(128)
12523         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12524     }
12525   }
12526 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,c_div_8_with_qmax)12527   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_div_8_with_qmax) {
12528     TEST_REQUIRES_X86_AVX;
12529     for (uint32_t channels = 16; channels < 128; channels += 24) {
12530       DWConvMicrokernelTester()
12531         .cr(8)
12532         .kr(3)
12533         .channels(channels)
12534         .qmax(128)
12535         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12536     }
12537   }
12538 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,c_lt_8)12539   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_lt_8) {
12540     TEST_REQUIRES_X86_AVX;
12541     for (uint32_t channels = 1; channels < 8; channels++) {
12542       DWConvMicrokernelTester()
12543         .cr(8)
12544         .kr(3)
12545         .channels(channels)
12546         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12547     }
12548   }
12549 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,c_gt_8)12550   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_gt_8) {
12551     TEST_REQUIRES_X86_AVX;
12552     for (uint32_t channels = 9; channels < 16; channels++) {
12553       DWConvMicrokernelTester()
12554         .cr(8)
12555         .kr(3)
12556         .channels(channels)
12557         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12558     }
12559   }
12560 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,c_gt_8_with_qmin)12561   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_gt_8_with_qmin) {
12562     TEST_REQUIRES_X86_AVX;
12563     for (uint32_t channels = 9; channels < 16; channels++) {
12564       DWConvMicrokernelTester()
12565         .cr(8)
12566         .kr(3)
12567         .channels(channels)
12568         .qmin(128)
12569         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12570     }
12571   }
12572 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,c_gt_8_with_qmax)12573   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_gt_8_with_qmax) {
12574     TEST_REQUIRES_X86_AVX;
12575     for (uint32_t channels = 9; channels < 16; channels++) {
12576       DWConvMicrokernelTester()
12577         .cr(8)
12578         .kr(3)
12579         .channels(channels)
12580         .qmax(128)
12581         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12582     }
12583   }
12584 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,multipixel)12585   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, multipixel) {
12586     TEST_REQUIRES_X86_AVX;
12587     for (size_t channels = 1; channels <= 40; channels += 7) {
12588       DWConvMicrokernelTester()
12589         .cr(8)
12590         .kr(3)
12591         .channels(channels)
12592         .width(3)
12593         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12594     }
12595   }
12596 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,multipixel_with_step)12597   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, multipixel_with_step) {
12598     TEST_REQUIRES_X86_AVX;
12599     for (size_t channels = 1; channels <= 40; channels += 7) {
12600       for (size_t step = 2; step <= 3; step++) {
12601         DWConvMicrokernelTester()
12602           .cr(8)
12603           .kr(3)
12604           .channels(channels)
12605           .width(3)
12606           .step(step)
12607           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12608       }
12609     }
12610   }
12611 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,multipixel_with_output_stride)12612   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, multipixel_with_output_stride) {
12613     TEST_REQUIRES_X86_AVX;
12614     for (size_t channels = 1; channels <= 40; channels += 7) {
12615       DWConvMicrokernelTester()
12616         .cr(8)
12617         .kr(3)
12618         .channels(8)
12619         .width(5)
12620         .output_stride(43)
12621         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12622     }
12623   }
12624 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,multipixel_with_qmin)12625   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, multipixel_with_qmin) {
12626     TEST_REQUIRES_X86_AVX;
12627     for (size_t channels = 1; channels <= 40; channels += 7) {
12628       DWConvMicrokernelTester()
12629         .cr(8)
12630         .kr(3)
12631         .channels(channels)
12632         .width(3)
12633         .qmin(128)
12634         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12635     }
12636   }
12637 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,multipixel_with_qmax)12638   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, multipixel_with_qmax) {
12639     TEST_REQUIRES_X86_AVX;
12640     for (size_t channels = 1; channels <= 40; channels += 7) {
12641       DWConvMicrokernelTester()
12642         .cr(8)
12643         .kr(3)
12644         .channels(channels)
12645         .width(3)
12646         .qmax(128)
12647         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12648     }
12649   }
12650 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,input_offset)12651   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, input_offset) {
12652     TEST_REQUIRES_X86_AVX;
12653     for (uint32_t channels = 16; channels < 128; channels += 24) {
12654       DWConvMicrokernelTester()
12655         .cr(8)
12656         .kr(3)
12657         .channels(channels)
12658         .input_offset(176)
12659         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12660     }
12661   }
12662 
TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2,zero)12663   TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, zero) {
12664     TEST_REQUIRES_X86_AVX;
12665     for (uint32_t mz = 0; mz < 3; mz++) {
12666       for (uint32_t channels = 16; channels < 128; channels += 24) {
12667         DWConvMicrokernelTester()
12668           .cr(8)
12669           .kr(3)
12670           .channels(channels)
12671           .input_offset(176)
12672           .zero_index(mz)
12673           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
12674       }
12675     }
12676   }
12677 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12678 
12679 
12680 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,c_eq_8)12681   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_eq_8) {
12682     TEST_REQUIRES_X86_AVX;
12683     DWConvMicrokernelTester()
12684       .cr(8)
12685       .kr(4)
12686       .channels(8)
12687       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12688   }
12689 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,c_div_8)12690   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_div_8) {
12691     TEST_REQUIRES_X86_AVX;
12692     for (uint32_t channels = 16; channels < 128; channels += 24) {
12693       DWConvMicrokernelTester()
12694         .cr(8)
12695         .kr(4)
12696         .channels(channels)
12697         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12698     }
12699   }
12700 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,c_div_8_with_qmin)12701   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_div_8_with_qmin) {
12702     TEST_REQUIRES_X86_AVX;
12703     for (uint32_t channels = 16; channels < 128; channels += 24) {
12704       DWConvMicrokernelTester()
12705         .cr(8)
12706         .kr(4)
12707         .channels(channels)
12708         .qmin(128)
12709         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12710     }
12711   }
12712 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,c_div_8_with_qmax)12713   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_div_8_with_qmax) {
12714     TEST_REQUIRES_X86_AVX;
12715     for (uint32_t channels = 16; channels < 128; channels += 24) {
12716       DWConvMicrokernelTester()
12717         .cr(8)
12718         .kr(4)
12719         .channels(channels)
12720         .qmax(128)
12721         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12722     }
12723   }
12724 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,c_lt_8)12725   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_lt_8) {
12726     TEST_REQUIRES_X86_AVX;
12727     for (uint32_t channels = 1; channels < 8; channels++) {
12728       DWConvMicrokernelTester()
12729         .cr(8)
12730         .kr(4)
12731         .channels(channels)
12732         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12733     }
12734   }
12735 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,c_gt_8)12736   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_gt_8) {
12737     TEST_REQUIRES_X86_AVX;
12738     for (uint32_t channels = 9; channels < 16; channels++) {
12739       DWConvMicrokernelTester()
12740         .cr(8)
12741         .kr(4)
12742         .channels(channels)
12743         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12744     }
12745   }
12746 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,c_gt_8_with_qmin)12747   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_gt_8_with_qmin) {
12748     TEST_REQUIRES_X86_AVX;
12749     for (uint32_t channels = 9; channels < 16; channels++) {
12750       DWConvMicrokernelTester()
12751         .cr(8)
12752         .kr(4)
12753         .channels(channels)
12754         .qmin(128)
12755         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12756     }
12757   }
12758 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,c_gt_8_with_qmax)12759   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_gt_8_with_qmax) {
12760     TEST_REQUIRES_X86_AVX;
12761     for (uint32_t channels = 9; channels < 16; channels++) {
12762       DWConvMicrokernelTester()
12763         .cr(8)
12764         .kr(4)
12765         .channels(channels)
12766         .qmax(128)
12767         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12768     }
12769   }
12770 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,multipixel)12771   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel) {
12772     TEST_REQUIRES_X86_AVX;
12773     for (size_t channels = 1; channels <= 40; channels += 7) {
12774       DWConvMicrokernelTester()
12775         .cr(8)
12776         .kr(4)
12777         .channels(channels)
12778         .width(3)
12779         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12780     }
12781   }
12782 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,multipixel_with_step)12783   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_step) {
12784     TEST_REQUIRES_X86_AVX;
12785     for (size_t channels = 1; channels <= 40; channels += 7) {
12786       for (size_t step = 2; step <= 4; step++) {
12787         DWConvMicrokernelTester()
12788           .cr(8)
12789           .kr(4)
12790           .channels(channels)
12791           .width(3)
12792           .step(step)
12793           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12794       }
12795     }
12796   }
12797 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,multipixel_with_output_stride)12798   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_output_stride) {
12799     TEST_REQUIRES_X86_AVX;
12800     for (size_t channels = 1; channels <= 40; channels += 7) {
12801       DWConvMicrokernelTester()
12802         .cr(8)
12803         .kr(4)
12804         .channels(8)
12805         .width(5)
12806         .output_stride(43)
12807         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12808     }
12809   }
12810 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,multipixel_with_qmin)12811   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_qmin) {
12812     TEST_REQUIRES_X86_AVX;
12813     for (size_t channels = 1; channels <= 40; channels += 7) {
12814       DWConvMicrokernelTester()
12815         .cr(8)
12816         .kr(4)
12817         .channels(channels)
12818         .width(3)
12819         .qmin(128)
12820         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12821     }
12822   }
12823 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,multipixel_with_qmax)12824   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_qmax) {
12825     TEST_REQUIRES_X86_AVX;
12826     for (size_t channels = 1; channels <= 40; channels += 7) {
12827       DWConvMicrokernelTester()
12828         .cr(8)
12829         .kr(4)
12830         .channels(channels)
12831         .width(3)
12832         .qmax(128)
12833         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12834     }
12835   }
12836 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,input_offset)12837   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, input_offset) {
12838     TEST_REQUIRES_X86_AVX;
12839     for (uint32_t channels = 16; channels < 128; channels += 24) {
12840       DWConvMicrokernelTester()
12841         .cr(8)
12842         .kr(4)
12843         .channels(channels)
12844         .input_offset(176)
12845         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12846     }
12847   }
12848 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX,zero)12849   TEST(F32_DWCONV_MINMAX_UP8X4__AVX, zero) {
12850     TEST_REQUIRES_X86_AVX;
12851     for (uint32_t mz = 0; mz < 4; mz++) {
12852       for (uint32_t channels = 16; channels < 128; channels += 24) {
12853         DWConvMicrokernelTester()
12854           .cr(8)
12855           .kr(4)
12856           .channels(channels)
12857           .input_offset(176)
12858           .zero_index(mz)
12859           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
12860       }
12861     }
12862   }
12863 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
12864 
12865 
12866 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,c_eq_8)12867   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_eq_8) {
12868     TEST_REQUIRES_X86_AVX;
12869     DWConvMicrokernelTester()
12870       .cr(8)
12871       .kr(4)
12872       .channels(8)
12873       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
12874   }
12875 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,c_div_8)12876   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_div_8) {
12877     TEST_REQUIRES_X86_AVX;
12878     for (uint32_t channels = 16; channels < 128; channels += 24) {
12879       DWConvMicrokernelTester()
12880         .cr(8)
12881         .kr(4)
12882         .channels(channels)
12883         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
12884     }
12885   }
12886 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,c_div_8_with_qmin)12887   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_div_8_with_qmin) {
12888     TEST_REQUIRES_X86_AVX;
12889     for (uint32_t channels = 16; channels < 128; channels += 24) {
12890       DWConvMicrokernelTester()
12891         .cr(8)
12892         .kr(4)
12893         .channels(channels)
12894         .qmin(128)
12895         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
12896     }
12897   }
12898 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,c_div_8_with_qmax)12899   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_div_8_with_qmax) {
12900     TEST_REQUIRES_X86_AVX;
12901     for (uint32_t channels = 16; channels < 128; channels += 24) {
12902       DWConvMicrokernelTester()
12903         .cr(8)
12904         .kr(4)
12905         .channels(channels)
12906         .qmax(128)
12907         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
12908     }
12909   }
12910 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,c_lt_8)12911   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_lt_8) {
12912     TEST_REQUIRES_X86_AVX;
12913     for (uint32_t channels = 1; channels < 8; channels++) {
12914       DWConvMicrokernelTester()
12915         .cr(8)
12916         .kr(4)
12917         .channels(channels)
12918         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
12919     }
12920   }
12921 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,c_gt_8)12922   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_gt_8) {
12923     TEST_REQUIRES_X86_AVX;
12924     for (uint32_t channels = 9; channels < 16; channels++) {
12925       DWConvMicrokernelTester()
12926         .cr(8)
12927         .kr(4)
12928         .channels(channels)
12929         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
12930     }
12931   }
12932 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,c_gt_8_with_qmin)12933   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_gt_8_with_qmin) {
12934     TEST_REQUIRES_X86_AVX;
12935     for (uint32_t channels = 9; channels < 16; channels++) {
12936       DWConvMicrokernelTester()
12937         .cr(8)
12938         .kr(4)
12939         .channels(channels)
12940         .qmin(128)
12941         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
12942     }
12943   }
12944 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,c_gt_8_with_qmax)12945   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_gt_8_with_qmax) {
12946     TEST_REQUIRES_X86_AVX;
12947     for (uint32_t channels = 9; channels < 16; channels++) {
12948       DWConvMicrokernelTester()
12949         .cr(8)
12950         .kr(4)
12951         .channels(channels)
12952         .qmax(128)
12953         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
12954     }
12955   }
12956 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,multipixel)12957   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel) {
12958     TEST_REQUIRES_X86_AVX;
12959     for (size_t channels = 1; channels <= 40; channels += 7) {
12960       DWConvMicrokernelTester()
12961         .cr(8)
12962         .kr(4)
12963         .channels(channels)
12964         .width(3)
12965         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
12966     }
12967   }
12968 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,multipixel_with_step)12969   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_step) {
12970     TEST_REQUIRES_X86_AVX;
12971     for (size_t channels = 1; channels <= 40; channels += 7) {
12972       for (size_t step = 2; step <= 4; step++) {
12973         DWConvMicrokernelTester()
12974           .cr(8)
12975           .kr(4)
12976           .channels(channels)
12977           .width(3)
12978           .step(step)
12979           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
12980       }
12981     }
12982   }
12983 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,multipixel_with_output_stride)12984   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_output_stride) {
12985     TEST_REQUIRES_X86_AVX;
12986     for (size_t channels = 1; channels <= 40; channels += 7) {
12987       DWConvMicrokernelTester()
12988         .cr(8)
12989         .kr(4)
12990         .channels(8)
12991         .width(5)
12992         .output_stride(43)
12993         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
12994     }
12995   }
12996 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,multipixel_with_qmin)12997   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_qmin) {
12998     TEST_REQUIRES_X86_AVX;
12999     for (size_t channels = 1; channels <= 40; channels += 7) {
13000       DWConvMicrokernelTester()
13001         .cr(8)
13002         .kr(4)
13003         .channels(channels)
13004         .width(3)
13005         .qmin(128)
13006         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
13007     }
13008   }
13009 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,multipixel_with_qmax)13010   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_qmax) {
13011     TEST_REQUIRES_X86_AVX;
13012     for (size_t channels = 1; channels <= 40; channels += 7) {
13013       DWConvMicrokernelTester()
13014         .cr(8)
13015         .kr(4)
13016         .channels(channels)
13017         .width(3)
13018         .qmax(128)
13019         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
13020     }
13021   }
13022 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,input_offset)13023   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, input_offset) {
13024     TEST_REQUIRES_X86_AVX;
13025     for (uint32_t channels = 16; channels < 128; channels += 24) {
13026       DWConvMicrokernelTester()
13027         .cr(8)
13028         .kr(4)
13029         .channels(channels)
13030         .input_offset(176)
13031         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
13032     }
13033   }
13034 
TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2,zero)13035   TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, zero) {
13036     TEST_REQUIRES_X86_AVX;
13037     for (uint32_t mz = 0; mz < 4; mz++) {
13038       for (uint32_t channels = 16; channels < 128; channels += 24) {
13039         DWConvMicrokernelTester()
13040           .cr(8)
13041           .kr(4)
13042           .channels(channels)
13043           .input_offset(176)
13044           .zero_index(mz)
13045           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
13046       }
13047     }
13048   }
13049 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13050 
13051 
13052 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,c_eq_8)13053   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_eq_8) {
13054     TEST_REQUIRES_X86_AVX;
13055     DWConvMicrokernelTester()
13056       .cr(8)
13057       .kr(9)
13058       .channels(8)
13059       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13060   }
13061 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,c_div_8)13062   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_div_8) {
13063     TEST_REQUIRES_X86_AVX;
13064     for (uint32_t channels = 16; channels < 128; channels += 24) {
13065       DWConvMicrokernelTester()
13066         .cr(8)
13067         .kr(9)
13068         .channels(channels)
13069         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13070     }
13071   }
13072 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,c_div_8_with_qmin)13073   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_div_8_with_qmin) {
13074     TEST_REQUIRES_X86_AVX;
13075     for (uint32_t channels = 16; channels < 128; channels += 24) {
13076       DWConvMicrokernelTester()
13077         .cr(8)
13078         .kr(9)
13079         .channels(channels)
13080         .qmin(128)
13081         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13082     }
13083   }
13084 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,c_div_8_with_qmax)13085   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_div_8_with_qmax) {
13086     TEST_REQUIRES_X86_AVX;
13087     for (uint32_t channels = 16; channels < 128; channels += 24) {
13088       DWConvMicrokernelTester()
13089         .cr(8)
13090         .kr(9)
13091         .channels(channels)
13092         .qmax(128)
13093         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13094     }
13095   }
13096 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,c_lt_8)13097   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_lt_8) {
13098     TEST_REQUIRES_X86_AVX;
13099     for (uint32_t channels = 1; channels < 8; channels++) {
13100       DWConvMicrokernelTester()
13101         .cr(8)
13102         .kr(9)
13103         .channels(channels)
13104         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13105     }
13106   }
13107 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,c_gt_8)13108   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_gt_8) {
13109     TEST_REQUIRES_X86_AVX;
13110     for (uint32_t channels = 9; channels < 16; channels++) {
13111       DWConvMicrokernelTester()
13112         .cr(8)
13113         .kr(9)
13114         .channels(channels)
13115         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13116     }
13117   }
13118 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,c_gt_8_with_qmin)13119   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_gt_8_with_qmin) {
13120     TEST_REQUIRES_X86_AVX;
13121     for (uint32_t channels = 9; channels < 16; channels++) {
13122       DWConvMicrokernelTester()
13123         .cr(8)
13124         .kr(9)
13125         .channels(channels)
13126         .qmin(128)
13127         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13128     }
13129   }
13130 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,c_gt_8_with_qmax)13131   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_gt_8_with_qmax) {
13132     TEST_REQUIRES_X86_AVX;
13133     for (uint32_t channels = 9; channels < 16; channels++) {
13134       DWConvMicrokernelTester()
13135         .cr(8)
13136         .kr(9)
13137         .channels(channels)
13138         .qmax(128)
13139         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13140     }
13141   }
13142 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,multipixel)13143   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel) {
13144     TEST_REQUIRES_X86_AVX;
13145     for (size_t channels = 1; channels <= 40; channels += 7) {
13146       DWConvMicrokernelTester()
13147         .cr(8)
13148         .kr(9)
13149         .channels(channels)
13150         .width(3)
13151         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13152     }
13153   }
13154 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,multipixel_with_step)13155   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_step) {
13156     TEST_REQUIRES_X86_AVX;
13157     for (size_t channels = 1; channels <= 40; channels += 7) {
13158       for (size_t step = 2; step <= 9; step++) {
13159         DWConvMicrokernelTester()
13160           .cr(8)
13161           .kr(9)
13162           .channels(channels)
13163           .width(3)
13164           .step(step)
13165           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13166       }
13167     }
13168   }
13169 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,multipixel_with_output_stride)13170   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_output_stride) {
13171     TEST_REQUIRES_X86_AVX;
13172     for (size_t channels = 1; channels <= 40; channels += 7) {
13173       DWConvMicrokernelTester()
13174         .cr(8)
13175         .kr(9)
13176         .channels(8)
13177         .width(5)
13178         .output_stride(43)
13179         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13180     }
13181   }
13182 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,multipixel_with_qmin)13183   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_qmin) {
13184     TEST_REQUIRES_X86_AVX;
13185     for (size_t channels = 1; channels <= 40; channels += 7) {
13186       DWConvMicrokernelTester()
13187         .cr(8)
13188         .kr(9)
13189         .channels(channels)
13190         .width(3)
13191         .qmin(128)
13192         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13193     }
13194   }
13195 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,multipixel_with_qmax)13196   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_qmax) {
13197     TEST_REQUIRES_X86_AVX;
13198     for (size_t channels = 1; channels <= 40; channels += 7) {
13199       DWConvMicrokernelTester()
13200         .cr(8)
13201         .kr(9)
13202         .channels(channels)
13203         .width(3)
13204         .qmax(128)
13205         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13206     }
13207   }
13208 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,input_offset)13209   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, input_offset) {
13210     TEST_REQUIRES_X86_AVX;
13211     for (uint32_t channels = 16; channels < 128; channels += 24) {
13212       DWConvMicrokernelTester()
13213         .cr(8)
13214         .kr(9)
13215         .channels(channels)
13216         .input_offset(176)
13217         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13218     }
13219   }
13220 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX,zero)13221   TEST(F32_DWCONV_MINMAX_UP8X9__AVX, zero) {
13222     TEST_REQUIRES_X86_AVX;
13223     for (uint32_t mz = 0; mz < 9; mz++) {
13224       for (uint32_t channels = 16; channels < 128; channels += 24) {
13225         DWConvMicrokernelTester()
13226           .cr(8)
13227           .kr(9)
13228           .channels(channels)
13229           .input_offset(176)
13230           .zero_index(mz)
13231           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
13232       }
13233     }
13234   }
13235 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13236 
13237 
13238 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,c_eq_8)13239   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_eq_8) {
13240     TEST_REQUIRES_X86_AVX;
13241     DWConvMicrokernelTester()
13242       .cr(8)
13243       .kr(9)
13244       .channels(8)
13245       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13246   }
13247 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,c_div_8)13248   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_div_8) {
13249     TEST_REQUIRES_X86_AVX;
13250     for (uint32_t channels = 16; channels < 128; channels += 24) {
13251       DWConvMicrokernelTester()
13252         .cr(8)
13253         .kr(9)
13254         .channels(channels)
13255         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13256     }
13257   }
13258 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,c_div_8_with_qmin)13259   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_div_8_with_qmin) {
13260     TEST_REQUIRES_X86_AVX;
13261     for (uint32_t channels = 16; channels < 128; channels += 24) {
13262       DWConvMicrokernelTester()
13263         .cr(8)
13264         .kr(9)
13265         .channels(channels)
13266         .qmin(128)
13267         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13268     }
13269   }
13270 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,c_div_8_with_qmax)13271   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_div_8_with_qmax) {
13272     TEST_REQUIRES_X86_AVX;
13273     for (uint32_t channels = 16; channels < 128; channels += 24) {
13274       DWConvMicrokernelTester()
13275         .cr(8)
13276         .kr(9)
13277         .channels(channels)
13278         .qmax(128)
13279         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13280     }
13281   }
13282 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,c_lt_8)13283   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_lt_8) {
13284     TEST_REQUIRES_X86_AVX;
13285     for (uint32_t channels = 1; channels < 8; channels++) {
13286       DWConvMicrokernelTester()
13287         .cr(8)
13288         .kr(9)
13289         .channels(channels)
13290         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13291     }
13292   }
13293 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,c_gt_8)13294   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_gt_8) {
13295     TEST_REQUIRES_X86_AVX;
13296     for (uint32_t channels = 9; channels < 16; channels++) {
13297       DWConvMicrokernelTester()
13298         .cr(8)
13299         .kr(9)
13300         .channels(channels)
13301         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13302     }
13303   }
13304 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,c_gt_8_with_qmin)13305   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_gt_8_with_qmin) {
13306     TEST_REQUIRES_X86_AVX;
13307     for (uint32_t channels = 9; channels < 16; channels++) {
13308       DWConvMicrokernelTester()
13309         .cr(8)
13310         .kr(9)
13311         .channels(channels)
13312         .qmin(128)
13313         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13314     }
13315   }
13316 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,c_gt_8_with_qmax)13317   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_gt_8_with_qmax) {
13318     TEST_REQUIRES_X86_AVX;
13319     for (uint32_t channels = 9; channels < 16; channels++) {
13320       DWConvMicrokernelTester()
13321         .cr(8)
13322         .kr(9)
13323         .channels(channels)
13324         .qmax(128)
13325         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13326     }
13327   }
13328 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,multipixel)13329   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel) {
13330     TEST_REQUIRES_X86_AVX;
13331     for (size_t channels = 1; channels <= 40; channels += 7) {
13332       DWConvMicrokernelTester()
13333         .cr(8)
13334         .kr(9)
13335         .channels(channels)
13336         .width(3)
13337         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13338     }
13339   }
13340 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,multipixel_with_step)13341   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_step) {
13342     TEST_REQUIRES_X86_AVX;
13343     for (size_t channels = 1; channels <= 40; channels += 7) {
13344       for (size_t step = 2; step <= 9; step++) {
13345         DWConvMicrokernelTester()
13346           .cr(8)
13347           .kr(9)
13348           .channels(channels)
13349           .width(3)
13350           .step(step)
13351           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13352       }
13353     }
13354   }
13355 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,multipixel_with_output_stride)13356   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_output_stride) {
13357     TEST_REQUIRES_X86_AVX;
13358     for (size_t channels = 1; channels <= 40; channels += 7) {
13359       DWConvMicrokernelTester()
13360         .cr(8)
13361         .kr(9)
13362         .channels(8)
13363         .width(5)
13364         .output_stride(43)
13365         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13366     }
13367   }
13368 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,multipixel_with_qmin)13369   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_qmin) {
13370     TEST_REQUIRES_X86_AVX;
13371     for (size_t channels = 1; channels <= 40; channels += 7) {
13372       DWConvMicrokernelTester()
13373         .cr(8)
13374         .kr(9)
13375         .channels(channels)
13376         .width(3)
13377         .qmin(128)
13378         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13379     }
13380   }
13381 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,multipixel_with_qmax)13382   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_qmax) {
13383     TEST_REQUIRES_X86_AVX;
13384     for (size_t channels = 1; channels <= 40; channels += 7) {
13385       DWConvMicrokernelTester()
13386         .cr(8)
13387         .kr(9)
13388         .channels(channels)
13389         .width(3)
13390         .qmax(128)
13391         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13392     }
13393   }
13394 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,input_offset)13395   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, input_offset) {
13396     TEST_REQUIRES_X86_AVX;
13397     for (uint32_t channels = 16; channels < 128; channels += 24) {
13398       DWConvMicrokernelTester()
13399         .cr(8)
13400         .kr(9)
13401         .channels(channels)
13402         .input_offset(176)
13403         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13404     }
13405   }
13406 
TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2,zero)13407   TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, zero) {
13408     TEST_REQUIRES_X86_AVX;
13409     for (uint32_t mz = 0; mz < 9; mz++) {
13410       for (uint32_t channels = 16; channels < 128; channels += 24) {
13411         DWConvMicrokernelTester()
13412           .cr(8)
13413           .kr(9)
13414           .channels(channels)
13415           .input_offset(176)
13416           .zero_index(mz)
13417           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
13418       }
13419     }
13420   }
13421 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13422 
13423 
13424 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,c_eq_8)13425   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_eq_8) {
13426     TEST_REQUIRES_X86_AVX;
13427     DWConvMicrokernelTester()
13428       .cr(8)
13429       .kr(25)
13430       .channels(8)
13431       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13432   }
13433 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,c_div_8)13434   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_div_8) {
13435     TEST_REQUIRES_X86_AVX;
13436     for (uint32_t channels = 16; channels < 128; channels += 24) {
13437       DWConvMicrokernelTester()
13438         .cr(8)
13439         .kr(25)
13440         .channels(channels)
13441         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13442     }
13443   }
13444 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,c_div_8_with_qmin)13445   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_div_8_with_qmin) {
13446     TEST_REQUIRES_X86_AVX;
13447     for (uint32_t channels = 16; channels < 128; channels += 24) {
13448       DWConvMicrokernelTester()
13449         .cr(8)
13450         .kr(25)
13451         .channels(channels)
13452         .qmin(128)
13453         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13454     }
13455   }
13456 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,c_div_8_with_qmax)13457   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_div_8_with_qmax) {
13458     TEST_REQUIRES_X86_AVX;
13459     for (uint32_t channels = 16; channels < 128; channels += 24) {
13460       DWConvMicrokernelTester()
13461         .cr(8)
13462         .kr(25)
13463         .channels(channels)
13464         .qmax(128)
13465         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13466     }
13467   }
13468 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,c_lt_8)13469   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_lt_8) {
13470     TEST_REQUIRES_X86_AVX;
13471     for (uint32_t channels = 1; channels < 8; channels++) {
13472       DWConvMicrokernelTester()
13473         .cr(8)
13474         .kr(25)
13475         .channels(channels)
13476         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13477     }
13478   }
13479 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,c_gt_8)13480   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_gt_8) {
13481     TEST_REQUIRES_X86_AVX;
13482     for (uint32_t channels = 9; channels < 16; channels++) {
13483       DWConvMicrokernelTester()
13484         .cr(8)
13485         .kr(25)
13486         .channels(channels)
13487         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13488     }
13489   }
13490 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,c_gt_8_with_qmin)13491   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_gt_8_with_qmin) {
13492     TEST_REQUIRES_X86_AVX;
13493     for (uint32_t channels = 9; channels < 16; channels++) {
13494       DWConvMicrokernelTester()
13495         .cr(8)
13496         .kr(25)
13497         .channels(channels)
13498         .qmin(128)
13499         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13500     }
13501   }
13502 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,c_gt_8_with_qmax)13503   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_gt_8_with_qmax) {
13504     TEST_REQUIRES_X86_AVX;
13505     for (uint32_t channels = 9; channels < 16; channels++) {
13506       DWConvMicrokernelTester()
13507         .cr(8)
13508         .kr(25)
13509         .channels(channels)
13510         .qmax(128)
13511         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13512     }
13513   }
13514 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,multipixel)13515   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel) {
13516     TEST_REQUIRES_X86_AVX;
13517     for (size_t channels = 1; channels <= 40; channels += 7) {
13518       DWConvMicrokernelTester()
13519         .cr(8)
13520         .kr(25)
13521         .channels(channels)
13522         .width(3)
13523         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13524     }
13525   }
13526 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,multipixel_with_step)13527   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_step) {
13528     TEST_REQUIRES_X86_AVX;
13529     for (size_t channels = 1; channels <= 40; channels += 7) {
13530       for (size_t step = 2; step <= 25; step++) {
13531         DWConvMicrokernelTester()
13532           .cr(8)
13533           .kr(25)
13534           .channels(channels)
13535           .width(3)
13536           .step(step)
13537           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13538       }
13539     }
13540   }
13541 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,multipixel_with_output_stride)13542   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_output_stride) {
13543     TEST_REQUIRES_X86_AVX;
13544     for (size_t channels = 1; channels <= 40; channels += 7) {
13545       DWConvMicrokernelTester()
13546         .cr(8)
13547         .kr(25)
13548         .channels(8)
13549         .width(5)
13550         .output_stride(43)
13551         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13552     }
13553   }
13554 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,multipixel_with_qmin)13555   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_qmin) {
13556     TEST_REQUIRES_X86_AVX;
13557     for (size_t channels = 1; channels <= 40; channels += 7) {
13558       DWConvMicrokernelTester()
13559         .cr(8)
13560         .kr(25)
13561         .channels(channels)
13562         .width(3)
13563         .qmin(128)
13564         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13565     }
13566   }
13567 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,multipixel_with_qmax)13568   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_qmax) {
13569     TEST_REQUIRES_X86_AVX;
13570     for (size_t channels = 1; channels <= 40; channels += 7) {
13571       DWConvMicrokernelTester()
13572         .cr(8)
13573         .kr(25)
13574         .channels(channels)
13575         .width(3)
13576         .qmax(128)
13577         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13578     }
13579   }
13580 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,input_offset)13581   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, input_offset) {
13582     TEST_REQUIRES_X86_AVX;
13583     for (uint32_t channels = 16; channels < 128; channels += 24) {
13584       DWConvMicrokernelTester()
13585         .cr(8)
13586         .kr(25)
13587         .channels(channels)
13588         .input_offset(176)
13589         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13590     }
13591   }
13592 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX,zero)13593   TEST(F32_DWCONV_MINMAX_UP8X25__AVX, zero) {
13594     TEST_REQUIRES_X86_AVX;
13595     for (uint32_t mz = 0; mz < 25; mz++) {
13596       for (uint32_t channels = 16; channels < 128; channels += 24) {
13597         DWConvMicrokernelTester()
13598           .cr(8)
13599           .kr(25)
13600           .channels(channels)
13601           .input_offset(176)
13602           .zero_index(mz)
13603           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
13604       }
13605     }
13606   }
13607 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13608 
13609 
13610 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,c_eq_8)13611   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_eq_8) {
13612     TEST_REQUIRES_X86_AVX;
13613     DWConvMicrokernelTester()
13614       .cr(8)
13615       .kr(25)
13616       .channels(8)
13617       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13618   }
13619 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,c_div_8)13620   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_div_8) {
13621     TEST_REQUIRES_X86_AVX;
13622     for (uint32_t channels = 16; channels < 128; channels += 24) {
13623       DWConvMicrokernelTester()
13624         .cr(8)
13625         .kr(25)
13626         .channels(channels)
13627         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13628     }
13629   }
13630 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,c_div_8_with_qmin)13631   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_div_8_with_qmin) {
13632     TEST_REQUIRES_X86_AVX;
13633     for (uint32_t channels = 16; channels < 128; channels += 24) {
13634       DWConvMicrokernelTester()
13635         .cr(8)
13636         .kr(25)
13637         .channels(channels)
13638         .qmin(128)
13639         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13640     }
13641   }
13642 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,c_div_8_with_qmax)13643   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_div_8_with_qmax) {
13644     TEST_REQUIRES_X86_AVX;
13645     for (uint32_t channels = 16; channels < 128; channels += 24) {
13646       DWConvMicrokernelTester()
13647         .cr(8)
13648         .kr(25)
13649         .channels(channels)
13650         .qmax(128)
13651         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13652     }
13653   }
13654 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,c_lt_8)13655   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_lt_8) {
13656     TEST_REQUIRES_X86_AVX;
13657     for (uint32_t channels = 1; channels < 8; channels++) {
13658       DWConvMicrokernelTester()
13659         .cr(8)
13660         .kr(25)
13661         .channels(channels)
13662         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13663     }
13664   }
13665 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,c_gt_8)13666   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_gt_8) {
13667     TEST_REQUIRES_X86_AVX;
13668     for (uint32_t channels = 9; channels < 16; channels++) {
13669       DWConvMicrokernelTester()
13670         .cr(8)
13671         .kr(25)
13672         .channels(channels)
13673         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13674     }
13675   }
13676 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,c_gt_8_with_qmin)13677   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_gt_8_with_qmin) {
13678     TEST_REQUIRES_X86_AVX;
13679     for (uint32_t channels = 9; channels < 16; channels++) {
13680       DWConvMicrokernelTester()
13681         .cr(8)
13682         .kr(25)
13683         .channels(channels)
13684         .qmin(128)
13685         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13686     }
13687   }
13688 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,c_gt_8_with_qmax)13689   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_gt_8_with_qmax) {
13690     TEST_REQUIRES_X86_AVX;
13691     for (uint32_t channels = 9; channels < 16; channels++) {
13692       DWConvMicrokernelTester()
13693         .cr(8)
13694         .kr(25)
13695         .channels(channels)
13696         .qmax(128)
13697         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13698     }
13699   }
13700 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,multipixel)13701   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel) {
13702     TEST_REQUIRES_X86_AVX;
13703     for (size_t channels = 1; channels <= 40; channels += 7) {
13704       DWConvMicrokernelTester()
13705         .cr(8)
13706         .kr(25)
13707         .channels(channels)
13708         .width(3)
13709         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13710     }
13711   }
13712 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,multipixel_with_step)13713   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_step) {
13714     TEST_REQUIRES_X86_AVX;
13715     for (size_t channels = 1; channels <= 40; channels += 7) {
13716       for (size_t step = 2; step <= 25; step++) {
13717         DWConvMicrokernelTester()
13718           .cr(8)
13719           .kr(25)
13720           .channels(channels)
13721           .width(3)
13722           .step(step)
13723           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13724       }
13725     }
13726   }
13727 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,multipixel_with_output_stride)13728   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_output_stride) {
13729     TEST_REQUIRES_X86_AVX;
13730     for (size_t channels = 1; channels <= 40; channels += 7) {
13731       DWConvMicrokernelTester()
13732         .cr(8)
13733         .kr(25)
13734         .channels(8)
13735         .width(5)
13736         .output_stride(43)
13737         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13738     }
13739   }
13740 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,multipixel_with_qmin)13741   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_qmin) {
13742     TEST_REQUIRES_X86_AVX;
13743     for (size_t channels = 1; channels <= 40; channels += 7) {
13744       DWConvMicrokernelTester()
13745         .cr(8)
13746         .kr(25)
13747         .channels(channels)
13748         .width(3)
13749         .qmin(128)
13750         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13751     }
13752   }
13753 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,multipixel_with_qmax)13754   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_qmax) {
13755     TEST_REQUIRES_X86_AVX;
13756     for (size_t channels = 1; channels <= 40; channels += 7) {
13757       DWConvMicrokernelTester()
13758         .cr(8)
13759         .kr(25)
13760         .channels(channels)
13761         .width(3)
13762         .qmax(128)
13763         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13764     }
13765   }
13766 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,input_offset)13767   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, input_offset) {
13768     TEST_REQUIRES_X86_AVX;
13769     for (uint32_t channels = 16; channels < 128; channels += 24) {
13770       DWConvMicrokernelTester()
13771         .cr(8)
13772         .kr(25)
13773         .channels(channels)
13774         .input_offset(176)
13775         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13776     }
13777   }
13778 
TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2,zero)13779   TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, zero) {
13780     TEST_REQUIRES_X86_AVX;
13781     for (uint32_t mz = 0; mz < 25; mz++) {
13782       for (uint32_t channels = 16; channels < 128; channels += 24) {
13783         DWConvMicrokernelTester()
13784           .cr(8)
13785           .kr(25)
13786           .channels(channels)
13787           .input_offset(176)
13788           .zero_index(mz)
13789           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
13790       }
13791     }
13792   }
13793 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13794 
13795 
13796 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,c_eq_16)13797   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, c_eq_16) {
13798     TEST_REQUIRES_X86_AVX;
13799     DWConvMicrokernelTester()
13800       .cr(16)
13801       .kr(3)
13802       .channels(16)
13803       .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13804   }
13805 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,c_div_16)13806   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, c_div_16) {
13807     TEST_REQUIRES_X86_AVX;
13808     for (uint32_t channels = 32; channels < 256; channels += 48) {
13809       DWConvMicrokernelTester()
13810         .cr(16)
13811         .kr(3)
13812         .channels(channels)
13813         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13814     }
13815   }
13816 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,c_div_16_with_qmin)13817   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, c_div_16_with_qmin) {
13818     TEST_REQUIRES_X86_AVX;
13819     for (uint32_t channels = 32; channels < 256; channels += 48) {
13820       DWConvMicrokernelTester()
13821         .cr(16)
13822         .kr(3)
13823         .channels(channels)
13824         .qmin(128)
13825         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13826     }
13827   }
13828 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,c_div_16_with_qmax)13829   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, c_div_16_with_qmax) {
13830     TEST_REQUIRES_X86_AVX;
13831     for (uint32_t channels = 32; channels < 256; channels += 48) {
13832       DWConvMicrokernelTester()
13833         .cr(16)
13834         .kr(3)
13835         .channels(channels)
13836         .qmax(128)
13837         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13838     }
13839   }
13840 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,c_lt_16)13841   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, c_lt_16) {
13842     TEST_REQUIRES_X86_AVX;
13843     for (uint32_t channels = 1; channels < 16; channels++) {
13844       DWConvMicrokernelTester()
13845         .cr(16)
13846         .kr(3)
13847         .channels(channels)
13848         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13849     }
13850   }
13851 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,c_gt_16)13852   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, c_gt_16) {
13853     TEST_REQUIRES_X86_AVX;
13854     for (uint32_t channels = 17; channels < 32; channels++) {
13855       DWConvMicrokernelTester()
13856         .cr(16)
13857         .kr(3)
13858         .channels(channels)
13859         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13860     }
13861   }
13862 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,c_gt_16_with_qmin)13863   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, c_gt_16_with_qmin) {
13864     TEST_REQUIRES_X86_AVX;
13865     for (uint32_t channels = 17; channels < 32; channels++) {
13866       DWConvMicrokernelTester()
13867         .cr(16)
13868         .kr(3)
13869         .channels(channels)
13870         .qmin(128)
13871         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13872     }
13873   }
13874 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,c_gt_16_with_qmax)13875   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, c_gt_16_with_qmax) {
13876     TEST_REQUIRES_X86_AVX;
13877     for (uint32_t channels = 17; channels < 32; channels++) {
13878       DWConvMicrokernelTester()
13879         .cr(16)
13880         .kr(3)
13881         .channels(channels)
13882         .qmax(128)
13883         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13884     }
13885   }
13886 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,multipixel)13887   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, multipixel) {
13888     TEST_REQUIRES_X86_AVX;
13889     for (size_t channels = 1; channels <= 80; channels += 15) {
13890       DWConvMicrokernelTester()
13891         .cr(16)
13892         .kr(3)
13893         .channels(channels)
13894         .width(3)
13895         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13896     }
13897   }
13898 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,multipixel_with_step)13899   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, multipixel_with_step) {
13900     TEST_REQUIRES_X86_AVX;
13901     for (size_t channels = 1; channels <= 80; channels += 15) {
13902       for (size_t step = 2; step <= 3; step++) {
13903         DWConvMicrokernelTester()
13904           .cr(16)
13905           .kr(3)
13906           .channels(channels)
13907           .width(3)
13908           .step(step)
13909           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13910       }
13911     }
13912   }
13913 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,multipixel_with_output_stride)13914   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, multipixel_with_output_stride) {
13915     TEST_REQUIRES_X86_AVX;
13916     for (size_t channels = 1; channels <= 80; channels += 15) {
13917       DWConvMicrokernelTester()
13918         .cr(16)
13919         .kr(3)
13920         .channels(16)
13921         .width(5)
13922         .output_stride(83)
13923         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13924     }
13925   }
13926 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,multipixel_with_qmin)13927   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, multipixel_with_qmin) {
13928     TEST_REQUIRES_X86_AVX;
13929     for (size_t channels = 1; channels <= 80; channels += 15) {
13930       DWConvMicrokernelTester()
13931         .cr(16)
13932         .kr(3)
13933         .channels(channels)
13934         .width(3)
13935         .qmin(128)
13936         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13937     }
13938   }
13939 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,multipixel_with_qmax)13940   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, multipixel_with_qmax) {
13941     TEST_REQUIRES_X86_AVX;
13942     for (size_t channels = 1; channels <= 80; channels += 15) {
13943       DWConvMicrokernelTester()
13944         .cr(16)
13945         .kr(3)
13946         .channels(channels)
13947         .width(3)
13948         .qmax(128)
13949         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13950     }
13951   }
13952 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,input_offset)13953   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, input_offset) {
13954     TEST_REQUIRES_X86_AVX;
13955     for (uint32_t channels = 32; channels < 256; channels += 48) {
13956       DWConvMicrokernelTester()
13957         .cr(16)
13958         .kr(3)
13959         .channels(channels)
13960         .input_offset(304)
13961         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13962     }
13963   }
13964 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX,zero)13965   TEST(F32_DWCONV_MINMAX_UP16X3__AVX, zero) {
13966     TEST_REQUIRES_X86_AVX;
13967     for (uint32_t mz = 0; mz < 3; mz++) {
13968       for (uint32_t channels = 32; channels < 256; channels += 48) {
13969         DWConvMicrokernelTester()
13970           .cr(16)
13971           .kr(3)
13972           .channels(channels)
13973           .input_offset(304)
13974           .zero_index(mz)
13975           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
13976       }
13977     }
13978   }
13979 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
13980 
13981 
13982 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,c_eq_16)13983   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, c_eq_16) {
13984     TEST_REQUIRES_X86_AVX;
13985     DWConvMicrokernelTester()
13986       .cr(16)
13987       .kr(3)
13988       .channels(16)
13989       .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
13990   }
13991 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,c_div_16)13992   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, c_div_16) {
13993     TEST_REQUIRES_X86_AVX;
13994     for (uint32_t channels = 32; channels < 256; channels += 48) {
13995       DWConvMicrokernelTester()
13996         .cr(16)
13997         .kr(3)
13998         .channels(channels)
13999         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14000     }
14001   }
14002 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,c_div_16_with_qmin)14003   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, c_div_16_with_qmin) {
14004     TEST_REQUIRES_X86_AVX;
14005     for (uint32_t channels = 32; channels < 256; channels += 48) {
14006       DWConvMicrokernelTester()
14007         .cr(16)
14008         .kr(3)
14009         .channels(channels)
14010         .qmin(128)
14011         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14012     }
14013   }
14014 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,c_div_16_with_qmax)14015   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, c_div_16_with_qmax) {
14016     TEST_REQUIRES_X86_AVX;
14017     for (uint32_t channels = 32; channels < 256; channels += 48) {
14018       DWConvMicrokernelTester()
14019         .cr(16)
14020         .kr(3)
14021         .channels(channels)
14022         .qmax(128)
14023         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14024     }
14025   }
14026 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,c_lt_16)14027   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, c_lt_16) {
14028     TEST_REQUIRES_X86_AVX;
14029     for (uint32_t channels = 1; channels < 16; channels++) {
14030       DWConvMicrokernelTester()
14031         .cr(16)
14032         .kr(3)
14033         .channels(channels)
14034         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14035     }
14036   }
14037 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,c_gt_16)14038   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, c_gt_16) {
14039     TEST_REQUIRES_X86_AVX;
14040     for (uint32_t channels = 17; channels < 32; channels++) {
14041       DWConvMicrokernelTester()
14042         .cr(16)
14043         .kr(3)
14044         .channels(channels)
14045         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14046     }
14047   }
14048 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,c_gt_16_with_qmin)14049   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, c_gt_16_with_qmin) {
14050     TEST_REQUIRES_X86_AVX;
14051     for (uint32_t channels = 17; channels < 32; channels++) {
14052       DWConvMicrokernelTester()
14053         .cr(16)
14054         .kr(3)
14055         .channels(channels)
14056         .qmin(128)
14057         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14058     }
14059   }
14060 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,c_gt_16_with_qmax)14061   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, c_gt_16_with_qmax) {
14062     TEST_REQUIRES_X86_AVX;
14063     for (uint32_t channels = 17; channels < 32; channels++) {
14064       DWConvMicrokernelTester()
14065         .cr(16)
14066         .kr(3)
14067         .channels(channels)
14068         .qmax(128)
14069         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14070     }
14071   }
14072 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,multipixel)14073   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, multipixel) {
14074     TEST_REQUIRES_X86_AVX;
14075     for (size_t channels = 1; channels <= 80; channels += 15) {
14076       DWConvMicrokernelTester()
14077         .cr(16)
14078         .kr(3)
14079         .channels(channels)
14080         .width(3)
14081         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14082     }
14083   }
14084 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,multipixel_with_step)14085   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, multipixel_with_step) {
14086     TEST_REQUIRES_X86_AVX;
14087     for (size_t channels = 1; channels <= 80; channels += 15) {
14088       for (size_t step = 2; step <= 3; step++) {
14089         DWConvMicrokernelTester()
14090           .cr(16)
14091           .kr(3)
14092           .channels(channels)
14093           .width(3)
14094           .step(step)
14095           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14096       }
14097     }
14098   }
14099 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,multipixel_with_output_stride)14100   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, multipixel_with_output_stride) {
14101     TEST_REQUIRES_X86_AVX;
14102     for (size_t channels = 1; channels <= 80; channels += 15) {
14103       DWConvMicrokernelTester()
14104         .cr(16)
14105         .kr(3)
14106         .channels(16)
14107         .width(5)
14108         .output_stride(83)
14109         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14110     }
14111   }
14112 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,multipixel_with_qmin)14113   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, multipixel_with_qmin) {
14114     TEST_REQUIRES_X86_AVX;
14115     for (size_t channels = 1; channels <= 80; channels += 15) {
14116       DWConvMicrokernelTester()
14117         .cr(16)
14118         .kr(3)
14119         .channels(channels)
14120         .width(3)
14121         .qmin(128)
14122         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14123     }
14124   }
14125 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,multipixel_with_qmax)14126   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, multipixel_with_qmax) {
14127     TEST_REQUIRES_X86_AVX;
14128     for (size_t channels = 1; channels <= 80; channels += 15) {
14129       DWConvMicrokernelTester()
14130         .cr(16)
14131         .kr(3)
14132         .channels(channels)
14133         .width(3)
14134         .qmax(128)
14135         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14136     }
14137   }
14138 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,input_offset)14139   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, input_offset) {
14140     TEST_REQUIRES_X86_AVX;
14141     for (uint32_t channels = 32; channels < 256; channels += 48) {
14142       DWConvMicrokernelTester()
14143         .cr(16)
14144         .kr(3)
14145         .channels(channels)
14146         .input_offset(304)
14147         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14148     }
14149   }
14150 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2,zero)14151   TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, zero) {
14152     TEST_REQUIRES_X86_AVX;
14153     for (uint32_t mz = 0; mz < 3; mz++) {
14154       for (uint32_t channels = 32; channels < 256; channels += 48) {
14155         DWConvMicrokernelTester()
14156           .cr(16)
14157           .kr(3)
14158           .channels(channels)
14159           .input_offset(304)
14160           .zero_index(mz)
14161           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
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_DWCONV_MINMAX_UP16X4__AVX,c_eq_16)14169   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_eq_16) {
14170     TEST_REQUIRES_X86_AVX;
14171     DWConvMicrokernelTester()
14172       .cr(16)
14173       .kr(4)
14174       .channels(16)
14175       .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14176   }
14177 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,c_div_16)14178   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_div_16) {
14179     TEST_REQUIRES_X86_AVX;
14180     for (uint32_t channels = 32; channels < 256; channels += 48) {
14181       DWConvMicrokernelTester()
14182         .cr(16)
14183         .kr(4)
14184         .channels(channels)
14185         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14186     }
14187   }
14188 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,c_div_16_with_qmin)14189   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_div_16_with_qmin) {
14190     TEST_REQUIRES_X86_AVX;
14191     for (uint32_t channels = 32; channels < 256; channels += 48) {
14192       DWConvMicrokernelTester()
14193         .cr(16)
14194         .kr(4)
14195         .channels(channels)
14196         .qmin(128)
14197         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14198     }
14199   }
14200 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,c_div_16_with_qmax)14201   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_div_16_with_qmax) {
14202     TEST_REQUIRES_X86_AVX;
14203     for (uint32_t channels = 32; channels < 256; channels += 48) {
14204       DWConvMicrokernelTester()
14205         .cr(16)
14206         .kr(4)
14207         .channels(channels)
14208         .qmax(128)
14209         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14210     }
14211   }
14212 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,c_lt_16)14213   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_lt_16) {
14214     TEST_REQUIRES_X86_AVX;
14215     for (uint32_t channels = 1; channels < 16; channels++) {
14216       DWConvMicrokernelTester()
14217         .cr(16)
14218         .kr(4)
14219         .channels(channels)
14220         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14221     }
14222   }
14223 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,c_gt_16)14224   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_gt_16) {
14225     TEST_REQUIRES_X86_AVX;
14226     for (uint32_t channels = 17; channels < 32; channels++) {
14227       DWConvMicrokernelTester()
14228         .cr(16)
14229         .kr(4)
14230         .channels(channels)
14231         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14232     }
14233   }
14234 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,c_gt_16_with_qmin)14235   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_gt_16_with_qmin) {
14236     TEST_REQUIRES_X86_AVX;
14237     for (uint32_t channels = 17; channels < 32; channels++) {
14238       DWConvMicrokernelTester()
14239         .cr(16)
14240         .kr(4)
14241         .channels(channels)
14242         .qmin(128)
14243         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14244     }
14245   }
14246 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,c_gt_16_with_qmax)14247   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_gt_16_with_qmax) {
14248     TEST_REQUIRES_X86_AVX;
14249     for (uint32_t channels = 17; channels < 32; channels++) {
14250       DWConvMicrokernelTester()
14251         .cr(16)
14252         .kr(4)
14253         .channels(channels)
14254         .qmax(128)
14255         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14256     }
14257   }
14258 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,multipixel)14259   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel) {
14260     TEST_REQUIRES_X86_AVX;
14261     for (size_t channels = 1; channels <= 80; channels += 15) {
14262       DWConvMicrokernelTester()
14263         .cr(16)
14264         .kr(4)
14265         .channels(channels)
14266         .width(3)
14267         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14268     }
14269   }
14270 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,multipixel_with_step)14271   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_step) {
14272     TEST_REQUIRES_X86_AVX;
14273     for (size_t channels = 1; channels <= 80; channels += 15) {
14274       for (size_t step = 2; step <= 4; step++) {
14275         DWConvMicrokernelTester()
14276           .cr(16)
14277           .kr(4)
14278           .channels(channels)
14279           .width(3)
14280           .step(step)
14281           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14282       }
14283     }
14284   }
14285 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,multipixel_with_output_stride)14286   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_output_stride) {
14287     TEST_REQUIRES_X86_AVX;
14288     for (size_t channels = 1; channels <= 80; channels += 15) {
14289       DWConvMicrokernelTester()
14290         .cr(16)
14291         .kr(4)
14292         .channels(16)
14293         .width(5)
14294         .output_stride(83)
14295         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14296     }
14297   }
14298 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,multipixel_with_qmin)14299   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_qmin) {
14300     TEST_REQUIRES_X86_AVX;
14301     for (size_t channels = 1; channels <= 80; channels += 15) {
14302       DWConvMicrokernelTester()
14303         .cr(16)
14304         .kr(4)
14305         .channels(channels)
14306         .width(3)
14307         .qmin(128)
14308         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14309     }
14310   }
14311 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,multipixel_with_qmax)14312   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_qmax) {
14313     TEST_REQUIRES_X86_AVX;
14314     for (size_t channels = 1; channels <= 80; channels += 15) {
14315       DWConvMicrokernelTester()
14316         .cr(16)
14317         .kr(4)
14318         .channels(channels)
14319         .width(3)
14320         .qmax(128)
14321         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14322     }
14323   }
14324 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,input_offset)14325   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, input_offset) {
14326     TEST_REQUIRES_X86_AVX;
14327     for (uint32_t channels = 32; channels < 256; channels += 48) {
14328       DWConvMicrokernelTester()
14329         .cr(16)
14330         .kr(4)
14331         .channels(channels)
14332         .input_offset(304)
14333         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14334     }
14335   }
14336 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX,zero)14337   TEST(F32_DWCONV_MINMAX_UP16X4__AVX, zero) {
14338     TEST_REQUIRES_X86_AVX;
14339     for (uint32_t mz = 0; mz < 4; mz++) {
14340       for (uint32_t channels = 32; channels < 256; channels += 48) {
14341         DWConvMicrokernelTester()
14342           .cr(16)
14343           .kr(4)
14344           .channels(channels)
14345           .input_offset(304)
14346           .zero_index(mz)
14347           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
14348       }
14349     }
14350   }
14351 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
14352 
14353 
14354 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,c_eq_16)14355   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_eq_16) {
14356     TEST_REQUIRES_X86_AVX;
14357     DWConvMicrokernelTester()
14358       .cr(16)
14359       .kr(4)
14360       .channels(16)
14361       .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14362   }
14363 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,c_div_16)14364   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_div_16) {
14365     TEST_REQUIRES_X86_AVX;
14366     for (uint32_t channels = 32; channels < 256; channels += 48) {
14367       DWConvMicrokernelTester()
14368         .cr(16)
14369         .kr(4)
14370         .channels(channels)
14371         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14372     }
14373   }
14374 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,c_div_16_with_qmin)14375   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_div_16_with_qmin) {
14376     TEST_REQUIRES_X86_AVX;
14377     for (uint32_t channels = 32; channels < 256; channels += 48) {
14378       DWConvMicrokernelTester()
14379         .cr(16)
14380         .kr(4)
14381         .channels(channels)
14382         .qmin(128)
14383         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14384     }
14385   }
14386 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,c_div_16_with_qmax)14387   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_div_16_with_qmax) {
14388     TEST_REQUIRES_X86_AVX;
14389     for (uint32_t channels = 32; channels < 256; channels += 48) {
14390       DWConvMicrokernelTester()
14391         .cr(16)
14392         .kr(4)
14393         .channels(channels)
14394         .qmax(128)
14395         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14396     }
14397   }
14398 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,c_lt_16)14399   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_lt_16) {
14400     TEST_REQUIRES_X86_AVX;
14401     for (uint32_t channels = 1; channels < 16; channels++) {
14402       DWConvMicrokernelTester()
14403         .cr(16)
14404         .kr(4)
14405         .channels(channels)
14406         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14407     }
14408   }
14409 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,c_gt_16)14410   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_gt_16) {
14411     TEST_REQUIRES_X86_AVX;
14412     for (uint32_t channels = 17; channels < 32; channels++) {
14413       DWConvMicrokernelTester()
14414         .cr(16)
14415         .kr(4)
14416         .channels(channels)
14417         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14418     }
14419   }
14420 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,c_gt_16_with_qmin)14421   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_gt_16_with_qmin) {
14422     TEST_REQUIRES_X86_AVX;
14423     for (uint32_t channels = 17; channels < 32; channels++) {
14424       DWConvMicrokernelTester()
14425         .cr(16)
14426         .kr(4)
14427         .channels(channels)
14428         .qmin(128)
14429         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14430     }
14431   }
14432 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,c_gt_16_with_qmax)14433   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_gt_16_with_qmax) {
14434     TEST_REQUIRES_X86_AVX;
14435     for (uint32_t channels = 17; channels < 32; channels++) {
14436       DWConvMicrokernelTester()
14437         .cr(16)
14438         .kr(4)
14439         .channels(channels)
14440         .qmax(128)
14441         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14442     }
14443   }
14444 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,multipixel)14445   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel) {
14446     TEST_REQUIRES_X86_AVX;
14447     for (size_t channels = 1; channels <= 80; channels += 15) {
14448       DWConvMicrokernelTester()
14449         .cr(16)
14450         .kr(4)
14451         .channels(channels)
14452         .width(3)
14453         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14454     }
14455   }
14456 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,multipixel_with_step)14457   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_step) {
14458     TEST_REQUIRES_X86_AVX;
14459     for (size_t channels = 1; channels <= 80; channels += 15) {
14460       for (size_t step = 2; step <= 4; step++) {
14461         DWConvMicrokernelTester()
14462           .cr(16)
14463           .kr(4)
14464           .channels(channels)
14465           .width(3)
14466           .step(step)
14467           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14468       }
14469     }
14470   }
14471 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,multipixel_with_output_stride)14472   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_output_stride) {
14473     TEST_REQUIRES_X86_AVX;
14474     for (size_t channels = 1; channels <= 80; channels += 15) {
14475       DWConvMicrokernelTester()
14476         .cr(16)
14477         .kr(4)
14478         .channels(16)
14479         .width(5)
14480         .output_stride(83)
14481         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14482     }
14483   }
14484 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,multipixel_with_qmin)14485   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_qmin) {
14486     TEST_REQUIRES_X86_AVX;
14487     for (size_t channels = 1; channels <= 80; channels += 15) {
14488       DWConvMicrokernelTester()
14489         .cr(16)
14490         .kr(4)
14491         .channels(channels)
14492         .width(3)
14493         .qmin(128)
14494         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14495     }
14496   }
14497 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,multipixel_with_qmax)14498   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_qmax) {
14499     TEST_REQUIRES_X86_AVX;
14500     for (size_t channels = 1; channels <= 80; channels += 15) {
14501       DWConvMicrokernelTester()
14502         .cr(16)
14503         .kr(4)
14504         .channels(channels)
14505         .width(3)
14506         .qmax(128)
14507         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14508     }
14509   }
14510 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,input_offset)14511   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, input_offset) {
14512     TEST_REQUIRES_X86_AVX;
14513     for (uint32_t channels = 32; channels < 256; channels += 48) {
14514       DWConvMicrokernelTester()
14515         .cr(16)
14516         .kr(4)
14517         .channels(channels)
14518         .input_offset(304)
14519         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14520     }
14521   }
14522 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2,zero)14523   TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, zero) {
14524     TEST_REQUIRES_X86_AVX;
14525     for (uint32_t mz = 0; mz < 4; mz++) {
14526       for (uint32_t channels = 32; channels < 256; channels += 48) {
14527         DWConvMicrokernelTester()
14528           .cr(16)
14529           .kr(4)
14530           .channels(channels)
14531           .input_offset(304)
14532           .zero_index(mz)
14533           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
14534       }
14535     }
14536   }
14537 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
14538 
14539 
14540 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,c_eq_16)14541   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_eq_16) {
14542     TEST_REQUIRES_X86_AVX;
14543     DWConvMicrokernelTester()
14544       .cr(16)
14545       .kr(9)
14546       .channels(16)
14547       .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14548   }
14549 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,c_div_16)14550   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_div_16) {
14551     TEST_REQUIRES_X86_AVX;
14552     for (uint32_t channels = 32; channels < 256; channels += 48) {
14553       DWConvMicrokernelTester()
14554         .cr(16)
14555         .kr(9)
14556         .channels(channels)
14557         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14558     }
14559   }
14560 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,c_div_16_with_qmin)14561   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_div_16_with_qmin) {
14562     TEST_REQUIRES_X86_AVX;
14563     for (uint32_t channels = 32; channels < 256; channels += 48) {
14564       DWConvMicrokernelTester()
14565         .cr(16)
14566         .kr(9)
14567         .channels(channels)
14568         .qmin(128)
14569         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14570     }
14571   }
14572 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,c_div_16_with_qmax)14573   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_div_16_with_qmax) {
14574     TEST_REQUIRES_X86_AVX;
14575     for (uint32_t channels = 32; channels < 256; channels += 48) {
14576       DWConvMicrokernelTester()
14577         .cr(16)
14578         .kr(9)
14579         .channels(channels)
14580         .qmax(128)
14581         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14582     }
14583   }
14584 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,c_lt_16)14585   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_lt_16) {
14586     TEST_REQUIRES_X86_AVX;
14587     for (uint32_t channels = 1; channels < 16; channels++) {
14588       DWConvMicrokernelTester()
14589         .cr(16)
14590         .kr(9)
14591         .channels(channels)
14592         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14593     }
14594   }
14595 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,c_gt_16)14596   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_gt_16) {
14597     TEST_REQUIRES_X86_AVX;
14598     for (uint32_t channels = 17; channels < 32; channels++) {
14599       DWConvMicrokernelTester()
14600         .cr(16)
14601         .kr(9)
14602         .channels(channels)
14603         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14604     }
14605   }
14606 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,c_gt_16_with_qmin)14607   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_gt_16_with_qmin) {
14608     TEST_REQUIRES_X86_AVX;
14609     for (uint32_t channels = 17; channels < 32; channels++) {
14610       DWConvMicrokernelTester()
14611         .cr(16)
14612         .kr(9)
14613         .channels(channels)
14614         .qmin(128)
14615         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14616     }
14617   }
14618 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,c_gt_16_with_qmax)14619   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_gt_16_with_qmax) {
14620     TEST_REQUIRES_X86_AVX;
14621     for (uint32_t channels = 17; channels < 32; channels++) {
14622       DWConvMicrokernelTester()
14623         .cr(16)
14624         .kr(9)
14625         .channels(channels)
14626         .qmax(128)
14627         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14628     }
14629   }
14630 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,multipixel)14631   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel) {
14632     TEST_REQUIRES_X86_AVX;
14633     for (size_t channels = 1; channels <= 80; channels += 15) {
14634       DWConvMicrokernelTester()
14635         .cr(16)
14636         .kr(9)
14637         .channels(channels)
14638         .width(3)
14639         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14640     }
14641   }
14642 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,multipixel_with_step)14643   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_step) {
14644     TEST_REQUIRES_X86_AVX;
14645     for (size_t channels = 1; channels <= 80; channels += 15) {
14646       for (size_t step = 2; step <= 9; step++) {
14647         DWConvMicrokernelTester()
14648           .cr(16)
14649           .kr(9)
14650           .channels(channels)
14651           .width(3)
14652           .step(step)
14653           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14654       }
14655     }
14656   }
14657 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,multipixel_with_output_stride)14658   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_output_stride) {
14659     TEST_REQUIRES_X86_AVX;
14660     for (size_t channels = 1; channels <= 80; channels += 15) {
14661       DWConvMicrokernelTester()
14662         .cr(16)
14663         .kr(9)
14664         .channels(16)
14665         .width(5)
14666         .output_stride(83)
14667         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14668     }
14669   }
14670 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,multipixel_with_qmin)14671   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_qmin) {
14672     TEST_REQUIRES_X86_AVX;
14673     for (size_t channels = 1; channels <= 80; channels += 15) {
14674       DWConvMicrokernelTester()
14675         .cr(16)
14676         .kr(9)
14677         .channels(channels)
14678         .width(3)
14679         .qmin(128)
14680         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14681     }
14682   }
14683 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,multipixel_with_qmax)14684   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_qmax) {
14685     TEST_REQUIRES_X86_AVX;
14686     for (size_t channels = 1; channels <= 80; channels += 15) {
14687       DWConvMicrokernelTester()
14688         .cr(16)
14689         .kr(9)
14690         .channels(channels)
14691         .width(3)
14692         .qmax(128)
14693         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14694     }
14695   }
14696 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,input_offset)14697   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, input_offset) {
14698     TEST_REQUIRES_X86_AVX;
14699     for (uint32_t channels = 32; channels < 256; channels += 48) {
14700       DWConvMicrokernelTester()
14701         .cr(16)
14702         .kr(9)
14703         .channels(channels)
14704         .input_offset(304)
14705         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14706     }
14707   }
14708 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX,zero)14709   TEST(F32_DWCONV_MINMAX_UP16X9__AVX, zero) {
14710     TEST_REQUIRES_X86_AVX;
14711     for (uint32_t mz = 0; mz < 9; mz++) {
14712       for (uint32_t channels = 32; channels < 256; channels += 48) {
14713         DWConvMicrokernelTester()
14714           .cr(16)
14715           .kr(9)
14716           .channels(channels)
14717           .input_offset(304)
14718           .zero_index(mz)
14719           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
14720       }
14721     }
14722   }
14723 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
14724 
14725 
14726 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,c_eq_16)14727   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_eq_16) {
14728     TEST_REQUIRES_X86_AVX;
14729     DWConvMicrokernelTester()
14730       .cr(16)
14731       .kr(9)
14732       .channels(16)
14733       .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14734   }
14735 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,c_div_16)14736   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_div_16) {
14737     TEST_REQUIRES_X86_AVX;
14738     for (uint32_t channels = 32; channels < 256; channels += 48) {
14739       DWConvMicrokernelTester()
14740         .cr(16)
14741         .kr(9)
14742         .channels(channels)
14743         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14744     }
14745   }
14746 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,c_div_16_with_qmin)14747   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_div_16_with_qmin) {
14748     TEST_REQUIRES_X86_AVX;
14749     for (uint32_t channels = 32; channels < 256; channels += 48) {
14750       DWConvMicrokernelTester()
14751         .cr(16)
14752         .kr(9)
14753         .channels(channels)
14754         .qmin(128)
14755         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14756     }
14757   }
14758 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,c_div_16_with_qmax)14759   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_div_16_with_qmax) {
14760     TEST_REQUIRES_X86_AVX;
14761     for (uint32_t channels = 32; channels < 256; channels += 48) {
14762       DWConvMicrokernelTester()
14763         .cr(16)
14764         .kr(9)
14765         .channels(channels)
14766         .qmax(128)
14767         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14768     }
14769   }
14770 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,c_lt_16)14771   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_lt_16) {
14772     TEST_REQUIRES_X86_AVX;
14773     for (uint32_t channels = 1; channels < 16; channels++) {
14774       DWConvMicrokernelTester()
14775         .cr(16)
14776         .kr(9)
14777         .channels(channels)
14778         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14779     }
14780   }
14781 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,c_gt_16)14782   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_gt_16) {
14783     TEST_REQUIRES_X86_AVX;
14784     for (uint32_t channels = 17; channels < 32; channels++) {
14785       DWConvMicrokernelTester()
14786         .cr(16)
14787         .kr(9)
14788         .channels(channels)
14789         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14790     }
14791   }
14792 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,c_gt_16_with_qmin)14793   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_gt_16_with_qmin) {
14794     TEST_REQUIRES_X86_AVX;
14795     for (uint32_t channels = 17; channels < 32; channels++) {
14796       DWConvMicrokernelTester()
14797         .cr(16)
14798         .kr(9)
14799         .channels(channels)
14800         .qmin(128)
14801         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14802     }
14803   }
14804 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,c_gt_16_with_qmax)14805   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_gt_16_with_qmax) {
14806     TEST_REQUIRES_X86_AVX;
14807     for (uint32_t channels = 17; channels < 32; channels++) {
14808       DWConvMicrokernelTester()
14809         .cr(16)
14810         .kr(9)
14811         .channels(channels)
14812         .qmax(128)
14813         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14814     }
14815   }
14816 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,multipixel)14817   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel) {
14818     TEST_REQUIRES_X86_AVX;
14819     for (size_t channels = 1; channels <= 80; channels += 15) {
14820       DWConvMicrokernelTester()
14821         .cr(16)
14822         .kr(9)
14823         .channels(channels)
14824         .width(3)
14825         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14826     }
14827   }
14828 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,multipixel_with_step)14829   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_step) {
14830     TEST_REQUIRES_X86_AVX;
14831     for (size_t channels = 1; channels <= 80; channels += 15) {
14832       for (size_t step = 2; step <= 9; step++) {
14833         DWConvMicrokernelTester()
14834           .cr(16)
14835           .kr(9)
14836           .channels(channels)
14837           .width(3)
14838           .step(step)
14839           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14840       }
14841     }
14842   }
14843 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,multipixel_with_output_stride)14844   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_output_stride) {
14845     TEST_REQUIRES_X86_AVX;
14846     for (size_t channels = 1; channels <= 80; channels += 15) {
14847       DWConvMicrokernelTester()
14848         .cr(16)
14849         .kr(9)
14850         .channels(16)
14851         .width(5)
14852         .output_stride(83)
14853         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14854     }
14855   }
14856 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,multipixel_with_qmin)14857   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_qmin) {
14858     TEST_REQUIRES_X86_AVX;
14859     for (size_t channels = 1; channels <= 80; channels += 15) {
14860       DWConvMicrokernelTester()
14861         .cr(16)
14862         .kr(9)
14863         .channels(channels)
14864         .width(3)
14865         .qmin(128)
14866         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14867     }
14868   }
14869 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,multipixel_with_qmax)14870   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_qmax) {
14871     TEST_REQUIRES_X86_AVX;
14872     for (size_t channels = 1; channels <= 80; channels += 15) {
14873       DWConvMicrokernelTester()
14874         .cr(16)
14875         .kr(9)
14876         .channels(channels)
14877         .width(3)
14878         .qmax(128)
14879         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14880     }
14881   }
14882 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,input_offset)14883   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, input_offset) {
14884     TEST_REQUIRES_X86_AVX;
14885     for (uint32_t channels = 32; channels < 256; channels += 48) {
14886       DWConvMicrokernelTester()
14887         .cr(16)
14888         .kr(9)
14889         .channels(channels)
14890         .input_offset(304)
14891         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14892     }
14893   }
14894 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2,zero)14895   TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, zero) {
14896     TEST_REQUIRES_X86_AVX;
14897     for (uint32_t mz = 0; mz < 9; mz++) {
14898       for (uint32_t channels = 32; channels < 256; channels += 48) {
14899         DWConvMicrokernelTester()
14900           .cr(16)
14901           .kr(9)
14902           .channels(channels)
14903           .input_offset(304)
14904           .zero_index(mz)
14905           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
14906       }
14907     }
14908   }
14909 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
14910 
14911 
14912 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,c_eq_16)14913   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_eq_16) {
14914     TEST_REQUIRES_X86_AVX;
14915     DWConvMicrokernelTester()
14916       .cr(16)
14917       .kr(25)
14918       .channels(16)
14919       .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
14920   }
14921 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,c_div_16)14922   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_div_16) {
14923     TEST_REQUIRES_X86_AVX;
14924     for (uint32_t channels = 32; channels < 256; channels += 48) {
14925       DWConvMicrokernelTester()
14926         .cr(16)
14927         .kr(25)
14928         .channels(channels)
14929         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
14930     }
14931   }
14932 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,c_div_16_with_qmin)14933   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_div_16_with_qmin) {
14934     TEST_REQUIRES_X86_AVX;
14935     for (uint32_t channels = 32; channels < 256; channels += 48) {
14936       DWConvMicrokernelTester()
14937         .cr(16)
14938         .kr(25)
14939         .channels(channels)
14940         .qmin(128)
14941         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
14942     }
14943   }
14944 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,c_div_16_with_qmax)14945   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_div_16_with_qmax) {
14946     TEST_REQUIRES_X86_AVX;
14947     for (uint32_t channels = 32; channels < 256; channels += 48) {
14948       DWConvMicrokernelTester()
14949         .cr(16)
14950         .kr(25)
14951         .channels(channels)
14952         .qmax(128)
14953         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
14954     }
14955   }
14956 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,c_lt_16)14957   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_lt_16) {
14958     TEST_REQUIRES_X86_AVX;
14959     for (uint32_t channels = 1; channels < 16; channels++) {
14960       DWConvMicrokernelTester()
14961         .cr(16)
14962         .kr(25)
14963         .channels(channels)
14964         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
14965     }
14966   }
14967 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,c_gt_16)14968   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_gt_16) {
14969     TEST_REQUIRES_X86_AVX;
14970     for (uint32_t channels = 17; channels < 32; channels++) {
14971       DWConvMicrokernelTester()
14972         .cr(16)
14973         .kr(25)
14974         .channels(channels)
14975         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
14976     }
14977   }
14978 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,c_gt_16_with_qmin)14979   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_gt_16_with_qmin) {
14980     TEST_REQUIRES_X86_AVX;
14981     for (uint32_t channels = 17; channels < 32; channels++) {
14982       DWConvMicrokernelTester()
14983         .cr(16)
14984         .kr(25)
14985         .channels(channels)
14986         .qmin(128)
14987         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
14988     }
14989   }
14990 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,c_gt_16_with_qmax)14991   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_gt_16_with_qmax) {
14992     TEST_REQUIRES_X86_AVX;
14993     for (uint32_t channels = 17; channels < 32; channels++) {
14994       DWConvMicrokernelTester()
14995         .cr(16)
14996         .kr(25)
14997         .channels(channels)
14998         .qmax(128)
14999         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
15000     }
15001   }
15002 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,multipixel)15003   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel) {
15004     TEST_REQUIRES_X86_AVX;
15005     for (size_t channels = 1; channels <= 80; channels += 15) {
15006       DWConvMicrokernelTester()
15007         .cr(16)
15008         .kr(25)
15009         .channels(channels)
15010         .width(3)
15011         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
15012     }
15013   }
15014 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,multipixel_with_step)15015   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_step) {
15016     TEST_REQUIRES_X86_AVX;
15017     for (size_t channels = 1; channels <= 80; channels += 15) {
15018       for (size_t step = 2; step <= 25; step++) {
15019         DWConvMicrokernelTester()
15020           .cr(16)
15021           .kr(25)
15022           .channels(channels)
15023           .width(3)
15024           .step(step)
15025           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
15026       }
15027     }
15028   }
15029 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,multipixel_with_output_stride)15030   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_output_stride) {
15031     TEST_REQUIRES_X86_AVX;
15032     for (size_t channels = 1; channels <= 80; channels += 15) {
15033       DWConvMicrokernelTester()
15034         .cr(16)
15035         .kr(25)
15036         .channels(16)
15037         .width(5)
15038         .output_stride(83)
15039         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
15040     }
15041   }
15042 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,multipixel_with_qmin)15043   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_qmin) {
15044     TEST_REQUIRES_X86_AVX;
15045     for (size_t channels = 1; channels <= 80; channels += 15) {
15046       DWConvMicrokernelTester()
15047         .cr(16)
15048         .kr(25)
15049         .channels(channels)
15050         .width(3)
15051         .qmin(128)
15052         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
15053     }
15054   }
15055 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,multipixel_with_qmax)15056   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_qmax) {
15057     TEST_REQUIRES_X86_AVX;
15058     for (size_t channels = 1; channels <= 80; channels += 15) {
15059       DWConvMicrokernelTester()
15060         .cr(16)
15061         .kr(25)
15062         .channels(channels)
15063         .width(3)
15064         .qmax(128)
15065         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
15066     }
15067   }
15068 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,input_offset)15069   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, input_offset) {
15070     TEST_REQUIRES_X86_AVX;
15071     for (uint32_t channels = 32; channels < 256; channels += 48) {
15072       DWConvMicrokernelTester()
15073         .cr(16)
15074         .kr(25)
15075         .channels(channels)
15076         .input_offset(304)
15077         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
15078     }
15079   }
15080 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX,zero)15081   TEST(F32_DWCONV_MINMAX_UP16X25__AVX, zero) {
15082     TEST_REQUIRES_X86_AVX;
15083     for (uint32_t mz = 0; mz < 25; mz++) {
15084       for (uint32_t channels = 32; channels < 256; channels += 48) {
15085         DWConvMicrokernelTester()
15086           .cr(16)
15087           .kr(25)
15088           .channels(channels)
15089           .input_offset(304)
15090           .zero_index(mz)
15091           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
15092       }
15093     }
15094   }
15095 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15096 
15097 
15098 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,c_eq_16)15099   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_eq_16) {
15100     TEST_REQUIRES_X86_AVX;
15101     DWConvMicrokernelTester()
15102       .cr(16)
15103       .kr(25)
15104       .channels(16)
15105       .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15106   }
15107 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,c_div_16)15108   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_div_16) {
15109     TEST_REQUIRES_X86_AVX;
15110     for (uint32_t channels = 32; channels < 256; channels += 48) {
15111       DWConvMicrokernelTester()
15112         .cr(16)
15113         .kr(25)
15114         .channels(channels)
15115         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15116     }
15117   }
15118 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,c_div_16_with_qmin)15119   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_div_16_with_qmin) {
15120     TEST_REQUIRES_X86_AVX;
15121     for (uint32_t channels = 32; channels < 256; channels += 48) {
15122       DWConvMicrokernelTester()
15123         .cr(16)
15124         .kr(25)
15125         .channels(channels)
15126         .qmin(128)
15127         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15128     }
15129   }
15130 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,c_div_16_with_qmax)15131   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_div_16_with_qmax) {
15132     TEST_REQUIRES_X86_AVX;
15133     for (uint32_t channels = 32; channels < 256; channels += 48) {
15134       DWConvMicrokernelTester()
15135         .cr(16)
15136         .kr(25)
15137         .channels(channels)
15138         .qmax(128)
15139         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15140     }
15141   }
15142 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,c_lt_16)15143   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_lt_16) {
15144     TEST_REQUIRES_X86_AVX;
15145     for (uint32_t channels = 1; channels < 16; channels++) {
15146       DWConvMicrokernelTester()
15147         .cr(16)
15148         .kr(25)
15149         .channels(channels)
15150         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15151     }
15152   }
15153 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,c_gt_16)15154   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_gt_16) {
15155     TEST_REQUIRES_X86_AVX;
15156     for (uint32_t channels = 17; channels < 32; channels++) {
15157       DWConvMicrokernelTester()
15158         .cr(16)
15159         .kr(25)
15160         .channels(channels)
15161         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15162     }
15163   }
15164 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,c_gt_16_with_qmin)15165   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_gt_16_with_qmin) {
15166     TEST_REQUIRES_X86_AVX;
15167     for (uint32_t channels = 17; channels < 32; channels++) {
15168       DWConvMicrokernelTester()
15169         .cr(16)
15170         .kr(25)
15171         .channels(channels)
15172         .qmin(128)
15173         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15174     }
15175   }
15176 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,c_gt_16_with_qmax)15177   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_gt_16_with_qmax) {
15178     TEST_REQUIRES_X86_AVX;
15179     for (uint32_t channels = 17; channels < 32; channels++) {
15180       DWConvMicrokernelTester()
15181         .cr(16)
15182         .kr(25)
15183         .channels(channels)
15184         .qmax(128)
15185         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15186     }
15187   }
15188 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,multipixel)15189   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel) {
15190     TEST_REQUIRES_X86_AVX;
15191     for (size_t channels = 1; channels <= 80; channels += 15) {
15192       DWConvMicrokernelTester()
15193         .cr(16)
15194         .kr(25)
15195         .channels(channels)
15196         .width(3)
15197         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15198     }
15199   }
15200 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,multipixel_with_step)15201   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_step) {
15202     TEST_REQUIRES_X86_AVX;
15203     for (size_t channels = 1; channels <= 80; channels += 15) {
15204       for (size_t step = 2; step <= 25; step++) {
15205         DWConvMicrokernelTester()
15206           .cr(16)
15207           .kr(25)
15208           .channels(channels)
15209           .width(3)
15210           .step(step)
15211           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15212       }
15213     }
15214   }
15215 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,multipixel_with_output_stride)15216   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_output_stride) {
15217     TEST_REQUIRES_X86_AVX;
15218     for (size_t channels = 1; channels <= 80; channels += 15) {
15219       DWConvMicrokernelTester()
15220         .cr(16)
15221         .kr(25)
15222         .channels(16)
15223         .width(5)
15224         .output_stride(83)
15225         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15226     }
15227   }
15228 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,multipixel_with_qmin)15229   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_qmin) {
15230     TEST_REQUIRES_X86_AVX;
15231     for (size_t channels = 1; channels <= 80; channels += 15) {
15232       DWConvMicrokernelTester()
15233         .cr(16)
15234         .kr(25)
15235         .channels(channels)
15236         .width(3)
15237         .qmin(128)
15238         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15239     }
15240   }
15241 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,multipixel_with_qmax)15242   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_qmax) {
15243     TEST_REQUIRES_X86_AVX;
15244     for (size_t channels = 1; channels <= 80; channels += 15) {
15245       DWConvMicrokernelTester()
15246         .cr(16)
15247         .kr(25)
15248         .channels(channels)
15249         .width(3)
15250         .qmax(128)
15251         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15252     }
15253   }
15254 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,input_offset)15255   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, input_offset) {
15256     TEST_REQUIRES_X86_AVX;
15257     for (uint32_t channels = 32; channels < 256; channels += 48) {
15258       DWConvMicrokernelTester()
15259         .cr(16)
15260         .kr(25)
15261         .channels(channels)
15262         .input_offset(304)
15263         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15264     }
15265   }
15266 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2,zero)15267   TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, zero) {
15268     TEST_REQUIRES_X86_AVX;
15269     for (uint32_t mz = 0; mz < 25; mz++) {
15270       for (uint32_t channels = 32; channels < 256; channels += 48) {
15271         DWConvMicrokernelTester()
15272           .cr(16)
15273           .kr(25)
15274           .channels(channels)
15275           .input_offset(304)
15276           .zero_index(mz)
15277           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
15278       }
15279     }
15280   }
15281 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15282 
15283 
15284 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,c_eq_8)15285   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_eq_8) {
15286     TEST_REQUIRES_X86_FMA3;
15287     DWConvMicrokernelTester()
15288       .cr(8)
15289       .kr(3)
15290       .channels(8)
15291       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15292   }
15293 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,c_div_8)15294   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_div_8) {
15295     TEST_REQUIRES_X86_FMA3;
15296     for (uint32_t channels = 16; channels < 128; channels += 24) {
15297       DWConvMicrokernelTester()
15298         .cr(8)
15299         .kr(3)
15300         .channels(channels)
15301         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15302     }
15303   }
15304 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,c_div_8_with_qmin)15305   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_div_8_with_qmin) {
15306     TEST_REQUIRES_X86_FMA3;
15307     for (uint32_t channels = 16; channels < 128; channels += 24) {
15308       DWConvMicrokernelTester()
15309         .cr(8)
15310         .kr(3)
15311         .channels(channels)
15312         .qmin(128)
15313         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15314     }
15315   }
15316 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,c_div_8_with_qmax)15317   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_div_8_with_qmax) {
15318     TEST_REQUIRES_X86_FMA3;
15319     for (uint32_t channels = 16; channels < 128; channels += 24) {
15320       DWConvMicrokernelTester()
15321         .cr(8)
15322         .kr(3)
15323         .channels(channels)
15324         .qmax(128)
15325         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15326     }
15327   }
15328 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,c_lt_8)15329   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_lt_8) {
15330     TEST_REQUIRES_X86_FMA3;
15331     for (uint32_t channels = 1; channels < 8; channels++) {
15332       DWConvMicrokernelTester()
15333         .cr(8)
15334         .kr(3)
15335         .channels(channels)
15336         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15337     }
15338   }
15339 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,c_gt_8)15340   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_gt_8) {
15341     TEST_REQUIRES_X86_FMA3;
15342     for (uint32_t channels = 9; channels < 16; channels++) {
15343       DWConvMicrokernelTester()
15344         .cr(8)
15345         .kr(3)
15346         .channels(channels)
15347         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15348     }
15349   }
15350 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,c_gt_8_with_qmin)15351   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_gt_8_with_qmin) {
15352     TEST_REQUIRES_X86_FMA3;
15353     for (uint32_t channels = 9; channels < 16; channels++) {
15354       DWConvMicrokernelTester()
15355         .cr(8)
15356         .kr(3)
15357         .channels(channels)
15358         .qmin(128)
15359         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15360     }
15361   }
15362 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,c_gt_8_with_qmax)15363   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_gt_8_with_qmax) {
15364     TEST_REQUIRES_X86_FMA3;
15365     for (uint32_t channels = 9; channels < 16; channels++) {
15366       DWConvMicrokernelTester()
15367         .cr(8)
15368         .kr(3)
15369         .channels(channels)
15370         .qmax(128)
15371         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15372     }
15373   }
15374 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,multipixel)15375   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, multipixel) {
15376     TEST_REQUIRES_X86_FMA3;
15377     for (size_t channels = 1; channels <= 40; channels += 7) {
15378       DWConvMicrokernelTester()
15379         .cr(8)
15380         .kr(3)
15381         .channels(channels)
15382         .width(3)
15383         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15384     }
15385   }
15386 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,multipixel_with_step)15387   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, multipixel_with_step) {
15388     TEST_REQUIRES_X86_FMA3;
15389     for (size_t channels = 1; channels <= 40; channels += 7) {
15390       for (size_t step = 2; step <= 3; step++) {
15391         DWConvMicrokernelTester()
15392           .cr(8)
15393           .kr(3)
15394           .channels(channels)
15395           .width(3)
15396           .step(step)
15397           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15398       }
15399     }
15400   }
15401 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,multipixel_with_output_stride)15402   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, multipixel_with_output_stride) {
15403     TEST_REQUIRES_X86_FMA3;
15404     for (size_t channels = 1; channels <= 40; channels += 7) {
15405       DWConvMicrokernelTester()
15406         .cr(8)
15407         .kr(3)
15408         .channels(8)
15409         .width(5)
15410         .output_stride(43)
15411         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15412     }
15413   }
15414 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,multipixel_with_qmin)15415   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, multipixel_with_qmin) {
15416     TEST_REQUIRES_X86_FMA3;
15417     for (size_t channels = 1; channels <= 40; channels += 7) {
15418       DWConvMicrokernelTester()
15419         .cr(8)
15420         .kr(3)
15421         .channels(channels)
15422         .width(3)
15423         .qmin(128)
15424         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15425     }
15426   }
15427 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,multipixel_with_qmax)15428   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, multipixel_with_qmax) {
15429     TEST_REQUIRES_X86_FMA3;
15430     for (size_t channels = 1; channels <= 40; channels += 7) {
15431       DWConvMicrokernelTester()
15432         .cr(8)
15433         .kr(3)
15434         .channels(channels)
15435         .width(3)
15436         .qmax(128)
15437         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15438     }
15439   }
15440 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,input_offset)15441   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, input_offset) {
15442     TEST_REQUIRES_X86_FMA3;
15443     for (uint32_t channels = 16; channels < 128; channels += 24) {
15444       DWConvMicrokernelTester()
15445         .cr(8)
15446         .kr(3)
15447         .channels(channels)
15448         .input_offset(176)
15449         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15450     }
15451   }
15452 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3,zero)15453   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, zero) {
15454     TEST_REQUIRES_X86_FMA3;
15455     for (uint32_t mz = 0; mz < 3; mz++) {
15456       for (uint32_t channels = 16; channels < 128; channels += 24) {
15457         DWConvMicrokernelTester()
15458           .cr(8)
15459           .kr(3)
15460           .channels(channels)
15461           .input_offset(176)
15462           .zero_index(mz)
15463           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
15464       }
15465     }
15466   }
15467 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15468 
15469 
15470 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,c_eq_8)15471   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_eq_8) {
15472     TEST_REQUIRES_X86_FMA3;
15473     DWConvMicrokernelTester()
15474       .cr(8)
15475       .kr(3)
15476       .channels(8)
15477       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15478   }
15479 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,c_div_8)15480   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_div_8) {
15481     TEST_REQUIRES_X86_FMA3;
15482     for (uint32_t channels = 16; channels < 128; channels += 24) {
15483       DWConvMicrokernelTester()
15484         .cr(8)
15485         .kr(3)
15486         .channels(channels)
15487         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15488     }
15489   }
15490 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,c_div_8_with_qmin)15491   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_div_8_with_qmin) {
15492     TEST_REQUIRES_X86_FMA3;
15493     for (uint32_t channels = 16; channels < 128; channels += 24) {
15494       DWConvMicrokernelTester()
15495         .cr(8)
15496         .kr(3)
15497         .channels(channels)
15498         .qmin(128)
15499         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15500     }
15501   }
15502 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,c_div_8_with_qmax)15503   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_div_8_with_qmax) {
15504     TEST_REQUIRES_X86_FMA3;
15505     for (uint32_t channels = 16; channels < 128; channels += 24) {
15506       DWConvMicrokernelTester()
15507         .cr(8)
15508         .kr(3)
15509         .channels(channels)
15510         .qmax(128)
15511         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15512     }
15513   }
15514 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,c_lt_8)15515   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_lt_8) {
15516     TEST_REQUIRES_X86_FMA3;
15517     for (uint32_t channels = 1; channels < 8; channels++) {
15518       DWConvMicrokernelTester()
15519         .cr(8)
15520         .kr(3)
15521         .channels(channels)
15522         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15523     }
15524   }
15525 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,c_gt_8)15526   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_gt_8) {
15527     TEST_REQUIRES_X86_FMA3;
15528     for (uint32_t channels = 9; channels < 16; channels++) {
15529       DWConvMicrokernelTester()
15530         .cr(8)
15531         .kr(3)
15532         .channels(channels)
15533         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15534     }
15535   }
15536 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,c_gt_8_with_qmin)15537   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_gt_8_with_qmin) {
15538     TEST_REQUIRES_X86_FMA3;
15539     for (uint32_t channels = 9; channels < 16; channels++) {
15540       DWConvMicrokernelTester()
15541         .cr(8)
15542         .kr(3)
15543         .channels(channels)
15544         .qmin(128)
15545         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15546     }
15547   }
15548 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,c_gt_8_with_qmax)15549   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_gt_8_with_qmax) {
15550     TEST_REQUIRES_X86_FMA3;
15551     for (uint32_t channels = 9; channels < 16; channels++) {
15552       DWConvMicrokernelTester()
15553         .cr(8)
15554         .kr(3)
15555         .channels(channels)
15556         .qmax(128)
15557         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15558     }
15559   }
15560 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,multipixel)15561   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, multipixel) {
15562     TEST_REQUIRES_X86_FMA3;
15563     for (size_t channels = 1; channels <= 40; channels += 7) {
15564       DWConvMicrokernelTester()
15565         .cr(8)
15566         .kr(3)
15567         .channels(channels)
15568         .width(3)
15569         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15570     }
15571   }
15572 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,multipixel_with_step)15573   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, multipixel_with_step) {
15574     TEST_REQUIRES_X86_FMA3;
15575     for (size_t channels = 1; channels <= 40; channels += 7) {
15576       for (size_t step = 2; step <= 3; step++) {
15577         DWConvMicrokernelTester()
15578           .cr(8)
15579           .kr(3)
15580           .channels(channels)
15581           .width(3)
15582           .step(step)
15583           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15584       }
15585     }
15586   }
15587 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,multipixel_with_output_stride)15588   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, multipixel_with_output_stride) {
15589     TEST_REQUIRES_X86_FMA3;
15590     for (size_t channels = 1; channels <= 40; channels += 7) {
15591       DWConvMicrokernelTester()
15592         .cr(8)
15593         .kr(3)
15594         .channels(8)
15595         .width(5)
15596         .output_stride(43)
15597         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15598     }
15599   }
15600 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,multipixel_with_qmin)15601   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, multipixel_with_qmin) {
15602     TEST_REQUIRES_X86_FMA3;
15603     for (size_t channels = 1; channels <= 40; channels += 7) {
15604       DWConvMicrokernelTester()
15605         .cr(8)
15606         .kr(3)
15607         .channels(channels)
15608         .width(3)
15609         .qmin(128)
15610         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15611     }
15612   }
15613 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,multipixel_with_qmax)15614   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, multipixel_with_qmax) {
15615     TEST_REQUIRES_X86_FMA3;
15616     for (size_t channels = 1; channels <= 40; channels += 7) {
15617       DWConvMicrokernelTester()
15618         .cr(8)
15619         .kr(3)
15620         .channels(channels)
15621         .width(3)
15622         .qmax(128)
15623         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15624     }
15625   }
15626 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,input_offset)15627   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, input_offset) {
15628     TEST_REQUIRES_X86_FMA3;
15629     for (uint32_t channels = 16; channels < 128; channels += 24) {
15630       DWConvMicrokernelTester()
15631         .cr(8)
15632         .kr(3)
15633         .channels(channels)
15634         .input_offset(176)
15635         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15636     }
15637   }
15638 
TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2,zero)15639   TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, zero) {
15640     TEST_REQUIRES_X86_FMA3;
15641     for (uint32_t mz = 0; mz < 3; mz++) {
15642       for (uint32_t channels = 16; channels < 128; channels += 24) {
15643         DWConvMicrokernelTester()
15644           .cr(8)
15645           .kr(3)
15646           .channels(channels)
15647           .input_offset(176)
15648           .zero_index(mz)
15649           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
15650       }
15651     }
15652   }
15653 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15654 
15655 
15656 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,c_eq_8)15657   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_eq_8) {
15658     TEST_REQUIRES_X86_FMA3;
15659     DWConvMicrokernelTester()
15660       .cr(8)
15661       .kr(4)
15662       .channels(8)
15663       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15664   }
15665 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,c_div_8)15666   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_div_8) {
15667     TEST_REQUIRES_X86_FMA3;
15668     for (uint32_t channels = 16; channels < 128; channels += 24) {
15669       DWConvMicrokernelTester()
15670         .cr(8)
15671         .kr(4)
15672         .channels(channels)
15673         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15674     }
15675   }
15676 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,c_div_8_with_qmin)15677   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_div_8_with_qmin) {
15678     TEST_REQUIRES_X86_FMA3;
15679     for (uint32_t channels = 16; channels < 128; channels += 24) {
15680       DWConvMicrokernelTester()
15681         .cr(8)
15682         .kr(4)
15683         .channels(channels)
15684         .qmin(128)
15685         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15686     }
15687   }
15688 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,c_div_8_with_qmax)15689   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_div_8_with_qmax) {
15690     TEST_REQUIRES_X86_FMA3;
15691     for (uint32_t channels = 16; channels < 128; channels += 24) {
15692       DWConvMicrokernelTester()
15693         .cr(8)
15694         .kr(4)
15695         .channels(channels)
15696         .qmax(128)
15697         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15698     }
15699   }
15700 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,c_lt_8)15701   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_lt_8) {
15702     TEST_REQUIRES_X86_FMA3;
15703     for (uint32_t channels = 1; channels < 8; channels++) {
15704       DWConvMicrokernelTester()
15705         .cr(8)
15706         .kr(4)
15707         .channels(channels)
15708         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15709     }
15710   }
15711 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,c_gt_8)15712   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_gt_8) {
15713     TEST_REQUIRES_X86_FMA3;
15714     for (uint32_t channels = 9; channels < 16; channels++) {
15715       DWConvMicrokernelTester()
15716         .cr(8)
15717         .kr(4)
15718         .channels(channels)
15719         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15720     }
15721   }
15722 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,c_gt_8_with_qmin)15723   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_gt_8_with_qmin) {
15724     TEST_REQUIRES_X86_FMA3;
15725     for (uint32_t channels = 9; channels < 16; channels++) {
15726       DWConvMicrokernelTester()
15727         .cr(8)
15728         .kr(4)
15729         .channels(channels)
15730         .qmin(128)
15731         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15732     }
15733   }
15734 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,c_gt_8_with_qmax)15735   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_gt_8_with_qmax) {
15736     TEST_REQUIRES_X86_FMA3;
15737     for (uint32_t channels = 9; channels < 16; channels++) {
15738       DWConvMicrokernelTester()
15739         .cr(8)
15740         .kr(4)
15741         .channels(channels)
15742         .qmax(128)
15743         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15744     }
15745   }
15746 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,multipixel)15747   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel) {
15748     TEST_REQUIRES_X86_FMA3;
15749     for (size_t channels = 1; channels <= 40; channels += 7) {
15750       DWConvMicrokernelTester()
15751         .cr(8)
15752         .kr(4)
15753         .channels(channels)
15754         .width(3)
15755         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15756     }
15757   }
15758 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,multipixel_with_step)15759   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_step) {
15760     TEST_REQUIRES_X86_FMA3;
15761     for (size_t channels = 1; channels <= 40; channels += 7) {
15762       for (size_t step = 2; step <= 4; step++) {
15763         DWConvMicrokernelTester()
15764           .cr(8)
15765           .kr(4)
15766           .channels(channels)
15767           .width(3)
15768           .step(step)
15769           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15770       }
15771     }
15772   }
15773 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,multipixel_with_output_stride)15774   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_output_stride) {
15775     TEST_REQUIRES_X86_FMA3;
15776     for (size_t channels = 1; channels <= 40; channels += 7) {
15777       DWConvMicrokernelTester()
15778         .cr(8)
15779         .kr(4)
15780         .channels(8)
15781         .width(5)
15782         .output_stride(43)
15783         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15784     }
15785   }
15786 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,multipixel_with_qmin)15787   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_qmin) {
15788     TEST_REQUIRES_X86_FMA3;
15789     for (size_t channels = 1; channels <= 40; channels += 7) {
15790       DWConvMicrokernelTester()
15791         .cr(8)
15792         .kr(4)
15793         .channels(channels)
15794         .width(3)
15795         .qmin(128)
15796         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15797     }
15798   }
15799 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,multipixel_with_qmax)15800   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_qmax) {
15801     TEST_REQUIRES_X86_FMA3;
15802     for (size_t channels = 1; channels <= 40; channels += 7) {
15803       DWConvMicrokernelTester()
15804         .cr(8)
15805         .kr(4)
15806         .channels(channels)
15807         .width(3)
15808         .qmax(128)
15809         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15810     }
15811   }
15812 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,input_offset)15813   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, input_offset) {
15814     TEST_REQUIRES_X86_FMA3;
15815     for (uint32_t channels = 16; channels < 128; channels += 24) {
15816       DWConvMicrokernelTester()
15817         .cr(8)
15818         .kr(4)
15819         .channels(channels)
15820         .input_offset(176)
15821         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15822     }
15823   }
15824 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3,zero)15825   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, zero) {
15826     TEST_REQUIRES_X86_FMA3;
15827     for (uint32_t mz = 0; mz < 4; mz++) {
15828       for (uint32_t channels = 16; channels < 128; channels += 24) {
15829         DWConvMicrokernelTester()
15830           .cr(8)
15831           .kr(4)
15832           .channels(channels)
15833           .input_offset(176)
15834           .zero_index(mz)
15835           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
15836       }
15837     }
15838   }
15839 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
15840 
15841 
15842 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,c_eq_8)15843   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_eq_8) {
15844     TEST_REQUIRES_X86_FMA3;
15845     DWConvMicrokernelTester()
15846       .cr(8)
15847       .kr(4)
15848       .channels(8)
15849       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15850   }
15851 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,c_div_8)15852   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_div_8) {
15853     TEST_REQUIRES_X86_FMA3;
15854     for (uint32_t channels = 16; channels < 128; channels += 24) {
15855       DWConvMicrokernelTester()
15856         .cr(8)
15857         .kr(4)
15858         .channels(channels)
15859         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15860     }
15861   }
15862 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,c_div_8_with_qmin)15863   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_div_8_with_qmin) {
15864     TEST_REQUIRES_X86_FMA3;
15865     for (uint32_t channels = 16; channels < 128; channels += 24) {
15866       DWConvMicrokernelTester()
15867         .cr(8)
15868         .kr(4)
15869         .channels(channels)
15870         .qmin(128)
15871         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15872     }
15873   }
15874 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,c_div_8_with_qmax)15875   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_div_8_with_qmax) {
15876     TEST_REQUIRES_X86_FMA3;
15877     for (uint32_t channels = 16; channels < 128; channels += 24) {
15878       DWConvMicrokernelTester()
15879         .cr(8)
15880         .kr(4)
15881         .channels(channels)
15882         .qmax(128)
15883         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15884     }
15885   }
15886 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,c_lt_8)15887   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_lt_8) {
15888     TEST_REQUIRES_X86_FMA3;
15889     for (uint32_t channels = 1; channels < 8; channels++) {
15890       DWConvMicrokernelTester()
15891         .cr(8)
15892         .kr(4)
15893         .channels(channels)
15894         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15895     }
15896   }
15897 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,c_gt_8)15898   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_gt_8) {
15899     TEST_REQUIRES_X86_FMA3;
15900     for (uint32_t channels = 9; channels < 16; channels++) {
15901       DWConvMicrokernelTester()
15902         .cr(8)
15903         .kr(4)
15904         .channels(channels)
15905         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15906     }
15907   }
15908 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,c_gt_8_with_qmin)15909   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_gt_8_with_qmin) {
15910     TEST_REQUIRES_X86_FMA3;
15911     for (uint32_t channels = 9; channels < 16; channels++) {
15912       DWConvMicrokernelTester()
15913         .cr(8)
15914         .kr(4)
15915         .channels(channels)
15916         .qmin(128)
15917         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15918     }
15919   }
15920 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,c_gt_8_with_qmax)15921   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_gt_8_with_qmax) {
15922     TEST_REQUIRES_X86_FMA3;
15923     for (uint32_t channels = 9; channels < 16; channels++) {
15924       DWConvMicrokernelTester()
15925         .cr(8)
15926         .kr(4)
15927         .channels(channels)
15928         .qmax(128)
15929         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15930     }
15931   }
15932 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,multipixel)15933   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel) {
15934     TEST_REQUIRES_X86_FMA3;
15935     for (size_t channels = 1; channels <= 40; channels += 7) {
15936       DWConvMicrokernelTester()
15937         .cr(8)
15938         .kr(4)
15939         .channels(channels)
15940         .width(3)
15941         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15942     }
15943   }
15944 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,multipixel_with_step)15945   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_step) {
15946     TEST_REQUIRES_X86_FMA3;
15947     for (size_t channels = 1; channels <= 40; channels += 7) {
15948       for (size_t step = 2; step <= 4; step++) {
15949         DWConvMicrokernelTester()
15950           .cr(8)
15951           .kr(4)
15952           .channels(channels)
15953           .width(3)
15954           .step(step)
15955           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15956       }
15957     }
15958   }
15959 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,multipixel_with_output_stride)15960   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_output_stride) {
15961     TEST_REQUIRES_X86_FMA3;
15962     for (size_t channels = 1; channels <= 40; channels += 7) {
15963       DWConvMicrokernelTester()
15964         .cr(8)
15965         .kr(4)
15966         .channels(8)
15967         .width(5)
15968         .output_stride(43)
15969         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15970     }
15971   }
15972 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,multipixel_with_qmin)15973   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_qmin) {
15974     TEST_REQUIRES_X86_FMA3;
15975     for (size_t channels = 1; channels <= 40; channels += 7) {
15976       DWConvMicrokernelTester()
15977         .cr(8)
15978         .kr(4)
15979         .channels(channels)
15980         .width(3)
15981         .qmin(128)
15982         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15983     }
15984   }
15985 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,multipixel_with_qmax)15986   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_qmax) {
15987     TEST_REQUIRES_X86_FMA3;
15988     for (size_t channels = 1; channels <= 40; channels += 7) {
15989       DWConvMicrokernelTester()
15990         .cr(8)
15991         .kr(4)
15992         .channels(channels)
15993         .width(3)
15994         .qmax(128)
15995         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
15996     }
15997   }
15998 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,input_offset)15999   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, input_offset) {
16000     TEST_REQUIRES_X86_FMA3;
16001     for (uint32_t channels = 16; channels < 128; channels += 24) {
16002       DWConvMicrokernelTester()
16003         .cr(8)
16004         .kr(4)
16005         .channels(channels)
16006         .input_offset(176)
16007         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
16008     }
16009   }
16010 
TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2,zero)16011   TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, zero) {
16012     TEST_REQUIRES_X86_FMA3;
16013     for (uint32_t mz = 0; mz < 4; mz++) {
16014       for (uint32_t channels = 16; channels < 128; channels += 24) {
16015         DWConvMicrokernelTester()
16016           .cr(8)
16017           .kr(4)
16018           .channels(channels)
16019           .input_offset(176)
16020           .zero_index(mz)
16021           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
16022       }
16023     }
16024   }
16025 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
16026 
16027 
16028 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,c_eq_8)16029   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_eq_8) {
16030     TEST_REQUIRES_X86_FMA3;
16031     DWConvMicrokernelTester()
16032       .cr(8)
16033       .kr(9)
16034       .channels(8)
16035       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16036   }
16037 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,c_div_8)16038   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_div_8) {
16039     TEST_REQUIRES_X86_FMA3;
16040     for (uint32_t channels = 16; channels < 128; channels += 24) {
16041       DWConvMicrokernelTester()
16042         .cr(8)
16043         .kr(9)
16044         .channels(channels)
16045         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16046     }
16047   }
16048 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,c_div_8_with_qmin)16049   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_div_8_with_qmin) {
16050     TEST_REQUIRES_X86_FMA3;
16051     for (uint32_t channels = 16; channels < 128; channels += 24) {
16052       DWConvMicrokernelTester()
16053         .cr(8)
16054         .kr(9)
16055         .channels(channels)
16056         .qmin(128)
16057         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16058     }
16059   }
16060 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,c_div_8_with_qmax)16061   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_div_8_with_qmax) {
16062     TEST_REQUIRES_X86_FMA3;
16063     for (uint32_t channels = 16; channels < 128; channels += 24) {
16064       DWConvMicrokernelTester()
16065         .cr(8)
16066         .kr(9)
16067         .channels(channels)
16068         .qmax(128)
16069         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16070     }
16071   }
16072 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,c_lt_8)16073   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_lt_8) {
16074     TEST_REQUIRES_X86_FMA3;
16075     for (uint32_t channels = 1; channels < 8; channels++) {
16076       DWConvMicrokernelTester()
16077         .cr(8)
16078         .kr(9)
16079         .channels(channels)
16080         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16081     }
16082   }
16083 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,c_gt_8)16084   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_gt_8) {
16085     TEST_REQUIRES_X86_FMA3;
16086     for (uint32_t channels = 9; channels < 16; channels++) {
16087       DWConvMicrokernelTester()
16088         .cr(8)
16089         .kr(9)
16090         .channels(channels)
16091         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16092     }
16093   }
16094 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,c_gt_8_with_qmin)16095   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_gt_8_with_qmin) {
16096     TEST_REQUIRES_X86_FMA3;
16097     for (uint32_t channels = 9; channels < 16; channels++) {
16098       DWConvMicrokernelTester()
16099         .cr(8)
16100         .kr(9)
16101         .channels(channels)
16102         .qmin(128)
16103         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16104     }
16105   }
16106 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,c_gt_8_with_qmax)16107   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_gt_8_with_qmax) {
16108     TEST_REQUIRES_X86_FMA3;
16109     for (uint32_t channels = 9; channels < 16; channels++) {
16110       DWConvMicrokernelTester()
16111         .cr(8)
16112         .kr(9)
16113         .channels(channels)
16114         .qmax(128)
16115         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16116     }
16117   }
16118 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,multipixel)16119   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel) {
16120     TEST_REQUIRES_X86_FMA3;
16121     for (size_t channels = 1; channels <= 40; channels += 7) {
16122       DWConvMicrokernelTester()
16123         .cr(8)
16124         .kr(9)
16125         .channels(channels)
16126         .width(3)
16127         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16128     }
16129   }
16130 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,multipixel_with_step)16131   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_step) {
16132     TEST_REQUIRES_X86_FMA3;
16133     for (size_t channels = 1; channels <= 40; channels += 7) {
16134       for (size_t step = 2; step <= 9; step++) {
16135         DWConvMicrokernelTester()
16136           .cr(8)
16137           .kr(9)
16138           .channels(channels)
16139           .width(3)
16140           .step(step)
16141           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16142       }
16143     }
16144   }
16145 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,multipixel_with_output_stride)16146   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_output_stride) {
16147     TEST_REQUIRES_X86_FMA3;
16148     for (size_t channels = 1; channels <= 40; channels += 7) {
16149       DWConvMicrokernelTester()
16150         .cr(8)
16151         .kr(9)
16152         .channels(8)
16153         .width(5)
16154         .output_stride(43)
16155         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16156     }
16157   }
16158 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,multipixel_with_qmin)16159   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_qmin) {
16160     TEST_REQUIRES_X86_FMA3;
16161     for (size_t channels = 1; channels <= 40; channels += 7) {
16162       DWConvMicrokernelTester()
16163         .cr(8)
16164         .kr(9)
16165         .channels(channels)
16166         .width(3)
16167         .qmin(128)
16168         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16169     }
16170   }
16171 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,multipixel_with_qmax)16172   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_qmax) {
16173     TEST_REQUIRES_X86_FMA3;
16174     for (size_t channels = 1; channels <= 40; channels += 7) {
16175       DWConvMicrokernelTester()
16176         .cr(8)
16177         .kr(9)
16178         .channels(channels)
16179         .width(3)
16180         .qmax(128)
16181         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16182     }
16183   }
16184 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,input_offset)16185   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, input_offset) {
16186     TEST_REQUIRES_X86_FMA3;
16187     for (uint32_t channels = 16; channels < 128; channels += 24) {
16188       DWConvMicrokernelTester()
16189         .cr(8)
16190         .kr(9)
16191         .channels(channels)
16192         .input_offset(176)
16193         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16194     }
16195   }
16196 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3,zero)16197   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, zero) {
16198     TEST_REQUIRES_X86_FMA3;
16199     for (uint32_t mz = 0; mz < 9; mz++) {
16200       for (uint32_t channels = 16; channels < 128; channels += 24) {
16201         DWConvMicrokernelTester()
16202           .cr(8)
16203           .kr(9)
16204           .channels(channels)
16205           .input_offset(176)
16206           .zero_index(mz)
16207           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
16208       }
16209     }
16210   }
16211 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
16212 
16213 
16214 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,c_eq_8)16215   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_eq_8) {
16216     TEST_REQUIRES_X86_FMA3;
16217     DWConvMicrokernelTester()
16218       .cr(8)
16219       .kr(9)
16220       .channels(8)
16221       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16222   }
16223 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,c_div_8)16224   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_div_8) {
16225     TEST_REQUIRES_X86_FMA3;
16226     for (uint32_t channels = 16; channels < 128; channels += 24) {
16227       DWConvMicrokernelTester()
16228         .cr(8)
16229         .kr(9)
16230         .channels(channels)
16231         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16232     }
16233   }
16234 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,c_div_8_with_qmin)16235   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_div_8_with_qmin) {
16236     TEST_REQUIRES_X86_FMA3;
16237     for (uint32_t channels = 16; channels < 128; channels += 24) {
16238       DWConvMicrokernelTester()
16239         .cr(8)
16240         .kr(9)
16241         .channels(channels)
16242         .qmin(128)
16243         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16244     }
16245   }
16246 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,c_div_8_with_qmax)16247   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_div_8_with_qmax) {
16248     TEST_REQUIRES_X86_FMA3;
16249     for (uint32_t channels = 16; channels < 128; channels += 24) {
16250       DWConvMicrokernelTester()
16251         .cr(8)
16252         .kr(9)
16253         .channels(channels)
16254         .qmax(128)
16255         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16256     }
16257   }
16258 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,c_lt_8)16259   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_lt_8) {
16260     TEST_REQUIRES_X86_FMA3;
16261     for (uint32_t channels = 1; channels < 8; channels++) {
16262       DWConvMicrokernelTester()
16263         .cr(8)
16264         .kr(9)
16265         .channels(channels)
16266         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16267     }
16268   }
16269 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,c_gt_8)16270   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_gt_8) {
16271     TEST_REQUIRES_X86_FMA3;
16272     for (uint32_t channels = 9; channels < 16; channels++) {
16273       DWConvMicrokernelTester()
16274         .cr(8)
16275         .kr(9)
16276         .channels(channels)
16277         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16278     }
16279   }
16280 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,c_gt_8_with_qmin)16281   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_gt_8_with_qmin) {
16282     TEST_REQUIRES_X86_FMA3;
16283     for (uint32_t channels = 9; channels < 16; channels++) {
16284       DWConvMicrokernelTester()
16285         .cr(8)
16286         .kr(9)
16287         .channels(channels)
16288         .qmin(128)
16289         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16290     }
16291   }
16292 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,c_gt_8_with_qmax)16293   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_gt_8_with_qmax) {
16294     TEST_REQUIRES_X86_FMA3;
16295     for (uint32_t channels = 9; channels < 16; channels++) {
16296       DWConvMicrokernelTester()
16297         .cr(8)
16298         .kr(9)
16299         .channels(channels)
16300         .qmax(128)
16301         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16302     }
16303   }
16304 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,multipixel)16305   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel) {
16306     TEST_REQUIRES_X86_FMA3;
16307     for (size_t channels = 1; channels <= 40; channels += 7) {
16308       DWConvMicrokernelTester()
16309         .cr(8)
16310         .kr(9)
16311         .channels(channels)
16312         .width(3)
16313         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16314     }
16315   }
16316 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,multipixel_with_step)16317   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_step) {
16318     TEST_REQUIRES_X86_FMA3;
16319     for (size_t channels = 1; channels <= 40; channels += 7) {
16320       for (size_t step = 2; step <= 9; step++) {
16321         DWConvMicrokernelTester()
16322           .cr(8)
16323           .kr(9)
16324           .channels(channels)
16325           .width(3)
16326           .step(step)
16327           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16328       }
16329     }
16330   }
16331 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,multipixel_with_output_stride)16332   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_output_stride) {
16333     TEST_REQUIRES_X86_FMA3;
16334     for (size_t channels = 1; channels <= 40; channels += 7) {
16335       DWConvMicrokernelTester()
16336         .cr(8)
16337         .kr(9)
16338         .channels(8)
16339         .width(5)
16340         .output_stride(43)
16341         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16342     }
16343   }
16344 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,multipixel_with_qmin)16345   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_qmin) {
16346     TEST_REQUIRES_X86_FMA3;
16347     for (size_t channels = 1; channels <= 40; channels += 7) {
16348       DWConvMicrokernelTester()
16349         .cr(8)
16350         .kr(9)
16351         .channels(channels)
16352         .width(3)
16353         .qmin(128)
16354         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16355     }
16356   }
16357 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,multipixel_with_qmax)16358   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_qmax) {
16359     TEST_REQUIRES_X86_FMA3;
16360     for (size_t channels = 1; channels <= 40; channels += 7) {
16361       DWConvMicrokernelTester()
16362         .cr(8)
16363         .kr(9)
16364         .channels(channels)
16365         .width(3)
16366         .qmax(128)
16367         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16368     }
16369   }
16370 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,input_offset)16371   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, input_offset) {
16372     TEST_REQUIRES_X86_FMA3;
16373     for (uint32_t channels = 16; channels < 128; channels += 24) {
16374       DWConvMicrokernelTester()
16375         .cr(8)
16376         .kr(9)
16377         .channels(channels)
16378         .input_offset(176)
16379         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16380     }
16381   }
16382 
TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2,zero)16383   TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, zero) {
16384     TEST_REQUIRES_X86_FMA3;
16385     for (uint32_t mz = 0; mz < 9; mz++) {
16386       for (uint32_t channels = 16; channels < 128; channels += 24) {
16387         DWConvMicrokernelTester()
16388           .cr(8)
16389           .kr(9)
16390           .channels(channels)
16391           .input_offset(176)
16392           .zero_index(mz)
16393           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
16394       }
16395     }
16396   }
16397 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
16398 
16399 
16400 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,c_eq_8)16401   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_eq_8) {
16402     TEST_REQUIRES_X86_FMA3;
16403     DWConvMicrokernelTester()
16404       .cr(8)
16405       .kr(25)
16406       .channels(8)
16407       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16408   }
16409 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,c_div_8)16410   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_div_8) {
16411     TEST_REQUIRES_X86_FMA3;
16412     for (uint32_t channels = 16; channels < 128; channels += 24) {
16413       DWConvMicrokernelTester()
16414         .cr(8)
16415         .kr(25)
16416         .channels(channels)
16417         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16418     }
16419   }
16420 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,c_div_8_with_qmin)16421   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_div_8_with_qmin) {
16422     TEST_REQUIRES_X86_FMA3;
16423     for (uint32_t channels = 16; channels < 128; channels += 24) {
16424       DWConvMicrokernelTester()
16425         .cr(8)
16426         .kr(25)
16427         .channels(channels)
16428         .qmin(128)
16429         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16430     }
16431   }
16432 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,c_div_8_with_qmax)16433   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_div_8_with_qmax) {
16434     TEST_REQUIRES_X86_FMA3;
16435     for (uint32_t channels = 16; channels < 128; channels += 24) {
16436       DWConvMicrokernelTester()
16437         .cr(8)
16438         .kr(25)
16439         .channels(channels)
16440         .qmax(128)
16441         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16442     }
16443   }
16444 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,c_lt_8)16445   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_lt_8) {
16446     TEST_REQUIRES_X86_FMA3;
16447     for (uint32_t channels = 1; channels < 8; channels++) {
16448       DWConvMicrokernelTester()
16449         .cr(8)
16450         .kr(25)
16451         .channels(channels)
16452         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16453     }
16454   }
16455 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,c_gt_8)16456   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_gt_8) {
16457     TEST_REQUIRES_X86_FMA3;
16458     for (uint32_t channels = 9; channels < 16; channels++) {
16459       DWConvMicrokernelTester()
16460         .cr(8)
16461         .kr(25)
16462         .channels(channels)
16463         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16464     }
16465   }
16466 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,c_gt_8_with_qmin)16467   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_gt_8_with_qmin) {
16468     TEST_REQUIRES_X86_FMA3;
16469     for (uint32_t channels = 9; channels < 16; channels++) {
16470       DWConvMicrokernelTester()
16471         .cr(8)
16472         .kr(25)
16473         .channels(channels)
16474         .qmin(128)
16475         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16476     }
16477   }
16478 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,c_gt_8_with_qmax)16479   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_gt_8_with_qmax) {
16480     TEST_REQUIRES_X86_FMA3;
16481     for (uint32_t channels = 9; channels < 16; channels++) {
16482       DWConvMicrokernelTester()
16483         .cr(8)
16484         .kr(25)
16485         .channels(channels)
16486         .qmax(128)
16487         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16488     }
16489   }
16490 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,multipixel)16491   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel) {
16492     TEST_REQUIRES_X86_FMA3;
16493     for (size_t channels = 1; channels <= 40; channels += 7) {
16494       DWConvMicrokernelTester()
16495         .cr(8)
16496         .kr(25)
16497         .channels(channels)
16498         .width(3)
16499         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16500     }
16501   }
16502 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,multipixel_with_step)16503   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_step) {
16504     TEST_REQUIRES_X86_FMA3;
16505     for (size_t channels = 1; channels <= 40; channels += 7) {
16506       for (size_t step = 2; step <= 25; step++) {
16507         DWConvMicrokernelTester()
16508           .cr(8)
16509           .kr(25)
16510           .channels(channels)
16511           .width(3)
16512           .step(step)
16513           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16514       }
16515     }
16516   }
16517 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,multipixel_with_output_stride)16518   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_output_stride) {
16519     TEST_REQUIRES_X86_FMA3;
16520     for (size_t channels = 1; channels <= 40; channels += 7) {
16521       DWConvMicrokernelTester()
16522         .cr(8)
16523         .kr(25)
16524         .channels(8)
16525         .width(5)
16526         .output_stride(43)
16527         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16528     }
16529   }
16530 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,multipixel_with_qmin)16531   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_qmin) {
16532     TEST_REQUIRES_X86_FMA3;
16533     for (size_t channels = 1; channels <= 40; channels += 7) {
16534       DWConvMicrokernelTester()
16535         .cr(8)
16536         .kr(25)
16537         .channels(channels)
16538         .width(3)
16539         .qmin(128)
16540         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16541     }
16542   }
16543 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,multipixel_with_qmax)16544   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_qmax) {
16545     TEST_REQUIRES_X86_FMA3;
16546     for (size_t channels = 1; channels <= 40; channels += 7) {
16547       DWConvMicrokernelTester()
16548         .cr(8)
16549         .kr(25)
16550         .channels(channels)
16551         .width(3)
16552         .qmax(128)
16553         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16554     }
16555   }
16556 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,input_offset)16557   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, input_offset) {
16558     TEST_REQUIRES_X86_FMA3;
16559     for (uint32_t channels = 16; channels < 128; channels += 24) {
16560       DWConvMicrokernelTester()
16561         .cr(8)
16562         .kr(25)
16563         .channels(channels)
16564         .input_offset(176)
16565         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16566     }
16567   }
16568 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3,zero)16569   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, zero) {
16570     TEST_REQUIRES_X86_FMA3;
16571     for (uint32_t mz = 0; mz < 25; mz++) {
16572       for (uint32_t channels = 16; channels < 128; channels += 24) {
16573         DWConvMicrokernelTester()
16574           .cr(8)
16575           .kr(25)
16576           .channels(channels)
16577           .input_offset(176)
16578           .zero_index(mz)
16579           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
16580       }
16581     }
16582   }
16583 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
16584 
16585 
16586 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,c_eq_8)16587   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_eq_8) {
16588     TEST_REQUIRES_X86_FMA3;
16589     DWConvMicrokernelTester()
16590       .cr(8)
16591       .kr(25)
16592       .channels(8)
16593       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16594   }
16595 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,c_div_8)16596   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_div_8) {
16597     TEST_REQUIRES_X86_FMA3;
16598     for (uint32_t channels = 16; channels < 128; channels += 24) {
16599       DWConvMicrokernelTester()
16600         .cr(8)
16601         .kr(25)
16602         .channels(channels)
16603         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16604     }
16605   }
16606 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,c_div_8_with_qmin)16607   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_div_8_with_qmin) {
16608     TEST_REQUIRES_X86_FMA3;
16609     for (uint32_t channels = 16; channels < 128; channels += 24) {
16610       DWConvMicrokernelTester()
16611         .cr(8)
16612         .kr(25)
16613         .channels(channels)
16614         .qmin(128)
16615         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16616     }
16617   }
16618 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,c_div_8_with_qmax)16619   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_div_8_with_qmax) {
16620     TEST_REQUIRES_X86_FMA3;
16621     for (uint32_t channels = 16; channels < 128; channels += 24) {
16622       DWConvMicrokernelTester()
16623         .cr(8)
16624         .kr(25)
16625         .channels(channels)
16626         .qmax(128)
16627         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16628     }
16629   }
16630 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,c_lt_8)16631   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_lt_8) {
16632     TEST_REQUIRES_X86_FMA3;
16633     for (uint32_t channels = 1; channels < 8; channels++) {
16634       DWConvMicrokernelTester()
16635         .cr(8)
16636         .kr(25)
16637         .channels(channels)
16638         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16639     }
16640   }
16641 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,c_gt_8)16642   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_gt_8) {
16643     TEST_REQUIRES_X86_FMA3;
16644     for (uint32_t channels = 9; channels < 16; channels++) {
16645       DWConvMicrokernelTester()
16646         .cr(8)
16647         .kr(25)
16648         .channels(channels)
16649         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16650     }
16651   }
16652 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,c_gt_8_with_qmin)16653   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_gt_8_with_qmin) {
16654     TEST_REQUIRES_X86_FMA3;
16655     for (uint32_t channels = 9; channels < 16; channels++) {
16656       DWConvMicrokernelTester()
16657         .cr(8)
16658         .kr(25)
16659         .channels(channels)
16660         .qmin(128)
16661         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16662     }
16663   }
16664 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,c_gt_8_with_qmax)16665   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_gt_8_with_qmax) {
16666     TEST_REQUIRES_X86_FMA3;
16667     for (uint32_t channels = 9; channels < 16; channels++) {
16668       DWConvMicrokernelTester()
16669         .cr(8)
16670         .kr(25)
16671         .channels(channels)
16672         .qmax(128)
16673         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16674     }
16675   }
16676 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,multipixel)16677   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel) {
16678     TEST_REQUIRES_X86_FMA3;
16679     for (size_t channels = 1; channels <= 40; channels += 7) {
16680       DWConvMicrokernelTester()
16681         .cr(8)
16682         .kr(25)
16683         .channels(channels)
16684         .width(3)
16685         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16686     }
16687   }
16688 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,multipixel_with_step)16689   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_step) {
16690     TEST_REQUIRES_X86_FMA3;
16691     for (size_t channels = 1; channels <= 40; channels += 7) {
16692       for (size_t step = 2; step <= 25; step++) {
16693         DWConvMicrokernelTester()
16694           .cr(8)
16695           .kr(25)
16696           .channels(channels)
16697           .width(3)
16698           .step(step)
16699           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16700       }
16701     }
16702   }
16703 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,multipixel_with_output_stride)16704   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_output_stride) {
16705     TEST_REQUIRES_X86_FMA3;
16706     for (size_t channels = 1; channels <= 40; channels += 7) {
16707       DWConvMicrokernelTester()
16708         .cr(8)
16709         .kr(25)
16710         .channels(8)
16711         .width(5)
16712         .output_stride(43)
16713         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16714     }
16715   }
16716 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,multipixel_with_qmin)16717   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_qmin) {
16718     TEST_REQUIRES_X86_FMA3;
16719     for (size_t channels = 1; channels <= 40; channels += 7) {
16720       DWConvMicrokernelTester()
16721         .cr(8)
16722         .kr(25)
16723         .channels(channels)
16724         .width(3)
16725         .qmin(128)
16726         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16727     }
16728   }
16729 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,multipixel_with_qmax)16730   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_qmax) {
16731     TEST_REQUIRES_X86_FMA3;
16732     for (size_t channels = 1; channels <= 40; channels += 7) {
16733       DWConvMicrokernelTester()
16734         .cr(8)
16735         .kr(25)
16736         .channels(channels)
16737         .width(3)
16738         .qmax(128)
16739         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16740     }
16741   }
16742 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,input_offset)16743   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, input_offset) {
16744     TEST_REQUIRES_X86_FMA3;
16745     for (uint32_t channels = 16; channels < 128; channels += 24) {
16746       DWConvMicrokernelTester()
16747         .cr(8)
16748         .kr(25)
16749         .channels(channels)
16750         .input_offset(176)
16751         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16752     }
16753   }
16754 
TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2,zero)16755   TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, zero) {
16756     TEST_REQUIRES_X86_FMA3;
16757     for (uint32_t mz = 0; mz < 25; mz++) {
16758       for (uint32_t channels = 16; channels < 128; channels += 24) {
16759         DWConvMicrokernelTester()
16760           .cr(8)
16761           .kr(25)
16762           .channels(channels)
16763           .input_offset(176)
16764           .zero_index(mz)
16765           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
16766       }
16767     }
16768   }
16769 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
16770 
16771 
16772 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,c_eq_16)16773   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, c_eq_16) {
16774     TEST_REQUIRES_X86_FMA3;
16775     DWConvMicrokernelTester()
16776       .cr(16)
16777       .kr(3)
16778       .channels(16)
16779       .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16780   }
16781 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,c_div_16)16782   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, c_div_16) {
16783     TEST_REQUIRES_X86_FMA3;
16784     for (uint32_t channels = 32; channels < 256; channels += 48) {
16785       DWConvMicrokernelTester()
16786         .cr(16)
16787         .kr(3)
16788         .channels(channels)
16789         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16790     }
16791   }
16792 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,c_div_16_with_qmin)16793   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, c_div_16_with_qmin) {
16794     TEST_REQUIRES_X86_FMA3;
16795     for (uint32_t channels = 32; channels < 256; channels += 48) {
16796       DWConvMicrokernelTester()
16797         .cr(16)
16798         .kr(3)
16799         .channels(channels)
16800         .qmin(128)
16801         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16802     }
16803   }
16804 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,c_div_16_with_qmax)16805   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, c_div_16_with_qmax) {
16806     TEST_REQUIRES_X86_FMA3;
16807     for (uint32_t channels = 32; channels < 256; channels += 48) {
16808       DWConvMicrokernelTester()
16809         .cr(16)
16810         .kr(3)
16811         .channels(channels)
16812         .qmax(128)
16813         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16814     }
16815   }
16816 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,c_lt_16)16817   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, c_lt_16) {
16818     TEST_REQUIRES_X86_FMA3;
16819     for (uint32_t channels = 1; channels < 16; channels++) {
16820       DWConvMicrokernelTester()
16821         .cr(16)
16822         .kr(3)
16823         .channels(channels)
16824         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16825     }
16826   }
16827 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,c_gt_16)16828   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, c_gt_16) {
16829     TEST_REQUIRES_X86_FMA3;
16830     for (uint32_t channels = 17; channels < 32; channels++) {
16831       DWConvMicrokernelTester()
16832         .cr(16)
16833         .kr(3)
16834         .channels(channels)
16835         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16836     }
16837   }
16838 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,c_gt_16_with_qmin)16839   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, c_gt_16_with_qmin) {
16840     TEST_REQUIRES_X86_FMA3;
16841     for (uint32_t channels = 17; channels < 32; channels++) {
16842       DWConvMicrokernelTester()
16843         .cr(16)
16844         .kr(3)
16845         .channels(channels)
16846         .qmin(128)
16847         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16848     }
16849   }
16850 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,c_gt_16_with_qmax)16851   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, c_gt_16_with_qmax) {
16852     TEST_REQUIRES_X86_FMA3;
16853     for (uint32_t channels = 17; channels < 32; channels++) {
16854       DWConvMicrokernelTester()
16855         .cr(16)
16856         .kr(3)
16857         .channels(channels)
16858         .qmax(128)
16859         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16860     }
16861   }
16862 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,multipixel)16863   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, multipixel) {
16864     TEST_REQUIRES_X86_FMA3;
16865     for (size_t channels = 1; channels <= 80; channels += 15) {
16866       DWConvMicrokernelTester()
16867         .cr(16)
16868         .kr(3)
16869         .channels(channels)
16870         .width(3)
16871         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16872     }
16873   }
16874 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,multipixel_with_step)16875   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, multipixel_with_step) {
16876     TEST_REQUIRES_X86_FMA3;
16877     for (size_t channels = 1; channels <= 80; channels += 15) {
16878       for (size_t step = 2; step <= 3; step++) {
16879         DWConvMicrokernelTester()
16880           .cr(16)
16881           .kr(3)
16882           .channels(channels)
16883           .width(3)
16884           .step(step)
16885           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16886       }
16887     }
16888   }
16889 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,multipixel_with_output_stride)16890   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, multipixel_with_output_stride) {
16891     TEST_REQUIRES_X86_FMA3;
16892     for (size_t channels = 1; channels <= 80; channels += 15) {
16893       DWConvMicrokernelTester()
16894         .cr(16)
16895         .kr(3)
16896         .channels(16)
16897         .width(5)
16898         .output_stride(83)
16899         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16900     }
16901   }
16902 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,multipixel_with_qmin)16903   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, multipixel_with_qmin) {
16904     TEST_REQUIRES_X86_FMA3;
16905     for (size_t channels = 1; channels <= 80; channels += 15) {
16906       DWConvMicrokernelTester()
16907         .cr(16)
16908         .kr(3)
16909         .channels(channels)
16910         .width(3)
16911         .qmin(128)
16912         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16913     }
16914   }
16915 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,multipixel_with_qmax)16916   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, multipixel_with_qmax) {
16917     TEST_REQUIRES_X86_FMA3;
16918     for (size_t channels = 1; channels <= 80; channels += 15) {
16919       DWConvMicrokernelTester()
16920         .cr(16)
16921         .kr(3)
16922         .channels(channels)
16923         .width(3)
16924         .qmax(128)
16925         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16926     }
16927   }
16928 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,input_offset)16929   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, input_offset) {
16930     TEST_REQUIRES_X86_FMA3;
16931     for (uint32_t channels = 32; channels < 256; channels += 48) {
16932       DWConvMicrokernelTester()
16933         .cr(16)
16934         .kr(3)
16935         .channels(channels)
16936         .input_offset(304)
16937         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16938     }
16939   }
16940 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3,zero)16941   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, zero) {
16942     TEST_REQUIRES_X86_FMA3;
16943     for (uint32_t mz = 0; mz < 3; mz++) {
16944       for (uint32_t channels = 32; channels < 256; channels += 48) {
16945         DWConvMicrokernelTester()
16946           .cr(16)
16947           .kr(3)
16948           .channels(channels)
16949           .input_offset(304)
16950           .zero_index(mz)
16951           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
16952       }
16953     }
16954   }
16955 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
16956 
16957 
16958 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,c_eq_16)16959   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, c_eq_16) {
16960     TEST_REQUIRES_X86_FMA3;
16961     DWConvMicrokernelTester()
16962       .cr(16)
16963       .kr(3)
16964       .channels(16)
16965       .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
16966   }
16967 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,c_div_16)16968   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, c_div_16) {
16969     TEST_REQUIRES_X86_FMA3;
16970     for (uint32_t channels = 32; channels < 256; channels += 48) {
16971       DWConvMicrokernelTester()
16972         .cr(16)
16973         .kr(3)
16974         .channels(channels)
16975         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
16976     }
16977   }
16978 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,c_div_16_with_qmin)16979   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, c_div_16_with_qmin) {
16980     TEST_REQUIRES_X86_FMA3;
16981     for (uint32_t channels = 32; channels < 256; channels += 48) {
16982       DWConvMicrokernelTester()
16983         .cr(16)
16984         .kr(3)
16985         .channels(channels)
16986         .qmin(128)
16987         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
16988     }
16989   }
16990 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,c_div_16_with_qmax)16991   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, c_div_16_with_qmax) {
16992     TEST_REQUIRES_X86_FMA3;
16993     for (uint32_t channels = 32; channels < 256; channels += 48) {
16994       DWConvMicrokernelTester()
16995         .cr(16)
16996         .kr(3)
16997         .channels(channels)
16998         .qmax(128)
16999         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17000     }
17001   }
17002 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,c_lt_16)17003   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, c_lt_16) {
17004     TEST_REQUIRES_X86_FMA3;
17005     for (uint32_t channels = 1; channels < 16; channels++) {
17006       DWConvMicrokernelTester()
17007         .cr(16)
17008         .kr(3)
17009         .channels(channels)
17010         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17011     }
17012   }
17013 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,c_gt_16)17014   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, c_gt_16) {
17015     TEST_REQUIRES_X86_FMA3;
17016     for (uint32_t channels = 17; channels < 32; channels++) {
17017       DWConvMicrokernelTester()
17018         .cr(16)
17019         .kr(3)
17020         .channels(channels)
17021         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17022     }
17023   }
17024 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,c_gt_16_with_qmin)17025   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, c_gt_16_with_qmin) {
17026     TEST_REQUIRES_X86_FMA3;
17027     for (uint32_t channels = 17; channels < 32; channels++) {
17028       DWConvMicrokernelTester()
17029         .cr(16)
17030         .kr(3)
17031         .channels(channels)
17032         .qmin(128)
17033         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17034     }
17035   }
17036 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,c_gt_16_with_qmax)17037   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, c_gt_16_with_qmax) {
17038     TEST_REQUIRES_X86_FMA3;
17039     for (uint32_t channels = 17; channels < 32; channels++) {
17040       DWConvMicrokernelTester()
17041         .cr(16)
17042         .kr(3)
17043         .channels(channels)
17044         .qmax(128)
17045         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17046     }
17047   }
17048 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,multipixel)17049   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, multipixel) {
17050     TEST_REQUIRES_X86_FMA3;
17051     for (size_t channels = 1; channels <= 80; channels += 15) {
17052       DWConvMicrokernelTester()
17053         .cr(16)
17054         .kr(3)
17055         .channels(channels)
17056         .width(3)
17057         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17058     }
17059   }
17060 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,multipixel_with_step)17061   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, multipixel_with_step) {
17062     TEST_REQUIRES_X86_FMA3;
17063     for (size_t channels = 1; channels <= 80; channels += 15) {
17064       for (size_t step = 2; step <= 3; step++) {
17065         DWConvMicrokernelTester()
17066           .cr(16)
17067           .kr(3)
17068           .channels(channels)
17069           .width(3)
17070           .step(step)
17071           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17072       }
17073     }
17074   }
17075 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,multipixel_with_output_stride)17076   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, multipixel_with_output_stride) {
17077     TEST_REQUIRES_X86_FMA3;
17078     for (size_t channels = 1; channels <= 80; channels += 15) {
17079       DWConvMicrokernelTester()
17080         .cr(16)
17081         .kr(3)
17082         .channels(16)
17083         .width(5)
17084         .output_stride(83)
17085         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17086     }
17087   }
17088 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,multipixel_with_qmin)17089   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, multipixel_with_qmin) {
17090     TEST_REQUIRES_X86_FMA3;
17091     for (size_t channels = 1; channels <= 80; channels += 15) {
17092       DWConvMicrokernelTester()
17093         .cr(16)
17094         .kr(3)
17095         .channels(channels)
17096         .width(3)
17097         .qmin(128)
17098         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17099     }
17100   }
17101 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,multipixel_with_qmax)17102   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, multipixel_with_qmax) {
17103     TEST_REQUIRES_X86_FMA3;
17104     for (size_t channels = 1; channels <= 80; channels += 15) {
17105       DWConvMicrokernelTester()
17106         .cr(16)
17107         .kr(3)
17108         .channels(channels)
17109         .width(3)
17110         .qmax(128)
17111         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17112     }
17113   }
17114 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,input_offset)17115   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, input_offset) {
17116     TEST_REQUIRES_X86_FMA3;
17117     for (uint32_t channels = 32; channels < 256; channels += 48) {
17118       DWConvMicrokernelTester()
17119         .cr(16)
17120         .kr(3)
17121         .channels(channels)
17122         .input_offset(304)
17123         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17124     }
17125   }
17126 
TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2,zero)17127   TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, zero) {
17128     TEST_REQUIRES_X86_FMA3;
17129     for (uint32_t mz = 0; mz < 3; mz++) {
17130       for (uint32_t channels = 32; channels < 256; channels += 48) {
17131         DWConvMicrokernelTester()
17132           .cr(16)
17133           .kr(3)
17134           .channels(channels)
17135           .input_offset(304)
17136           .zero_index(mz)
17137           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17138       }
17139     }
17140   }
17141 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
17142 
17143 
17144 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,c_eq_16)17145   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_eq_16) {
17146     TEST_REQUIRES_X86_FMA3;
17147     DWConvMicrokernelTester()
17148       .cr(16)
17149       .kr(4)
17150       .channels(16)
17151       .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17152   }
17153 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,c_div_16)17154   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_div_16) {
17155     TEST_REQUIRES_X86_FMA3;
17156     for (uint32_t channels = 32; channels < 256; channels += 48) {
17157       DWConvMicrokernelTester()
17158         .cr(16)
17159         .kr(4)
17160         .channels(channels)
17161         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17162     }
17163   }
17164 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,c_div_16_with_qmin)17165   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_div_16_with_qmin) {
17166     TEST_REQUIRES_X86_FMA3;
17167     for (uint32_t channels = 32; channels < 256; channels += 48) {
17168       DWConvMicrokernelTester()
17169         .cr(16)
17170         .kr(4)
17171         .channels(channels)
17172         .qmin(128)
17173         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17174     }
17175   }
17176 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,c_div_16_with_qmax)17177   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_div_16_with_qmax) {
17178     TEST_REQUIRES_X86_FMA3;
17179     for (uint32_t channels = 32; channels < 256; channels += 48) {
17180       DWConvMicrokernelTester()
17181         .cr(16)
17182         .kr(4)
17183         .channels(channels)
17184         .qmax(128)
17185         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17186     }
17187   }
17188 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,c_lt_16)17189   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_lt_16) {
17190     TEST_REQUIRES_X86_FMA3;
17191     for (uint32_t channels = 1; channels < 16; channels++) {
17192       DWConvMicrokernelTester()
17193         .cr(16)
17194         .kr(4)
17195         .channels(channels)
17196         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17197     }
17198   }
17199 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,c_gt_16)17200   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_gt_16) {
17201     TEST_REQUIRES_X86_FMA3;
17202     for (uint32_t channels = 17; channels < 32; channels++) {
17203       DWConvMicrokernelTester()
17204         .cr(16)
17205         .kr(4)
17206         .channels(channels)
17207         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17208     }
17209   }
17210 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,c_gt_16_with_qmin)17211   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_gt_16_with_qmin) {
17212     TEST_REQUIRES_X86_FMA3;
17213     for (uint32_t channels = 17; channels < 32; channels++) {
17214       DWConvMicrokernelTester()
17215         .cr(16)
17216         .kr(4)
17217         .channels(channels)
17218         .qmin(128)
17219         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17220     }
17221   }
17222 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,c_gt_16_with_qmax)17223   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_gt_16_with_qmax) {
17224     TEST_REQUIRES_X86_FMA3;
17225     for (uint32_t channels = 17; channels < 32; channels++) {
17226       DWConvMicrokernelTester()
17227         .cr(16)
17228         .kr(4)
17229         .channels(channels)
17230         .qmax(128)
17231         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17232     }
17233   }
17234 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,multipixel)17235   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel) {
17236     TEST_REQUIRES_X86_FMA3;
17237     for (size_t channels = 1; channels <= 80; channels += 15) {
17238       DWConvMicrokernelTester()
17239         .cr(16)
17240         .kr(4)
17241         .channels(channels)
17242         .width(3)
17243         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17244     }
17245   }
17246 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,multipixel_with_step)17247   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_step) {
17248     TEST_REQUIRES_X86_FMA3;
17249     for (size_t channels = 1; channels <= 80; channels += 15) {
17250       for (size_t step = 2; step <= 4; step++) {
17251         DWConvMicrokernelTester()
17252           .cr(16)
17253           .kr(4)
17254           .channels(channels)
17255           .width(3)
17256           .step(step)
17257           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17258       }
17259     }
17260   }
17261 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,multipixel_with_output_stride)17262   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_output_stride) {
17263     TEST_REQUIRES_X86_FMA3;
17264     for (size_t channels = 1; channels <= 80; channels += 15) {
17265       DWConvMicrokernelTester()
17266         .cr(16)
17267         .kr(4)
17268         .channels(16)
17269         .width(5)
17270         .output_stride(83)
17271         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17272     }
17273   }
17274 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,multipixel_with_qmin)17275   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_qmin) {
17276     TEST_REQUIRES_X86_FMA3;
17277     for (size_t channels = 1; channels <= 80; channels += 15) {
17278       DWConvMicrokernelTester()
17279         .cr(16)
17280         .kr(4)
17281         .channels(channels)
17282         .width(3)
17283         .qmin(128)
17284         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17285     }
17286   }
17287 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,multipixel_with_qmax)17288   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_qmax) {
17289     TEST_REQUIRES_X86_FMA3;
17290     for (size_t channels = 1; channels <= 80; channels += 15) {
17291       DWConvMicrokernelTester()
17292         .cr(16)
17293         .kr(4)
17294         .channels(channels)
17295         .width(3)
17296         .qmax(128)
17297         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17298     }
17299   }
17300 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,input_offset)17301   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, input_offset) {
17302     TEST_REQUIRES_X86_FMA3;
17303     for (uint32_t channels = 32; channels < 256; channels += 48) {
17304       DWConvMicrokernelTester()
17305         .cr(16)
17306         .kr(4)
17307         .channels(channels)
17308         .input_offset(304)
17309         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17310     }
17311   }
17312 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3,zero)17313   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, zero) {
17314     TEST_REQUIRES_X86_FMA3;
17315     for (uint32_t mz = 0; mz < 4; mz++) {
17316       for (uint32_t channels = 32; channels < 256; channels += 48) {
17317         DWConvMicrokernelTester()
17318           .cr(16)
17319           .kr(4)
17320           .channels(channels)
17321           .input_offset(304)
17322           .zero_index(mz)
17323           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
17324       }
17325     }
17326   }
17327 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
17328 
17329 
17330 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,c_eq_16)17331   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_eq_16) {
17332     TEST_REQUIRES_X86_FMA3;
17333     DWConvMicrokernelTester()
17334       .cr(16)
17335       .kr(4)
17336       .channels(16)
17337       .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17338   }
17339 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,c_div_16)17340   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_div_16) {
17341     TEST_REQUIRES_X86_FMA3;
17342     for (uint32_t channels = 32; channels < 256; channels += 48) {
17343       DWConvMicrokernelTester()
17344         .cr(16)
17345         .kr(4)
17346         .channels(channels)
17347         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17348     }
17349   }
17350 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,c_div_16_with_qmin)17351   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_div_16_with_qmin) {
17352     TEST_REQUIRES_X86_FMA3;
17353     for (uint32_t channels = 32; channels < 256; channels += 48) {
17354       DWConvMicrokernelTester()
17355         .cr(16)
17356         .kr(4)
17357         .channels(channels)
17358         .qmin(128)
17359         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17360     }
17361   }
17362 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,c_div_16_with_qmax)17363   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_div_16_with_qmax) {
17364     TEST_REQUIRES_X86_FMA3;
17365     for (uint32_t channels = 32; channels < 256; channels += 48) {
17366       DWConvMicrokernelTester()
17367         .cr(16)
17368         .kr(4)
17369         .channels(channels)
17370         .qmax(128)
17371         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17372     }
17373   }
17374 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,c_lt_16)17375   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_lt_16) {
17376     TEST_REQUIRES_X86_FMA3;
17377     for (uint32_t channels = 1; channels < 16; channels++) {
17378       DWConvMicrokernelTester()
17379         .cr(16)
17380         .kr(4)
17381         .channels(channels)
17382         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17383     }
17384   }
17385 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,c_gt_16)17386   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_gt_16) {
17387     TEST_REQUIRES_X86_FMA3;
17388     for (uint32_t channels = 17; channels < 32; channels++) {
17389       DWConvMicrokernelTester()
17390         .cr(16)
17391         .kr(4)
17392         .channels(channels)
17393         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17394     }
17395   }
17396 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,c_gt_16_with_qmin)17397   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_gt_16_with_qmin) {
17398     TEST_REQUIRES_X86_FMA3;
17399     for (uint32_t channels = 17; channels < 32; channels++) {
17400       DWConvMicrokernelTester()
17401         .cr(16)
17402         .kr(4)
17403         .channels(channels)
17404         .qmin(128)
17405         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17406     }
17407   }
17408 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,c_gt_16_with_qmax)17409   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_gt_16_with_qmax) {
17410     TEST_REQUIRES_X86_FMA3;
17411     for (uint32_t channels = 17; channels < 32; channels++) {
17412       DWConvMicrokernelTester()
17413         .cr(16)
17414         .kr(4)
17415         .channels(channels)
17416         .qmax(128)
17417         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17418     }
17419   }
17420 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,multipixel)17421   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel) {
17422     TEST_REQUIRES_X86_FMA3;
17423     for (size_t channels = 1; channels <= 80; channels += 15) {
17424       DWConvMicrokernelTester()
17425         .cr(16)
17426         .kr(4)
17427         .channels(channels)
17428         .width(3)
17429         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17430     }
17431   }
17432 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,multipixel_with_step)17433   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_step) {
17434     TEST_REQUIRES_X86_FMA3;
17435     for (size_t channels = 1; channels <= 80; channels += 15) {
17436       for (size_t step = 2; step <= 4; step++) {
17437         DWConvMicrokernelTester()
17438           .cr(16)
17439           .kr(4)
17440           .channels(channels)
17441           .width(3)
17442           .step(step)
17443           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17444       }
17445     }
17446   }
17447 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,multipixel_with_output_stride)17448   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_output_stride) {
17449     TEST_REQUIRES_X86_FMA3;
17450     for (size_t channels = 1; channels <= 80; channels += 15) {
17451       DWConvMicrokernelTester()
17452         .cr(16)
17453         .kr(4)
17454         .channels(16)
17455         .width(5)
17456         .output_stride(83)
17457         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17458     }
17459   }
17460 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,multipixel_with_qmin)17461   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_qmin) {
17462     TEST_REQUIRES_X86_FMA3;
17463     for (size_t channels = 1; channels <= 80; channels += 15) {
17464       DWConvMicrokernelTester()
17465         .cr(16)
17466         .kr(4)
17467         .channels(channels)
17468         .width(3)
17469         .qmin(128)
17470         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17471     }
17472   }
17473 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,multipixel_with_qmax)17474   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_qmax) {
17475     TEST_REQUIRES_X86_FMA3;
17476     for (size_t channels = 1; channels <= 80; channels += 15) {
17477       DWConvMicrokernelTester()
17478         .cr(16)
17479         .kr(4)
17480         .channels(channels)
17481         .width(3)
17482         .qmax(128)
17483         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17484     }
17485   }
17486 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,input_offset)17487   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, input_offset) {
17488     TEST_REQUIRES_X86_FMA3;
17489     for (uint32_t channels = 32; channels < 256; channels += 48) {
17490       DWConvMicrokernelTester()
17491         .cr(16)
17492         .kr(4)
17493         .channels(channels)
17494         .input_offset(304)
17495         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17496     }
17497   }
17498 
TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2,zero)17499   TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, zero) {
17500     TEST_REQUIRES_X86_FMA3;
17501     for (uint32_t mz = 0; mz < 4; mz++) {
17502       for (uint32_t channels = 32; channels < 256; channels += 48) {
17503         DWConvMicrokernelTester()
17504           .cr(16)
17505           .kr(4)
17506           .channels(channels)
17507           .input_offset(304)
17508           .zero_index(mz)
17509           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
17510       }
17511     }
17512   }
17513 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
17514 
17515 
17516 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,c_eq_16)17517   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_eq_16) {
17518     TEST_REQUIRES_X86_FMA3;
17519     DWConvMicrokernelTester()
17520       .cr(16)
17521       .kr(9)
17522       .channels(16)
17523       .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17524   }
17525 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,c_div_16)17526   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_div_16) {
17527     TEST_REQUIRES_X86_FMA3;
17528     for (uint32_t channels = 32; channels < 256; channels += 48) {
17529       DWConvMicrokernelTester()
17530         .cr(16)
17531         .kr(9)
17532         .channels(channels)
17533         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17534     }
17535   }
17536 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,c_div_16_with_qmin)17537   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_div_16_with_qmin) {
17538     TEST_REQUIRES_X86_FMA3;
17539     for (uint32_t channels = 32; channels < 256; channels += 48) {
17540       DWConvMicrokernelTester()
17541         .cr(16)
17542         .kr(9)
17543         .channels(channels)
17544         .qmin(128)
17545         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17546     }
17547   }
17548 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,c_div_16_with_qmax)17549   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_div_16_with_qmax) {
17550     TEST_REQUIRES_X86_FMA3;
17551     for (uint32_t channels = 32; channels < 256; channels += 48) {
17552       DWConvMicrokernelTester()
17553         .cr(16)
17554         .kr(9)
17555         .channels(channels)
17556         .qmax(128)
17557         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17558     }
17559   }
17560 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,c_lt_16)17561   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_lt_16) {
17562     TEST_REQUIRES_X86_FMA3;
17563     for (uint32_t channels = 1; channels < 16; channels++) {
17564       DWConvMicrokernelTester()
17565         .cr(16)
17566         .kr(9)
17567         .channels(channels)
17568         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17569     }
17570   }
17571 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,c_gt_16)17572   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_gt_16) {
17573     TEST_REQUIRES_X86_FMA3;
17574     for (uint32_t channels = 17; channels < 32; channels++) {
17575       DWConvMicrokernelTester()
17576         .cr(16)
17577         .kr(9)
17578         .channels(channels)
17579         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17580     }
17581   }
17582 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,c_gt_16_with_qmin)17583   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_gt_16_with_qmin) {
17584     TEST_REQUIRES_X86_FMA3;
17585     for (uint32_t channels = 17; channels < 32; channels++) {
17586       DWConvMicrokernelTester()
17587         .cr(16)
17588         .kr(9)
17589         .channels(channels)
17590         .qmin(128)
17591         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17592     }
17593   }
17594 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,c_gt_16_with_qmax)17595   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_gt_16_with_qmax) {
17596     TEST_REQUIRES_X86_FMA3;
17597     for (uint32_t channels = 17; channels < 32; channels++) {
17598       DWConvMicrokernelTester()
17599         .cr(16)
17600         .kr(9)
17601         .channels(channels)
17602         .qmax(128)
17603         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17604     }
17605   }
17606 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,multipixel)17607   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel) {
17608     TEST_REQUIRES_X86_FMA3;
17609     for (size_t channels = 1; channels <= 80; channels += 15) {
17610       DWConvMicrokernelTester()
17611         .cr(16)
17612         .kr(9)
17613         .channels(channels)
17614         .width(3)
17615         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17616     }
17617   }
17618 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,multipixel_with_step)17619   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_step) {
17620     TEST_REQUIRES_X86_FMA3;
17621     for (size_t channels = 1; channels <= 80; channels += 15) {
17622       for (size_t step = 2; step <= 9; step++) {
17623         DWConvMicrokernelTester()
17624           .cr(16)
17625           .kr(9)
17626           .channels(channels)
17627           .width(3)
17628           .step(step)
17629           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17630       }
17631     }
17632   }
17633 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,multipixel_with_output_stride)17634   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_output_stride) {
17635     TEST_REQUIRES_X86_FMA3;
17636     for (size_t channels = 1; channels <= 80; channels += 15) {
17637       DWConvMicrokernelTester()
17638         .cr(16)
17639         .kr(9)
17640         .channels(16)
17641         .width(5)
17642         .output_stride(83)
17643         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17644     }
17645   }
17646 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,multipixel_with_qmin)17647   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_qmin) {
17648     TEST_REQUIRES_X86_FMA3;
17649     for (size_t channels = 1; channels <= 80; channels += 15) {
17650       DWConvMicrokernelTester()
17651         .cr(16)
17652         .kr(9)
17653         .channels(channels)
17654         .width(3)
17655         .qmin(128)
17656         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17657     }
17658   }
17659 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,multipixel_with_qmax)17660   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_qmax) {
17661     TEST_REQUIRES_X86_FMA3;
17662     for (size_t channels = 1; channels <= 80; channels += 15) {
17663       DWConvMicrokernelTester()
17664         .cr(16)
17665         .kr(9)
17666         .channels(channels)
17667         .width(3)
17668         .qmax(128)
17669         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17670     }
17671   }
17672 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,input_offset)17673   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, input_offset) {
17674     TEST_REQUIRES_X86_FMA3;
17675     for (uint32_t channels = 32; channels < 256; channels += 48) {
17676       DWConvMicrokernelTester()
17677         .cr(16)
17678         .kr(9)
17679         .channels(channels)
17680         .input_offset(304)
17681         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17682     }
17683   }
17684 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3,zero)17685   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, zero) {
17686     TEST_REQUIRES_X86_FMA3;
17687     for (uint32_t mz = 0; mz < 9; mz++) {
17688       for (uint32_t channels = 32; channels < 256; channels += 48) {
17689         DWConvMicrokernelTester()
17690           .cr(16)
17691           .kr(9)
17692           .channels(channels)
17693           .input_offset(304)
17694           .zero_index(mz)
17695           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
17696       }
17697     }
17698   }
17699 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
17700 
17701 
17702 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,c_eq_16)17703   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_eq_16) {
17704     TEST_REQUIRES_X86_FMA3;
17705     DWConvMicrokernelTester()
17706       .cr(16)
17707       .kr(9)
17708       .channels(16)
17709       .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17710   }
17711 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,c_div_16)17712   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_div_16) {
17713     TEST_REQUIRES_X86_FMA3;
17714     for (uint32_t channels = 32; channels < 256; channels += 48) {
17715       DWConvMicrokernelTester()
17716         .cr(16)
17717         .kr(9)
17718         .channels(channels)
17719         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17720     }
17721   }
17722 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,c_div_16_with_qmin)17723   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_div_16_with_qmin) {
17724     TEST_REQUIRES_X86_FMA3;
17725     for (uint32_t channels = 32; channels < 256; channels += 48) {
17726       DWConvMicrokernelTester()
17727         .cr(16)
17728         .kr(9)
17729         .channels(channels)
17730         .qmin(128)
17731         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17732     }
17733   }
17734 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,c_div_16_with_qmax)17735   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_div_16_with_qmax) {
17736     TEST_REQUIRES_X86_FMA3;
17737     for (uint32_t channels = 32; channels < 256; channels += 48) {
17738       DWConvMicrokernelTester()
17739         .cr(16)
17740         .kr(9)
17741         .channels(channels)
17742         .qmax(128)
17743         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17744     }
17745   }
17746 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,c_lt_16)17747   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_lt_16) {
17748     TEST_REQUIRES_X86_FMA3;
17749     for (uint32_t channels = 1; channels < 16; channels++) {
17750       DWConvMicrokernelTester()
17751         .cr(16)
17752         .kr(9)
17753         .channels(channels)
17754         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17755     }
17756   }
17757 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,c_gt_16)17758   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_gt_16) {
17759     TEST_REQUIRES_X86_FMA3;
17760     for (uint32_t channels = 17; channels < 32; channels++) {
17761       DWConvMicrokernelTester()
17762         .cr(16)
17763         .kr(9)
17764         .channels(channels)
17765         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17766     }
17767   }
17768 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,c_gt_16_with_qmin)17769   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_gt_16_with_qmin) {
17770     TEST_REQUIRES_X86_FMA3;
17771     for (uint32_t channels = 17; channels < 32; channels++) {
17772       DWConvMicrokernelTester()
17773         .cr(16)
17774         .kr(9)
17775         .channels(channels)
17776         .qmin(128)
17777         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17778     }
17779   }
17780 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,c_gt_16_with_qmax)17781   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_gt_16_with_qmax) {
17782     TEST_REQUIRES_X86_FMA3;
17783     for (uint32_t channels = 17; channels < 32; channels++) {
17784       DWConvMicrokernelTester()
17785         .cr(16)
17786         .kr(9)
17787         .channels(channels)
17788         .qmax(128)
17789         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17790     }
17791   }
17792 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,multipixel)17793   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel) {
17794     TEST_REQUIRES_X86_FMA3;
17795     for (size_t channels = 1; channels <= 80; channels += 15) {
17796       DWConvMicrokernelTester()
17797         .cr(16)
17798         .kr(9)
17799         .channels(channels)
17800         .width(3)
17801         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17802     }
17803   }
17804 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,multipixel_with_step)17805   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_step) {
17806     TEST_REQUIRES_X86_FMA3;
17807     for (size_t channels = 1; channels <= 80; channels += 15) {
17808       for (size_t step = 2; step <= 9; step++) {
17809         DWConvMicrokernelTester()
17810           .cr(16)
17811           .kr(9)
17812           .channels(channels)
17813           .width(3)
17814           .step(step)
17815           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17816       }
17817     }
17818   }
17819 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,multipixel_with_output_stride)17820   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_output_stride) {
17821     TEST_REQUIRES_X86_FMA3;
17822     for (size_t channels = 1; channels <= 80; channels += 15) {
17823       DWConvMicrokernelTester()
17824         .cr(16)
17825         .kr(9)
17826         .channels(16)
17827         .width(5)
17828         .output_stride(83)
17829         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17830     }
17831   }
17832 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,multipixel_with_qmin)17833   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_qmin) {
17834     TEST_REQUIRES_X86_FMA3;
17835     for (size_t channels = 1; channels <= 80; channels += 15) {
17836       DWConvMicrokernelTester()
17837         .cr(16)
17838         .kr(9)
17839         .channels(channels)
17840         .width(3)
17841         .qmin(128)
17842         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17843     }
17844   }
17845 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,multipixel_with_qmax)17846   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_qmax) {
17847     TEST_REQUIRES_X86_FMA3;
17848     for (size_t channels = 1; channels <= 80; channels += 15) {
17849       DWConvMicrokernelTester()
17850         .cr(16)
17851         .kr(9)
17852         .channels(channels)
17853         .width(3)
17854         .qmax(128)
17855         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17856     }
17857   }
17858 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,input_offset)17859   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, input_offset) {
17860     TEST_REQUIRES_X86_FMA3;
17861     for (uint32_t channels = 32; channels < 256; channels += 48) {
17862       DWConvMicrokernelTester()
17863         .cr(16)
17864         .kr(9)
17865         .channels(channels)
17866         .input_offset(304)
17867         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17868     }
17869   }
17870 
TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2,zero)17871   TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, zero) {
17872     TEST_REQUIRES_X86_FMA3;
17873     for (uint32_t mz = 0; mz < 9; mz++) {
17874       for (uint32_t channels = 32; channels < 256; channels += 48) {
17875         DWConvMicrokernelTester()
17876           .cr(16)
17877           .kr(9)
17878           .channels(channels)
17879           .input_offset(304)
17880           .zero_index(mz)
17881           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
17882       }
17883     }
17884   }
17885 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
17886 
17887 
17888 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,c_eq_16)17889   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_eq_16) {
17890     TEST_REQUIRES_X86_FMA3;
17891     DWConvMicrokernelTester()
17892       .cr(16)
17893       .kr(25)
17894       .channels(16)
17895       .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
17896   }
17897 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,c_div_16)17898   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_div_16) {
17899     TEST_REQUIRES_X86_FMA3;
17900     for (uint32_t channels = 32; channels < 256; channels += 48) {
17901       DWConvMicrokernelTester()
17902         .cr(16)
17903         .kr(25)
17904         .channels(channels)
17905         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
17906     }
17907   }
17908 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,c_div_16_with_qmin)17909   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_div_16_with_qmin) {
17910     TEST_REQUIRES_X86_FMA3;
17911     for (uint32_t channels = 32; channels < 256; channels += 48) {
17912       DWConvMicrokernelTester()
17913         .cr(16)
17914         .kr(25)
17915         .channels(channels)
17916         .qmin(128)
17917         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
17918     }
17919   }
17920 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,c_div_16_with_qmax)17921   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_div_16_with_qmax) {
17922     TEST_REQUIRES_X86_FMA3;
17923     for (uint32_t channels = 32; channels < 256; channels += 48) {
17924       DWConvMicrokernelTester()
17925         .cr(16)
17926         .kr(25)
17927         .channels(channels)
17928         .qmax(128)
17929         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
17930     }
17931   }
17932 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,c_lt_16)17933   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_lt_16) {
17934     TEST_REQUIRES_X86_FMA3;
17935     for (uint32_t channels = 1; channels < 16; channels++) {
17936       DWConvMicrokernelTester()
17937         .cr(16)
17938         .kr(25)
17939         .channels(channels)
17940         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
17941     }
17942   }
17943 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,c_gt_16)17944   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_gt_16) {
17945     TEST_REQUIRES_X86_FMA3;
17946     for (uint32_t channels = 17; channels < 32; channels++) {
17947       DWConvMicrokernelTester()
17948         .cr(16)
17949         .kr(25)
17950         .channels(channels)
17951         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
17952     }
17953   }
17954 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,c_gt_16_with_qmin)17955   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_gt_16_with_qmin) {
17956     TEST_REQUIRES_X86_FMA3;
17957     for (uint32_t channels = 17; channels < 32; channels++) {
17958       DWConvMicrokernelTester()
17959         .cr(16)
17960         .kr(25)
17961         .channels(channels)
17962         .qmin(128)
17963         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
17964     }
17965   }
17966 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,c_gt_16_with_qmax)17967   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_gt_16_with_qmax) {
17968     TEST_REQUIRES_X86_FMA3;
17969     for (uint32_t channels = 17; channels < 32; channels++) {
17970       DWConvMicrokernelTester()
17971         .cr(16)
17972         .kr(25)
17973         .channels(channels)
17974         .qmax(128)
17975         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
17976     }
17977   }
17978 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,multipixel)17979   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel) {
17980     TEST_REQUIRES_X86_FMA3;
17981     for (size_t channels = 1; channels <= 80; channels += 15) {
17982       DWConvMicrokernelTester()
17983         .cr(16)
17984         .kr(25)
17985         .channels(channels)
17986         .width(3)
17987         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
17988     }
17989   }
17990 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,multipixel_with_step)17991   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_step) {
17992     TEST_REQUIRES_X86_FMA3;
17993     for (size_t channels = 1; channels <= 80; channels += 15) {
17994       for (size_t step = 2; step <= 25; step++) {
17995         DWConvMicrokernelTester()
17996           .cr(16)
17997           .kr(25)
17998           .channels(channels)
17999           .width(3)
18000           .step(step)
18001           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
18002       }
18003     }
18004   }
18005 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,multipixel_with_output_stride)18006   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_output_stride) {
18007     TEST_REQUIRES_X86_FMA3;
18008     for (size_t channels = 1; channels <= 80; channels += 15) {
18009       DWConvMicrokernelTester()
18010         .cr(16)
18011         .kr(25)
18012         .channels(16)
18013         .width(5)
18014         .output_stride(83)
18015         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
18016     }
18017   }
18018 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,multipixel_with_qmin)18019   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_qmin) {
18020     TEST_REQUIRES_X86_FMA3;
18021     for (size_t channels = 1; channels <= 80; channels += 15) {
18022       DWConvMicrokernelTester()
18023         .cr(16)
18024         .kr(25)
18025         .channels(channels)
18026         .width(3)
18027         .qmin(128)
18028         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
18029     }
18030   }
18031 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,multipixel_with_qmax)18032   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_qmax) {
18033     TEST_REQUIRES_X86_FMA3;
18034     for (size_t channels = 1; channels <= 80; channels += 15) {
18035       DWConvMicrokernelTester()
18036         .cr(16)
18037         .kr(25)
18038         .channels(channels)
18039         .width(3)
18040         .qmax(128)
18041         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
18042     }
18043   }
18044 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,input_offset)18045   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, input_offset) {
18046     TEST_REQUIRES_X86_FMA3;
18047     for (uint32_t channels = 32; channels < 256; channels += 48) {
18048       DWConvMicrokernelTester()
18049         .cr(16)
18050         .kr(25)
18051         .channels(channels)
18052         .input_offset(304)
18053         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
18054     }
18055   }
18056 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3,zero)18057   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, zero) {
18058     TEST_REQUIRES_X86_FMA3;
18059     for (uint32_t mz = 0; mz < 25; mz++) {
18060       for (uint32_t channels = 32; channels < 256; channels += 48) {
18061         DWConvMicrokernelTester()
18062           .cr(16)
18063           .kr(25)
18064           .channels(channels)
18065           .input_offset(304)
18066           .zero_index(mz)
18067           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
18068       }
18069     }
18070   }
18071 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
18072 
18073 
18074 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,c_eq_16)18075   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_eq_16) {
18076     TEST_REQUIRES_X86_FMA3;
18077     DWConvMicrokernelTester()
18078       .cr(16)
18079       .kr(25)
18080       .channels(16)
18081       .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18082   }
18083 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,c_div_16)18084   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_div_16) {
18085     TEST_REQUIRES_X86_FMA3;
18086     for (uint32_t channels = 32; channels < 256; channels += 48) {
18087       DWConvMicrokernelTester()
18088         .cr(16)
18089         .kr(25)
18090         .channels(channels)
18091         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18092     }
18093   }
18094 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,c_div_16_with_qmin)18095   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_div_16_with_qmin) {
18096     TEST_REQUIRES_X86_FMA3;
18097     for (uint32_t channels = 32; channels < 256; channels += 48) {
18098       DWConvMicrokernelTester()
18099         .cr(16)
18100         .kr(25)
18101         .channels(channels)
18102         .qmin(128)
18103         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18104     }
18105   }
18106 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,c_div_16_with_qmax)18107   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_div_16_with_qmax) {
18108     TEST_REQUIRES_X86_FMA3;
18109     for (uint32_t channels = 32; channels < 256; channels += 48) {
18110       DWConvMicrokernelTester()
18111         .cr(16)
18112         .kr(25)
18113         .channels(channels)
18114         .qmax(128)
18115         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18116     }
18117   }
18118 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,c_lt_16)18119   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_lt_16) {
18120     TEST_REQUIRES_X86_FMA3;
18121     for (uint32_t channels = 1; channels < 16; channels++) {
18122       DWConvMicrokernelTester()
18123         .cr(16)
18124         .kr(25)
18125         .channels(channels)
18126         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18127     }
18128   }
18129 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,c_gt_16)18130   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_gt_16) {
18131     TEST_REQUIRES_X86_FMA3;
18132     for (uint32_t channels = 17; channels < 32; channels++) {
18133       DWConvMicrokernelTester()
18134         .cr(16)
18135         .kr(25)
18136         .channels(channels)
18137         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18138     }
18139   }
18140 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,c_gt_16_with_qmin)18141   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_gt_16_with_qmin) {
18142     TEST_REQUIRES_X86_FMA3;
18143     for (uint32_t channels = 17; channels < 32; channels++) {
18144       DWConvMicrokernelTester()
18145         .cr(16)
18146         .kr(25)
18147         .channels(channels)
18148         .qmin(128)
18149         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18150     }
18151   }
18152 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,c_gt_16_with_qmax)18153   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_gt_16_with_qmax) {
18154     TEST_REQUIRES_X86_FMA3;
18155     for (uint32_t channels = 17; channels < 32; channels++) {
18156       DWConvMicrokernelTester()
18157         .cr(16)
18158         .kr(25)
18159         .channels(channels)
18160         .qmax(128)
18161         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18162     }
18163   }
18164 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,multipixel)18165   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel) {
18166     TEST_REQUIRES_X86_FMA3;
18167     for (size_t channels = 1; channels <= 80; channels += 15) {
18168       DWConvMicrokernelTester()
18169         .cr(16)
18170         .kr(25)
18171         .channels(channels)
18172         .width(3)
18173         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18174     }
18175   }
18176 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,multipixel_with_step)18177   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_step) {
18178     TEST_REQUIRES_X86_FMA3;
18179     for (size_t channels = 1; channels <= 80; channels += 15) {
18180       for (size_t step = 2; step <= 25; step++) {
18181         DWConvMicrokernelTester()
18182           .cr(16)
18183           .kr(25)
18184           .channels(channels)
18185           .width(3)
18186           .step(step)
18187           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18188       }
18189     }
18190   }
18191 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,multipixel_with_output_stride)18192   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_output_stride) {
18193     TEST_REQUIRES_X86_FMA3;
18194     for (size_t channels = 1; channels <= 80; channels += 15) {
18195       DWConvMicrokernelTester()
18196         .cr(16)
18197         .kr(25)
18198         .channels(16)
18199         .width(5)
18200         .output_stride(83)
18201         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18202     }
18203   }
18204 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,multipixel_with_qmin)18205   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_qmin) {
18206     TEST_REQUIRES_X86_FMA3;
18207     for (size_t channels = 1; channels <= 80; channels += 15) {
18208       DWConvMicrokernelTester()
18209         .cr(16)
18210         .kr(25)
18211         .channels(channels)
18212         .width(3)
18213         .qmin(128)
18214         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18215     }
18216   }
18217 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,multipixel_with_qmax)18218   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_qmax) {
18219     TEST_REQUIRES_X86_FMA3;
18220     for (size_t channels = 1; channels <= 80; channels += 15) {
18221       DWConvMicrokernelTester()
18222         .cr(16)
18223         .kr(25)
18224         .channels(channels)
18225         .width(3)
18226         .qmax(128)
18227         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18228     }
18229   }
18230 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,input_offset)18231   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, input_offset) {
18232     TEST_REQUIRES_X86_FMA3;
18233     for (uint32_t channels = 32; channels < 256; channels += 48) {
18234       DWConvMicrokernelTester()
18235         .cr(16)
18236         .kr(25)
18237         .channels(channels)
18238         .input_offset(304)
18239         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18240     }
18241   }
18242 
TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2,zero)18243   TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, zero) {
18244     TEST_REQUIRES_X86_FMA3;
18245     for (uint32_t mz = 0; mz < 25; mz++) {
18246       for (uint32_t channels = 32; channels < 256; channels += 48) {
18247         DWConvMicrokernelTester()
18248           .cr(16)
18249           .kr(25)
18250           .channels(channels)
18251           .input_offset(304)
18252           .zero_index(mz)
18253           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
18254       }
18255     }
18256   }
18257 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
18258 
18259 
18260 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,c_eq_16)18261   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_eq_16) {
18262     TEST_REQUIRES_X86_AVX512F;
18263     DWConvMicrokernelTester()
18264       .cr(16)
18265       .kr(3)
18266       .channels(16)
18267       .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18268   }
18269 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,c_div_16)18270   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_div_16) {
18271     TEST_REQUIRES_X86_AVX512F;
18272     for (uint32_t channels = 32; channels < 256; channels += 48) {
18273       DWConvMicrokernelTester()
18274         .cr(16)
18275         .kr(3)
18276         .channels(channels)
18277         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18278     }
18279   }
18280 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,c_div_16_with_qmin)18281   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_div_16_with_qmin) {
18282     TEST_REQUIRES_X86_AVX512F;
18283     for (uint32_t channels = 32; channels < 256; channels += 48) {
18284       DWConvMicrokernelTester()
18285         .cr(16)
18286         .kr(3)
18287         .channels(channels)
18288         .qmin(128)
18289         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18290     }
18291   }
18292 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,c_div_16_with_qmax)18293   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_div_16_with_qmax) {
18294     TEST_REQUIRES_X86_AVX512F;
18295     for (uint32_t channels = 32; channels < 256; channels += 48) {
18296       DWConvMicrokernelTester()
18297         .cr(16)
18298         .kr(3)
18299         .channels(channels)
18300         .qmax(128)
18301         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18302     }
18303   }
18304 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,c_lt_16)18305   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_lt_16) {
18306     TEST_REQUIRES_X86_AVX512F;
18307     for (uint32_t channels = 1; channels < 16; channels++) {
18308       DWConvMicrokernelTester()
18309         .cr(16)
18310         .kr(3)
18311         .channels(channels)
18312         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18313     }
18314   }
18315 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,c_gt_16)18316   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_gt_16) {
18317     TEST_REQUIRES_X86_AVX512F;
18318     for (uint32_t channels = 17; channels < 32; channels++) {
18319       DWConvMicrokernelTester()
18320         .cr(16)
18321         .kr(3)
18322         .channels(channels)
18323         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18324     }
18325   }
18326 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,c_gt_16_with_qmin)18327   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_gt_16_with_qmin) {
18328     TEST_REQUIRES_X86_AVX512F;
18329     for (uint32_t channels = 17; channels < 32; channels++) {
18330       DWConvMicrokernelTester()
18331         .cr(16)
18332         .kr(3)
18333         .channels(channels)
18334         .qmin(128)
18335         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18336     }
18337   }
18338 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,c_gt_16_with_qmax)18339   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_gt_16_with_qmax) {
18340     TEST_REQUIRES_X86_AVX512F;
18341     for (uint32_t channels = 17; channels < 32; channels++) {
18342       DWConvMicrokernelTester()
18343         .cr(16)
18344         .kr(3)
18345         .channels(channels)
18346         .qmax(128)
18347         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18348     }
18349   }
18350 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,multipixel)18351   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, multipixel) {
18352     TEST_REQUIRES_X86_AVX512F;
18353     for (size_t channels = 1; channels <= 80; channels += 15) {
18354       DWConvMicrokernelTester()
18355         .cr(16)
18356         .kr(3)
18357         .channels(channels)
18358         .width(3)
18359         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18360     }
18361   }
18362 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,multipixel_with_step)18363   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, multipixel_with_step) {
18364     TEST_REQUIRES_X86_AVX512F;
18365     for (size_t channels = 1; channels <= 80; channels += 15) {
18366       for (size_t step = 2; step <= 3; step++) {
18367         DWConvMicrokernelTester()
18368           .cr(16)
18369           .kr(3)
18370           .channels(channels)
18371           .width(3)
18372           .step(step)
18373           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18374       }
18375     }
18376   }
18377 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,multipixel_with_output_stride)18378   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, multipixel_with_output_stride) {
18379     TEST_REQUIRES_X86_AVX512F;
18380     for (size_t channels = 1; channels <= 80; channels += 15) {
18381       DWConvMicrokernelTester()
18382         .cr(16)
18383         .kr(3)
18384         .channels(16)
18385         .width(5)
18386         .output_stride(83)
18387         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18388     }
18389   }
18390 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,multipixel_with_qmin)18391   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, multipixel_with_qmin) {
18392     TEST_REQUIRES_X86_AVX512F;
18393     for (size_t channels = 1; channels <= 80; channels += 15) {
18394       DWConvMicrokernelTester()
18395         .cr(16)
18396         .kr(3)
18397         .channels(channels)
18398         .width(3)
18399         .qmin(128)
18400         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18401     }
18402   }
18403 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,multipixel_with_qmax)18404   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, multipixel_with_qmax) {
18405     TEST_REQUIRES_X86_AVX512F;
18406     for (size_t channels = 1; channels <= 80; channels += 15) {
18407       DWConvMicrokernelTester()
18408         .cr(16)
18409         .kr(3)
18410         .channels(channels)
18411         .width(3)
18412         .qmax(128)
18413         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18414     }
18415   }
18416 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,input_offset)18417   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, input_offset) {
18418     TEST_REQUIRES_X86_AVX512F;
18419     for (uint32_t channels = 32; channels < 256; channels += 48) {
18420       DWConvMicrokernelTester()
18421         .cr(16)
18422         .kr(3)
18423         .channels(channels)
18424         .input_offset(304)
18425         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18426     }
18427   }
18428 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F,zero)18429   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, zero) {
18430     TEST_REQUIRES_X86_AVX512F;
18431     for (uint32_t mz = 0; mz < 3; mz++) {
18432       for (uint32_t channels = 32; channels < 256; channels += 48) {
18433         DWConvMicrokernelTester()
18434           .cr(16)
18435           .kr(3)
18436           .channels(channels)
18437           .input_offset(304)
18438           .zero_index(mz)
18439           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
18440       }
18441     }
18442   }
18443 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
18444 
18445 
18446 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,c_eq_16)18447   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_eq_16) {
18448     TEST_REQUIRES_X86_AVX512F;
18449     DWConvMicrokernelTester()
18450       .cr(16)
18451       .kr(3)
18452       .channels(16)
18453       .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18454   }
18455 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,c_div_16)18456   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_div_16) {
18457     TEST_REQUIRES_X86_AVX512F;
18458     for (uint32_t channels = 32; channels < 256; channels += 48) {
18459       DWConvMicrokernelTester()
18460         .cr(16)
18461         .kr(3)
18462         .channels(channels)
18463         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18464     }
18465   }
18466 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,c_div_16_with_qmin)18467   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_div_16_with_qmin) {
18468     TEST_REQUIRES_X86_AVX512F;
18469     for (uint32_t channels = 32; channels < 256; channels += 48) {
18470       DWConvMicrokernelTester()
18471         .cr(16)
18472         .kr(3)
18473         .channels(channels)
18474         .qmin(128)
18475         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18476     }
18477   }
18478 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,c_div_16_with_qmax)18479   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_div_16_with_qmax) {
18480     TEST_REQUIRES_X86_AVX512F;
18481     for (uint32_t channels = 32; channels < 256; channels += 48) {
18482       DWConvMicrokernelTester()
18483         .cr(16)
18484         .kr(3)
18485         .channels(channels)
18486         .qmax(128)
18487         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18488     }
18489   }
18490 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,c_lt_16)18491   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_lt_16) {
18492     TEST_REQUIRES_X86_AVX512F;
18493     for (uint32_t channels = 1; channels < 16; channels++) {
18494       DWConvMicrokernelTester()
18495         .cr(16)
18496         .kr(3)
18497         .channels(channels)
18498         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18499     }
18500   }
18501 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,c_gt_16)18502   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_gt_16) {
18503     TEST_REQUIRES_X86_AVX512F;
18504     for (uint32_t channels = 17; channels < 32; channels++) {
18505       DWConvMicrokernelTester()
18506         .cr(16)
18507         .kr(3)
18508         .channels(channels)
18509         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18510     }
18511   }
18512 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,c_gt_16_with_qmin)18513   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_gt_16_with_qmin) {
18514     TEST_REQUIRES_X86_AVX512F;
18515     for (uint32_t channels = 17; channels < 32; channels++) {
18516       DWConvMicrokernelTester()
18517         .cr(16)
18518         .kr(3)
18519         .channels(channels)
18520         .qmin(128)
18521         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18522     }
18523   }
18524 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,c_gt_16_with_qmax)18525   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_gt_16_with_qmax) {
18526     TEST_REQUIRES_X86_AVX512F;
18527     for (uint32_t channels = 17; channels < 32; channels++) {
18528       DWConvMicrokernelTester()
18529         .cr(16)
18530         .kr(3)
18531         .channels(channels)
18532         .qmax(128)
18533         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18534     }
18535   }
18536 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,multipixel)18537   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, multipixel) {
18538     TEST_REQUIRES_X86_AVX512F;
18539     for (size_t channels = 1; channels <= 80; channels += 15) {
18540       DWConvMicrokernelTester()
18541         .cr(16)
18542         .kr(3)
18543         .channels(channels)
18544         .width(3)
18545         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18546     }
18547   }
18548 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,multipixel_with_step)18549   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, multipixel_with_step) {
18550     TEST_REQUIRES_X86_AVX512F;
18551     for (size_t channels = 1; channels <= 80; channels += 15) {
18552       for (size_t step = 2; step <= 3; step++) {
18553         DWConvMicrokernelTester()
18554           .cr(16)
18555           .kr(3)
18556           .channels(channels)
18557           .width(3)
18558           .step(step)
18559           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18560       }
18561     }
18562   }
18563 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,multipixel_with_output_stride)18564   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, multipixel_with_output_stride) {
18565     TEST_REQUIRES_X86_AVX512F;
18566     for (size_t channels = 1; channels <= 80; channels += 15) {
18567       DWConvMicrokernelTester()
18568         .cr(16)
18569         .kr(3)
18570         .channels(16)
18571         .width(5)
18572         .output_stride(83)
18573         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18574     }
18575   }
18576 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,multipixel_with_qmin)18577   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, multipixel_with_qmin) {
18578     TEST_REQUIRES_X86_AVX512F;
18579     for (size_t channels = 1; channels <= 80; channels += 15) {
18580       DWConvMicrokernelTester()
18581         .cr(16)
18582         .kr(3)
18583         .channels(channels)
18584         .width(3)
18585         .qmin(128)
18586         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18587     }
18588   }
18589 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,multipixel_with_qmax)18590   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, multipixel_with_qmax) {
18591     TEST_REQUIRES_X86_AVX512F;
18592     for (size_t channels = 1; channels <= 80; channels += 15) {
18593       DWConvMicrokernelTester()
18594         .cr(16)
18595         .kr(3)
18596         .channels(channels)
18597         .width(3)
18598         .qmax(128)
18599         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18600     }
18601   }
18602 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,input_offset)18603   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, input_offset) {
18604     TEST_REQUIRES_X86_AVX512F;
18605     for (uint32_t channels = 32; channels < 256; channels += 48) {
18606       DWConvMicrokernelTester()
18607         .cr(16)
18608         .kr(3)
18609         .channels(channels)
18610         .input_offset(304)
18611         .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18612     }
18613   }
18614 
TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2,zero)18615   TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, zero) {
18616     TEST_REQUIRES_X86_AVX512F;
18617     for (uint32_t mz = 0; mz < 3; mz++) {
18618       for (uint32_t channels = 32; channels < 256; channels += 48) {
18619         DWConvMicrokernelTester()
18620           .cr(16)
18621           .kr(3)
18622           .channels(channels)
18623           .input_offset(304)
18624           .zero_index(mz)
18625           .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18626       }
18627     }
18628   }
18629 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
18630 
18631 
18632 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,c_eq_16)18633   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_eq_16) {
18634     TEST_REQUIRES_X86_AVX512F;
18635     DWConvMicrokernelTester()
18636       .cr(16)
18637       .kr(4)
18638       .channels(16)
18639       .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18640   }
18641 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,c_div_16)18642   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_div_16) {
18643     TEST_REQUIRES_X86_AVX512F;
18644     for (uint32_t channels = 32; channels < 256; channels += 48) {
18645       DWConvMicrokernelTester()
18646         .cr(16)
18647         .kr(4)
18648         .channels(channels)
18649         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18650     }
18651   }
18652 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,c_div_16_with_qmin)18653   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_div_16_with_qmin) {
18654     TEST_REQUIRES_X86_AVX512F;
18655     for (uint32_t channels = 32; channels < 256; channels += 48) {
18656       DWConvMicrokernelTester()
18657         .cr(16)
18658         .kr(4)
18659         .channels(channels)
18660         .qmin(128)
18661         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18662     }
18663   }
18664 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,c_div_16_with_qmax)18665   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_div_16_with_qmax) {
18666     TEST_REQUIRES_X86_AVX512F;
18667     for (uint32_t channels = 32; channels < 256; channels += 48) {
18668       DWConvMicrokernelTester()
18669         .cr(16)
18670         .kr(4)
18671         .channels(channels)
18672         .qmax(128)
18673         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18674     }
18675   }
18676 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,c_lt_16)18677   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_lt_16) {
18678     TEST_REQUIRES_X86_AVX512F;
18679     for (uint32_t channels = 1; channels < 16; channels++) {
18680       DWConvMicrokernelTester()
18681         .cr(16)
18682         .kr(4)
18683         .channels(channels)
18684         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18685     }
18686   }
18687 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,c_gt_16)18688   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_gt_16) {
18689     TEST_REQUIRES_X86_AVX512F;
18690     for (uint32_t channels = 17; channels < 32; channels++) {
18691       DWConvMicrokernelTester()
18692         .cr(16)
18693         .kr(4)
18694         .channels(channels)
18695         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18696     }
18697   }
18698 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,c_gt_16_with_qmin)18699   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_gt_16_with_qmin) {
18700     TEST_REQUIRES_X86_AVX512F;
18701     for (uint32_t channels = 17; channels < 32; channels++) {
18702       DWConvMicrokernelTester()
18703         .cr(16)
18704         .kr(4)
18705         .channels(channels)
18706         .qmin(128)
18707         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18708     }
18709   }
18710 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,c_gt_16_with_qmax)18711   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_gt_16_with_qmax) {
18712     TEST_REQUIRES_X86_AVX512F;
18713     for (uint32_t channels = 17; channels < 32; channels++) {
18714       DWConvMicrokernelTester()
18715         .cr(16)
18716         .kr(4)
18717         .channels(channels)
18718         .qmax(128)
18719         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18720     }
18721   }
18722 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,multipixel)18723   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel) {
18724     TEST_REQUIRES_X86_AVX512F;
18725     for (size_t channels = 1; channels <= 80; channels += 15) {
18726       DWConvMicrokernelTester()
18727         .cr(16)
18728         .kr(4)
18729         .channels(channels)
18730         .width(3)
18731         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18732     }
18733   }
18734 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,multipixel_with_step)18735   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_step) {
18736     TEST_REQUIRES_X86_AVX512F;
18737     for (size_t channels = 1; channels <= 80; channels += 15) {
18738       for (size_t step = 2; step <= 4; step++) {
18739         DWConvMicrokernelTester()
18740           .cr(16)
18741           .kr(4)
18742           .channels(channels)
18743           .width(3)
18744           .step(step)
18745           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18746       }
18747     }
18748   }
18749 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,multipixel_with_output_stride)18750   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_output_stride) {
18751     TEST_REQUIRES_X86_AVX512F;
18752     for (size_t channels = 1; channels <= 80; channels += 15) {
18753       DWConvMicrokernelTester()
18754         .cr(16)
18755         .kr(4)
18756         .channels(16)
18757         .width(5)
18758         .output_stride(83)
18759         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18760     }
18761   }
18762 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,multipixel_with_qmin)18763   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_qmin) {
18764     TEST_REQUIRES_X86_AVX512F;
18765     for (size_t channels = 1; channels <= 80; channels += 15) {
18766       DWConvMicrokernelTester()
18767         .cr(16)
18768         .kr(4)
18769         .channels(channels)
18770         .width(3)
18771         .qmin(128)
18772         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18773     }
18774   }
18775 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,multipixel_with_qmax)18776   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_qmax) {
18777     TEST_REQUIRES_X86_AVX512F;
18778     for (size_t channels = 1; channels <= 80; channels += 15) {
18779       DWConvMicrokernelTester()
18780         .cr(16)
18781         .kr(4)
18782         .channels(channels)
18783         .width(3)
18784         .qmax(128)
18785         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18786     }
18787   }
18788 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,input_offset)18789   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, input_offset) {
18790     TEST_REQUIRES_X86_AVX512F;
18791     for (uint32_t channels = 32; channels < 256; channels += 48) {
18792       DWConvMicrokernelTester()
18793         .cr(16)
18794         .kr(4)
18795         .channels(channels)
18796         .input_offset(304)
18797         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18798     }
18799   }
18800 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F,zero)18801   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, zero) {
18802     TEST_REQUIRES_X86_AVX512F;
18803     for (uint32_t mz = 0; mz < 4; mz++) {
18804       for (uint32_t channels = 32; channels < 256; channels += 48) {
18805         DWConvMicrokernelTester()
18806           .cr(16)
18807           .kr(4)
18808           .channels(channels)
18809           .input_offset(304)
18810           .zero_index(mz)
18811           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
18812       }
18813     }
18814   }
18815 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
18816 
18817 
18818 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,c_eq_16)18819   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_eq_16) {
18820     TEST_REQUIRES_X86_AVX512F;
18821     DWConvMicrokernelTester()
18822       .cr(16)
18823       .kr(4)
18824       .channels(16)
18825       .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18826   }
18827 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,c_div_16)18828   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_div_16) {
18829     TEST_REQUIRES_X86_AVX512F;
18830     for (uint32_t channels = 32; channels < 256; channels += 48) {
18831       DWConvMicrokernelTester()
18832         .cr(16)
18833         .kr(4)
18834         .channels(channels)
18835         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18836     }
18837   }
18838 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,c_div_16_with_qmin)18839   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_div_16_with_qmin) {
18840     TEST_REQUIRES_X86_AVX512F;
18841     for (uint32_t channels = 32; channels < 256; channels += 48) {
18842       DWConvMicrokernelTester()
18843         .cr(16)
18844         .kr(4)
18845         .channels(channels)
18846         .qmin(128)
18847         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18848     }
18849   }
18850 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,c_div_16_with_qmax)18851   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_div_16_with_qmax) {
18852     TEST_REQUIRES_X86_AVX512F;
18853     for (uint32_t channels = 32; channels < 256; channels += 48) {
18854       DWConvMicrokernelTester()
18855         .cr(16)
18856         .kr(4)
18857         .channels(channels)
18858         .qmax(128)
18859         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18860     }
18861   }
18862 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,c_lt_16)18863   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_lt_16) {
18864     TEST_REQUIRES_X86_AVX512F;
18865     for (uint32_t channels = 1; channels < 16; channels++) {
18866       DWConvMicrokernelTester()
18867         .cr(16)
18868         .kr(4)
18869         .channels(channels)
18870         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18871     }
18872   }
18873 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,c_gt_16)18874   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_gt_16) {
18875     TEST_REQUIRES_X86_AVX512F;
18876     for (uint32_t channels = 17; channels < 32; channels++) {
18877       DWConvMicrokernelTester()
18878         .cr(16)
18879         .kr(4)
18880         .channels(channels)
18881         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18882     }
18883   }
18884 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,c_gt_16_with_qmin)18885   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_gt_16_with_qmin) {
18886     TEST_REQUIRES_X86_AVX512F;
18887     for (uint32_t channels = 17; channels < 32; channels++) {
18888       DWConvMicrokernelTester()
18889         .cr(16)
18890         .kr(4)
18891         .channels(channels)
18892         .qmin(128)
18893         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18894     }
18895   }
18896 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,c_gt_16_with_qmax)18897   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_gt_16_with_qmax) {
18898     TEST_REQUIRES_X86_AVX512F;
18899     for (uint32_t channels = 17; channels < 32; channels++) {
18900       DWConvMicrokernelTester()
18901         .cr(16)
18902         .kr(4)
18903         .channels(channels)
18904         .qmax(128)
18905         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18906     }
18907   }
18908 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,multipixel)18909   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel) {
18910     TEST_REQUIRES_X86_AVX512F;
18911     for (size_t channels = 1; channels <= 80; channels += 15) {
18912       DWConvMicrokernelTester()
18913         .cr(16)
18914         .kr(4)
18915         .channels(channels)
18916         .width(3)
18917         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18918     }
18919   }
18920 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,multipixel_with_step)18921   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_step) {
18922     TEST_REQUIRES_X86_AVX512F;
18923     for (size_t channels = 1; channels <= 80; channels += 15) {
18924       for (size_t step = 2; step <= 4; step++) {
18925         DWConvMicrokernelTester()
18926           .cr(16)
18927           .kr(4)
18928           .channels(channels)
18929           .width(3)
18930           .step(step)
18931           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18932       }
18933     }
18934   }
18935 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,multipixel_with_output_stride)18936   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_output_stride) {
18937     TEST_REQUIRES_X86_AVX512F;
18938     for (size_t channels = 1; channels <= 80; channels += 15) {
18939       DWConvMicrokernelTester()
18940         .cr(16)
18941         .kr(4)
18942         .channels(16)
18943         .width(5)
18944         .output_stride(83)
18945         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18946     }
18947   }
18948 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,multipixel_with_qmin)18949   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_qmin) {
18950     TEST_REQUIRES_X86_AVX512F;
18951     for (size_t channels = 1; channels <= 80; channels += 15) {
18952       DWConvMicrokernelTester()
18953         .cr(16)
18954         .kr(4)
18955         .channels(channels)
18956         .width(3)
18957         .qmin(128)
18958         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18959     }
18960   }
18961 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,multipixel_with_qmax)18962   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_qmax) {
18963     TEST_REQUIRES_X86_AVX512F;
18964     for (size_t channels = 1; channels <= 80; channels += 15) {
18965       DWConvMicrokernelTester()
18966         .cr(16)
18967         .kr(4)
18968         .channels(channels)
18969         .width(3)
18970         .qmax(128)
18971         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18972     }
18973   }
18974 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,input_offset)18975   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, input_offset) {
18976     TEST_REQUIRES_X86_AVX512F;
18977     for (uint32_t channels = 32; channels < 256; channels += 48) {
18978       DWConvMicrokernelTester()
18979         .cr(16)
18980         .kr(4)
18981         .channels(channels)
18982         .input_offset(304)
18983         .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18984     }
18985   }
18986 
TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2,zero)18987   TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, zero) {
18988     TEST_REQUIRES_X86_AVX512F;
18989     for (uint32_t mz = 0; mz < 4; mz++) {
18990       for (uint32_t channels = 32; channels < 256; channels += 48) {
18991         DWConvMicrokernelTester()
18992           .cr(16)
18993           .kr(4)
18994           .channels(channels)
18995           .input_offset(304)
18996           .zero_index(mz)
18997           .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
18998       }
18999     }
19000   }
19001 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
19002 
19003 
19004 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,c_eq_16)19005   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_eq_16) {
19006     TEST_REQUIRES_X86_AVX512F;
19007     DWConvMicrokernelTester()
19008       .cr(16)
19009       .kr(9)
19010       .channels(16)
19011       .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19012   }
19013 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,c_div_16)19014   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_div_16) {
19015     TEST_REQUIRES_X86_AVX512F;
19016     for (uint32_t channels = 32; channels < 256; channels += 48) {
19017       DWConvMicrokernelTester()
19018         .cr(16)
19019         .kr(9)
19020         .channels(channels)
19021         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19022     }
19023   }
19024 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,c_div_16_with_qmin)19025   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_div_16_with_qmin) {
19026     TEST_REQUIRES_X86_AVX512F;
19027     for (uint32_t channels = 32; channels < 256; channels += 48) {
19028       DWConvMicrokernelTester()
19029         .cr(16)
19030         .kr(9)
19031         .channels(channels)
19032         .qmin(128)
19033         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19034     }
19035   }
19036 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,c_div_16_with_qmax)19037   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_div_16_with_qmax) {
19038     TEST_REQUIRES_X86_AVX512F;
19039     for (uint32_t channels = 32; channels < 256; channels += 48) {
19040       DWConvMicrokernelTester()
19041         .cr(16)
19042         .kr(9)
19043         .channels(channels)
19044         .qmax(128)
19045         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19046     }
19047   }
19048 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,c_lt_16)19049   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_lt_16) {
19050     TEST_REQUIRES_X86_AVX512F;
19051     for (uint32_t channels = 1; channels < 16; channels++) {
19052       DWConvMicrokernelTester()
19053         .cr(16)
19054         .kr(9)
19055         .channels(channels)
19056         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19057     }
19058   }
19059 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,c_gt_16)19060   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_gt_16) {
19061     TEST_REQUIRES_X86_AVX512F;
19062     for (uint32_t channels = 17; channels < 32; channels++) {
19063       DWConvMicrokernelTester()
19064         .cr(16)
19065         .kr(9)
19066         .channels(channels)
19067         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19068     }
19069   }
19070 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,c_gt_16_with_qmin)19071   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_gt_16_with_qmin) {
19072     TEST_REQUIRES_X86_AVX512F;
19073     for (uint32_t channels = 17; channels < 32; channels++) {
19074       DWConvMicrokernelTester()
19075         .cr(16)
19076         .kr(9)
19077         .channels(channels)
19078         .qmin(128)
19079         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19080     }
19081   }
19082 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,c_gt_16_with_qmax)19083   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_gt_16_with_qmax) {
19084     TEST_REQUIRES_X86_AVX512F;
19085     for (uint32_t channels = 17; channels < 32; channels++) {
19086       DWConvMicrokernelTester()
19087         .cr(16)
19088         .kr(9)
19089         .channels(channels)
19090         .qmax(128)
19091         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19092     }
19093   }
19094 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,multipixel)19095   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel) {
19096     TEST_REQUIRES_X86_AVX512F;
19097     for (size_t channels = 1; channels <= 80; channels += 15) {
19098       DWConvMicrokernelTester()
19099         .cr(16)
19100         .kr(9)
19101         .channels(channels)
19102         .width(3)
19103         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19104     }
19105   }
19106 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,multipixel_with_step)19107   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_step) {
19108     TEST_REQUIRES_X86_AVX512F;
19109     for (size_t channels = 1; channels <= 80; channels += 15) {
19110       for (size_t step = 2; step <= 9; step++) {
19111         DWConvMicrokernelTester()
19112           .cr(16)
19113           .kr(9)
19114           .channels(channels)
19115           .width(3)
19116           .step(step)
19117           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19118       }
19119     }
19120   }
19121 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,multipixel_with_output_stride)19122   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_output_stride) {
19123     TEST_REQUIRES_X86_AVX512F;
19124     for (size_t channels = 1; channels <= 80; channels += 15) {
19125       DWConvMicrokernelTester()
19126         .cr(16)
19127         .kr(9)
19128         .channels(16)
19129         .width(5)
19130         .output_stride(83)
19131         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19132     }
19133   }
19134 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,multipixel_with_qmin)19135   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_qmin) {
19136     TEST_REQUIRES_X86_AVX512F;
19137     for (size_t channels = 1; channels <= 80; channels += 15) {
19138       DWConvMicrokernelTester()
19139         .cr(16)
19140         .kr(9)
19141         .channels(channels)
19142         .width(3)
19143         .qmin(128)
19144         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19145     }
19146   }
19147 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,multipixel_with_qmax)19148   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_qmax) {
19149     TEST_REQUIRES_X86_AVX512F;
19150     for (size_t channels = 1; channels <= 80; channels += 15) {
19151       DWConvMicrokernelTester()
19152         .cr(16)
19153         .kr(9)
19154         .channels(channels)
19155         .width(3)
19156         .qmax(128)
19157         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19158     }
19159   }
19160 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,input_offset)19161   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, input_offset) {
19162     TEST_REQUIRES_X86_AVX512F;
19163     for (uint32_t channels = 32; channels < 256; channels += 48) {
19164       DWConvMicrokernelTester()
19165         .cr(16)
19166         .kr(9)
19167         .channels(channels)
19168         .input_offset(304)
19169         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19170     }
19171   }
19172 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F,zero)19173   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, zero) {
19174     TEST_REQUIRES_X86_AVX512F;
19175     for (uint32_t mz = 0; mz < 9; mz++) {
19176       for (uint32_t channels = 32; channels < 256; channels += 48) {
19177         DWConvMicrokernelTester()
19178           .cr(16)
19179           .kr(9)
19180           .channels(channels)
19181           .input_offset(304)
19182           .zero_index(mz)
19183           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
19184       }
19185     }
19186   }
19187 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
19188 
19189 
19190 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,c_eq_16)19191   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_eq_16) {
19192     TEST_REQUIRES_X86_AVX512F;
19193     DWConvMicrokernelTester()
19194       .cr(16)
19195       .kr(9)
19196       .channels(16)
19197       .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19198   }
19199 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,c_div_16)19200   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_div_16) {
19201     TEST_REQUIRES_X86_AVX512F;
19202     for (uint32_t channels = 32; channels < 256; channels += 48) {
19203       DWConvMicrokernelTester()
19204         .cr(16)
19205         .kr(9)
19206         .channels(channels)
19207         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19208     }
19209   }
19210 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,c_div_16_with_qmin)19211   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_div_16_with_qmin) {
19212     TEST_REQUIRES_X86_AVX512F;
19213     for (uint32_t channels = 32; channels < 256; channels += 48) {
19214       DWConvMicrokernelTester()
19215         .cr(16)
19216         .kr(9)
19217         .channels(channels)
19218         .qmin(128)
19219         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19220     }
19221   }
19222 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,c_div_16_with_qmax)19223   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_div_16_with_qmax) {
19224     TEST_REQUIRES_X86_AVX512F;
19225     for (uint32_t channels = 32; channels < 256; channels += 48) {
19226       DWConvMicrokernelTester()
19227         .cr(16)
19228         .kr(9)
19229         .channels(channels)
19230         .qmax(128)
19231         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19232     }
19233   }
19234 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,c_lt_16)19235   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_lt_16) {
19236     TEST_REQUIRES_X86_AVX512F;
19237     for (uint32_t channels = 1; channels < 16; channels++) {
19238       DWConvMicrokernelTester()
19239         .cr(16)
19240         .kr(9)
19241         .channels(channels)
19242         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19243     }
19244   }
19245 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,c_gt_16)19246   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_gt_16) {
19247     TEST_REQUIRES_X86_AVX512F;
19248     for (uint32_t channels = 17; channels < 32; channels++) {
19249       DWConvMicrokernelTester()
19250         .cr(16)
19251         .kr(9)
19252         .channels(channels)
19253         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19254     }
19255   }
19256 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,c_gt_16_with_qmin)19257   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_gt_16_with_qmin) {
19258     TEST_REQUIRES_X86_AVX512F;
19259     for (uint32_t channels = 17; channels < 32; channels++) {
19260       DWConvMicrokernelTester()
19261         .cr(16)
19262         .kr(9)
19263         .channels(channels)
19264         .qmin(128)
19265         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19266     }
19267   }
19268 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,c_gt_16_with_qmax)19269   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_gt_16_with_qmax) {
19270     TEST_REQUIRES_X86_AVX512F;
19271     for (uint32_t channels = 17; channels < 32; channels++) {
19272       DWConvMicrokernelTester()
19273         .cr(16)
19274         .kr(9)
19275         .channels(channels)
19276         .qmax(128)
19277         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19278     }
19279   }
19280 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,multipixel)19281   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel) {
19282     TEST_REQUIRES_X86_AVX512F;
19283     for (size_t channels = 1; channels <= 80; channels += 15) {
19284       DWConvMicrokernelTester()
19285         .cr(16)
19286         .kr(9)
19287         .channels(channels)
19288         .width(3)
19289         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19290     }
19291   }
19292 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,multipixel_with_step)19293   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_step) {
19294     TEST_REQUIRES_X86_AVX512F;
19295     for (size_t channels = 1; channels <= 80; channels += 15) {
19296       for (size_t step = 2; step <= 9; step++) {
19297         DWConvMicrokernelTester()
19298           .cr(16)
19299           .kr(9)
19300           .channels(channels)
19301           .width(3)
19302           .step(step)
19303           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19304       }
19305     }
19306   }
19307 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,multipixel_with_output_stride)19308   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_output_stride) {
19309     TEST_REQUIRES_X86_AVX512F;
19310     for (size_t channels = 1; channels <= 80; channels += 15) {
19311       DWConvMicrokernelTester()
19312         .cr(16)
19313         .kr(9)
19314         .channels(16)
19315         .width(5)
19316         .output_stride(83)
19317         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19318     }
19319   }
19320 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,multipixel_with_qmin)19321   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_qmin) {
19322     TEST_REQUIRES_X86_AVX512F;
19323     for (size_t channels = 1; channels <= 80; channels += 15) {
19324       DWConvMicrokernelTester()
19325         .cr(16)
19326         .kr(9)
19327         .channels(channels)
19328         .width(3)
19329         .qmin(128)
19330         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19331     }
19332   }
19333 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,multipixel_with_qmax)19334   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_qmax) {
19335     TEST_REQUIRES_X86_AVX512F;
19336     for (size_t channels = 1; channels <= 80; channels += 15) {
19337       DWConvMicrokernelTester()
19338         .cr(16)
19339         .kr(9)
19340         .channels(channels)
19341         .width(3)
19342         .qmax(128)
19343         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19344     }
19345   }
19346 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,input_offset)19347   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, input_offset) {
19348     TEST_REQUIRES_X86_AVX512F;
19349     for (uint32_t channels = 32; channels < 256; channels += 48) {
19350       DWConvMicrokernelTester()
19351         .cr(16)
19352         .kr(9)
19353         .channels(channels)
19354         .input_offset(304)
19355         .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19356     }
19357   }
19358 
TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2,zero)19359   TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, zero) {
19360     TEST_REQUIRES_X86_AVX512F;
19361     for (uint32_t mz = 0; mz < 9; mz++) {
19362       for (uint32_t channels = 32; channels < 256; channels += 48) {
19363         DWConvMicrokernelTester()
19364           .cr(16)
19365           .kr(9)
19366           .channels(channels)
19367           .input_offset(304)
19368           .zero_index(mz)
19369           .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19370       }
19371     }
19372   }
19373 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
19374 
19375 
19376 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,c_eq_16)19377   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_eq_16) {
19378     TEST_REQUIRES_X86_AVX512F;
19379     DWConvMicrokernelTester()
19380       .cr(16)
19381       .kr(25)
19382       .channels(16)
19383       .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19384   }
19385 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,c_div_16)19386   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_div_16) {
19387     TEST_REQUIRES_X86_AVX512F;
19388     for (uint32_t channels = 32; channels < 256; channels += 48) {
19389       DWConvMicrokernelTester()
19390         .cr(16)
19391         .kr(25)
19392         .channels(channels)
19393         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19394     }
19395   }
19396 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,c_div_16_with_qmin)19397   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_div_16_with_qmin) {
19398     TEST_REQUIRES_X86_AVX512F;
19399     for (uint32_t channels = 32; channels < 256; channels += 48) {
19400       DWConvMicrokernelTester()
19401         .cr(16)
19402         .kr(25)
19403         .channels(channels)
19404         .qmin(128)
19405         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19406     }
19407   }
19408 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,c_div_16_with_qmax)19409   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_div_16_with_qmax) {
19410     TEST_REQUIRES_X86_AVX512F;
19411     for (uint32_t channels = 32; channels < 256; channels += 48) {
19412       DWConvMicrokernelTester()
19413         .cr(16)
19414         .kr(25)
19415         .channels(channels)
19416         .qmax(128)
19417         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19418     }
19419   }
19420 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,c_lt_16)19421   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_lt_16) {
19422     TEST_REQUIRES_X86_AVX512F;
19423     for (uint32_t channels = 1; channels < 16; channels++) {
19424       DWConvMicrokernelTester()
19425         .cr(16)
19426         .kr(25)
19427         .channels(channels)
19428         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19429     }
19430   }
19431 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,c_gt_16)19432   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_gt_16) {
19433     TEST_REQUIRES_X86_AVX512F;
19434     for (uint32_t channels = 17; channels < 32; channels++) {
19435       DWConvMicrokernelTester()
19436         .cr(16)
19437         .kr(25)
19438         .channels(channels)
19439         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19440     }
19441   }
19442 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,c_gt_16_with_qmin)19443   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_gt_16_with_qmin) {
19444     TEST_REQUIRES_X86_AVX512F;
19445     for (uint32_t channels = 17; channels < 32; channels++) {
19446       DWConvMicrokernelTester()
19447         .cr(16)
19448         .kr(25)
19449         .channels(channels)
19450         .qmin(128)
19451         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19452     }
19453   }
19454 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,c_gt_16_with_qmax)19455   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_gt_16_with_qmax) {
19456     TEST_REQUIRES_X86_AVX512F;
19457     for (uint32_t channels = 17; channels < 32; channels++) {
19458       DWConvMicrokernelTester()
19459         .cr(16)
19460         .kr(25)
19461         .channels(channels)
19462         .qmax(128)
19463         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19464     }
19465   }
19466 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,multipixel)19467   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel) {
19468     TEST_REQUIRES_X86_AVX512F;
19469     for (size_t channels = 1; channels <= 80; channels += 15) {
19470       DWConvMicrokernelTester()
19471         .cr(16)
19472         .kr(25)
19473         .channels(channels)
19474         .width(3)
19475         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19476     }
19477   }
19478 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,multipixel_with_step)19479   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_step) {
19480     TEST_REQUIRES_X86_AVX512F;
19481     for (size_t channels = 1; channels <= 80; channels += 15) {
19482       for (size_t step = 2; step <= 25; step++) {
19483         DWConvMicrokernelTester()
19484           .cr(16)
19485           .kr(25)
19486           .channels(channels)
19487           .width(3)
19488           .step(step)
19489           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19490       }
19491     }
19492   }
19493 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,multipixel_with_output_stride)19494   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_output_stride) {
19495     TEST_REQUIRES_X86_AVX512F;
19496     for (size_t channels = 1; channels <= 80; channels += 15) {
19497       DWConvMicrokernelTester()
19498         .cr(16)
19499         .kr(25)
19500         .channels(16)
19501         .width(5)
19502         .output_stride(83)
19503         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19504     }
19505   }
19506 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,multipixel_with_qmin)19507   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_qmin) {
19508     TEST_REQUIRES_X86_AVX512F;
19509     for (size_t channels = 1; channels <= 80; channels += 15) {
19510       DWConvMicrokernelTester()
19511         .cr(16)
19512         .kr(25)
19513         .channels(channels)
19514         .width(3)
19515         .qmin(128)
19516         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19517     }
19518   }
19519 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,multipixel_with_qmax)19520   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_qmax) {
19521     TEST_REQUIRES_X86_AVX512F;
19522     for (size_t channels = 1; channels <= 80; channels += 15) {
19523       DWConvMicrokernelTester()
19524         .cr(16)
19525         .kr(25)
19526         .channels(channels)
19527         .width(3)
19528         .qmax(128)
19529         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19530     }
19531   }
19532 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,input_offset)19533   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, input_offset) {
19534     TEST_REQUIRES_X86_AVX512F;
19535     for (uint32_t channels = 32; channels < 256; channels += 48) {
19536       DWConvMicrokernelTester()
19537         .cr(16)
19538         .kr(25)
19539         .channels(channels)
19540         .input_offset(304)
19541         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19542     }
19543   }
19544 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F,zero)19545   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, zero) {
19546     TEST_REQUIRES_X86_AVX512F;
19547     for (uint32_t mz = 0; mz < 25; mz++) {
19548       for (uint32_t channels = 32; channels < 256; channels += 48) {
19549         DWConvMicrokernelTester()
19550           .cr(16)
19551           .kr(25)
19552           .channels(channels)
19553           .input_offset(304)
19554           .zero_index(mz)
19555           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
19556       }
19557     }
19558   }
19559 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
19560 
19561 
19562 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,c_eq_16)19563   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_eq_16) {
19564     TEST_REQUIRES_X86_AVX512F;
19565     DWConvMicrokernelTester()
19566       .cr(16)
19567       .kr(25)
19568       .channels(16)
19569       .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19570   }
19571 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,c_div_16)19572   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_div_16) {
19573     TEST_REQUIRES_X86_AVX512F;
19574     for (uint32_t channels = 32; channels < 256; channels += 48) {
19575       DWConvMicrokernelTester()
19576         .cr(16)
19577         .kr(25)
19578         .channels(channels)
19579         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19580     }
19581   }
19582 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,c_div_16_with_qmin)19583   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_div_16_with_qmin) {
19584     TEST_REQUIRES_X86_AVX512F;
19585     for (uint32_t channels = 32; channels < 256; channels += 48) {
19586       DWConvMicrokernelTester()
19587         .cr(16)
19588         .kr(25)
19589         .channels(channels)
19590         .qmin(128)
19591         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19592     }
19593   }
19594 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,c_div_16_with_qmax)19595   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_div_16_with_qmax) {
19596     TEST_REQUIRES_X86_AVX512F;
19597     for (uint32_t channels = 32; channels < 256; channels += 48) {
19598       DWConvMicrokernelTester()
19599         .cr(16)
19600         .kr(25)
19601         .channels(channels)
19602         .qmax(128)
19603         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19604     }
19605   }
19606 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,c_lt_16)19607   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_lt_16) {
19608     TEST_REQUIRES_X86_AVX512F;
19609     for (uint32_t channels = 1; channels < 16; channels++) {
19610       DWConvMicrokernelTester()
19611         .cr(16)
19612         .kr(25)
19613         .channels(channels)
19614         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19615     }
19616   }
19617 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,c_gt_16)19618   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_gt_16) {
19619     TEST_REQUIRES_X86_AVX512F;
19620     for (uint32_t channels = 17; channels < 32; channels++) {
19621       DWConvMicrokernelTester()
19622         .cr(16)
19623         .kr(25)
19624         .channels(channels)
19625         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19626     }
19627   }
19628 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,c_gt_16_with_qmin)19629   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_gt_16_with_qmin) {
19630     TEST_REQUIRES_X86_AVX512F;
19631     for (uint32_t channels = 17; channels < 32; channels++) {
19632       DWConvMicrokernelTester()
19633         .cr(16)
19634         .kr(25)
19635         .channels(channels)
19636         .qmin(128)
19637         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19638     }
19639   }
19640 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,c_gt_16_with_qmax)19641   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_gt_16_with_qmax) {
19642     TEST_REQUIRES_X86_AVX512F;
19643     for (uint32_t channels = 17; channels < 32; channels++) {
19644       DWConvMicrokernelTester()
19645         .cr(16)
19646         .kr(25)
19647         .channels(channels)
19648         .qmax(128)
19649         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19650     }
19651   }
19652 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,multipixel)19653   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel) {
19654     TEST_REQUIRES_X86_AVX512F;
19655     for (size_t channels = 1; channels <= 80; channels += 15) {
19656       DWConvMicrokernelTester()
19657         .cr(16)
19658         .kr(25)
19659         .channels(channels)
19660         .width(3)
19661         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19662     }
19663   }
19664 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,multipixel_with_step)19665   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_step) {
19666     TEST_REQUIRES_X86_AVX512F;
19667     for (size_t channels = 1; channels <= 80; channels += 15) {
19668       for (size_t step = 2; step <= 25; step++) {
19669         DWConvMicrokernelTester()
19670           .cr(16)
19671           .kr(25)
19672           .channels(channels)
19673           .width(3)
19674           .step(step)
19675           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19676       }
19677     }
19678   }
19679 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,multipixel_with_output_stride)19680   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_output_stride) {
19681     TEST_REQUIRES_X86_AVX512F;
19682     for (size_t channels = 1; channels <= 80; channels += 15) {
19683       DWConvMicrokernelTester()
19684         .cr(16)
19685         .kr(25)
19686         .channels(16)
19687         .width(5)
19688         .output_stride(83)
19689         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19690     }
19691   }
19692 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,multipixel_with_qmin)19693   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_qmin) {
19694     TEST_REQUIRES_X86_AVX512F;
19695     for (size_t channels = 1; channels <= 80; channels += 15) {
19696       DWConvMicrokernelTester()
19697         .cr(16)
19698         .kr(25)
19699         .channels(channels)
19700         .width(3)
19701         .qmin(128)
19702         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19703     }
19704   }
19705 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,multipixel_with_qmax)19706   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_qmax) {
19707     TEST_REQUIRES_X86_AVX512F;
19708     for (size_t channels = 1; channels <= 80; channels += 15) {
19709       DWConvMicrokernelTester()
19710         .cr(16)
19711         .kr(25)
19712         .channels(channels)
19713         .width(3)
19714         .qmax(128)
19715         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19716     }
19717   }
19718 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,input_offset)19719   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, input_offset) {
19720     TEST_REQUIRES_X86_AVX512F;
19721     for (uint32_t channels = 32; channels < 256; channels += 48) {
19722       DWConvMicrokernelTester()
19723         .cr(16)
19724         .kr(25)
19725         .channels(channels)
19726         .input_offset(304)
19727         .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19728     }
19729   }
19730 
TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2,zero)19731   TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, zero) {
19732     TEST_REQUIRES_X86_AVX512F;
19733     for (uint32_t mz = 0; mz < 25; mz++) {
19734       for (uint32_t channels = 32; channels < 256; channels += 48) {
19735         DWConvMicrokernelTester()
19736           .cr(16)
19737           .kr(25)
19738           .channels(channels)
19739           .input_offset(304)
19740           .zero_index(mz)
19741           .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19742       }
19743     }
19744   }
19745 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
19746 
19747 
19748 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,c_eq_32)19749   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, c_eq_32) {
19750     TEST_REQUIRES_X86_AVX512F;
19751     DWConvMicrokernelTester()
19752       .cr(32)
19753       .kr(3)
19754       .channels(32)
19755       .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19756   }
19757 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,c_div_32)19758   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, c_div_32) {
19759     TEST_REQUIRES_X86_AVX512F;
19760     for (uint32_t channels = 64; channels < 512; channels += 96) {
19761       DWConvMicrokernelTester()
19762         .cr(32)
19763         .kr(3)
19764         .channels(channels)
19765         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19766     }
19767   }
19768 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,c_div_32_with_qmin)19769   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, c_div_32_with_qmin) {
19770     TEST_REQUIRES_X86_AVX512F;
19771     for (uint32_t channels = 64; channels < 512; channels += 96) {
19772       DWConvMicrokernelTester()
19773         .cr(32)
19774         .kr(3)
19775         .channels(channels)
19776         .qmin(128)
19777         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19778     }
19779   }
19780 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,c_div_32_with_qmax)19781   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, c_div_32_with_qmax) {
19782     TEST_REQUIRES_X86_AVX512F;
19783     for (uint32_t channels = 64; channels < 512; channels += 96) {
19784       DWConvMicrokernelTester()
19785         .cr(32)
19786         .kr(3)
19787         .channels(channels)
19788         .qmax(128)
19789         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19790     }
19791   }
19792 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,c_lt_32)19793   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, c_lt_32) {
19794     TEST_REQUIRES_X86_AVX512F;
19795     for (uint32_t channels = 1; channels < 32; channels++) {
19796       DWConvMicrokernelTester()
19797         .cr(32)
19798         .kr(3)
19799         .channels(channels)
19800         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19801     }
19802   }
19803 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,c_gt_32)19804   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, c_gt_32) {
19805     TEST_REQUIRES_X86_AVX512F;
19806     for (uint32_t channels = 33; channels < 64; channels++) {
19807       DWConvMicrokernelTester()
19808         .cr(32)
19809         .kr(3)
19810         .channels(channels)
19811         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19812     }
19813   }
19814 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,c_gt_32_with_qmin)19815   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, c_gt_32_with_qmin) {
19816     TEST_REQUIRES_X86_AVX512F;
19817     for (uint32_t channels = 33; channels < 64; channels++) {
19818       DWConvMicrokernelTester()
19819         .cr(32)
19820         .kr(3)
19821         .channels(channels)
19822         .qmin(128)
19823         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19824     }
19825   }
19826 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,c_gt_32_with_qmax)19827   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, c_gt_32_with_qmax) {
19828     TEST_REQUIRES_X86_AVX512F;
19829     for (uint32_t channels = 33; channels < 64; channels++) {
19830       DWConvMicrokernelTester()
19831         .cr(32)
19832         .kr(3)
19833         .channels(channels)
19834         .qmax(128)
19835         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19836     }
19837   }
19838 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,multipixel)19839   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, multipixel) {
19840     TEST_REQUIRES_X86_AVX512F;
19841     for (size_t channels = 1; channels <= 160; channels += 31) {
19842       DWConvMicrokernelTester()
19843         .cr(32)
19844         .kr(3)
19845         .channels(channels)
19846         .width(3)
19847         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19848     }
19849   }
19850 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,multipixel_with_step)19851   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, multipixel_with_step) {
19852     TEST_REQUIRES_X86_AVX512F;
19853     for (size_t channels = 1; channels <= 160; channels += 31) {
19854       for (size_t step = 2; step <= 3; step++) {
19855         DWConvMicrokernelTester()
19856           .cr(32)
19857           .kr(3)
19858           .channels(channels)
19859           .width(3)
19860           .step(step)
19861           .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19862       }
19863     }
19864   }
19865 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,multipixel_with_output_stride)19866   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, multipixel_with_output_stride) {
19867     TEST_REQUIRES_X86_AVX512F;
19868     for (size_t channels = 1; channels <= 160; channels += 31) {
19869       DWConvMicrokernelTester()
19870         .cr(32)
19871         .kr(3)
19872         .channels(32)
19873         .width(5)
19874         .output_stride(163)
19875         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19876     }
19877   }
19878 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,multipixel_with_qmin)19879   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, multipixel_with_qmin) {
19880     TEST_REQUIRES_X86_AVX512F;
19881     for (size_t channels = 1; channels <= 160; channels += 31) {
19882       DWConvMicrokernelTester()
19883         .cr(32)
19884         .kr(3)
19885         .channels(channels)
19886         .width(3)
19887         .qmin(128)
19888         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19889     }
19890   }
19891 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,multipixel_with_qmax)19892   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, multipixel_with_qmax) {
19893     TEST_REQUIRES_X86_AVX512F;
19894     for (size_t channels = 1; channels <= 160; channels += 31) {
19895       DWConvMicrokernelTester()
19896         .cr(32)
19897         .kr(3)
19898         .channels(channels)
19899         .width(3)
19900         .qmax(128)
19901         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19902     }
19903   }
19904 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,input_offset)19905   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, input_offset) {
19906     TEST_REQUIRES_X86_AVX512F;
19907     for (uint32_t channels = 64; channels < 512; channels += 96) {
19908       DWConvMicrokernelTester()
19909         .cr(32)
19910         .kr(3)
19911         .channels(channels)
19912         .input_offset(592)
19913         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19914     }
19915   }
19916 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F,zero)19917   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, zero) {
19918     TEST_REQUIRES_X86_AVX512F;
19919     for (uint32_t mz = 0; mz < 3; mz++) {
19920       for (uint32_t channels = 64; channels < 512; channels += 96) {
19921         DWConvMicrokernelTester()
19922           .cr(32)
19923           .kr(3)
19924           .channels(channels)
19925           .input_offset(592)
19926           .zero_index(mz)
19927           .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
19928       }
19929     }
19930   }
19931 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
19932 
19933 
19934 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,c_eq_32)19935   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, c_eq_32) {
19936     TEST_REQUIRES_X86_AVX512F;
19937     DWConvMicrokernelTester()
19938       .cr(32)
19939       .kr(3)
19940       .channels(32)
19941       .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19942   }
19943 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,c_div_32)19944   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, c_div_32) {
19945     TEST_REQUIRES_X86_AVX512F;
19946     for (uint32_t channels = 64; channels < 512; channels += 96) {
19947       DWConvMicrokernelTester()
19948         .cr(32)
19949         .kr(3)
19950         .channels(channels)
19951         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19952     }
19953   }
19954 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,c_div_32_with_qmin)19955   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, c_div_32_with_qmin) {
19956     TEST_REQUIRES_X86_AVX512F;
19957     for (uint32_t channels = 64; channels < 512; channels += 96) {
19958       DWConvMicrokernelTester()
19959         .cr(32)
19960         .kr(3)
19961         .channels(channels)
19962         .qmin(128)
19963         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19964     }
19965   }
19966 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,c_div_32_with_qmax)19967   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, c_div_32_with_qmax) {
19968     TEST_REQUIRES_X86_AVX512F;
19969     for (uint32_t channels = 64; channels < 512; channels += 96) {
19970       DWConvMicrokernelTester()
19971         .cr(32)
19972         .kr(3)
19973         .channels(channels)
19974         .qmax(128)
19975         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19976     }
19977   }
19978 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,c_lt_32)19979   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, c_lt_32) {
19980     TEST_REQUIRES_X86_AVX512F;
19981     for (uint32_t channels = 1; channels < 32; channels++) {
19982       DWConvMicrokernelTester()
19983         .cr(32)
19984         .kr(3)
19985         .channels(channels)
19986         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19987     }
19988   }
19989 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,c_gt_32)19990   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, c_gt_32) {
19991     TEST_REQUIRES_X86_AVX512F;
19992     for (uint32_t channels = 33; channels < 64; channels++) {
19993       DWConvMicrokernelTester()
19994         .cr(32)
19995         .kr(3)
19996         .channels(channels)
19997         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19998     }
19999   }
20000 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,c_gt_32_with_qmin)20001   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, c_gt_32_with_qmin) {
20002     TEST_REQUIRES_X86_AVX512F;
20003     for (uint32_t channels = 33; channels < 64; channels++) {
20004       DWConvMicrokernelTester()
20005         .cr(32)
20006         .kr(3)
20007         .channels(channels)
20008         .qmin(128)
20009         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20010     }
20011   }
20012 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,c_gt_32_with_qmax)20013   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, c_gt_32_with_qmax) {
20014     TEST_REQUIRES_X86_AVX512F;
20015     for (uint32_t channels = 33; channels < 64; channels++) {
20016       DWConvMicrokernelTester()
20017         .cr(32)
20018         .kr(3)
20019         .channels(channels)
20020         .qmax(128)
20021         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20022     }
20023   }
20024 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,multipixel)20025   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, multipixel) {
20026     TEST_REQUIRES_X86_AVX512F;
20027     for (size_t channels = 1; channels <= 160; channels += 31) {
20028       DWConvMicrokernelTester()
20029         .cr(32)
20030         .kr(3)
20031         .channels(channels)
20032         .width(3)
20033         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20034     }
20035   }
20036 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,multipixel_with_step)20037   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, multipixel_with_step) {
20038     TEST_REQUIRES_X86_AVX512F;
20039     for (size_t channels = 1; channels <= 160; channels += 31) {
20040       for (size_t step = 2; step <= 3; step++) {
20041         DWConvMicrokernelTester()
20042           .cr(32)
20043           .kr(3)
20044           .channels(channels)
20045           .width(3)
20046           .step(step)
20047           .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20048       }
20049     }
20050   }
20051 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,multipixel_with_output_stride)20052   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, multipixel_with_output_stride) {
20053     TEST_REQUIRES_X86_AVX512F;
20054     for (size_t channels = 1; channels <= 160; channels += 31) {
20055       DWConvMicrokernelTester()
20056         .cr(32)
20057         .kr(3)
20058         .channels(32)
20059         .width(5)
20060         .output_stride(163)
20061         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20062     }
20063   }
20064 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,multipixel_with_qmin)20065   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, multipixel_with_qmin) {
20066     TEST_REQUIRES_X86_AVX512F;
20067     for (size_t channels = 1; channels <= 160; channels += 31) {
20068       DWConvMicrokernelTester()
20069         .cr(32)
20070         .kr(3)
20071         .channels(channels)
20072         .width(3)
20073         .qmin(128)
20074         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20075     }
20076   }
20077 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,multipixel_with_qmax)20078   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, multipixel_with_qmax) {
20079     TEST_REQUIRES_X86_AVX512F;
20080     for (size_t channels = 1; channels <= 160; channels += 31) {
20081       DWConvMicrokernelTester()
20082         .cr(32)
20083         .kr(3)
20084         .channels(channels)
20085         .width(3)
20086         .qmax(128)
20087         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20088     }
20089   }
20090 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,input_offset)20091   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, input_offset) {
20092     TEST_REQUIRES_X86_AVX512F;
20093     for (uint32_t channels = 64; channels < 512; channels += 96) {
20094       DWConvMicrokernelTester()
20095         .cr(32)
20096         .kr(3)
20097         .channels(channels)
20098         .input_offset(592)
20099         .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20100     }
20101   }
20102 
TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2,zero)20103   TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, zero) {
20104     TEST_REQUIRES_X86_AVX512F;
20105     for (uint32_t mz = 0; mz < 3; mz++) {
20106       for (uint32_t channels = 64; channels < 512; channels += 96) {
20107         DWConvMicrokernelTester()
20108           .cr(32)
20109           .kr(3)
20110           .channels(channels)
20111           .input_offset(592)
20112           .zero_index(mz)
20113           .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20114       }
20115     }
20116   }
20117 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
20118 
20119 
20120 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,c_eq_32)20121   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_eq_32) {
20122     TEST_REQUIRES_X86_AVX512F;
20123     DWConvMicrokernelTester()
20124       .cr(32)
20125       .kr(4)
20126       .channels(32)
20127       .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20128   }
20129 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,c_div_32)20130   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_div_32) {
20131     TEST_REQUIRES_X86_AVX512F;
20132     for (uint32_t channels = 64; channels < 512; channels += 96) {
20133       DWConvMicrokernelTester()
20134         .cr(32)
20135         .kr(4)
20136         .channels(channels)
20137         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20138     }
20139   }
20140 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,c_div_32_with_qmin)20141   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_div_32_with_qmin) {
20142     TEST_REQUIRES_X86_AVX512F;
20143     for (uint32_t channels = 64; channels < 512; channels += 96) {
20144       DWConvMicrokernelTester()
20145         .cr(32)
20146         .kr(4)
20147         .channels(channels)
20148         .qmin(128)
20149         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20150     }
20151   }
20152 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,c_div_32_with_qmax)20153   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_div_32_with_qmax) {
20154     TEST_REQUIRES_X86_AVX512F;
20155     for (uint32_t channels = 64; channels < 512; channels += 96) {
20156       DWConvMicrokernelTester()
20157         .cr(32)
20158         .kr(4)
20159         .channels(channels)
20160         .qmax(128)
20161         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20162     }
20163   }
20164 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,c_lt_32)20165   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_lt_32) {
20166     TEST_REQUIRES_X86_AVX512F;
20167     for (uint32_t channels = 1; channels < 32; channels++) {
20168       DWConvMicrokernelTester()
20169         .cr(32)
20170         .kr(4)
20171         .channels(channels)
20172         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20173     }
20174   }
20175 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,c_gt_32)20176   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_gt_32) {
20177     TEST_REQUIRES_X86_AVX512F;
20178     for (uint32_t channels = 33; channels < 64; channels++) {
20179       DWConvMicrokernelTester()
20180         .cr(32)
20181         .kr(4)
20182         .channels(channels)
20183         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20184     }
20185   }
20186 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,c_gt_32_with_qmin)20187   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_gt_32_with_qmin) {
20188     TEST_REQUIRES_X86_AVX512F;
20189     for (uint32_t channels = 33; channels < 64; channels++) {
20190       DWConvMicrokernelTester()
20191         .cr(32)
20192         .kr(4)
20193         .channels(channels)
20194         .qmin(128)
20195         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20196     }
20197   }
20198 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,c_gt_32_with_qmax)20199   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_gt_32_with_qmax) {
20200     TEST_REQUIRES_X86_AVX512F;
20201     for (uint32_t channels = 33; channels < 64; channels++) {
20202       DWConvMicrokernelTester()
20203         .cr(32)
20204         .kr(4)
20205         .channels(channels)
20206         .qmax(128)
20207         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20208     }
20209   }
20210 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,multipixel)20211   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel) {
20212     TEST_REQUIRES_X86_AVX512F;
20213     for (size_t channels = 1; channels <= 160; channels += 31) {
20214       DWConvMicrokernelTester()
20215         .cr(32)
20216         .kr(4)
20217         .channels(channels)
20218         .width(3)
20219         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20220     }
20221   }
20222 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,multipixel_with_step)20223   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_step) {
20224     TEST_REQUIRES_X86_AVX512F;
20225     for (size_t channels = 1; channels <= 160; channels += 31) {
20226       for (size_t step = 2; step <= 4; step++) {
20227         DWConvMicrokernelTester()
20228           .cr(32)
20229           .kr(4)
20230           .channels(channels)
20231           .width(3)
20232           .step(step)
20233           .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20234       }
20235     }
20236   }
20237 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,multipixel_with_output_stride)20238   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_output_stride) {
20239     TEST_REQUIRES_X86_AVX512F;
20240     for (size_t channels = 1; channels <= 160; channels += 31) {
20241       DWConvMicrokernelTester()
20242         .cr(32)
20243         .kr(4)
20244         .channels(32)
20245         .width(5)
20246         .output_stride(163)
20247         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20248     }
20249   }
20250 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,multipixel_with_qmin)20251   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_qmin) {
20252     TEST_REQUIRES_X86_AVX512F;
20253     for (size_t channels = 1; channels <= 160; channels += 31) {
20254       DWConvMicrokernelTester()
20255         .cr(32)
20256         .kr(4)
20257         .channels(channels)
20258         .width(3)
20259         .qmin(128)
20260         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20261     }
20262   }
20263 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,multipixel_with_qmax)20264   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_qmax) {
20265     TEST_REQUIRES_X86_AVX512F;
20266     for (size_t channels = 1; channels <= 160; channels += 31) {
20267       DWConvMicrokernelTester()
20268         .cr(32)
20269         .kr(4)
20270         .channels(channels)
20271         .width(3)
20272         .qmax(128)
20273         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20274     }
20275   }
20276 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,input_offset)20277   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, input_offset) {
20278     TEST_REQUIRES_X86_AVX512F;
20279     for (uint32_t channels = 64; channels < 512; channels += 96) {
20280       DWConvMicrokernelTester()
20281         .cr(32)
20282         .kr(4)
20283         .channels(channels)
20284         .input_offset(592)
20285         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20286     }
20287   }
20288 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F,zero)20289   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, zero) {
20290     TEST_REQUIRES_X86_AVX512F;
20291     for (uint32_t mz = 0; mz < 4; mz++) {
20292       for (uint32_t channels = 64; channels < 512; channels += 96) {
20293         DWConvMicrokernelTester()
20294           .cr(32)
20295           .kr(4)
20296           .channels(channels)
20297           .input_offset(592)
20298           .zero_index(mz)
20299           .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
20300       }
20301     }
20302   }
20303 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
20304 
20305 
20306 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,c_eq_32)20307   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_eq_32) {
20308     TEST_REQUIRES_X86_AVX512F;
20309     DWConvMicrokernelTester()
20310       .cr(32)
20311       .kr(4)
20312       .channels(32)
20313       .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20314   }
20315 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,c_div_32)20316   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_div_32) {
20317     TEST_REQUIRES_X86_AVX512F;
20318     for (uint32_t channels = 64; channels < 512; channels += 96) {
20319       DWConvMicrokernelTester()
20320         .cr(32)
20321         .kr(4)
20322         .channels(channels)
20323         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20324     }
20325   }
20326 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,c_div_32_with_qmin)20327   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_div_32_with_qmin) {
20328     TEST_REQUIRES_X86_AVX512F;
20329     for (uint32_t channels = 64; channels < 512; channels += 96) {
20330       DWConvMicrokernelTester()
20331         .cr(32)
20332         .kr(4)
20333         .channels(channels)
20334         .qmin(128)
20335         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20336     }
20337   }
20338 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,c_div_32_with_qmax)20339   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_div_32_with_qmax) {
20340     TEST_REQUIRES_X86_AVX512F;
20341     for (uint32_t channels = 64; channels < 512; channels += 96) {
20342       DWConvMicrokernelTester()
20343         .cr(32)
20344         .kr(4)
20345         .channels(channels)
20346         .qmax(128)
20347         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20348     }
20349   }
20350 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,c_lt_32)20351   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_lt_32) {
20352     TEST_REQUIRES_X86_AVX512F;
20353     for (uint32_t channels = 1; channels < 32; channels++) {
20354       DWConvMicrokernelTester()
20355         .cr(32)
20356         .kr(4)
20357         .channels(channels)
20358         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20359     }
20360   }
20361 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,c_gt_32)20362   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_gt_32) {
20363     TEST_REQUIRES_X86_AVX512F;
20364     for (uint32_t channels = 33; channels < 64; channels++) {
20365       DWConvMicrokernelTester()
20366         .cr(32)
20367         .kr(4)
20368         .channels(channels)
20369         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20370     }
20371   }
20372 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,c_gt_32_with_qmin)20373   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_gt_32_with_qmin) {
20374     TEST_REQUIRES_X86_AVX512F;
20375     for (uint32_t channels = 33; channels < 64; channels++) {
20376       DWConvMicrokernelTester()
20377         .cr(32)
20378         .kr(4)
20379         .channels(channels)
20380         .qmin(128)
20381         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20382     }
20383   }
20384 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,c_gt_32_with_qmax)20385   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_gt_32_with_qmax) {
20386     TEST_REQUIRES_X86_AVX512F;
20387     for (uint32_t channels = 33; channels < 64; channels++) {
20388       DWConvMicrokernelTester()
20389         .cr(32)
20390         .kr(4)
20391         .channels(channels)
20392         .qmax(128)
20393         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20394     }
20395   }
20396 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,multipixel)20397   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel) {
20398     TEST_REQUIRES_X86_AVX512F;
20399     for (size_t channels = 1; channels <= 160; channels += 31) {
20400       DWConvMicrokernelTester()
20401         .cr(32)
20402         .kr(4)
20403         .channels(channels)
20404         .width(3)
20405         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20406     }
20407   }
20408 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,multipixel_with_step)20409   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_step) {
20410     TEST_REQUIRES_X86_AVX512F;
20411     for (size_t channels = 1; channels <= 160; channels += 31) {
20412       for (size_t step = 2; step <= 4; step++) {
20413         DWConvMicrokernelTester()
20414           .cr(32)
20415           .kr(4)
20416           .channels(channels)
20417           .width(3)
20418           .step(step)
20419           .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20420       }
20421     }
20422   }
20423 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,multipixel_with_output_stride)20424   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_output_stride) {
20425     TEST_REQUIRES_X86_AVX512F;
20426     for (size_t channels = 1; channels <= 160; channels += 31) {
20427       DWConvMicrokernelTester()
20428         .cr(32)
20429         .kr(4)
20430         .channels(32)
20431         .width(5)
20432         .output_stride(163)
20433         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20434     }
20435   }
20436 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,multipixel_with_qmin)20437   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_qmin) {
20438     TEST_REQUIRES_X86_AVX512F;
20439     for (size_t channels = 1; channels <= 160; channels += 31) {
20440       DWConvMicrokernelTester()
20441         .cr(32)
20442         .kr(4)
20443         .channels(channels)
20444         .width(3)
20445         .qmin(128)
20446         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20447     }
20448   }
20449 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,multipixel_with_qmax)20450   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_qmax) {
20451     TEST_REQUIRES_X86_AVX512F;
20452     for (size_t channels = 1; channels <= 160; channels += 31) {
20453       DWConvMicrokernelTester()
20454         .cr(32)
20455         .kr(4)
20456         .channels(channels)
20457         .width(3)
20458         .qmax(128)
20459         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20460     }
20461   }
20462 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,input_offset)20463   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, input_offset) {
20464     TEST_REQUIRES_X86_AVX512F;
20465     for (uint32_t channels = 64; channels < 512; channels += 96) {
20466       DWConvMicrokernelTester()
20467         .cr(32)
20468         .kr(4)
20469         .channels(channels)
20470         .input_offset(592)
20471         .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20472     }
20473   }
20474 
TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2,zero)20475   TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, zero) {
20476     TEST_REQUIRES_X86_AVX512F;
20477     for (uint32_t mz = 0; mz < 4; mz++) {
20478       for (uint32_t channels = 64; channels < 512; channels += 96) {
20479         DWConvMicrokernelTester()
20480           .cr(32)
20481           .kr(4)
20482           .channels(channels)
20483           .input_offset(592)
20484           .zero_index(mz)
20485           .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20486       }
20487     }
20488   }
20489 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
20490 
20491 
20492 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,c_eq_32)20493   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_eq_32) {
20494     TEST_REQUIRES_X86_AVX512F;
20495     DWConvMicrokernelTester()
20496       .cr(32)
20497       .kr(9)
20498       .channels(32)
20499       .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20500   }
20501 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,c_div_32)20502   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_div_32) {
20503     TEST_REQUIRES_X86_AVX512F;
20504     for (uint32_t channels = 64; channels < 512; channels += 96) {
20505       DWConvMicrokernelTester()
20506         .cr(32)
20507         .kr(9)
20508         .channels(channels)
20509         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20510     }
20511   }
20512 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,c_div_32_with_qmin)20513   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_div_32_with_qmin) {
20514     TEST_REQUIRES_X86_AVX512F;
20515     for (uint32_t channels = 64; channels < 512; channels += 96) {
20516       DWConvMicrokernelTester()
20517         .cr(32)
20518         .kr(9)
20519         .channels(channels)
20520         .qmin(128)
20521         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20522     }
20523   }
20524 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,c_div_32_with_qmax)20525   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_div_32_with_qmax) {
20526     TEST_REQUIRES_X86_AVX512F;
20527     for (uint32_t channels = 64; channels < 512; channels += 96) {
20528       DWConvMicrokernelTester()
20529         .cr(32)
20530         .kr(9)
20531         .channels(channels)
20532         .qmax(128)
20533         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20534     }
20535   }
20536 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,c_lt_32)20537   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_lt_32) {
20538     TEST_REQUIRES_X86_AVX512F;
20539     for (uint32_t channels = 1; channels < 32; channels++) {
20540       DWConvMicrokernelTester()
20541         .cr(32)
20542         .kr(9)
20543         .channels(channels)
20544         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20545     }
20546   }
20547 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,c_gt_32)20548   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_gt_32) {
20549     TEST_REQUIRES_X86_AVX512F;
20550     for (uint32_t channels = 33; channels < 64; channels++) {
20551       DWConvMicrokernelTester()
20552         .cr(32)
20553         .kr(9)
20554         .channels(channels)
20555         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20556     }
20557   }
20558 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,c_gt_32_with_qmin)20559   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_gt_32_with_qmin) {
20560     TEST_REQUIRES_X86_AVX512F;
20561     for (uint32_t channels = 33; channels < 64; channels++) {
20562       DWConvMicrokernelTester()
20563         .cr(32)
20564         .kr(9)
20565         .channels(channels)
20566         .qmin(128)
20567         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20568     }
20569   }
20570 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,c_gt_32_with_qmax)20571   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_gt_32_with_qmax) {
20572     TEST_REQUIRES_X86_AVX512F;
20573     for (uint32_t channels = 33; channels < 64; channels++) {
20574       DWConvMicrokernelTester()
20575         .cr(32)
20576         .kr(9)
20577         .channels(channels)
20578         .qmax(128)
20579         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20580     }
20581   }
20582 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,multipixel)20583   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel) {
20584     TEST_REQUIRES_X86_AVX512F;
20585     for (size_t channels = 1; channels <= 160; channels += 31) {
20586       DWConvMicrokernelTester()
20587         .cr(32)
20588         .kr(9)
20589         .channels(channels)
20590         .width(3)
20591         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20592     }
20593   }
20594 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,multipixel_with_step)20595   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_step) {
20596     TEST_REQUIRES_X86_AVX512F;
20597     for (size_t channels = 1; channels <= 160; channels += 31) {
20598       for (size_t step = 2; step <= 9; step++) {
20599         DWConvMicrokernelTester()
20600           .cr(32)
20601           .kr(9)
20602           .channels(channels)
20603           .width(3)
20604           .step(step)
20605           .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20606       }
20607     }
20608   }
20609 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,multipixel_with_output_stride)20610   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_output_stride) {
20611     TEST_REQUIRES_X86_AVX512F;
20612     for (size_t channels = 1; channels <= 160; channels += 31) {
20613       DWConvMicrokernelTester()
20614         .cr(32)
20615         .kr(9)
20616         .channels(32)
20617         .width(5)
20618         .output_stride(163)
20619         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20620     }
20621   }
20622 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,multipixel_with_qmin)20623   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_qmin) {
20624     TEST_REQUIRES_X86_AVX512F;
20625     for (size_t channels = 1; channels <= 160; channels += 31) {
20626       DWConvMicrokernelTester()
20627         .cr(32)
20628         .kr(9)
20629         .channels(channels)
20630         .width(3)
20631         .qmin(128)
20632         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20633     }
20634   }
20635 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,multipixel_with_qmax)20636   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_qmax) {
20637     TEST_REQUIRES_X86_AVX512F;
20638     for (size_t channels = 1; channels <= 160; channels += 31) {
20639       DWConvMicrokernelTester()
20640         .cr(32)
20641         .kr(9)
20642         .channels(channels)
20643         .width(3)
20644         .qmax(128)
20645         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20646     }
20647   }
20648 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,input_offset)20649   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, input_offset) {
20650     TEST_REQUIRES_X86_AVX512F;
20651     for (uint32_t channels = 64; channels < 512; channels += 96) {
20652       DWConvMicrokernelTester()
20653         .cr(32)
20654         .kr(9)
20655         .channels(channels)
20656         .input_offset(592)
20657         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20658     }
20659   }
20660 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F,zero)20661   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, zero) {
20662     TEST_REQUIRES_X86_AVX512F;
20663     for (uint32_t mz = 0; mz < 9; mz++) {
20664       for (uint32_t channels = 64; channels < 512; channels += 96) {
20665         DWConvMicrokernelTester()
20666           .cr(32)
20667           .kr(9)
20668           .channels(channels)
20669           .input_offset(592)
20670           .zero_index(mz)
20671           .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
20672       }
20673     }
20674   }
20675 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
20676 
20677 
20678 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,c_eq_32)20679   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_eq_32) {
20680     TEST_REQUIRES_X86_AVX512F;
20681     DWConvMicrokernelTester()
20682       .cr(32)
20683       .kr(9)
20684       .channels(32)
20685       .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20686   }
20687 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,c_div_32)20688   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_div_32) {
20689     TEST_REQUIRES_X86_AVX512F;
20690     for (uint32_t channels = 64; channels < 512; channels += 96) {
20691       DWConvMicrokernelTester()
20692         .cr(32)
20693         .kr(9)
20694         .channels(channels)
20695         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20696     }
20697   }
20698 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,c_div_32_with_qmin)20699   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_div_32_with_qmin) {
20700     TEST_REQUIRES_X86_AVX512F;
20701     for (uint32_t channels = 64; channels < 512; channels += 96) {
20702       DWConvMicrokernelTester()
20703         .cr(32)
20704         .kr(9)
20705         .channels(channels)
20706         .qmin(128)
20707         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20708     }
20709   }
20710 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,c_div_32_with_qmax)20711   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_div_32_with_qmax) {
20712     TEST_REQUIRES_X86_AVX512F;
20713     for (uint32_t channels = 64; channels < 512; channels += 96) {
20714       DWConvMicrokernelTester()
20715         .cr(32)
20716         .kr(9)
20717         .channels(channels)
20718         .qmax(128)
20719         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20720     }
20721   }
20722 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,c_lt_32)20723   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_lt_32) {
20724     TEST_REQUIRES_X86_AVX512F;
20725     for (uint32_t channels = 1; channels < 32; channels++) {
20726       DWConvMicrokernelTester()
20727         .cr(32)
20728         .kr(9)
20729         .channels(channels)
20730         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20731     }
20732   }
20733 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,c_gt_32)20734   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_gt_32) {
20735     TEST_REQUIRES_X86_AVX512F;
20736     for (uint32_t channels = 33; channels < 64; channels++) {
20737       DWConvMicrokernelTester()
20738         .cr(32)
20739         .kr(9)
20740         .channels(channels)
20741         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20742     }
20743   }
20744 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,c_gt_32_with_qmin)20745   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_gt_32_with_qmin) {
20746     TEST_REQUIRES_X86_AVX512F;
20747     for (uint32_t channels = 33; channels < 64; channels++) {
20748       DWConvMicrokernelTester()
20749         .cr(32)
20750         .kr(9)
20751         .channels(channels)
20752         .qmin(128)
20753         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20754     }
20755   }
20756 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,c_gt_32_with_qmax)20757   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_gt_32_with_qmax) {
20758     TEST_REQUIRES_X86_AVX512F;
20759     for (uint32_t channels = 33; channels < 64; channels++) {
20760       DWConvMicrokernelTester()
20761         .cr(32)
20762         .kr(9)
20763         .channels(channels)
20764         .qmax(128)
20765         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20766     }
20767   }
20768 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,multipixel)20769   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel) {
20770     TEST_REQUIRES_X86_AVX512F;
20771     for (size_t channels = 1; channels <= 160; channels += 31) {
20772       DWConvMicrokernelTester()
20773         .cr(32)
20774         .kr(9)
20775         .channels(channels)
20776         .width(3)
20777         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20778     }
20779   }
20780 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,multipixel_with_step)20781   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_step) {
20782     TEST_REQUIRES_X86_AVX512F;
20783     for (size_t channels = 1; channels <= 160; channels += 31) {
20784       for (size_t step = 2; step <= 9; step++) {
20785         DWConvMicrokernelTester()
20786           .cr(32)
20787           .kr(9)
20788           .channels(channels)
20789           .width(3)
20790           .step(step)
20791           .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20792       }
20793     }
20794   }
20795 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,multipixel_with_output_stride)20796   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_output_stride) {
20797     TEST_REQUIRES_X86_AVX512F;
20798     for (size_t channels = 1; channels <= 160; channels += 31) {
20799       DWConvMicrokernelTester()
20800         .cr(32)
20801         .kr(9)
20802         .channels(32)
20803         .width(5)
20804         .output_stride(163)
20805         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20806     }
20807   }
20808 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,multipixel_with_qmin)20809   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_qmin) {
20810     TEST_REQUIRES_X86_AVX512F;
20811     for (size_t channels = 1; channels <= 160; channels += 31) {
20812       DWConvMicrokernelTester()
20813         .cr(32)
20814         .kr(9)
20815         .channels(channels)
20816         .width(3)
20817         .qmin(128)
20818         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20819     }
20820   }
20821 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,multipixel_with_qmax)20822   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_qmax) {
20823     TEST_REQUIRES_X86_AVX512F;
20824     for (size_t channels = 1; channels <= 160; channels += 31) {
20825       DWConvMicrokernelTester()
20826         .cr(32)
20827         .kr(9)
20828         .channels(channels)
20829         .width(3)
20830         .qmax(128)
20831         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20832     }
20833   }
20834 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,input_offset)20835   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, input_offset) {
20836     TEST_REQUIRES_X86_AVX512F;
20837     for (uint32_t channels = 64; channels < 512; channels += 96) {
20838       DWConvMicrokernelTester()
20839         .cr(32)
20840         .kr(9)
20841         .channels(channels)
20842         .input_offset(592)
20843         .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20844     }
20845   }
20846 
TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2,zero)20847   TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, zero) {
20848     TEST_REQUIRES_X86_AVX512F;
20849     for (uint32_t mz = 0; mz < 9; mz++) {
20850       for (uint32_t channels = 64; channels < 512; channels += 96) {
20851         DWConvMicrokernelTester()
20852           .cr(32)
20853           .kr(9)
20854           .channels(channels)
20855           .input_offset(592)
20856           .zero_index(mz)
20857           .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20858       }
20859     }
20860   }
20861 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
20862 
20863 
20864 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,c_eq_32)20865   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_eq_32) {
20866     TEST_REQUIRES_X86_AVX512F;
20867     DWConvMicrokernelTester()
20868       .cr(32)
20869       .kr(25)
20870       .channels(32)
20871       .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
20872   }
20873 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,c_div_32)20874   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_div_32) {
20875     TEST_REQUIRES_X86_AVX512F;
20876     for (uint32_t channels = 64; channels < 512; channels += 96) {
20877       DWConvMicrokernelTester()
20878         .cr(32)
20879         .kr(25)
20880         .channels(channels)
20881         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
20882     }
20883   }
20884 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,c_div_32_with_qmin)20885   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_div_32_with_qmin) {
20886     TEST_REQUIRES_X86_AVX512F;
20887     for (uint32_t channels = 64; channels < 512; channels += 96) {
20888       DWConvMicrokernelTester()
20889         .cr(32)
20890         .kr(25)
20891         .channels(channels)
20892         .qmin(128)
20893         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
20894     }
20895   }
20896 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,c_div_32_with_qmax)20897   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_div_32_with_qmax) {
20898     TEST_REQUIRES_X86_AVX512F;
20899     for (uint32_t channels = 64; channels < 512; channels += 96) {
20900       DWConvMicrokernelTester()
20901         .cr(32)
20902         .kr(25)
20903         .channels(channels)
20904         .qmax(128)
20905         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
20906     }
20907   }
20908 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,c_lt_32)20909   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_lt_32) {
20910     TEST_REQUIRES_X86_AVX512F;
20911     for (uint32_t channels = 1; channels < 32; channels++) {
20912       DWConvMicrokernelTester()
20913         .cr(32)
20914         .kr(25)
20915         .channels(channels)
20916         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
20917     }
20918   }
20919 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,c_gt_32)20920   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_gt_32) {
20921     TEST_REQUIRES_X86_AVX512F;
20922     for (uint32_t channels = 33; channels < 64; channels++) {
20923       DWConvMicrokernelTester()
20924         .cr(32)
20925         .kr(25)
20926         .channels(channels)
20927         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
20928     }
20929   }
20930 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,c_gt_32_with_qmin)20931   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_gt_32_with_qmin) {
20932     TEST_REQUIRES_X86_AVX512F;
20933     for (uint32_t channels = 33; channels < 64; channels++) {
20934       DWConvMicrokernelTester()
20935         .cr(32)
20936         .kr(25)
20937         .channels(channels)
20938         .qmin(128)
20939         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
20940     }
20941   }
20942 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,c_gt_32_with_qmax)20943   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_gt_32_with_qmax) {
20944     TEST_REQUIRES_X86_AVX512F;
20945     for (uint32_t channels = 33; channels < 64; channels++) {
20946       DWConvMicrokernelTester()
20947         .cr(32)
20948         .kr(25)
20949         .channels(channels)
20950         .qmax(128)
20951         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
20952     }
20953   }
20954 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,multipixel)20955   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel) {
20956     TEST_REQUIRES_X86_AVX512F;
20957     for (size_t channels = 1; channels <= 160; channels += 31) {
20958       DWConvMicrokernelTester()
20959         .cr(32)
20960         .kr(25)
20961         .channels(channels)
20962         .width(3)
20963         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
20964     }
20965   }
20966 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,multipixel_with_step)20967   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_step) {
20968     TEST_REQUIRES_X86_AVX512F;
20969     for (size_t channels = 1; channels <= 160; channels += 31) {
20970       for (size_t step = 2; step <= 25; step++) {
20971         DWConvMicrokernelTester()
20972           .cr(32)
20973           .kr(25)
20974           .channels(channels)
20975           .width(3)
20976           .step(step)
20977           .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
20978       }
20979     }
20980   }
20981 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,multipixel_with_output_stride)20982   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_output_stride) {
20983     TEST_REQUIRES_X86_AVX512F;
20984     for (size_t channels = 1; channels <= 160; channels += 31) {
20985       DWConvMicrokernelTester()
20986         .cr(32)
20987         .kr(25)
20988         .channels(32)
20989         .width(5)
20990         .output_stride(163)
20991         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
20992     }
20993   }
20994 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,multipixel_with_qmin)20995   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_qmin) {
20996     TEST_REQUIRES_X86_AVX512F;
20997     for (size_t channels = 1; channels <= 160; channels += 31) {
20998       DWConvMicrokernelTester()
20999         .cr(32)
21000         .kr(25)
21001         .channels(channels)
21002         .width(3)
21003         .qmin(128)
21004         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
21005     }
21006   }
21007 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,multipixel_with_qmax)21008   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_qmax) {
21009     TEST_REQUIRES_X86_AVX512F;
21010     for (size_t channels = 1; channels <= 160; channels += 31) {
21011       DWConvMicrokernelTester()
21012         .cr(32)
21013         .kr(25)
21014         .channels(channels)
21015         .width(3)
21016         .qmax(128)
21017         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
21018     }
21019   }
21020 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,input_offset)21021   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, input_offset) {
21022     TEST_REQUIRES_X86_AVX512F;
21023     for (uint32_t channels = 64; channels < 512; channels += 96) {
21024       DWConvMicrokernelTester()
21025         .cr(32)
21026         .kr(25)
21027         .channels(channels)
21028         .input_offset(592)
21029         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
21030     }
21031   }
21032 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F,zero)21033   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, zero) {
21034     TEST_REQUIRES_X86_AVX512F;
21035     for (uint32_t mz = 0; mz < 25; mz++) {
21036       for (uint32_t channels = 64; channels < 512; channels += 96) {
21037         DWConvMicrokernelTester()
21038           .cr(32)
21039           .kr(25)
21040           .channels(channels)
21041           .input_offset(592)
21042           .zero_index(mz)
21043           .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
21044       }
21045     }
21046   }
21047 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
21048 
21049 
21050 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,c_eq_32)21051   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_eq_32) {
21052     TEST_REQUIRES_X86_AVX512F;
21053     DWConvMicrokernelTester()
21054       .cr(32)
21055       .kr(25)
21056       .channels(32)
21057       .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21058   }
21059 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,c_div_32)21060   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_div_32) {
21061     TEST_REQUIRES_X86_AVX512F;
21062     for (uint32_t channels = 64; channels < 512; channels += 96) {
21063       DWConvMicrokernelTester()
21064         .cr(32)
21065         .kr(25)
21066         .channels(channels)
21067         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21068     }
21069   }
21070 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,c_div_32_with_qmin)21071   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_div_32_with_qmin) {
21072     TEST_REQUIRES_X86_AVX512F;
21073     for (uint32_t channels = 64; channels < 512; channels += 96) {
21074       DWConvMicrokernelTester()
21075         .cr(32)
21076         .kr(25)
21077         .channels(channels)
21078         .qmin(128)
21079         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21080     }
21081   }
21082 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,c_div_32_with_qmax)21083   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_div_32_with_qmax) {
21084     TEST_REQUIRES_X86_AVX512F;
21085     for (uint32_t channels = 64; channels < 512; channels += 96) {
21086       DWConvMicrokernelTester()
21087         .cr(32)
21088         .kr(25)
21089         .channels(channels)
21090         .qmax(128)
21091         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21092     }
21093   }
21094 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,c_lt_32)21095   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_lt_32) {
21096     TEST_REQUIRES_X86_AVX512F;
21097     for (uint32_t channels = 1; channels < 32; channels++) {
21098       DWConvMicrokernelTester()
21099         .cr(32)
21100         .kr(25)
21101         .channels(channels)
21102         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21103     }
21104   }
21105 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,c_gt_32)21106   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_gt_32) {
21107     TEST_REQUIRES_X86_AVX512F;
21108     for (uint32_t channels = 33; channels < 64; channels++) {
21109       DWConvMicrokernelTester()
21110         .cr(32)
21111         .kr(25)
21112         .channels(channels)
21113         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21114     }
21115   }
21116 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,c_gt_32_with_qmin)21117   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_gt_32_with_qmin) {
21118     TEST_REQUIRES_X86_AVX512F;
21119     for (uint32_t channels = 33; channels < 64; channels++) {
21120       DWConvMicrokernelTester()
21121         .cr(32)
21122         .kr(25)
21123         .channels(channels)
21124         .qmin(128)
21125         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21126     }
21127   }
21128 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,c_gt_32_with_qmax)21129   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_gt_32_with_qmax) {
21130     TEST_REQUIRES_X86_AVX512F;
21131     for (uint32_t channels = 33; channels < 64; channels++) {
21132       DWConvMicrokernelTester()
21133         .cr(32)
21134         .kr(25)
21135         .channels(channels)
21136         .qmax(128)
21137         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21138     }
21139   }
21140 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,multipixel)21141   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel) {
21142     TEST_REQUIRES_X86_AVX512F;
21143     for (size_t channels = 1; channels <= 160; channels += 31) {
21144       DWConvMicrokernelTester()
21145         .cr(32)
21146         .kr(25)
21147         .channels(channels)
21148         .width(3)
21149         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21150     }
21151   }
21152 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,multipixel_with_step)21153   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_step) {
21154     TEST_REQUIRES_X86_AVX512F;
21155     for (size_t channels = 1; channels <= 160; channels += 31) {
21156       for (size_t step = 2; step <= 25; step++) {
21157         DWConvMicrokernelTester()
21158           .cr(32)
21159           .kr(25)
21160           .channels(channels)
21161           .width(3)
21162           .step(step)
21163           .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21164       }
21165     }
21166   }
21167 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,multipixel_with_output_stride)21168   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_output_stride) {
21169     TEST_REQUIRES_X86_AVX512F;
21170     for (size_t channels = 1; channels <= 160; channels += 31) {
21171       DWConvMicrokernelTester()
21172         .cr(32)
21173         .kr(25)
21174         .channels(32)
21175         .width(5)
21176         .output_stride(163)
21177         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21178     }
21179   }
21180 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,multipixel_with_qmin)21181   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_qmin) {
21182     TEST_REQUIRES_X86_AVX512F;
21183     for (size_t channels = 1; channels <= 160; channels += 31) {
21184       DWConvMicrokernelTester()
21185         .cr(32)
21186         .kr(25)
21187         .channels(channels)
21188         .width(3)
21189         .qmin(128)
21190         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21191     }
21192   }
21193 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,multipixel_with_qmax)21194   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_qmax) {
21195     TEST_REQUIRES_X86_AVX512F;
21196     for (size_t channels = 1; channels <= 160; channels += 31) {
21197       DWConvMicrokernelTester()
21198         .cr(32)
21199         .kr(25)
21200         .channels(channels)
21201         .width(3)
21202         .qmax(128)
21203         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21204     }
21205   }
21206 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,input_offset)21207   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, input_offset) {
21208     TEST_REQUIRES_X86_AVX512F;
21209     for (uint32_t channels = 64; channels < 512; channels += 96) {
21210       DWConvMicrokernelTester()
21211         .cr(32)
21212         .kr(25)
21213         .channels(channels)
21214         .input_offset(592)
21215         .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21216     }
21217   }
21218 
TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2,zero)21219   TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, zero) {
21220     TEST_REQUIRES_X86_AVX512F;
21221     for (uint32_t mz = 0; mz < 25; mz++) {
21222       for (uint32_t channels = 64; channels < 512; channels += 96) {
21223         DWConvMicrokernelTester()
21224           .cr(32)
21225           .kr(25)
21226           .channels(channels)
21227           .input_offset(592)
21228           .zero_index(mz)
21229           .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
21230       }
21231     }
21232   }
21233 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
21234 
21235 
21236 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,c_eq_4)21237   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_eq_4) {
21238     DWConvMicrokernelTester()
21239       .cr(4)
21240       .kr(3)
21241       .channels(4)
21242       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21243   }
21244 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,c_div_4)21245   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_div_4) {
21246     for (uint32_t channels = 8; channels < 64; channels += 12) {
21247       DWConvMicrokernelTester()
21248         .cr(4)
21249         .kr(3)
21250         .channels(channels)
21251         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21252     }
21253   }
21254 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,c_div_4_with_qmin)21255   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_div_4_with_qmin) {
21256     for (uint32_t channels = 8; channels < 64; channels += 12) {
21257       DWConvMicrokernelTester()
21258         .cr(4)
21259         .kr(3)
21260         .channels(channels)
21261         .qmin(128)
21262         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21263     }
21264   }
21265 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,c_div_4_with_qmax)21266   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_div_4_with_qmax) {
21267     for (uint32_t channels = 8; channels < 64; channels += 12) {
21268       DWConvMicrokernelTester()
21269         .cr(4)
21270         .kr(3)
21271         .channels(channels)
21272         .qmax(128)
21273         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21274     }
21275   }
21276 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,c_lt_4)21277   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_lt_4) {
21278     for (uint32_t channels = 1; channels < 4; channels++) {
21279       DWConvMicrokernelTester()
21280         .cr(4)
21281         .kr(3)
21282         .channels(channels)
21283         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21284     }
21285   }
21286 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,c_gt_4)21287   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_gt_4) {
21288     for (uint32_t channels = 5; channels < 8; channels++) {
21289       DWConvMicrokernelTester()
21290         .cr(4)
21291         .kr(3)
21292         .channels(channels)
21293         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21294     }
21295   }
21296 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,c_gt_4_with_qmin)21297   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_gt_4_with_qmin) {
21298     for (uint32_t channels = 5; channels < 8; channels++) {
21299       DWConvMicrokernelTester()
21300         .cr(4)
21301         .kr(3)
21302         .channels(channels)
21303         .qmin(128)
21304         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21305     }
21306   }
21307 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,c_gt_4_with_qmax)21308   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_gt_4_with_qmax) {
21309     for (uint32_t channels = 5; channels < 8; channels++) {
21310       DWConvMicrokernelTester()
21311         .cr(4)
21312         .kr(3)
21313         .channels(channels)
21314         .qmax(128)
21315         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21316     }
21317   }
21318 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,multipixel)21319   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, multipixel) {
21320     for (size_t channels = 1; channels <= 20; channels += 3) {
21321       DWConvMicrokernelTester()
21322         .cr(4)
21323         .kr(3)
21324         .channels(channels)
21325         .width(3)
21326         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21327     }
21328   }
21329 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,multipixel_with_step)21330   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, multipixel_with_step) {
21331     for (size_t channels = 1; channels <= 20; channels += 3) {
21332       for (size_t step = 2; step <= 3; step++) {
21333         DWConvMicrokernelTester()
21334           .cr(4)
21335           .kr(3)
21336           .channels(channels)
21337           .width(3)
21338           .step(step)
21339           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21340       }
21341     }
21342   }
21343 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,multipixel_with_output_stride)21344   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, multipixel_with_output_stride) {
21345     for (size_t channels = 1; channels <= 20; channels += 3) {
21346       DWConvMicrokernelTester()
21347         .cr(4)
21348         .kr(3)
21349         .channels(4)
21350         .width(5)
21351         .output_stride(23)
21352         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21353     }
21354   }
21355 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,multipixel_with_qmin)21356   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, multipixel_with_qmin) {
21357     for (size_t channels = 1; channels <= 20; channels += 3) {
21358       DWConvMicrokernelTester()
21359         .cr(4)
21360         .kr(3)
21361         .channels(channels)
21362         .width(3)
21363         .qmin(128)
21364         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21365     }
21366   }
21367 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,multipixel_with_qmax)21368   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, multipixel_with_qmax) {
21369     for (size_t channels = 1; channels <= 20; channels += 3) {
21370       DWConvMicrokernelTester()
21371         .cr(4)
21372         .kr(3)
21373         .channels(channels)
21374         .width(3)
21375         .qmax(128)
21376         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21377     }
21378   }
21379 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,input_offset)21380   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, input_offset) {
21381     for (uint32_t channels = 8; channels < 64; channels += 12) {
21382       DWConvMicrokernelTester()
21383         .cr(4)
21384         .kr(3)
21385         .channels(channels)
21386         .input_offset(112)
21387         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21388     }
21389   }
21390 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM,zero)21391   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, zero) {
21392     for (uint32_t mz = 0; mz < 3; mz++) {
21393       for (uint32_t channels = 8; channels < 64; channels += 12) {
21394         DWConvMicrokernelTester()
21395           .cr(4)
21396           .kr(3)
21397           .channels(channels)
21398           .input_offset(112)
21399           .zero_index(mz)
21400           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21401       }
21402     }
21403   }
21404 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
21405 
21406 
21407 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,c_eq_4)21408   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_eq_4) {
21409     DWConvMicrokernelTester()
21410       .cr(4)
21411       .kr(3)
21412       .channels(4)
21413       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21414   }
21415 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,c_div_4)21416   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_div_4) {
21417     for (uint32_t channels = 8; channels < 64; channels += 12) {
21418       DWConvMicrokernelTester()
21419         .cr(4)
21420         .kr(3)
21421         .channels(channels)
21422         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21423     }
21424   }
21425 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,c_div_4_with_qmin)21426   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_div_4_with_qmin) {
21427     for (uint32_t channels = 8; channels < 64; channels += 12) {
21428       DWConvMicrokernelTester()
21429         .cr(4)
21430         .kr(3)
21431         .channels(channels)
21432         .qmin(128)
21433         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21434     }
21435   }
21436 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,c_div_4_with_qmax)21437   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_div_4_with_qmax) {
21438     for (uint32_t channels = 8; channels < 64; channels += 12) {
21439       DWConvMicrokernelTester()
21440         .cr(4)
21441         .kr(3)
21442         .channels(channels)
21443         .qmax(128)
21444         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21445     }
21446   }
21447 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,c_lt_4)21448   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_lt_4) {
21449     for (uint32_t channels = 1; channels < 4; channels++) {
21450       DWConvMicrokernelTester()
21451         .cr(4)
21452         .kr(3)
21453         .channels(channels)
21454         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21455     }
21456   }
21457 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,c_gt_4)21458   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_gt_4) {
21459     for (uint32_t channels = 5; channels < 8; channels++) {
21460       DWConvMicrokernelTester()
21461         .cr(4)
21462         .kr(3)
21463         .channels(channels)
21464         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21465     }
21466   }
21467 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,c_gt_4_with_qmin)21468   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_gt_4_with_qmin) {
21469     for (uint32_t channels = 5; channels < 8; channels++) {
21470       DWConvMicrokernelTester()
21471         .cr(4)
21472         .kr(3)
21473         .channels(channels)
21474         .qmin(128)
21475         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21476     }
21477   }
21478 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,c_gt_4_with_qmax)21479   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_gt_4_with_qmax) {
21480     for (uint32_t channels = 5; channels < 8; channels++) {
21481       DWConvMicrokernelTester()
21482         .cr(4)
21483         .kr(3)
21484         .channels(channels)
21485         .qmax(128)
21486         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21487     }
21488   }
21489 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,multipixel)21490   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, multipixel) {
21491     for (size_t channels = 1; channels <= 20; channels += 3) {
21492       DWConvMicrokernelTester()
21493         .cr(4)
21494         .kr(3)
21495         .channels(channels)
21496         .width(3)
21497         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21498     }
21499   }
21500 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,multipixel_with_step)21501   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, multipixel_with_step) {
21502     for (size_t channels = 1; channels <= 20; channels += 3) {
21503       for (size_t step = 2; step <= 3; step++) {
21504         DWConvMicrokernelTester()
21505           .cr(4)
21506           .kr(3)
21507           .channels(channels)
21508           .width(3)
21509           .step(step)
21510           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21511       }
21512     }
21513   }
21514 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,multipixel_with_output_stride)21515   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
21516     for (size_t channels = 1; channels <= 20; channels += 3) {
21517       DWConvMicrokernelTester()
21518         .cr(4)
21519         .kr(3)
21520         .channels(4)
21521         .width(5)
21522         .output_stride(23)
21523         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21524     }
21525   }
21526 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,multipixel_with_qmin)21527   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
21528     for (size_t channels = 1; channels <= 20; channels += 3) {
21529       DWConvMicrokernelTester()
21530         .cr(4)
21531         .kr(3)
21532         .channels(channels)
21533         .width(3)
21534         .qmin(128)
21535         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21536     }
21537   }
21538 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,multipixel_with_qmax)21539   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
21540     for (size_t channels = 1; channels <= 20; channels += 3) {
21541       DWConvMicrokernelTester()
21542         .cr(4)
21543         .kr(3)
21544         .channels(channels)
21545         .width(3)
21546         .qmax(128)
21547         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21548     }
21549   }
21550 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,input_offset)21551   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, input_offset) {
21552     for (uint32_t channels = 8; channels < 64; channels += 12) {
21553       DWConvMicrokernelTester()
21554         .cr(4)
21555         .kr(3)
21556         .channels(channels)
21557         .input_offset(112)
21558         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21559     }
21560   }
21561 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2,zero)21562   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, zero) {
21563     for (uint32_t mz = 0; mz < 3; mz++) {
21564       for (uint32_t channels = 8; channels < 64; channels += 12) {
21565         DWConvMicrokernelTester()
21566           .cr(4)
21567           .kr(3)
21568           .channels(channels)
21569           .input_offset(112)
21570           .zero_index(mz)
21571           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
21572       }
21573     }
21574   }
21575 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
21576 
21577 
21578 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,c_eq_4)21579   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_eq_4) {
21580     DWConvMicrokernelTester()
21581       .cr(4)
21582       .kr(3)
21583       .channels(4)
21584       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21585   }
21586 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,c_div_4)21587   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_div_4) {
21588     for (uint32_t channels = 8; channels < 64; channels += 12) {
21589       DWConvMicrokernelTester()
21590         .cr(4)
21591         .kr(3)
21592         .channels(channels)
21593         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21594     }
21595   }
21596 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,c_div_4_with_qmin)21597   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_div_4_with_qmin) {
21598     for (uint32_t channels = 8; channels < 64; channels += 12) {
21599       DWConvMicrokernelTester()
21600         .cr(4)
21601         .kr(3)
21602         .channels(channels)
21603         .qmin(128)
21604         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21605     }
21606   }
21607 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,c_div_4_with_qmax)21608   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_div_4_with_qmax) {
21609     for (uint32_t channels = 8; channels < 64; channels += 12) {
21610       DWConvMicrokernelTester()
21611         .cr(4)
21612         .kr(3)
21613         .channels(channels)
21614         .qmax(128)
21615         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21616     }
21617   }
21618 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,c_lt_4)21619   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_lt_4) {
21620     for (uint32_t channels = 1; channels < 4; channels++) {
21621       DWConvMicrokernelTester()
21622         .cr(4)
21623         .kr(3)
21624         .channels(channels)
21625         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21626     }
21627   }
21628 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,c_gt_4)21629   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_gt_4) {
21630     for (uint32_t channels = 5; channels < 8; channels++) {
21631       DWConvMicrokernelTester()
21632         .cr(4)
21633         .kr(3)
21634         .channels(channels)
21635         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21636     }
21637   }
21638 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,c_gt_4_with_qmin)21639   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_gt_4_with_qmin) {
21640     for (uint32_t channels = 5; channels < 8; channels++) {
21641       DWConvMicrokernelTester()
21642         .cr(4)
21643         .kr(3)
21644         .channels(channels)
21645         .qmin(128)
21646         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21647     }
21648   }
21649 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,c_gt_4_with_qmax)21650   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_gt_4_with_qmax) {
21651     for (uint32_t channels = 5; channels < 8; channels++) {
21652       DWConvMicrokernelTester()
21653         .cr(4)
21654         .kr(3)
21655         .channels(channels)
21656         .qmax(128)
21657         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21658     }
21659   }
21660 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,multipixel)21661   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, multipixel) {
21662     for (size_t channels = 1; channels <= 20; channels += 3) {
21663       DWConvMicrokernelTester()
21664         .cr(4)
21665         .kr(3)
21666         .channels(channels)
21667         .width(3)
21668         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21669     }
21670   }
21671 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,multipixel_with_step)21672   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, multipixel_with_step) {
21673     for (size_t channels = 1; channels <= 20; channels += 3) {
21674       for (size_t step = 2; step <= 3; step++) {
21675         DWConvMicrokernelTester()
21676           .cr(4)
21677           .kr(3)
21678           .channels(channels)
21679           .width(3)
21680           .step(step)
21681           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21682       }
21683     }
21684   }
21685 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,multipixel_with_output_stride)21686   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, multipixel_with_output_stride) {
21687     for (size_t channels = 1; channels <= 20; channels += 3) {
21688       DWConvMicrokernelTester()
21689         .cr(4)
21690         .kr(3)
21691         .channels(4)
21692         .width(5)
21693         .output_stride(23)
21694         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21695     }
21696   }
21697 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,multipixel_with_qmin)21698   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, multipixel_with_qmin) {
21699     for (size_t channels = 1; channels <= 20; channels += 3) {
21700       DWConvMicrokernelTester()
21701         .cr(4)
21702         .kr(3)
21703         .channels(channels)
21704         .width(3)
21705         .qmin(128)
21706         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21707     }
21708   }
21709 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,multipixel_with_qmax)21710   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, multipixel_with_qmax) {
21711     for (size_t channels = 1; channels <= 20; channels += 3) {
21712       DWConvMicrokernelTester()
21713         .cr(4)
21714         .kr(3)
21715         .channels(channels)
21716         .width(3)
21717         .qmax(128)
21718         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21719     }
21720   }
21721 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,input_offset)21722   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, input_offset) {
21723     for (uint32_t channels = 8; channels < 64; channels += 12) {
21724       DWConvMicrokernelTester()
21725         .cr(4)
21726         .kr(3)
21727         .channels(channels)
21728         .input_offset(112)
21729         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21730     }
21731   }
21732 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86,zero)21733   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, zero) {
21734     for (uint32_t mz = 0; mz < 3; mz++) {
21735       for (uint32_t channels = 8; channels < 64; channels += 12) {
21736         DWConvMicrokernelTester()
21737           .cr(4)
21738           .kr(3)
21739           .channels(channels)
21740           .input_offset(112)
21741           .zero_index(mz)
21742           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
21743       }
21744     }
21745   }
21746 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
21747 
21748 
21749 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,c_eq_4)21750   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_eq_4) {
21751     DWConvMicrokernelTester()
21752       .cr(4)
21753       .kr(3)
21754       .channels(4)
21755       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21756   }
21757 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,c_div_4)21758   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_div_4) {
21759     for (uint32_t channels = 8; channels < 64; channels += 12) {
21760       DWConvMicrokernelTester()
21761         .cr(4)
21762         .kr(3)
21763         .channels(channels)
21764         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21765     }
21766   }
21767 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,c_div_4_with_qmin)21768   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_div_4_with_qmin) {
21769     for (uint32_t channels = 8; channels < 64; channels += 12) {
21770       DWConvMicrokernelTester()
21771         .cr(4)
21772         .kr(3)
21773         .channels(channels)
21774         .qmin(128)
21775         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21776     }
21777   }
21778 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,c_div_4_with_qmax)21779   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_div_4_with_qmax) {
21780     for (uint32_t channels = 8; channels < 64; channels += 12) {
21781       DWConvMicrokernelTester()
21782         .cr(4)
21783         .kr(3)
21784         .channels(channels)
21785         .qmax(128)
21786         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21787     }
21788   }
21789 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,c_lt_4)21790   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_lt_4) {
21791     for (uint32_t channels = 1; channels < 4; channels++) {
21792       DWConvMicrokernelTester()
21793         .cr(4)
21794         .kr(3)
21795         .channels(channels)
21796         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21797     }
21798   }
21799 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,c_gt_4)21800   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_gt_4) {
21801     for (uint32_t channels = 5; channels < 8; channels++) {
21802       DWConvMicrokernelTester()
21803         .cr(4)
21804         .kr(3)
21805         .channels(channels)
21806         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21807     }
21808   }
21809 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,c_gt_4_with_qmin)21810   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_gt_4_with_qmin) {
21811     for (uint32_t channels = 5; channels < 8; channels++) {
21812       DWConvMicrokernelTester()
21813         .cr(4)
21814         .kr(3)
21815         .channels(channels)
21816         .qmin(128)
21817         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21818     }
21819   }
21820 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,c_gt_4_with_qmax)21821   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_gt_4_with_qmax) {
21822     for (uint32_t channels = 5; channels < 8; channels++) {
21823       DWConvMicrokernelTester()
21824         .cr(4)
21825         .kr(3)
21826         .channels(channels)
21827         .qmax(128)
21828         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21829     }
21830   }
21831 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,multipixel)21832   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, multipixel) {
21833     for (size_t channels = 1; channels <= 20; channels += 3) {
21834       DWConvMicrokernelTester()
21835         .cr(4)
21836         .kr(3)
21837         .channels(channels)
21838         .width(3)
21839         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21840     }
21841   }
21842 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,multipixel_with_step)21843   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, multipixel_with_step) {
21844     for (size_t channels = 1; channels <= 20; channels += 3) {
21845       for (size_t step = 2; step <= 3; step++) {
21846         DWConvMicrokernelTester()
21847           .cr(4)
21848           .kr(3)
21849           .channels(channels)
21850           .width(3)
21851           .step(step)
21852           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21853       }
21854     }
21855   }
21856 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,multipixel_with_output_stride)21857   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
21858     for (size_t channels = 1; channels <= 20; channels += 3) {
21859       DWConvMicrokernelTester()
21860         .cr(4)
21861         .kr(3)
21862         .channels(4)
21863         .width(5)
21864         .output_stride(23)
21865         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21866     }
21867   }
21868 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,multipixel_with_qmin)21869   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
21870     for (size_t channels = 1; channels <= 20; channels += 3) {
21871       DWConvMicrokernelTester()
21872         .cr(4)
21873         .kr(3)
21874         .channels(channels)
21875         .width(3)
21876         .qmin(128)
21877         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21878     }
21879   }
21880 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,multipixel_with_qmax)21881   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
21882     for (size_t channels = 1; channels <= 20; channels += 3) {
21883       DWConvMicrokernelTester()
21884         .cr(4)
21885         .kr(3)
21886         .channels(channels)
21887         .width(3)
21888         .qmax(128)
21889         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21890     }
21891   }
21892 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,input_offset)21893   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, input_offset) {
21894     for (uint32_t channels = 8; channels < 64; channels += 12) {
21895       DWConvMicrokernelTester()
21896         .cr(4)
21897         .kr(3)
21898         .channels(channels)
21899         .input_offset(112)
21900         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21901     }
21902   }
21903 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2,zero)21904   TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, zero) {
21905     for (uint32_t mz = 0; mz < 3; mz++) {
21906       for (uint32_t channels = 8; channels < 64; channels += 12) {
21907         DWConvMicrokernelTester()
21908           .cr(4)
21909           .kr(3)
21910           .channels(channels)
21911           .input_offset(112)
21912           .zero_index(mz)
21913           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
21914       }
21915     }
21916   }
21917 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
21918 
21919 
21920 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,c_eq_4)21921   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_eq_4) {
21922     DWConvMicrokernelTester()
21923       .cr(4)
21924       .kr(4)
21925       .channels(4)
21926       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21927   }
21928 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,c_div_4)21929   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_div_4) {
21930     for (uint32_t channels = 8; channels < 64; channels += 12) {
21931       DWConvMicrokernelTester()
21932         .cr(4)
21933         .kr(4)
21934         .channels(channels)
21935         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21936     }
21937   }
21938 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,c_div_4_with_qmin)21939   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_div_4_with_qmin) {
21940     for (uint32_t channels = 8; channels < 64; channels += 12) {
21941       DWConvMicrokernelTester()
21942         .cr(4)
21943         .kr(4)
21944         .channels(channels)
21945         .qmin(128)
21946         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21947     }
21948   }
21949 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,c_div_4_with_qmax)21950   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_div_4_with_qmax) {
21951     for (uint32_t channels = 8; channels < 64; channels += 12) {
21952       DWConvMicrokernelTester()
21953         .cr(4)
21954         .kr(4)
21955         .channels(channels)
21956         .qmax(128)
21957         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21958     }
21959   }
21960 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,c_lt_4)21961   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_lt_4) {
21962     for (uint32_t channels = 1; channels < 4; channels++) {
21963       DWConvMicrokernelTester()
21964         .cr(4)
21965         .kr(4)
21966         .channels(channels)
21967         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21968     }
21969   }
21970 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,c_gt_4)21971   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_gt_4) {
21972     for (uint32_t channels = 5; channels < 8; channels++) {
21973       DWConvMicrokernelTester()
21974         .cr(4)
21975         .kr(4)
21976         .channels(channels)
21977         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21978     }
21979   }
21980 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,c_gt_4_with_qmin)21981   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_gt_4_with_qmin) {
21982     for (uint32_t channels = 5; channels < 8; channels++) {
21983       DWConvMicrokernelTester()
21984         .cr(4)
21985         .kr(4)
21986         .channels(channels)
21987         .qmin(128)
21988         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
21989     }
21990   }
21991 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,c_gt_4_with_qmax)21992   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_gt_4_with_qmax) {
21993     for (uint32_t channels = 5; channels < 8; channels++) {
21994       DWConvMicrokernelTester()
21995         .cr(4)
21996         .kr(4)
21997         .channels(channels)
21998         .qmax(128)
21999         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22000     }
22001   }
22002 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,multipixel)22003   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel) {
22004     for (size_t channels = 1; channels <= 20; channels += 3) {
22005       DWConvMicrokernelTester()
22006         .cr(4)
22007         .kr(4)
22008         .channels(channels)
22009         .width(3)
22010         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22011     }
22012   }
22013 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,multipixel_with_step)22014   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_step) {
22015     for (size_t channels = 1; channels <= 20; channels += 3) {
22016       for (size_t step = 2; step <= 4; step++) {
22017         DWConvMicrokernelTester()
22018           .cr(4)
22019           .kr(4)
22020           .channels(channels)
22021           .width(3)
22022           .step(step)
22023           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22024       }
22025     }
22026   }
22027 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,multipixel_with_output_stride)22028   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_output_stride) {
22029     for (size_t channels = 1; channels <= 20; channels += 3) {
22030       DWConvMicrokernelTester()
22031         .cr(4)
22032         .kr(4)
22033         .channels(4)
22034         .width(5)
22035         .output_stride(23)
22036         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22037     }
22038   }
22039 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,multipixel_with_qmin)22040   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_qmin) {
22041     for (size_t channels = 1; channels <= 20; channels += 3) {
22042       DWConvMicrokernelTester()
22043         .cr(4)
22044         .kr(4)
22045         .channels(channels)
22046         .width(3)
22047         .qmin(128)
22048         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22049     }
22050   }
22051 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,multipixel_with_qmax)22052   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_qmax) {
22053     for (size_t channels = 1; channels <= 20; channels += 3) {
22054       DWConvMicrokernelTester()
22055         .cr(4)
22056         .kr(4)
22057         .channels(channels)
22058         .width(3)
22059         .qmax(128)
22060         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22061     }
22062   }
22063 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,input_offset)22064   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, input_offset) {
22065     for (uint32_t channels = 8; channels < 64; channels += 12) {
22066       DWConvMicrokernelTester()
22067         .cr(4)
22068         .kr(4)
22069         .channels(channels)
22070         .input_offset(112)
22071         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22072     }
22073   }
22074 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM,zero)22075   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, zero) {
22076     for (uint32_t mz = 0; mz < 4; mz++) {
22077       for (uint32_t channels = 8; channels < 64; channels += 12) {
22078         DWConvMicrokernelTester()
22079           .cr(4)
22080           .kr(4)
22081           .channels(channels)
22082           .input_offset(112)
22083           .zero_index(mz)
22084           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22085       }
22086     }
22087   }
22088 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22089 
22090 
22091 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,c_eq_4)22092   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_eq_4) {
22093     DWConvMicrokernelTester()
22094       .cr(4)
22095       .kr(4)
22096       .channels(4)
22097       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22098   }
22099 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,c_div_4)22100   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_div_4) {
22101     for (uint32_t channels = 8; channels < 64; channels += 12) {
22102       DWConvMicrokernelTester()
22103         .cr(4)
22104         .kr(4)
22105         .channels(channels)
22106         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22107     }
22108   }
22109 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,c_div_4_with_qmin)22110   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_div_4_with_qmin) {
22111     for (uint32_t channels = 8; channels < 64; channels += 12) {
22112       DWConvMicrokernelTester()
22113         .cr(4)
22114         .kr(4)
22115         .channels(channels)
22116         .qmin(128)
22117         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22118     }
22119   }
22120 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,c_div_4_with_qmax)22121   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_div_4_with_qmax) {
22122     for (uint32_t channels = 8; channels < 64; channels += 12) {
22123       DWConvMicrokernelTester()
22124         .cr(4)
22125         .kr(4)
22126         .channels(channels)
22127         .qmax(128)
22128         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22129     }
22130   }
22131 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,c_lt_4)22132   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_lt_4) {
22133     for (uint32_t channels = 1; channels < 4; channels++) {
22134       DWConvMicrokernelTester()
22135         .cr(4)
22136         .kr(4)
22137         .channels(channels)
22138         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22139     }
22140   }
22141 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,c_gt_4)22142   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_gt_4) {
22143     for (uint32_t channels = 5; channels < 8; channels++) {
22144       DWConvMicrokernelTester()
22145         .cr(4)
22146         .kr(4)
22147         .channels(channels)
22148         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22149     }
22150   }
22151 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,c_gt_4_with_qmin)22152   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_gt_4_with_qmin) {
22153     for (uint32_t channels = 5; channels < 8; channels++) {
22154       DWConvMicrokernelTester()
22155         .cr(4)
22156         .kr(4)
22157         .channels(channels)
22158         .qmin(128)
22159         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22160     }
22161   }
22162 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,c_gt_4_with_qmax)22163   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_gt_4_with_qmax) {
22164     for (uint32_t channels = 5; channels < 8; channels++) {
22165       DWConvMicrokernelTester()
22166         .cr(4)
22167         .kr(4)
22168         .channels(channels)
22169         .qmax(128)
22170         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22171     }
22172   }
22173 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,multipixel)22174   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, multipixel) {
22175     for (size_t channels = 1; channels <= 20; channels += 3) {
22176       DWConvMicrokernelTester()
22177         .cr(4)
22178         .kr(4)
22179         .channels(channels)
22180         .width(3)
22181         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22182     }
22183   }
22184 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,multipixel_with_step)22185   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, multipixel_with_step) {
22186     for (size_t channels = 1; channels <= 20; channels += 3) {
22187       for (size_t step = 2; step <= 4; step++) {
22188         DWConvMicrokernelTester()
22189           .cr(4)
22190           .kr(4)
22191           .channels(channels)
22192           .width(3)
22193           .step(step)
22194           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22195       }
22196     }
22197   }
22198 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,multipixel_with_output_stride)22199   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
22200     for (size_t channels = 1; channels <= 20; channels += 3) {
22201       DWConvMicrokernelTester()
22202         .cr(4)
22203         .kr(4)
22204         .channels(4)
22205         .width(5)
22206         .output_stride(23)
22207         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22208     }
22209   }
22210 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,multipixel_with_qmin)22211   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
22212     for (size_t channels = 1; channels <= 20; channels += 3) {
22213       DWConvMicrokernelTester()
22214         .cr(4)
22215         .kr(4)
22216         .channels(channels)
22217         .width(3)
22218         .qmin(128)
22219         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22220     }
22221   }
22222 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,multipixel_with_qmax)22223   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
22224     for (size_t channels = 1; channels <= 20; channels += 3) {
22225       DWConvMicrokernelTester()
22226         .cr(4)
22227         .kr(4)
22228         .channels(channels)
22229         .width(3)
22230         .qmax(128)
22231         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22232     }
22233   }
22234 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,input_offset)22235   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, input_offset) {
22236     for (uint32_t channels = 8; channels < 64; channels += 12) {
22237       DWConvMicrokernelTester()
22238         .cr(4)
22239         .kr(4)
22240         .channels(channels)
22241         .input_offset(112)
22242         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22243     }
22244   }
22245 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2,zero)22246   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, zero) {
22247     for (uint32_t mz = 0; mz < 4; mz++) {
22248       for (uint32_t channels = 8; channels < 64; channels += 12) {
22249         DWConvMicrokernelTester()
22250           .cr(4)
22251           .kr(4)
22252           .channels(channels)
22253           .input_offset(112)
22254           .zero_index(mz)
22255           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22256       }
22257     }
22258   }
22259 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22260 
22261 
22262 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,c_eq_4)22263   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_eq_4) {
22264     DWConvMicrokernelTester()
22265       .cr(4)
22266       .kr(4)
22267       .channels(4)
22268       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22269   }
22270 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,c_div_4)22271   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_div_4) {
22272     for (uint32_t channels = 8; channels < 64; channels += 12) {
22273       DWConvMicrokernelTester()
22274         .cr(4)
22275         .kr(4)
22276         .channels(channels)
22277         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22278     }
22279   }
22280 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,c_div_4_with_qmin)22281   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_div_4_with_qmin) {
22282     for (uint32_t channels = 8; channels < 64; channels += 12) {
22283       DWConvMicrokernelTester()
22284         .cr(4)
22285         .kr(4)
22286         .channels(channels)
22287         .qmin(128)
22288         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22289     }
22290   }
22291 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,c_div_4_with_qmax)22292   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_div_4_with_qmax) {
22293     for (uint32_t channels = 8; channels < 64; channels += 12) {
22294       DWConvMicrokernelTester()
22295         .cr(4)
22296         .kr(4)
22297         .channels(channels)
22298         .qmax(128)
22299         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22300     }
22301   }
22302 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,c_lt_4)22303   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_lt_4) {
22304     for (uint32_t channels = 1; channels < 4; channels++) {
22305       DWConvMicrokernelTester()
22306         .cr(4)
22307         .kr(4)
22308         .channels(channels)
22309         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22310     }
22311   }
22312 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,c_gt_4)22313   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_gt_4) {
22314     for (uint32_t channels = 5; channels < 8; channels++) {
22315       DWConvMicrokernelTester()
22316         .cr(4)
22317         .kr(4)
22318         .channels(channels)
22319         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22320     }
22321   }
22322 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,c_gt_4_with_qmin)22323   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_gt_4_with_qmin) {
22324     for (uint32_t channels = 5; channels < 8; channels++) {
22325       DWConvMicrokernelTester()
22326         .cr(4)
22327         .kr(4)
22328         .channels(channels)
22329         .qmin(128)
22330         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22331     }
22332   }
22333 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,c_gt_4_with_qmax)22334   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_gt_4_with_qmax) {
22335     for (uint32_t channels = 5; channels < 8; channels++) {
22336       DWConvMicrokernelTester()
22337         .cr(4)
22338         .kr(4)
22339         .channels(channels)
22340         .qmax(128)
22341         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22342     }
22343   }
22344 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,multipixel)22345   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel) {
22346     for (size_t channels = 1; channels <= 20; channels += 3) {
22347       DWConvMicrokernelTester()
22348         .cr(4)
22349         .kr(4)
22350         .channels(channels)
22351         .width(3)
22352         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22353     }
22354   }
22355 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,multipixel_with_step)22356   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_step) {
22357     for (size_t channels = 1; channels <= 20; channels += 3) {
22358       for (size_t step = 2; step <= 4; step++) {
22359         DWConvMicrokernelTester()
22360           .cr(4)
22361           .kr(4)
22362           .channels(channels)
22363           .width(3)
22364           .step(step)
22365           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22366       }
22367     }
22368   }
22369 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,multipixel_with_output_stride)22370   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_output_stride) {
22371     for (size_t channels = 1; channels <= 20; channels += 3) {
22372       DWConvMicrokernelTester()
22373         .cr(4)
22374         .kr(4)
22375         .channels(4)
22376         .width(5)
22377         .output_stride(23)
22378         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22379     }
22380   }
22381 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,multipixel_with_qmin)22382   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_qmin) {
22383     for (size_t channels = 1; channels <= 20; channels += 3) {
22384       DWConvMicrokernelTester()
22385         .cr(4)
22386         .kr(4)
22387         .channels(channels)
22388         .width(3)
22389         .qmin(128)
22390         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22391     }
22392   }
22393 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,multipixel_with_qmax)22394   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_qmax) {
22395     for (size_t channels = 1; channels <= 20; channels += 3) {
22396       DWConvMicrokernelTester()
22397         .cr(4)
22398         .kr(4)
22399         .channels(channels)
22400         .width(3)
22401         .qmax(128)
22402         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22403     }
22404   }
22405 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,input_offset)22406   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, input_offset) {
22407     for (uint32_t channels = 8; channels < 64; channels += 12) {
22408       DWConvMicrokernelTester()
22409         .cr(4)
22410         .kr(4)
22411         .channels(channels)
22412         .input_offset(112)
22413         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22414     }
22415   }
22416 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86,zero)22417   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, zero) {
22418     for (uint32_t mz = 0; mz < 4; mz++) {
22419       for (uint32_t channels = 8; channels < 64; channels += 12) {
22420         DWConvMicrokernelTester()
22421           .cr(4)
22422           .kr(4)
22423           .channels(channels)
22424           .input_offset(112)
22425           .zero_index(mz)
22426           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22427       }
22428     }
22429   }
22430 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22431 
22432 
22433 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,c_eq_4)22434   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_eq_4) {
22435     DWConvMicrokernelTester()
22436       .cr(4)
22437       .kr(4)
22438       .channels(4)
22439       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22440   }
22441 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,c_div_4)22442   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_div_4) {
22443     for (uint32_t channels = 8; channels < 64; channels += 12) {
22444       DWConvMicrokernelTester()
22445         .cr(4)
22446         .kr(4)
22447         .channels(channels)
22448         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22449     }
22450   }
22451 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,c_div_4_with_qmin)22452   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_div_4_with_qmin) {
22453     for (uint32_t channels = 8; channels < 64; channels += 12) {
22454       DWConvMicrokernelTester()
22455         .cr(4)
22456         .kr(4)
22457         .channels(channels)
22458         .qmin(128)
22459         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22460     }
22461   }
22462 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,c_div_4_with_qmax)22463   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_div_4_with_qmax) {
22464     for (uint32_t channels = 8; channels < 64; channels += 12) {
22465       DWConvMicrokernelTester()
22466         .cr(4)
22467         .kr(4)
22468         .channels(channels)
22469         .qmax(128)
22470         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22471     }
22472   }
22473 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,c_lt_4)22474   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_lt_4) {
22475     for (uint32_t channels = 1; channels < 4; channels++) {
22476       DWConvMicrokernelTester()
22477         .cr(4)
22478         .kr(4)
22479         .channels(channels)
22480         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22481     }
22482   }
22483 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,c_gt_4)22484   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_gt_4) {
22485     for (uint32_t channels = 5; channels < 8; channels++) {
22486       DWConvMicrokernelTester()
22487         .cr(4)
22488         .kr(4)
22489         .channels(channels)
22490         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22491     }
22492   }
22493 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,c_gt_4_with_qmin)22494   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_gt_4_with_qmin) {
22495     for (uint32_t channels = 5; channels < 8; channels++) {
22496       DWConvMicrokernelTester()
22497         .cr(4)
22498         .kr(4)
22499         .channels(channels)
22500         .qmin(128)
22501         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22502     }
22503   }
22504 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,c_gt_4_with_qmax)22505   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_gt_4_with_qmax) {
22506     for (uint32_t channels = 5; channels < 8; channels++) {
22507       DWConvMicrokernelTester()
22508         .cr(4)
22509         .kr(4)
22510         .channels(channels)
22511         .qmax(128)
22512         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22513     }
22514   }
22515 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,multipixel)22516   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, multipixel) {
22517     for (size_t channels = 1; channels <= 20; channels += 3) {
22518       DWConvMicrokernelTester()
22519         .cr(4)
22520         .kr(4)
22521         .channels(channels)
22522         .width(3)
22523         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22524     }
22525   }
22526 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,multipixel_with_step)22527   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, multipixel_with_step) {
22528     for (size_t channels = 1; channels <= 20; channels += 3) {
22529       for (size_t step = 2; step <= 4; step++) {
22530         DWConvMicrokernelTester()
22531           .cr(4)
22532           .kr(4)
22533           .channels(channels)
22534           .width(3)
22535           .step(step)
22536           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22537       }
22538     }
22539   }
22540 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,multipixel_with_output_stride)22541   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
22542     for (size_t channels = 1; channels <= 20; channels += 3) {
22543       DWConvMicrokernelTester()
22544         .cr(4)
22545         .kr(4)
22546         .channels(4)
22547         .width(5)
22548         .output_stride(23)
22549         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22550     }
22551   }
22552 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,multipixel_with_qmin)22553   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
22554     for (size_t channels = 1; channels <= 20; channels += 3) {
22555       DWConvMicrokernelTester()
22556         .cr(4)
22557         .kr(4)
22558         .channels(channels)
22559         .width(3)
22560         .qmin(128)
22561         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22562     }
22563   }
22564 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,multipixel_with_qmax)22565   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
22566     for (size_t channels = 1; channels <= 20; channels += 3) {
22567       DWConvMicrokernelTester()
22568         .cr(4)
22569         .kr(4)
22570         .channels(channels)
22571         .width(3)
22572         .qmax(128)
22573         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22574     }
22575   }
22576 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,input_offset)22577   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, input_offset) {
22578     for (uint32_t channels = 8; channels < 64; channels += 12) {
22579       DWConvMicrokernelTester()
22580         .cr(4)
22581         .kr(4)
22582         .channels(channels)
22583         .input_offset(112)
22584         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22585     }
22586   }
22587 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2,zero)22588   TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, zero) {
22589     for (uint32_t mz = 0; mz < 4; mz++) {
22590       for (uint32_t channels = 8; channels < 64; channels += 12) {
22591         DWConvMicrokernelTester()
22592           .cr(4)
22593           .kr(4)
22594           .channels(channels)
22595           .input_offset(112)
22596           .zero_index(mz)
22597           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
22598       }
22599     }
22600   }
22601 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22602 
22603 
22604 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,c_eq_4)22605   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_eq_4) {
22606     DWConvMicrokernelTester()
22607       .cr(4)
22608       .kr(9)
22609       .channels(4)
22610       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22611   }
22612 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,c_div_4)22613   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_div_4) {
22614     for (uint32_t channels = 8; channels < 64; channels += 12) {
22615       DWConvMicrokernelTester()
22616         .cr(4)
22617         .kr(9)
22618         .channels(channels)
22619         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22620     }
22621   }
22622 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,c_div_4_with_qmin)22623   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_div_4_with_qmin) {
22624     for (uint32_t channels = 8; channels < 64; channels += 12) {
22625       DWConvMicrokernelTester()
22626         .cr(4)
22627         .kr(9)
22628         .channels(channels)
22629         .qmin(128)
22630         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22631     }
22632   }
22633 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,c_div_4_with_qmax)22634   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_div_4_with_qmax) {
22635     for (uint32_t channels = 8; channels < 64; channels += 12) {
22636       DWConvMicrokernelTester()
22637         .cr(4)
22638         .kr(9)
22639         .channels(channels)
22640         .qmax(128)
22641         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22642     }
22643   }
22644 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,c_lt_4)22645   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_lt_4) {
22646     for (uint32_t channels = 1; channels < 4; channels++) {
22647       DWConvMicrokernelTester()
22648         .cr(4)
22649         .kr(9)
22650         .channels(channels)
22651         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22652     }
22653   }
22654 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,c_gt_4)22655   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_gt_4) {
22656     for (uint32_t channels = 5; channels < 8; channels++) {
22657       DWConvMicrokernelTester()
22658         .cr(4)
22659         .kr(9)
22660         .channels(channels)
22661         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22662     }
22663   }
22664 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,c_gt_4_with_qmin)22665   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_gt_4_with_qmin) {
22666     for (uint32_t channels = 5; channels < 8; channels++) {
22667       DWConvMicrokernelTester()
22668         .cr(4)
22669         .kr(9)
22670         .channels(channels)
22671         .qmin(128)
22672         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22673     }
22674   }
22675 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,c_gt_4_with_qmax)22676   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_gt_4_with_qmax) {
22677     for (uint32_t channels = 5; channels < 8; channels++) {
22678       DWConvMicrokernelTester()
22679         .cr(4)
22680         .kr(9)
22681         .channels(channels)
22682         .qmax(128)
22683         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22684     }
22685   }
22686 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,multipixel)22687   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel) {
22688     for (size_t channels = 1; channels <= 20; channels += 3) {
22689       DWConvMicrokernelTester()
22690         .cr(4)
22691         .kr(9)
22692         .channels(channels)
22693         .width(3)
22694         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22695     }
22696   }
22697 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,multipixel_with_step)22698   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel_with_step) {
22699     for (size_t channels = 1; channels <= 20; channels += 3) {
22700       for (size_t step = 2; step <= 9; step++) {
22701         DWConvMicrokernelTester()
22702           .cr(4)
22703           .kr(9)
22704           .channels(channels)
22705           .width(3)
22706           .step(step)
22707           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22708       }
22709     }
22710   }
22711 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,multipixel_with_output_stride)22712   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel_with_output_stride) {
22713     for (size_t channels = 1; channels <= 20; channels += 3) {
22714       DWConvMicrokernelTester()
22715         .cr(4)
22716         .kr(9)
22717         .channels(4)
22718         .width(5)
22719         .output_stride(23)
22720         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22721     }
22722   }
22723 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,multipixel_with_qmin)22724   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel_with_qmin) {
22725     for (size_t channels = 1; channels <= 20; channels += 3) {
22726       DWConvMicrokernelTester()
22727         .cr(4)
22728         .kr(9)
22729         .channels(channels)
22730         .width(3)
22731         .qmin(128)
22732         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22733     }
22734   }
22735 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,multipixel_with_qmax)22736   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel_with_qmax) {
22737     for (size_t channels = 1; channels <= 20; channels += 3) {
22738       DWConvMicrokernelTester()
22739         .cr(4)
22740         .kr(9)
22741         .channels(channels)
22742         .width(3)
22743         .qmax(128)
22744         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22745     }
22746   }
22747 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,input_offset)22748   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, input_offset) {
22749     for (uint32_t channels = 8; channels < 64; channels += 12) {
22750       DWConvMicrokernelTester()
22751         .cr(4)
22752         .kr(9)
22753         .channels(channels)
22754         .input_offset(112)
22755         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22756     }
22757   }
22758 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM,zero)22759   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, zero) {
22760     for (uint32_t mz = 0; mz < 9; mz++) {
22761       for (uint32_t channels = 8; channels < 64; channels += 12) {
22762         DWConvMicrokernelTester()
22763           .cr(4)
22764           .kr(9)
22765           .channels(channels)
22766           .input_offset(112)
22767           .zero_index(mz)
22768           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
22769       }
22770     }
22771   }
22772 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22773 
22774 
22775 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,c_eq_4)22776   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_eq_4) {
22777     DWConvMicrokernelTester()
22778       .cr(4)
22779       .kr(9)
22780       .channels(4)
22781       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22782   }
22783 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,c_div_4)22784   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_div_4) {
22785     for (uint32_t channels = 8; channels < 64; channels += 12) {
22786       DWConvMicrokernelTester()
22787         .cr(4)
22788         .kr(9)
22789         .channels(channels)
22790         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22791     }
22792   }
22793 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,c_div_4_with_qmin)22794   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_div_4_with_qmin) {
22795     for (uint32_t channels = 8; channels < 64; channels += 12) {
22796       DWConvMicrokernelTester()
22797         .cr(4)
22798         .kr(9)
22799         .channels(channels)
22800         .qmin(128)
22801         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22802     }
22803   }
22804 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,c_div_4_with_qmax)22805   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_div_4_with_qmax) {
22806     for (uint32_t channels = 8; channels < 64; channels += 12) {
22807       DWConvMicrokernelTester()
22808         .cr(4)
22809         .kr(9)
22810         .channels(channels)
22811         .qmax(128)
22812         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22813     }
22814   }
22815 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,c_lt_4)22816   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_lt_4) {
22817     for (uint32_t channels = 1; channels < 4; channels++) {
22818       DWConvMicrokernelTester()
22819         .cr(4)
22820         .kr(9)
22821         .channels(channels)
22822         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22823     }
22824   }
22825 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,c_gt_4)22826   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_gt_4) {
22827     for (uint32_t channels = 5; channels < 8; channels++) {
22828       DWConvMicrokernelTester()
22829         .cr(4)
22830         .kr(9)
22831         .channels(channels)
22832         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22833     }
22834   }
22835 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,c_gt_4_with_qmin)22836   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_gt_4_with_qmin) {
22837     for (uint32_t channels = 5; channels < 8; channels++) {
22838       DWConvMicrokernelTester()
22839         .cr(4)
22840         .kr(9)
22841         .channels(channels)
22842         .qmin(128)
22843         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22844     }
22845   }
22846 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,c_gt_4_with_qmax)22847   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_gt_4_with_qmax) {
22848     for (uint32_t channels = 5; channels < 8; channels++) {
22849       DWConvMicrokernelTester()
22850         .cr(4)
22851         .kr(9)
22852         .channels(channels)
22853         .qmax(128)
22854         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22855     }
22856   }
22857 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,multipixel)22858   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, multipixel) {
22859     for (size_t channels = 1; channels <= 20; channels += 3) {
22860       DWConvMicrokernelTester()
22861         .cr(4)
22862         .kr(9)
22863         .channels(channels)
22864         .width(3)
22865         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22866     }
22867   }
22868 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,multipixel_with_step)22869   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, multipixel_with_step) {
22870     for (size_t channels = 1; channels <= 20; channels += 3) {
22871       for (size_t step = 2; step <= 9; step++) {
22872         DWConvMicrokernelTester()
22873           .cr(4)
22874           .kr(9)
22875           .channels(channels)
22876           .width(3)
22877           .step(step)
22878           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22879       }
22880     }
22881   }
22882 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,multipixel_with_output_stride)22883   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
22884     for (size_t channels = 1; channels <= 20; channels += 3) {
22885       DWConvMicrokernelTester()
22886         .cr(4)
22887         .kr(9)
22888         .channels(4)
22889         .width(5)
22890         .output_stride(23)
22891         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22892     }
22893   }
22894 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,multipixel_with_qmin)22895   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
22896     for (size_t channels = 1; channels <= 20; channels += 3) {
22897       DWConvMicrokernelTester()
22898         .cr(4)
22899         .kr(9)
22900         .channels(channels)
22901         .width(3)
22902         .qmin(128)
22903         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22904     }
22905   }
22906 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,multipixel_with_qmax)22907   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
22908     for (size_t channels = 1; channels <= 20; channels += 3) {
22909       DWConvMicrokernelTester()
22910         .cr(4)
22911         .kr(9)
22912         .channels(channels)
22913         .width(3)
22914         .qmax(128)
22915         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22916     }
22917   }
22918 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,input_offset)22919   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, input_offset) {
22920     for (uint32_t channels = 8; channels < 64; channels += 12) {
22921       DWConvMicrokernelTester()
22922         .cr(4)
22923         .kr(9)
22924         .channels(channels)
22925         .input_offset(112)
22926         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22927     }
22928   }
22929 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2,zero)22930   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, zero) {
22931     for (uint32_t mz = 0; mz < 9; mz++) {
22932       for (uint32_t channels = 8; channels < 64; channels += 12) {
22933         DWConvMicrokernelTester()
22934           .cr(4)
22935           .kr(9)
22936           .channels(channels)
22937           .input_offset(112)
22938           .zero_index(mz)
22939           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
22940       }
22941     }
22942   }
22943 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
22944 
22945 
22946 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,c_eq_4)22947   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_eq_4) {
22948     DWConvMicrokernelTester()
22949       .cr(4)
22950       .kr(9)
22951       .channels(4)
22952       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22953   }
22954 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,c_div_4)22955   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_div_4) {
22956     for (uint32_t channels = 8; channels < 64; channels += 12) {
22957       DWConvMicrokernelTester()
22958         .cr(4)
22959         .kr(9)
22960         .channels(channels)
22961         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22962     }
22963   }
22964 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,c_div_4_with_qmin)22965   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_div_4_with_qmin) {
22966     for (uint32_t channels = 8; channels < 64; channels += 12) {
22967       DWConvMicrokernelTester()
22968         .cr(4)
22969         .kr(9)
22970         .channels(channels)
22971         .qmin(128)
22972         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22973     }
22974   }
22975 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,c_div_4_with_qmax)22976   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_div_4_with_qmax) {
22977     for (uint32_t channels = 8; channels < 64; channels += 12) {
22978       DWConvMicrokernelTester()
22979         .cr(4)
22980         .kr(9)
22981         .channels(channels)
22982         .qmax(128)
22983         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22984     }
22985   }
22986 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,c_lt_4)22987   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_lt_4) {
22988     for (uint32_t channels = 1; channels < 4; channels++) {
22989       DWConvMicrokernelTester()
22990         .cr(4)
22991         .kr(9)
22992         .channels(channels)
22993         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
22994     }
22995   }
22996 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,c_gt_4)22997   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_gt_4) {
22998     for (uint32_t channels = 5; channels < 8; channels++) {
22999       DWConvMicrokernelTester()
23000         .cr(4)
23001         .kr(9)
23002         .channels(channels)
23003         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23004     }
23005   }
23006 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,c_gt_4_with_qmin)23007   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_gt_4_with_qmin) {
23008     for (uint32_t channels = 5; channels < 8; channels++) {
23009       DWConvMicrokernelTester()
23010         .cr(4)
23011         .kr(9)
23012         .channels(channels)
23013         .qmin(128)
23014         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23015     }
23016   }
23017 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,c_gt_4_with_qmax)23018   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_gt_4_with_qmax) {
23019     for (uint32_t channels = 5; channels < 8; channels++) {
23020       DWConvMicrokernelTester()
23021         .cr(4)
23022         .kr(9)
23023         .channels(channels)
23024         .qmax(128)
23025         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23026     }
23027   }
23028 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,multipixel)23029   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel) {
23030     for (size_t channels = 1; channels <= 20; channels += 3) {
23031       DWConvMicrokernelTester()
23032         .cr(4)
23033         .kr(9)
23034         .channels(channels)
23035         .width(3)
23036         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23037     }
23038   }
23039 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,multipixel_with_step)23040   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_step) {
23041     for (size_t channels = 1; channels <= 20; channels += 3) {
23042       for (size_t step = 2; step <= 9; step++) {
23043         DWConvMicrokernelTester()
23044           .cr(4)
23045           .kr(9)
23046           .channels(channels)
23047           .width(3)
23048           .step(step)
23049           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23050       }
23051     }
23052   }
23053 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,multipixel_with_output_stride)23054   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_output_stride) {
23055     for (size_t channels = 1; channels <= 20; channels += 3) {
23056       DWConvMicrokernelTester()
23057         .cr(4)
23058         .kr(9)
23059         .channels(4)
23060         .width(5)
23061         .output_stride(23)
23062         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23063     }
23064   }
23065 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,multipixel_with_qmin)23066   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_qmin) {
23067     for (size_t channels = 1; channels <= 20; channels += 3) {
23068       DWConvMicrokernelTester()
23069         .cr(4)
23070         .kr(9)
23071         .channels(channels)
23072         .width(3)
23073         .qmin(128)
23074         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23075     }
23076   }
23077 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,multipixel_with_qmax)23078   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_qmax) {
23079     for (size_t channels = 1; channels <= 20; channels += 3) {
23080       DWConvMicrokernelTester()
23081         .cr(4)
23082         .kr(9)
23083         .channels(channels)
23084         .width(3)
23085         .qmax(128)
23086         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23087     }
23088   }
23089 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,input_offset)23090   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, input_offset) {
23091     for (uint32_t channels = 8; channels < 64; channels += 12) {
23092       DWConvMicrokernelTester()
23093         .cr(4)
23094         .kr(9)
23095         .channels(channels)
23096         .input_offset(112)
23097         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23098     }
23099   }
23100 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86,zero)23101   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, zero) {
23102     for (uint32_t mz = 0; mz < 9; mz++) {
23103       for (uint32_t channels = 8; channels < 64; channels += 12) {
23104         DWConvMicrokernelTester()
23105           .cr(4)
23106           .kr(9)
23107           .channels(channels)
23108           .input_offset(112)
23109           .zero_index(mz)
23110           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23111       }
23112     }
23113   }
23114 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23115 
23116 
23117 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,c_eq_4)23118   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_eq_4) {
23119     DWConvMicrokernelTester()
23120       .cr(4)
23121       .kr(9)
23122       .channels(4)
23123       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23124   }
23125 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,c_div_4)23126   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_div_4) {
23127     for (uint32_t channels = 8; channels < 64; channels += 12) {
23128       DWConvMicrokernelTester()
23129         .cr(4)
23130         .kr(9)
23131         .channels(channels)
23132         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23133     }
23134   }
23135 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,c_div_4_with_qmin)23136   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_div_4_with_qmin) {
23137     for (uint32_t channels = 8; channels < 64; channels += 12) {
23138       DWConvMicrokernelTester()
23139         .cr(4)
23140         .kr(9)
23141         .channels(channels)
23142         .qmin(128)
23143         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23144     }
23145   }
23146 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,c_div_4_with_qmax)23147   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_div_4_with_qmax) {
23148     for (uint32_t channels = 8; channels < 64; channels += 12) {
23149       DWConvMicrokernelTester()
23150         .cr(4)
23151         .kr(9)
23152         .channels(channels)
23153         .qmax(128)
23154         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23155     }
23156   }
23157 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,c_lt_4)23158   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_lt_4) {
23159     for (uint32_t channels = 1; channels < 4; channels++) {
23160       DWConvMicrokernelTester()
23161         .cr(4)
23162         .kr(9)
23163         .channels(channels)
23164         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23165     }
23166   }
23167 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,c_gt_4)23168   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_gt_4) {
23169     for (uint32_t channels = 5; channels < 8; channels++) {
23170       DWConvMicrokernelTester()
23171         .cr(4)
23172         .kr(9)
23173         .channels(channels)
23174         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23175     }
23176   }
23177 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,c_gt_4_with_qmin)23178   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_gt_4_with_qmin) {
23179     for (uint32_t channels = 5; channels < 8; channels++) {
23180       DWConvMicrokernelTester()
23181         .cr(4)
23182         .kr(9)
23183         .channels(channels)
23184         .qmin(128)
23185         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23186     }
23187   }
23188 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,c_gt_4_with_qmax)23189   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_gt_4_with_qmax) {
23190     for (uint32_t channels = 5; channels < 8; channels++) {
23191       DWConvMicrokernelTester()
23192         .cr(4)
23193         .kr(9)
23194         .channels(channels)
23195         .qmax(128)
23196         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23197     }
23198   }
23199 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,multipixel)23200   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, multipixel) {
23201     for (size_t channels = 1; channels <= 20; channels += 3) {
23202       DWConvMicrokernelTester()
23203         .cr(4)
23204         .kr(9)
23205         .channels(channels)
23206         .width(3)
23207         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23208     }
23209   }
23210 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,multipixel_with_step)23211   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, multipixel_with_step) {
23212     for (size_t channels = 1; channels <= 20; channels += 3) {
23213       for (size_t step = 2; step <= 9; step++) {
23214         DWConvMicrokernelTester()
23215           .cr(4)
23216           .kr(9)
23217           .channels(channels)
23218           .width(3)
23219           .step(step)
23220           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23221       }
23222     }
23223   }
23224 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,multipixel_with_output_stride)23225   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
23226     for (size_t channels = 1; channels <= 20; channels += 3) {
23227       DWConvMicrokernelTester()
23228         .cr(4)
23229         .kr(9)
23230         .channels(4)
23231         .width(5)
23232         .output_stride(23)
23233         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23234     }
23235   }
23236 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,multipixel_with_qmin)23237   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
23238     for (size_t channels = 1; channels <= 20; channels += 3) {
23239       DWConvMicrokernelTester()
23240         .cr(4)
23241         .kr(9)
23242         .channels(channels)
23243         .width(3)
23244         .qmin(128)
23245         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23246     }
23247   }
23248 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,multipixel_with_qmax)23249   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
23250     for (size_t channels = 1; channels <= 20; channels += 3) {
23251       DWConvMicrokernelTester()
23252         .cr(4)
23253         .kr(9)
23254         .channels(channels)
23255         .width(3)
23256         .qmax(128)
23257         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23258     }
23259   }
23260 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,input_offset)23261   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, input_offset) {
23262     for (uint32_t channels = 8; channels < 64; channels += 12) {
23263       DWConvMicrokernelTester()
23264         .cr(4)
23265         .kr(9)
23266         .channels(channels)
23267         .input_offset(112)
23268         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23269     }
23270   }
23271 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2,zero)23272   TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, zero) {
23273     for (uint32_t mz = 0; mz < 9; mz++) {
23274       for (uint32_t channels = 8; channels < 64; channels += 12) {
23275         DWConvMicrokernelTester()
23276           .cr(4)
23277           .kr(9)
23278           .channels(channels)
23279           .input_offset(112)
23280           .zero_index(mz)
23281           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23282       }
23283     }
23284   }
23285 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23286 
23287 
23288 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,c_eq_4)23289   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_eq_4) {
23290     DWConvMicrokernelTester()
23291       .cr(4)
23292       .kr(25)
23293       .channels(4)
23294       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23295   }
23296 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,c_div_4)23297   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_div_4) {
23298     for (uint32_t channels = 8; channels < 64; channels += 12) {
23299       DWConvMicrokernelTester()
23300         .cr(4)
23301         .kr(25)
23302         .channels(channels)
23303         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23304     }
23305   }
23306 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,c_div_4_with_qmin)23307   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_div_4_with_qmin) {
23308     for (uint32_t channels = 8; channels < 64; channels += 12) {
23309       DWConvMicrokernelTester()
23310         .cr(4)
23311         .kr(25)
23312         .channels(channels)
23313         .qmin(128)
23314         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23315     }
23316   }
23317 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,c_div_4_with_qmax)23318   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_div_4_with_qmax) {
23319     for (uint32_t channels = 8; channels < 64; channels += 12) {
23320       DWConvMicrokernelTester()
23321         .cr(4)
23322         .kr(25)
23323         .channels(channels)
23324         .qmax(128)
23325         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23326     }
23327   }
23328 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,c_lt_4)23329   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_lt_4) {
23330     for (uint32_t channels = 1; channels < 4; channels++) {
23331       DWConvMicrokernelTester()
23332         .cr(4)
23333         .kr(25)
23334         .channels(channels)
23335         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23336     }
23337   }
23338 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,c_gt_4)23339   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_gt_4) {
23340     for (uint32_t channels = 5; channels < 8; channels++) {
23341       DWConvMicrokernelTester()
23342         .cr(4)
23343         .kr(25)
23344         .channels(channels)
23345         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23346     }
23347   }
23348 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,c_gt_4_with_qmin)23349   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_gt_4_with_qmin) {
23350     for (uint32_t channels = 5; channels < 8; channels++) {
23351       DWConvMicrokernelTester()
23352         .cr(4)
23353         .kr(25)
23354         .channels(channels)
23355         .qmin(128)
23356         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23357     }
23358   }
23359 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,c_gt_4_with_qmax)23360   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_gt_4_with_qmax) {
23361     for (uint32_t channels = 5; channels < 8; channels++) {
23362       DWConvMicrokernelTester()
23363         .cr(4)
23364         .kr(25)
23365         .channels(channels)
23366         .qmax(128)
23367         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23368     }
23369   }
23370 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,multipixel)23371   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel) {
23372     for (size_t channels = 1; channels <= 20; channels += 3) {
23373       DWConvMicrokernelTester()
23374         .cr(4)
23375         .kr(25)
23376         .channels(channels)
23377         .width(3)
23378         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23379     }
23380   }
23381 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,multipixel_with_step)23382   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_step) {
23383     for (size_t channels = 1; channels <= 20; channels += 3) {
23384       for (size_t step = 2; step <= 25; step++) {
23385         DWConvMicrokernelTester()
23386           .cr(4)
23387           .kr(25)
23388           .channels(channels)
23389           .width(3)
23390           .step(step)
23391           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23392       }
23393     }
23394   }
23395 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,multipixel_with_output_stride)23396   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_output_stride) {
23397     for (size_t channels = 1; channels <= 20; channels += 3) {
23398       DWConvMicrokernelTester()
23399         .cr(4)
23400         .kr(25)
23401         .channels(4)
23402         .width(5)
23403         .output_stride(23)
23404         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23405     }
23406   }
23407 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,multipixel_with_qmin)23408   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_qmin) {
23409     for (size_t channels = 1; channels <= 20; channels += 3) {
23410       DWConvMicrokernelTester()
23411         .cr(4)
23412         .kr(25)
23413         .channels(channels)
23414         .width(3)
23415         .qmin(128)
23416         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23417     }
23418   }
23419 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,multipixel_with_qmax)23420   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_qmax) {
23421     for (size_t channels = 1; channels <= 20; channels += 3) {
23422       DWConvMicrokernelTester()
23423         .cr(4)
23424         .kr(25)
23425         .channels(channels)
23426         .width(3)
23427         .qmax(128)
23428         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23429     }
23430   }
23431 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,input_offset)23432   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, input_offset) {
23433     for (uint32_t channels = 8; channels < 64; channels += 12) {
23434       DWConvMicrokernelTester()
23435         .cr(4)
23436         .kr(25)
23437         .channels(channels)
23438         .input_offset(112)
23439         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23440     }
23441   }
23442 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM,zero)23443   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, zero) {
23444     for (uint32_t mz = 0; mz < 25; mz++) {
23445       for (uint32_t channels = 8; channels < 64; channels += 12) {
23446         DWConvMicrokernelTester()
23447           .cr(4)
23448           .kr(25)
23449           .channels(channels)
23450           .input_offset(112)
23451           .zero_index(mz)
23452           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23453       }
23454     }
23455   }
23456 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23457 
23458 
23459 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,c_eq_4)23460   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_eq_4) {
23461     DWConvMicrokernelTester()
23462       .cr(4)
23463       .kr(25)
23464       .channels(4)
23465       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23466   }
23467 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,c_div_4)23468   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_div_4) {
23469     for (uint32_t channels = 8; channels < 64; channels += 12) {
23470       DWConvMicrokernelTester()
23471         .cr(4)
23472         .kr(25)
23473         .channels(channels)
23474         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23475     }
23476   }
23477 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,c_div_4_with_qmin)23478   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_div_4_with_qmin) {
23479     for (uint32_t channels = 8; channels < 64; channels += 12) {
23480       DWConvMicrokernelTester()
23481         .cr(4)
23482         .kr(25)
23483         .channels(channels)
23484         .qmin(128)
23485         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23486     }
23487   }
23488 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,c_div_4_with_qmax)23489   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_div_4_with_qmax) {
23490     for (uint32_t channels = 8; channels < 64; channels += 12) {
23491       DWConvMicrokernelTester()
23492         .cr(4)
23493         .kr(25)
23494         .channels(channels)
23495         .qmax(128)
23496         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23497     }
23498   }
23499 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,c_lt_4)23500   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_lt_4) {
23501     for (uint32_t channels = 1; channels < 4; channels++) {
23502       DWConvMicrokernelTester()
23503         .cr(4)
23504         .kr(25)
23505         .channels(channels)
23506         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23507     }
23508   }
23509 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,c_gt_4)23510   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_gt_4) {
23511     for (uint32_t channels = 5; channels < 8; channels++) {
23512       DWConvMicrokernelTester()
23513         .cr(4)
23514         .kr(25)
23515         .channels(channels)
23516         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23517     }
23518   }
23519 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,c_gt_4_with_qmin)23520   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_gt_4_with_qmin) {
23521     for (uint32_t channels = 5; channels < 8; channels++) {
23522       DWConvMicrokernelTester()
23523         .cr(4)
23524         .kr(25)
23525         .channels(channels)
23526         .qmin(128)
23527         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23528     }
23529   }
23530 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,c_gt_4_with_qmax)23531   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_gt_4_with_qmax) {
23532     for (uint32_t channels = 5; channels < 8; channels++) {
23533       DWConvMicrokernelTester()
23534         .cr(4)
23535         .kr(25)
23536         .channels(channels)
23537         .qmax(128)
23538         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23539     }
23540   }
23541 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,multipixel)23542   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, multipixel) {
23543     for (size_t channels = 1; channels <= 20; channels += 3) {
23544       DWConvMicrokernelTester()
23545         .cr(4)
23546         .kr(25)
23547         .channels(channels)
23548         .width(3)
23549         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23550     }
23551   }
23552 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,multipixel_with_step)23553   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, multipixel_with_step) {
23554     for (size_t channels = 1; channels <= 20; channels += 3) {
23555       for (size_t step = 2; step <= 25; step++) {
23556         DWConvMicrokernelTester()
23557           .cr(4)
23558           .kr(25)
23559           .channels(channels)
23560           .width(3)
23561           .step(step)
23562           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23563       }
23564     }
23565   }
23566 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,multipixel_with_output_stride)23567   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
23568     for (size_t channels = 1; channels <= 20; channels += 3) {
23569       DWConvMicrokernelTester()
23570         .cr(4)
23571         .kr(25)
23572         .channels(4)
23573         .width(5)
23574         .output_stride(23)
23575         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23576     }
23577   }
23578 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,multipixel_with_qmin)23579   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
23580     for (size_t channels = 1; channels <= 20; channels += 3) {
23581       DWConvMicrokernelTester()
23582         .cr(4)
23583         .kr(25)
23584         .channels(channels)
23585         .width(3)
23586         .qmin(128)
23587         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23588     }
23589   }
23590 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,multipixel_with_qmax)23591   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
23592     for (size_t channels = 1; channels <= 20; channels += 3) {
23593       DWConvMicrokernelTester()
23594         .cr(4)
23595         .kr(25)
23596         .channels(channels)
23597         .width(3)
23598         .qmax(128)
23599         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23600     }
23601   }
23602 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,input_offset)23603   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, input_offset) {
23604     for (uint32_t channels = 8; channels < 64; channels += 12) {
23605       DWConvMicrokernelTester()
23606         .cr(4)
23607         .kr(25)
23608         .channels(channels)
23609         .input_offset(112)
23610         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23611     }
23612   }
23613 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2,zero)23614   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, zero) {
23615     for (uint32_t mz = 0; mz < 25; mz++) {
23616       for (uint32_t channels = 8; channels < 64; channels += 12) {
23617         DWConvMicrokernelTester()
23618           .cr(4)
23619           .kr(25)
23620           .channels(channels)
23621           .input_offset(112)
23622           .zero_index(mz)
23623           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
23624       }
23625     }
23626   }
23627 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23628 
23629 
23630 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,c_eq_4)23631   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_eq_4) {
23632     DWConvMicrokernelTester()
23633       .cr(4)
23634       .kr(25)
23635       .channels(4)
23636       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23637   }
23638 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,c_div_4)23639   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_div_4) {
23640     for (uint32_t channels = 8; channels < 64; channels += 12) {
23641       DWConvMicrokernelTester()
23642         .cr(4)
23643         .kr(25)
23644         .channels(channels)
23645         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23646     }
23647   }
23648 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,c_div_4_with_qmin)23649   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_div_4_with_qmin) {
23650     for (uint32_t channels = 8; channels < 64; channels += 12) {
23651       DWConvMicrokernelTester()
23652         .cr(4)
23653         .kr(25)
23654         .channels(channels)
23655         .qmin(128)
23656         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23657     }
23658   }
23659 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,c_div_4_with_qmax)23660   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_div_4_with_qmax) {
23661     for (uint32_t channels = 8; channels < 64; channels += 12) {
23662       DWConvMicrokernelTester()
23663         .cr(4)
23664         .kr(25)
23665         .channels(channels)
23666         .qmax(128)
23667         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23668     }
23669   }
23670 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,c_lt_4)23671   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_lt_4) {
23672     for (uint32_t channels = 1; channels < 4; channels++) {
23673       DWConvMicrokernelTester()
23674         .cr(4)
23675         .kr(25)
23676         .channels(channels)
23677         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23678     }
23679   }
23680 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,c_gt_4)23681   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_gt_4) {
23682     for (uint32_t channels = 5; channels < 8; channels++) {
23683       DWConvMicrokernelTester()
23684         .cr(4)
23685         .kr(25)
23686         .channels(channels)
23687         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23688     }
23689   }
23690 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,c_gt_4_with_qmin)23691   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_gt_4_with_qmin) {
23692     for (uint32_t channels = 5; channels < 8; channels++) {
23693       DWConvMicrokernelTester()
23694         .cr(4)
23695         .kr(25)
23696         .channels(channels)
23697         .qmin(128)
23698         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23699     }
23700   }
23701 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,c_gt_4_with_qmax)23702   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_gt_4_with_qmax) {
23703     for (uint32_t channels = 5; channels < 8; channels++) {
23704       DWConvMicrokernelTester()
23705         .cr(4)
23706         .kr(25)
23707         .channels(channels)
23708         .qmax(128)
23709         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23710     }
23711   }
23712 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,multipixel)23713   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel) {
23714     for (size_t channels = 1; channels <= 20; channels += 3) {
23715       DWConvMicrokernelTester()
23716         .cr(4)
23717         .kr(25)
23718         .channels(channels)
23719         .width(3)
23720         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23721     }
23722   }
23723 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,multipixel_with_step)23724   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_step) {
23725     for (size_t channels = 1; channels <= 20; channels += 3) {
23726       for (size_t step = 2; step <= 25; step++) {
23727         DWConvMicrokernelTester()
23728           .cr(4)
23729           .kr(25)
23730           .channels(channels)
23731           .width(3)
23732           .step(step)
23733           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23734       }
23735     }
23736   }
23737 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,multipixel_with_output_stride)23738   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_output_stride) {
23739     for (size_t channels = 1; channels <= 20; channels += 3) {
23740       DWConvMicrokernelTester()
23741         .cr(4)
23742         .kr(25)
23743         .channels(4)
23744         .width(5)
23745         .output_stride(23)
23746         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23747     }
23748   }
23749 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,multipixel_with_qmin)23750   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_qmin) {
23751     for (size_t channels = 1; channels <= 20; channels += 3) {
23752       DWConvMicrokernelTester()
23753         .cr(4)
23754         .kr(25)
23755         .channels(channels)
23756         .width(3)
23757         .qmin(128)
23758         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23759     }
23760   }
23761 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,multipixel_with_qmax)23762   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_qmax) {
23763     for (size_t channels = 1; channels <= 20; channels += 3) {
23764       DWConvMicrokernelTester()
23765         .cr(4)
23766         .kr(25)
23767         .channels(channels)
23768         .width(3)
23769         .qmax(128)
23770         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23771     }
23772   }
23773 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,input_offset)23774   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, input_offset) {
23775     for (uint32_t channels = 8; channels < 64; channels += 12) {
23776       DWConvMicrokernelTester()
23777         .cr(4)
23778         .kr(25)
23779         .channels(channels)
23780         .input_offset(112)
23781         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23782     }
23783   }
23784 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86,zero)23785   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, zero) {
23786     for (uint32_t mz = 0; mz < 25; mz++) {
23787       for (uint32_t channels = 8; channels < 64; channels += 12) {
23788         DWConvMicrokernelTester()
23789           .cr(4)
23790           .kr(25)
23791           .channels(channels)
23792           .input_offset(112)
23793           .zero_index(mz)
23794           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
23795       }
23796     }
23797   }
23798 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23799 
23800 
23801 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,c_eq_4)23802   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_eq_4) {
23803     DWConvMicrokernelTester()
23804       .cr(4)
23805       .kr(25)
23806       .channels(4)
23807       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23808   }
23809 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,c_div_4)23810   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_div_4) {
23811     for (uint32_t channels = 8; channels < 64; channels += 12) {
23812       DWConvMicrokernelTester()
23813         .cr(4)
23814         .kr(25)
23815         .channels(channels)
23816         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23817     }
23818   }
23819 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,c_div_4_with_qmin)23820   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_div_4_with_qmin) {
23821     for (uint32_t channels = 8; channels < 64; channels += 12) {
23822       DWConvMicrokernelTester()
23823         .cr(4)
23824         .kr(25)
23825         .channels(channels)
23826         .qmin(128)
23827         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23828     }
23829   }
23830 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,c_div_4_with_qmax)23831   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_div_4_with_qmax) {
23832     for (uint32_t channels = 8; channels < 64; channels += 12) {
23833       DWConvMicrokernelTester()
23834         .cr(4)
23835         .kr(25)
23836         .channels(channels)
23837         .qmax(128)
23838         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23839     }
23840   }
23841 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,c_lt_4)23842   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_lt_4) {
23843     for (uint32_t channels = 1; channels < 4; channels++) {
23844       DWConvMicrokernelTester()
23845         .cr(4)
23846         .kr(25)
23847         .channels(channels)
23848         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23849     }
23850   }
23851 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,c_gt_4)23852   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_gt_4) {
23853     for (uint32_t channels = 5; channels < 8; channels++) {
23854       DWConvMicrokernelTester()
23855         .cr(4)
23856         .kr(25)
23857         .channels(channels)
23858         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23859     }
23860   }
23861 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,c_gt_4_with_qmin)23862   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_gt_4_with_qmin) {
23863     for (uint32_t channels = 5; channels < 8; channels++) {
23864       DWConvMicrokernelTester()
23865         .cr(4)
23866         .kr(25)
23867         .channels(channels)
23868         .qmin(128)
23869         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23870     }
23871   }
23872 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,c_gt_4_with_qmax)23873   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_gt_4_with_qmax) {
23874     for (uint32_t channels = 5; channels < 8; channels++) {
23875       DWConvMicrokernelTester()
23876         .cr(4)
23877         .kr(25)
23878         .channels(channels)
23879         .qmax(128)
23880         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23881     }
23882   }
23883 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,multipixel)23884   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, multipixel) {
23885     for (size_t channels = 1; channels <= 20; channels += 3) {
23886       DWConvMicrokernelTester()
23887         .cr(4)
23888         .kr(25)
23889         .channels(channels)
23890         .width(3)
23891         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23892     }
23893   }
23894 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,multipixel_with_step)23895   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, multipixel_with_step) {
23896     for (size_t channels = 1; channels <= 20; channels += 3) {
23897       for (size_t step = 2; step <= 25; step++) {
23898         DWConvMicrokernelTester()
23899           .cr(4)
23900           .kr(25)
23901           .channels(channels)
23902           .width(3)
23903           .step(step)
23904           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23905       }
23906     }
23907   }
23908 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,multipixel_with_output_stride)23909   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
23910     for (size_t channels = 1; channels <= 20; channels += 3) {
23911       DWConvMicrokernelTester()
23912         .cr(4)
23913         .kr(25)
23914         .channels(4)
23915         .width(5)
23916         .output_stride(23)
23917         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23918     }
23919   }
23920 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,multipixel_with_qmin)23921   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
23922     for (size_t channels = 1; channels <= 20; channels += 3) {
23923       DWConvMicrokernelTester()
23924         .cr(4)
23925         .kr(25)
23926         .channels(channels)
23927         .width(3)
23928         .qmin(128)
23929         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23930     }
23931   }
23932 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,multipixel_with_qmax)23933   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
23934     for (size_t channels = 1; channels <= 20; channels += 3) {
23935       DWConvMicrokernelTester()
23936         .cr(4)
23937         .kr(25)
23938         .channels(channels)
23939         .width(3)
23940         .qmax(128)
23941         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23942     }
23943   }
23944 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,input_offset)23945   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, input_offset) {
23946     for (uint32_t channels = 8; channels < 64; channels += 12) {
23947       DWConvMicrokernelTester()
23948         .cr(4)
23949         .kr(25)
23950         .channels(channels)
23951         .input_offset(112)
23952         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23953     }
23954   }
23955 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2,zero)23956   TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, zero) {
23957     for (uint32_t mz = 0; mz < 25; mz++) {
23958       for (uint32_t channels = 8; channels < 64; channels += 12) {
23959         DWConvMicrokernelTester()
23960           .cr(4)
23961           .kr(25)
23962           .channels(channels)
23963           .input_offset(112)
23964           .zero_index(mz)
23965           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
23966       }
23967     }
23968   }
23969 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
23970 
23971 
23972 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,c_eq_8)23973   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_eq_8) {
23974     DWConvMicrokernelTester()
23975       .cr(8)
23976       .kr(3)
23977       .channels(8)
23978       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23979   }
23980 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,c_div_8)23981   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_div_8) {
23982     for (uint32_t channels = 16; channels < 128; channels += 24) {
23983       DWConvMicrokernelTester()
23984         .cr(8)
23985         .kr(3)
23986         .channels(channels)
23987         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23988     }
23989   }
23990 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,c_div_8_with_qmin)23991   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_div_8_with_qmin) {
23992     for (uint32_t channels = 16; channels < 128; channels += 24) {
23993       DWConvMicrokernelTester()
23994         .cr(8)
23995         .kr(3)
23996         .channels(channels)
23997         .qmin(128)
23998         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
23999     }
24000   }
24001 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,c_div_8_with_qmax)24002   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_div_8_with_qmax) {
24003     for (uint32_t channels = 16; channels < 128; channels += 24) {
24004       DWConvMicrokernelTester()
24005         .cr(8)
24006         .kr(3)
24007         .channels(channels)
24008         .qmax(128)
24009         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24010     }
24011   }
24012 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,c_lt_8)24013   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_lt_8) {
24014     for (uint32_t channels = 1; channels < 8; channels++) {
24015       DWConvMicrokernelTester()
24016         .cr(8)
24017         .kr(3)
24018         .channels(channels)
24019         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24020     }
24021   }
24022 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,c_gt_8)24023   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_gt_8) {
24024     for (uint32_t channels = 9; channels < 16; channels++) {
24025       DWConvMicrokernelTester()
24026         .cr(8)
24027         .kr(3)
24028         .channels(channels)
24029         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24030     }
24031   }
24032 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,c_gt_8_with_qmin)24033   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_gt_8_with_qmin) {
24034     for (uint32_t channels = 9; channels < 16; channels++) {
24035       DWConvMicrokernelTester()
24036         .cr(8)
24037         .kr(3)
24038         .channels(channels)
24039         .qmin(128)
24040         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24041     }
24042   }
24043 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,c_gt_8_with_qmax)24044   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_gt_8_with_qmax) {
24045     for (uint32_t channels = 9; channels < 16; channels++) {
24046       DWConvMicrokernelTester()
24047         .cr(8)
24048         .kr(3)
24049         .channels(channels)
24050         .qmax(128)
24051         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24052     }
24053   }
24054 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,multipixel)24055   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, multipixel) {
24056     for (size_t channels = 1; channels <= 40; channels += 7) {
24057       DWConvMicrokernelTester()
24058         .cr(8)
24059         .kr(3)
24060         .channels(channels)
24061         .width(3)
24062         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24063     }
24064   }
24065 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,multipixel_with_step)24066   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, multipixel_with_step) {
24067     for (size_t channels = 1; channels <= 40; channels += 7) {
24068       for (size_t step = 2; step <= 3; step++) {
24069         DWConvMicrokernelTester()
24070           .cr(8)
24071           .kr(3)
24072           .channels(channels)
24073           .width(3)
24074           .step(step)
24075           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24076       }
24077     }
24078   }
24079 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,multipixel_with_output_stride)24080   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, multipixel_with_output_stride) {
24081     for (size_t channels = 1; channels <= 40; channels += 7) {
24082       DWConvMicrokernelTester()
24083         .cr(8)
24084         .kr(3)
24085         .channels(8)
24086         .width(5)
24087         .output_stride(43)
24088         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24089     }
24090   }
24091 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,multipixel_with_qmin)24092   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, multipixel_with_qmin) {
24093     for (size_t channels = 1; channels <= 40; channels += 7) {
24094       DWConvMicrokernelTester()
24095         .cr(8)
24096         .kr(3)
24097         .channels(channels)
24098         .width(3)
24099         .qmin(128)
24100         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24101     }
24102   }
24103 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,multipixel_with_qmax)24104   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, multipixel_with_qmax) {
24105     for (size_t channels = 1; channels <= 40; channels += 7) {
24106       DWConvMicrokernelTester()
24107         .cr(8)
24108         .kr(3)
24109         .channels(channels)
24110         .width(3)
24111         .qmax(128)
24112         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24113     }
24114   }
24115 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,input_offset)24116   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, input_offset) {
24117     for (uint32_t channels = 16; channels < 128; channels += 24) {
24118       DWConvMicrokernelTester()
24119         .cr(8)
24120         .kr(3)
24121         .channels(channels)
24122         .input_offset(176)
24123         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24124     }
24125   }
24126 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM,zero)24127   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, zero) {
24128     for (uint32_t mz = 0; mz < 3; mz++) {
24129       for (uint32_t channels = 16; channels < 128; channels += 24) {
24130         DWConvMicrokernelTester()
24131           .cr(8)
24132           .kr(3)
24133           .channels(channels)
24134           .input_offset(176)
24135           .zero_index(mz)
24136           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24137       }
24138     }
24139   }
24140 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24141 
24142 
24143 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,c_eq_8)24144   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_eq_8) {
24145     DWConvMicrokernelTester()
24146       .cr(8)
24147       .kr(3)
24148       .channels(8)
24149       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24150   }
24151 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,c_div_8)24152   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_div_8) {
24153     for (uint32_t channels = 16; channels < 128; channels += 24) {
24154       DWConvMicrokernelTester()
24155         .cr(8)
24156         .kr(3)
24157         .channels(channels)
24158         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24159     }
24160   }
24161 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,c_div_8_with_qmin)24162   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_div_8_with_qmin) {
24163     for (uint32_t channels = 16; channels < 128; channels += 24) {
24164       DWConvMicrokernelTester()
24165         .cr(8)
24166         .kr(3)
24167         .channels(channels)
24168         .qmin(128)
24169         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24170     }
24171   }
24172 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,c_div_8_with_qmax)24173   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_div_8_with_qmax) {
24174     for (uint32_t channels = 16; channels < 128; channels += 24) {
24175       DWConvMicrokernelTester()
24176         .cr(8)
24177         .kr(3)
24178         .channels(channels)
24179         .qmax(128)
24180         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24181     }
24182   }
24183 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,c_lt_8)24184   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_lt_8) {
24185     for (uint32_t channels = 1; channels < 8; channels++) {
24186       DWConvMicrokernelTester()
24187         .cr(8)
24188         .kr(3)
24189         .channels(channels)
24190         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24191     }
24192   }
24193 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,c_gt_8)24194   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_gt_8) {
24195     for (uint32_t channels = 9; channels < 16; channels++) {
24196       DWConvMicrokernelTester()
24197         .cr(8)
24198         .kr(3)
24199         .channels(channels)
24200         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24201     }
24202   }
24203 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,c_gt_8_with_qmin)24204   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_gt_8_with_qmin) {
24205     for (uint32_t channels = 9; channels < 16; channels++) {
24206       DWConvMicrokernelTester()
24207         .cr(8)
24208         .kr(3)
24209         .channels(channels)
24210         .qmin(128)
24211         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24212     }
24213   }
24214 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,c_gt_8_with_qmax)24215   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_gt_8_with_qmax) {
24216     for (uint32_t channels = 9; channels < 16; channels++) {
24217       DWConvMicrokernelTester()
24218         .cr(8)
24219         .kr(3)
24220         .channels(channels)
24221         .qmax(128)
24222         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24223     }
24224   }
24225 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,multipixel)24226   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, multipixel) {
24227     for (size_t channels = 1; channels <= 40; channels += 7) {
24228       DWConvMicrokernelTester()
24229         .cr(8)
24230         .kr(3)
24231         .channels(channels)
24232         .width(3)
24233         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24234     }
24235   }
24236 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,multipixel_with_step)24237   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, multipixel_with_step) {
24238     for (size_t channels = 1; channels <= 40; channels += 7) {
24239       for (size_t step = 2; step <= 3; step++) {
24240         DWConvMicrokernelTester()
24241           .cr(8)
24242           .kr(3)
24243           .channels(channels)
24244           .width(3)
24245           .step(step)
24246           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24247       }
24248     }
24249   }
24250 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,multipixel_with_output_stride)24251   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
24252     for (size_t channels = 1; channels <= 40; channels += 7) {
24253       DWConvMicrokernelTester()
24254         .cr(8)
24255         .kr(3)
24256         .channels(8)
24257         .width(5)
24258         .output_stride(43)
24259         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24260     }
24261   }
24262 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,multipixel_with_qmin)24263   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
24264     for (size_t channels = 1; channels <= 40; channels += 7) {
24265       DWConvMicrokernelTester()
24266         .cr(8)
24267         .kr(3)
24268         .channels(channels)
24269         .width(3)
24270         .qmin(128)
24271         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24272     }
24273   }
24274 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,multipixel_with_qmax)24275   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
24276     for (size_t channels = 1; channels <= 40; channels += 7) {
24277       DWConvMicrokernelTester()
24278         .cr(8)
24279         .kr(3)
24280         .channels(channels)
24281         .width(3)
24282         .qmax(128)
24283         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24284     }
24285   }
24286 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,input_offset)24287   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, input_offset) {
24288     for (uint32_t channels = 16; channels < 128; channels += 24) {
24289       DWConvMicrokernelTester()
24290         .cr(8)
24291         .kr(3)
24292         .channels(channels)
24293         .input_offset(176)
24294         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24295     }
24296   }
24297 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2,zero)24298   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, zero) {
24299     for (uint32_t mz = 0; mz < 3; mz++) {
24300       for (uint32_t channels = 16; channels < 128; channels += 24) {
24301         DWConvMicrokernelTester()
24302           .cr(8)
24303           .kr(3)
24304           .channels(channels)
24305           .input_offset(176)
24306           .zero_index(mz)
24307           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24308       }
24309     }
24310   }
24311 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24312 
24313 
24314 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,c_eq_8)24315   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_eq_8) {
24316     DWConvMicrokernelTester()
24317       .cr(8)
24318       .kr(3)
24319       .channels(8)
24320       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24321   }
24322 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,c_div_8)24323   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_div_8) {
24324     for (uint32_t channels = 16; channels < 128; channels += 24) {
24325       DWConvMicrokernelTester()
24326         .cr(8)
24327         .kr(3)
24328         .channels(channels)
24329         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24330     }
24331   }
24332 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,c_div_8_with_qmin)24333   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_div_8_with_qmin) {
24334     for (uint32_t channels = 16; channels < 128; channels += 24) {
24335       DWConvMicrokernelTester()
24336         .cr(8)
24337         .kr(3)
24338         .channels(channels)
24339         .qmin(128)
24340         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24341     }
24342   }
24343 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,c_div_8_with_qmax)24344   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_div_8_with_qmax) {
24345     for (uint32_t channels = 16; channels < 128; channels += 24) {
24346       DWConvMicrokernelTester()
24347         .cr(8)
24348         .kr(3)
24349         .channels(channels)
24350         .qmax(128)
24351         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24352     }
24353   }
24354 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,c_lt_8)24355   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_lt_8) {
24356     for (uint32_t channels = 1; channels < 8; channels++) {
24357       DWConvMicrokernelTester()
24358         .cr(8)
24359         .kr(3)
24360         .channels(channels)
24361         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24362     }
24363   }
24364 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,c_gt_8)24365   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_gt_8) {
24366     for (uint32_t channels = 9; channels < 16; channels++) {
24367       DWConvMicrokernelTester()
24368         .cr(8)
24369         .kr(3)
24370         .channels(channels)
24371         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24372     }
24373   }
24374 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,c_gt_8_with_qmin)24375   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_gt_8_with_qmin) {
24376     for (uint32_t channels = 9; channels < 16; channels++) {
24377       DWConvMicrokernelTester()
24378         .cr(8)
24379         .kr(3)
24380         .channels(channels)
24381         .qmin(128)
24382         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24383     }
24384   }
24385 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,c_gt_8_with_qmax)24386   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_gt_8_with_qmax) {
24387     for (uint32_t channels = 9; channels < 16; channels++) {
24388       DWConvMicrokernelTester()
24389         .cr(8)
24390         .kr(3)
24391         .channels(channels)
24392         .qmax(128)
24393         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24394     }
24395   }
24396 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,multipixel)24397   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, multipixel) {
24398     for (size_t channels = 1; channels <= 40; channels += 7) {
24399       DWConvMicrokernelTester()
24400         .cr(8)
24401         .kr(3)
24402         .channels(channels)
24403         .width(3)
24404         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24405     }
24406   }
24407 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,multipixel_with_step)24408   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, multipixel_with_step) {
24409     for (size_t channels = 1; channels <= 40; channels += 7) {
24410       for (size_t step = 2; step <= 3; step++) {
24411         DWConvMicrokernelTester()
24412           .cr(8)
24413           .kr(3)
24414           .channels(channels)
24415           .width(3)
24416           .step(step)
24417           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24418       }
24419     }
24420   }
24421 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,multipixel_with_output_stride)24422   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, multipixel_with_output_stride) {
24423     for (size_t channels = 1; channels <= 40; channels += 7) {
24424       DWConvMicrokernelTester()
24425         .cr(8)
24426         .kr(3)
24427         .channels(8)
24428         .width(5)
24429         .output_stride(43)
24430         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24431     }
24432   }
24433 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,multipixel_with_qmin)24434   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, multipixel_with_qmin) {
24435     for (size_t channels = 1; channels <= 40; channels += 7) {
24436       DWConvMicrokernelTester()
24437         .cr(8)
24438         .kr(3)
24439         .channels(channels)
24440         .width(3)
24441         .qmin(128)
24442         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24443     }
24444   }
24445 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,multipixel_with_qmax)24446   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, multipixel_with_qmax) {
24447     for (size_t channels = 1; channels <= 40; channels += 7) {
24448       DWConvMicrokernelTester()
24449         .cr(8)
24450         .kr(3)
24451         .channels(channels)
24452         .width(3)
24453         .qmax(128)
24454         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24455     }
24456   }
24457 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,input_offset)24458   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, input_offset) {
24459     for (uint32_t channels = 16; channels < 128; channels += 24) {
24460       DWConvMicrokernelTester()
24461         .cr(8)
24462         .kr(3)
24463         .channels(channels)
24464         .input_offset(176)
24465         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24466     }
24467   }
24468 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86,zero)24469   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, zero) {
24470     for (uint32_t mz = 0; mz < 3; mz++) {
24471       for (uint32_t channels = 16; channels < 128; channels += 24) {
24472         DWConvMicrokernelTester()
24473           .cr(8)
24474           .kr(3)
24475           .channels(channels)
24476           .input_offset(176)
24477           .zero_index(mz)
24478           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
24479       }
24480     }
24481   }
24482 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24483 
24484 
24485 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,c_eq_8)24486   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_eq_8) {
24487     DWConvMicrokernelTester()
24488       .cr(8)
24489       .kr(3)
24490       .channels(8)
24491       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24492   }
24493 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,c_div_8)24494   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_div_8) {
24495     for (uint32_t channels = 16; channels < 128; channels += 24) {
24496       DWConvMicrokernelTester()
24497         .cr(8)
24498         .kr(3)
24499         .channels(channels)
24500         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24501     }
24502   }
24503 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,c_div_8_with_qmin)24504   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_div_8_with_qmin) {
24505     for (uint32_t channels = 16; channels < 128; channels += 24) {
24506       DWConvMicrokernelTester()
24507         .cr(8)
24508         .kr(3)
24509         .channels(channels)
24510         .qmin(128)
24511         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24512     }
24513   }
24514 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,c_div_8_with_qmax)24515   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_div_8_with_qmax) {
24516     for (uint32_t channels = 16; channels < 128; channels += 24) {
24517       DWConvMicrokernelTester()
24518         .cr(8)
24519         .kr(3)
24520         .channels(channels)
24521         .qmax(128)
24522         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24523     }
24524   }
24525 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,c_lt_8)24526   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_lt_8) {
24527     for (uint32_t channels = 1; channels < 8; channels++) {
24528       DWConvMicrokernelTester()
24529         .cr(8)
24530         .kr(3)
24531         .channels(channels)
24532         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24533     }
24534   }
24535 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,c_gt_8)24536   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_gt_8) {
24537     for (uint32_t channels = 9; channels < 16; channels++) {
24538       DWConvMicrokernelTester()
24539         .cr(8)
24540         .kr(3)
24541         .channels(channels)
24542         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24543     }
24544   }
24545 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,c_gt_8_with_qmin)24546   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_gt_8_with_qmin) {
24547     for (uint32_t channels = 9; channels < 16; channels++) {
24548       DWConvMicrokernelTester()
24549         .cr(8)
24550         .kr(3)
24551         .channels(channels)
24552         .qmin(128)
24553         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24554     }
24555   }
24556 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,c_gt_8_with_qmax)24557   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_gt_8_with_qmax) {
24558     for (uint32_t channels = 9; channels < 16; channels++) {
24559       DWConvMicrokernelTester()
24560         .cr(8)
24561         .kr(3)
24562         .channels(channels)
24563         .qmax(128)
24564         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24565     }
24566   }
24567 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,multipixel)24568   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, multipixel) {
24569     for (size_t channels = 1; channels <= 40; channels += 7) {
24570       DWConvMicrokernelTester()
24571         .cr(8)
24572         .kr(3)
24573         .channels(channels)
24574         .width(3)
24575         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24576     }
24577   }
24578 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,multipixel_with_step)24579   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, multipixel_with_step) {
24580     for (size_t channels = 1; channels <= 40; channels += 7) {
24581       for (size_t step = 2; step <= 3; step++) {
24582         DWConvMicrokernelTester()
24583           .cr(8)
24584           .kr(3)
24585           .channels(channels)
24586           .width(3)
24587           .step(step)
24588           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24589       }
24590     }
24591   }
24592 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,multipixel_with_output_stride)24593   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
24594     for (size_t channels = 1; channels <= 40; channels += 7) {
24595       DWConvMicrokernelTester()
24596         .cr(8)
24597         .kr(3)
24598         .channels(8)
24599         .width(5)
24600         .output_stride(43)
24601         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24602     }
24603   }
24604 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,multipixel_with_qmin)24605   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
24606     for (size_t channels = 1; channels <= 40; channels += 7) {
24607       DWConvMicrokernelTester()
24608         .cr(8)
24609         .kr(3)
24610         .channels(channels)
24611         .width(3)
24612         .qmin(128)
24613         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24614     }
24615   }
24616 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,multipixel_with_qmax)24617   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
24618     for (size_t channels = 1; channels <= 40; channels += 7) {
24619       DWConvMicrokernelTester()
24620         .cr(8)
24621         .kr(3)
24622         .channels(channels)
24623         .width(3)
24624         .qmax(128)
24625         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24626     }
24627   }
24628 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,input_offset)24629   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, input_offset) {
24630     for (uint32_t channels = 16; channels < 128; channels += 24) {
24631       DWConvMicrokernelTester()
24632         .cr(8)
24633         .kr(3)
24634         .channels(channels)
24635         .input_offset(176)
24636         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24637     }
24638   }
24639 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2,zero)24640   TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, zero) {
24641     for (uint32_t mz = 0; mz < 3; mz++) {
24642       for (uint32_t channels = 16; channels < 128; channels += 24) {
24643         DWConvMicrokernelTester()
24644           .cr(8)
24645           .kr(3)
24646           .channels(channels)
24647           .input_offset(176)
24648           .zero_index(mz)
24649           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
24650       }
24651     }
24652   }
24653 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24654 
24655 
24656 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,c_eq_8)24657   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_eq_8) {
24658     DWConvMicrokernelTester()
24659       .cr(8)
24660       .kr(4)
24661       .channels(8)
24662       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24663   }
24664 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,c_div_8)24665   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_div_8) {
24666     for (uint32_t channels = 16; channels < 128; channels += 24) {
24667       DWConvMicrokernelTester()
24668         .cr(8)
24669         .kr(4)
24670         .channels(channels)
24671         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24672     }
24673   }
24674 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,c_div_8_with_qmin)24675   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_div_8_with_qmin) {
24676     for (uint32_t channels = 16; channels < 128; channels += 24) {
24677       DWConvMicrokernelTester()
24678         .cr(8)
24679         .kr(4)
24680         .channels(channels)
24681         .qmin(128)
24682         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24683     }
24684   }
24685 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,c_div_8_with_qmax)24686   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_div_8_with_qmax) {
24687     for (uint32_t channels = 16; channels < 128; channels += 24) {
24688       DWConvMicrokernelTester()
24689         .cr(8)
24690         .kr(4)
24691         .channels(channels)
24692         .qmax(128)
24693         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24694     }
24695   }
24696 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,c_lt_8)24697   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_lt_8) {
24698     for (uint32_t channels = 1; channels < 8; channels++) {
24699       DWConvMicrokernelTester()
24700         .cr(8)
24701         .kr(4)
24702         .channels(channels)
24703         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24704     }
24705   }
24706 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,c_gt_8)24707   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_gt_8) {
24708     for (uint32_t channels = 9; channels < 16; channels++) {
24709       DWConvMicrokernelTester()
24710         .cr(8)
24711         .kr(4)
24712         .channels(channels)
24713         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24714     }
24715   }
24716 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,c_gt_8_with_qmin)24717   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_gt_8_with_qmin) {
24718     for (uint32_t channels = 9; channels < 16; channels++) {
24719       DWConvMicrokernelTester()
24720         .cr(8)
24721         .kr(4)
24722         .channels(channels)
24723         .qmin(128)
24724         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24725     }
24726   }
24727 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,c_gt_8_with_qmax)24728   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_gt_8_with_qmax) {
24729     for (uint32_t channels = 9; channels < 16; channels++) {
24730       DWConvMicrokernelTester()
24731         .cr(8)
24732         .kr(4)
24733         .channels(channels)
24734         .qmax(128)
24735         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24736     }
24737   }
24738 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,multipixel)24739   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel) {
24740     for (size_t channels = 1; channels <= 40; channels += 7) {
24741       DWConvMicrokernelTester()
24742         .cr(8)
24743         .kr(4)
24744         .channels(channels)
24745         .width(3)
24746         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24747     }
24748   }
24749 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,multipixel_with_step)24750   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel_with_step) {
24751     for (size_t channels = 1; channels <= 40; channels += 7) {
24752       for (size_t step = 2; step <= 4; step++) {
24753         DWConvMicrokernelTester()
24754           .cr(8)
24755           .kr(4)
24756           .channels(channels)
24757           .width(3)
24758           .step(step)
24759           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24760       }
24761     }
24762   }
24763 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,multipixel_with_output_stride)24764   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel_with_output_stride) {
24765     for (size_t channels = 1; channels <= 40; channels += 7) {
24766       DWConvMicrokernelTester()
24767         .cr(8)
24768         .kr(4)
24769         .channels(8)
24770         .width(5)
24771         .output_stride(43)
24772         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24773     }
24774   }
24775 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,multipixel_with_qmin)24776   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel_with_qmin) {
24777     for (size_t channels = 1; channels <= 40; channels += 7) {
24778       DWConvMicrokernelTester()
24779         .cr(8)
24780         .kr(4)
24781         .channels(channels)
24782         .width(3)
24783         .qmin(128)
24784         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24785     }
24786   }
24787 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,multipixel_with_qmax)24788   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel_with_qmax) {
24789     for (size_t channels = 1; channels <= 40; channels += 7) {
24790       DWConvMicrokernelTester()
24791         .cr(8)
24792         .kr(4)
24793         .channels(channels)
24794         .width(3)
24795         .qmax(128)
24796         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24797     }
24798   }
24799 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,input_offset)24800   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, input_offset) {
24801     for (uint32_t channels = 16; channels < 128; channels += 24) {
24802       DWConvMicrokernelTester()
24803         .cr(8)
24804         .kr(4)
24805         .channels(channels)
24806         .input_offset(176)
24807         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24808     }
24809   }
24810 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM,zero)24811   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, zero) {
24812     for (uint32_t mz = 0; mz < 4; mz++) {
24813       for (uint32_t channels = 16; channels < 128; channels += 24) {
24814         DWConvMicrokernelTester()
24815           .cr(8)
24816           .kr(4)
24817           .channels(channels)
24818           .input_offset(176)
24819           .zero_index(mz)
24820           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
24821       }
24822     }
24823   }
24824 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24825 
24826 
24827 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,c_eq_8)24828   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_eq_8) {
24829     DWConvMicrokernelTester()
24830       .cr(8)
24831       .kr(4)
24832       .channels(8)
24833       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24834   }
24835 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,c_div_8)24836   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_div_8) {
24837     for (uint32_t channels = 16; channels < 128; channels += 24) {
24838       DWConvMicrokernelTester()
24839         .cr(8)
24840         .kr(4)
24841         .channels(channels)
24842         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24843     }
24844   }
24845 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,c_div_8_with_qmin)24846   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_div_8_with_qmin) {
24847     for (uint32_t channels = 16; channels < 128; channels += 24) {
24848       DWConvMicrokernelTester()
24849         .cr(8)
24850         .kr(4)
24851         .channels(channels)
24852         .qmin(128)
24853         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24854     }
24855   }
24856 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,c_div_8_with_qmax)24857   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_div_8_with_qmax) {
24858     for (uint32_t channels = 16; channels < 128; channels += 24) {
24859       DWConvMicrokernelTester()
24860         .cr(8)
24861         .kr(4)
24862         .channels(channels)
24863         .qmax(128)
24864         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24865     }
24866   }
24867 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,c_lt_8)24868   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_lt_8) {
24869     for (uint32_t channels = 1; channels < 8; channels++) {
24870       DWConvMicrokernelTester()
24871         .cr(8)
24872         .kr(4)
24873         .channels(channels)
24874         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24875     }
24876   }
24877 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,c_gt_8)24878   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_gt_8) {
24879     for (uint32_t channels = 9; channels < 16; channels++) {
24880       DWConvMicrokernelTester()
24881         .cr(8)
24882         .kr(4)
24883         .channels(channels)
24884         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24885     }
24886   }
24887 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,c_gt_8_with_qmin)24888   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_gt_8_with_qmin) {
24889     for (uint32_t channels = 9; channels < 16; channels++) {
24890       DWConvMicrokernelTester()
24891         .cr(8)
24892         .kr(4)
24893         .channels(channels)
24894         .qmin(128)
24895         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24896     }
24897   }
24898 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,c_gt_8_with_qmax)24899   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_gt_8_with_qmax) {
24900     for (uint32_t channels = 9; channels < 16; channels++) {
24901       DWConvMicrokernelTester()
24902         .cr(8)
24903         .kr(4)
24904         .channels(channels)
24905         .qmax(128)
24906         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24907     }
24908   }
24909 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,multipixel)24910   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, multipixel) {
24911     for (size_t channels = 1; channels <= 40; channels += 7) {
24912       DWConvMicrokernelTester()
24913         .cr(8)
24914         .kr(4)
24915         .channels(channels)
24916         .width(3)
24917         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24918     }
24919   }
24920 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,multipixel_with_step)24921   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, multipixel_with_step) {
24922     for (size_t channels = 1; channels <= 40; channels += 7) {
24923       for (size_t step = 2; step <= 4; step++) {
24924         DWConvMicrokernelTester()
24925           .cr(8)
24926           .kr(4)
24927           .channels(channels)
24928           .width(3)
24929           .step(step)
24930           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24931       }
24932     }
24933   }
24934 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,multipixel_with_output_stride)24935   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
24936     for (size_t channels = 1; channels <= 40; channels += 7) {
24937       DWConvMicrokernelTester()
24938         .cr(8)
24939         .kr(4)
24940         .channels(8)
24941         .width(5)
24942         .output_stride(43)
24943         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24944     }
24945   }
24946 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,multipixel_with_qmin)24947   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
24948     for (size_t channels = 1; channels <= 40; channels += 7) {
24949       DWConvMicrokernelTester()
24950         .cr(8)
24951         .kr(4)
24952         .channels(channels)
24953         .width(3)
24954         .qmin(128)
24955         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24956     }
24957   }
24958 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,multipixel_with_qmax)24959   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
24960     for (size_t channels = 1; channels <= 40; channels += 7) {
24961       DWConvMicrokernelTester()
24962         .cr(8)
24963         .kr(4)
24964         .channels(channels)
24965         .width(3)
24966         .qmax(128)
24967         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24968     }
24969   }
24970 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,input_offset)24971   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, input_offset) {
24972     for (uint32_t channels = 16; channels < 128; channels += 24) {
24973       DWConvMicrokernelTester()
24974         .cr(8)
24975         .kr(4)
24976         .channels(channels)
24977         .input_offset(176)
24978         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24979     }
24980   }
24981 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2,zero)24982   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, zero) {
24983     for (uint32_t mz = 0; mz < 4; mz++) {
24984       for (uint32_t channels = 16; channels < 128; channels += 24) {
24985         DWConvMicrokernelTester()
24986           .cr(8)
24987           .kr(4)
24988           .channels(channels)
24989           .input_offset(176)
24990           .zero_index(mz)
24991           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
24992       }
24993     }
24994   }
24995 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
24996 
24997 
24998 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,c_eq_8)24999   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_eq_8) {
25000     DWConvMicrokernelTester()
25001       .cr(8)
25002       .kr(4)
25003       .channels(8)
25004       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25005   }
25006 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,c_div_8)25007   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_div_8) {
25008     for (uint32_t channels = 16; channels < 128; channels += 24) {
25009       DWConvMicrokernelTester()
25010         .cr(8)
25011         .kr(4)
25012         .channels(channels)
25013         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25014     }
25015   }
25016 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,c_div_8_with_qmin)25017   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_div_8_with_qmin) {
25018     for (uint32_t channels = 16; channels < 128; channels += 24) {
25019       DWConvMicrokernelTester()
25020         .cr(8)
25021         .kr(4)
25022         .channels(channels)
25023         .qmin(128)
25024         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25025     }
25026   }
25027 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,c_div_8_with_qmax)25028   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_div_8_with_qmax) {
25029     for (uint32_t channels = 16; channels < 128; channels += 24) {
25030       DWConvMicrokernelTester()
25031         .cr(8)
25032         .kr(4)
25033         .channels(channels)
25034         .qmax(128)
25035         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25036     }
25037   }
25038 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,c_lt_8)25039   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_lt_8) {
25040     for (uint32_t channels = 1; channels < 8; channels++) {
25041       DWConvMicrokernelTester()
25042         .cr(8)
25043         .kr(4)
25044         .channels(channels)
25045         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25046     }
25047   }
25048 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,c_gt_8)25049   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_gt_8) {
25050     for (uint32_t channels = 9; channels < 16; channels++) {
25051       DWConvMicrokernelTester()
25052         .cr(8)
25053         .kr(4)
25054         .channels(channels)
25055         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25056     }
25057   }
25058 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,c_gt_8_with_qmin)25059   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_gt_8_with_qmin) {
25060     for (uint32_t channels = 9; channels < 16; channels++) {
25061       DWConvMicrokernelTester()
25062         .cr(8)
25063         .kr(4)
25064         .channels(channels)
25065         .qmin(128)
25066         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25067     }
25068   }
25069 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,c_gt_8_with_qmax)25070   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_gt_8_with_qmax) {
25071     for (uint32_t channels = 9; channels < 16; channels++) {
25072       DWConvMicrokernelTester()
25073         .cr(8)
25074         .kr(4)
25075         .channels(channels)
25076         .qmax(128)
25077         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25078     }
25079   }
25080 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,multipixel)25081   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel) {
25082     for (size_t channels = 1; channels <= 40; channels += 7) {
25083       DWConvMicrokernelTester()
25084         .cr(8)
25085         .kr(4)
25086         .channels(channels)
25087         .width(3)
25088         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25089     }
25090   }
25091 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,multipixel_with_step)25092   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_step) {
25093     for (size_t channels = 1; channels <= 40; channels += 7) {
25094       for (size_t step = 2; step <= 4; step++) {
25095         DWConvMicrokernelTester()
25096           .cr(8)
25097           .kr(4)
25098           .channels(channels)
25099           .width(3)
25100           .step(step)
25101           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25102       }
25103     }
25104   }
25105 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,multipixel_with_output_stride)25106   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_output_stride) {
25107     for (size_t channels = 1; channels <= 40; channels += 7) {
25108       DWConvMicrokernelTester()
25109         .cr(8)
25110         .kr(4)
25111         .channels(8)
25112         .width(5)
25113         .output_stride(43)
25114         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25115     }
25116   }
25117 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,multipixel_with_qmin)25118   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_qmin) {
25119     for (size_t channels = 1; channels <= 40; channels += 7) {
25120       DWConvMicrokernelTester()
25121         .cr(8)
25122         .kr(4)
25123         .channels(channels)
25124         .width(3)
25125         .qmin(128)
25126         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25127     }
25128   }
25129 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,multipixel_with_qmax)25130   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_qmax) {
25131     for (size_t channels = 1; channels <= 40; channels += 7) {
25132       DWConvMicrokernelTester()
25133         .cr(8)
25134         .kr(4)
25135         .channels(channels)
25136         .width(3)
25137         .qmax(128)
25138         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25139     }
25140   }
25141 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,input_offset)25142   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, input_offset) {
25143     for (uint32_t channels = 16; channels < 128; channels += 24) {
25144       DWConvMicrokernelTester()
25145         .cr(8)
25146         .kr(4)
25147         .channels(channels)
25148         .input_offset(176)
25149         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25150     }
25151   }
25152 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86,zero)25153   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, zero) {
25154     for (uint32_t mz = 0; mz < 4; mz++) {
25155       for (uint32_t channels = 16; channels < 128; channels += 24) {
25156         DWConvMicrokernelTester()
25157           .cr(8)
25158           .kr(4)
25159           .channels(channels)
25160           .input_offset(176)
25161           .zero_index(mz)
25162           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25163       }
25164     }
25165   }
25166 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25167 
25168 
25169 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,c_eq_8)25170   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_eq_8) {
25171     DWConvMicrokernelTester()
25172       .cr(8)
25173       .kr(4)
25174       .channels(8)
25175       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25176   }
25177 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,c_div_8)25178   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_div_8) {
25179     for (uint32_t channels = 16; channels < 128; channels += 24) {
25180       DWConvMicrokernelTester()
25181         .cr(8)
25182         .kr(4)
25183         .channels(channels)
25184         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25185     }
25186   }
25187 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,c_div_8_with_qmin)25188   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_div_8_with_qmin) {
25189     for (uint32_t channels = 16; channels < 128; channels += 24) {
25190       DWConvMicrokernelTester()
25191         .cr(8)
25192         .kr(4)
25193         .channels(channels)
25194         .qmin(128)
25195         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25196     }
25197   }
25198 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,c_div_8_with_qmax)25199   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_div_8_with_qmax) {
25200     for (uint32_t channels = 16; channels < 128; channels += 24) {
25201       DWConvMicrokernelTester()
25202         .cr(8)
25203         .kr(4)
25204         .channels(channels)
25205         .qmax(128)
25206         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25207     }
25208   }
25209 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,c_lt_8)25210   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_lt_8) {
25211     for (uint32_t channels = 1; channels < 8; channels++) {
25212       DWConvMicrokernelTester()
25213         .cr(8)
25214         .kr(4)
25215         .channels(channels)
25216         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25217     }
25218   }
25219 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,c_gt_8)25220   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_gt_8) {
25221     for (uint32_t channels = 9; channels < 16; channels++) {
25222       DWConvMicrokernelTester()
25223         .cr(8)
25224         .kr(4)
25225         .channels(channels)
25226         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25227     }
25228   }
25229 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,c_gt_8_with_qmin)25230   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_gt_8_with_qmin) {
25231     for (uint32_t channels = 9; channels < 16; channels++) {
25232       DWConvMicrokernelTester()
25233         .cr(8)
25234         .kr(4)
25235         .channels(channels)
25236         .qmin(128)
25237         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25238     }
25239   }
25240 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,c_gt_8_with_qmax)25241   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_gt_8_with_qmax) {
25242     for (uint32_t channels = 9; channels < 16; channels++) {
25243       DWConvMicrokernelTester()
25244         .cr(8)
25245         .kr(4)
25246         .channels(channels)
25247         .qmax(128)
25248         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25249     }
25250   }
25251 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,multipixel)25252   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, multipixel) {
25253     for (size_t channels = 1; channels <= 40; channels += 7) {
25254       DWConvMicrokernelTester()
25255         .cr(8)
25256         .kr(4)
25257         .channels(channels)
25258         .width(3)
25259         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25260     }
25261   }
25262 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,multipixel_with_step)25263   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, multipixel_with_step) {
25264     for (size_t channels = 1; channels <= 40; channels += 7) {
25265       for (size_t step = 2; step <= 4; step++) {
25266         DWConvMicrokernelTester()
25267           .cr(8)
25268           .kr(4)
25269           .channels(channels)
25270           .width(3)
25271           .step(step)
25272           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25273       }
25274     }
25275   }
25276 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,multipixel_with_output_stride)25277   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
25278     for (size_t channels = 1; channels <= 40; channels += 7) {
25279       DWConvMicrokernelTester()
25280         .cr(8)
25281         .kr(4)
25282         .channels(8)
25283         .width(5)
25284         .output_stride(43)
25285         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25286     }
25287   }
25288 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,multipixel_with_qmin)25289   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
25290     for (size_t channels = 1; channels <= 40; channels += 7) {
25291       DWConvMicrokernelTester()
25292         .cr(8)
25293         .kr(4)
25294         .channels(channels)
25295         .width(3)
25296         .qmin(128)
25297         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25298     }
25299   }
25300 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,multipixel_with_qmax)25301   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
25302     for (size_t channels = 1; channels <= 40; channels += 7) {
25303       DWConvMicrokernelTester()
25304         .cr(8)
25305         .kr(4)
25306         .channels(channels)
25307         .width(3)
25308         .qmax(128)
25309         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25310     }
25311   }
25312 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,input_offset)25313   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, input_offset) {
25314     for (uint32_t channels = 16; channels < 128; channels += 24) {
25315       DWConvMicrokernelTester()
25316         .cr(8)
25317         .kr(4)
25318         .channels(channels)
25319         .input_offset(176)
25320         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25321     }
25322   }
25323 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2,zero)25324   TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, zero) {
25325     for (uint32_t mz = 0; mz < 4; mz++) {
25326       for (uint32_t channels = 16; channels < 128; channels += 24) {
25327         DWConvMicrokernelTester()
25328           .cr(8)
25329           .kr(4)
25330           .channels(channels)
25331           .input_offset(176)
25332           .zero_index(mz)
25333           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25334       }
25335     }
25336   }
25337 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25338 
25339 
25340 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,c_eq_8)25341   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_eq_8) {
25342     DWConvMicrokernelTester()
25343       .cr(8)
25344       .kr(9)
25345       .channels(8)
25346       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25347   }
25348 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,c_div_8)25349   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_div_8) {
25350     for (uint32_t channels = 16; channels < 128; channels += 24) {
25351       DWConvMicrokernelTester()
25352         .cr(8)
25353         .kr(9)
25354         .channels(channels)
25355         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25356     }
25357   }
25358 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,c_div_8_with_qmin)25359   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_div_8_with_qmin) {
25360     for (uint32_t channels = 16; channels < 128; channels += 24) {
25361       DWConvMicrokernelTester()
25362         .cr(8)
25363         .kr(9)
25364         .channels(channels)
25365         .qmin(128)
25366         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25367     }
25368   }
25369 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,c_div_8_with_qmax)25370   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_div_8_with_qmax) {
25371     for (uint32_t channels = 16; channels < 128; channels += 24) {
25372       DWConvMicrokernelTester()
25373         .cr(8)
25374         .kr(9)
25375         .channels(channels)
25376         .qmax(128)
25377         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25378     }
25379   }
25380 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,c_lt_8)25381   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_lt_8) {
25382     for (uint32_t channels = 1; channels < 8; channels++) {
25383       DWConvMicrokernelTester()
25384         .cr(8)
25385         .kr(9)
25386         .channels(channels)
25387         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25388     }
25389   }
25390 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,c_gt_8)25391   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_gt_8) {
25392     for (uint32_t channels = 9; channels < 16; channels++) {
25393       DWConvMicrokernelTester()
25394         .cr(8)
25395         .kr(9)
25396         .channels(channels)
25397         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25398     }
25399   }
25400 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,c_gt_8_with_qmin)25401   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_gt_8_with_qmin) {
25402     for (uint32_t channels = 9; channels < 16; channels++) {
25403       DWConvMicrokernelTester()
25404         .cr(8)
25405         .kr(9)
25406         .channels(channels)
25407         .qmin(128)
25408         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25409     }
25410   }
25411 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,c_gt_8_with_qmax)25412   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_gt_8_with_qmax) {
25413     for (uint32_t channels = 9; channels < 16; channels++) {
25414       DWConvMicrokernelTester()
25415         .cr(8)
25416         .kr(9)
25417         .channels(channels)
25418         .qmax(128)
25419         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25420     }
25421   }
25422 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,multipixel)25423   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel) {
25424     for (size_t channels = 1; channels <= 40; channels += 7) {
25425       DWConvMicrokernelTester()
25426         .cr(8)
25427         .kr(9)
25428         .channels(channels)
25429         .width(3)
25430         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25431     }
25432   }
25433 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,multipixel_with_step)25434   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_step) {
25435     for (size_t channels = 1; channels <= 40; channels += 7) {
25436       for (size_t step = 2; step <= 9; step++) {
25437         DWConvMicrokernelTester()
25438           .cr(8)
25439           .kr(9)
25440           .channels(channels)
25441           .width(3)
25442           .step(step)
25443           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25444       }
25445     }
25446   }
25447 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,multipixel_with_output_stride)25448   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_output_stride) {
25449     for (size_t channels = 1; channels <= 40; channels += 7) {
25450       DWConvMicrokernelTester()
25451         .cr(8)
25452         .kr(9)
25453         .channels(8)
25454         .width(5)
25455         .output_stride(43)
25456         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25457     }
25458   }
25459 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,multipixel_with_qmin)25460   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_qmin) {
25461     for (size_t channels = 1; channels <= 40; channels += 7) {
25462       DWConvMicrokernelTester()
25463         .cr(8)
25464         .kr(9)
25465         .channels(channels)
25466         .width(3)
25467         .qmin(128)
25468         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25469     }
25470   }
25471 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,multipixel_with_qmax)25472   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_qmax) {
25473     for (size_t channels = 1; channels <= 40; channels += 7) {
25474       DWConvMicrokernelTester()
25475         .cr(8)
25476         .kr(9)
25477         .channels(channels)
25478         .width(3)
25479         .qmax(128)
25480         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25481     }
25482   }
25483 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,input_offset)25484   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, input_offset) {
25485     for (uint32_t channels = 16; channels < 128; channels += 24) {
25486       DWConvMicrokernelTester()
25487         .cr(8)
25488         .kr(9)
25489         .channels(channels)
25490         .input_offset(176)
25491         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25492     }
25493   }
25494 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM,zero)25495   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, zero) {
25496     for (uint32_t mz = 0; mz < 9; mz++) {
25497       for (uint32_t channels = 16; channels < 128; channels += 24) {
25498         DWConvMicrokernelTester()
25499           .cr(8)
25500           .kr(9)
25501           .channels(channels)
25502           .input_offset(176)
25503           .zero_index(mz)
25504           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
25505       }
25506     }
25507   }
25508 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25509 
25510 
25511 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,c_eq_8)25512   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_eq_8) {
25513     DWConvMicrokernelTester()
25514       .cr(8)
25515       .kr(9)
25516       .channels(8)
25517       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25518   }
25519 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,c_div_8)25520   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_div_8) {
25521     for (uint32_t channels = 16; channels < 128; channels += 24) {
25522       DWConvMicrokernelTester()
25523         .cr(8)
25524         .kr(9)
25525         .channels(channels)
25526         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25527     }
25528   }
25529 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,c_div_8_with_qmin)25530   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_div_8_with_qmin) {
25531     for (uint32_t channels = 16; channels < 128; channels += 24) {
25532       DWConvMicrokernelTester()
25533         .cr(8)
25534         .kr(9)
25535         .channels(channels)
25536         .qmin(128)
25537         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25538     }
25539   }
25540 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,c_div_8_with_qmax)25541   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_div_8_with_qmax) {
25542     for (uint32_t channels = 16; channels < 128; channels += 24) {
25543       DWConvMicrokernelTester()
25544         .cr(8)
25545         .kr(9)
25546         .channels(channels)
25547         .qmax(128)
25548         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25549     }
25550   }
25551 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,c_lt_8)25552   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_lt_8) {
25553     for (uint32_t channels = 1; channels < 8; channels++) {
25554       DWConvMicrokernelTester()
25555         .cr(8)
25556         .kr(9)
25557         .channels(channels)
25558         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25559     }
25560   }
25561 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,c_gt_8)25562   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_gt_8) {
25563     for (uint32_t channels = 9; channels < 16; channels++) {
25564       DWConvMicrokernelTester()
25565         .cr(8)
25566         .kr(9)
25567         .channels(channels)
25568         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25569     }
25570   }
25571 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,c_gt_8_with_qmin)25572   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_gt_8_with_qmin) {
25573     for (uint32_t channels = 9; channels < 16; channels++) {
25574       DWConvMicrokernelTester()
25575         .cr(8)
25576         .kr(9)
25577         .channels(channels)
25578         .qmin(128)
25579         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25580     }
25581   }
25582 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,c_gt_8_with_qmax)25583   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_gt_8_with_qmax) {
25584     for (uint32_t channels = 9; channels < 16; channels++) {
25585       DWConvMicrokernelTester()
25586         .cr(8)
25587         .kr(9)
25588         .channels(channels)
25589         .qmax(128)
25590         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25591     }
25592   }
25593 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,multipixel)25594   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, multipixel) {
25595     for (size_t channels = 1; channels <= 40; channels += 7) {
25596       DWConvMicrokernelTester()
25597         .cr(8)
25598         .kr(9)
25599         .channels(channels)
25600         .width(3)
25601         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25602     }
25603   }
25604 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,multipixel_with_step)25605   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, multipixel_with_step) {
25606     for (size_t channels = 1; channels <= 40; channels += 7) {
25607       for (size_t step = 2; step <= 9; step++) {
25608         DWConvMicrokernelTester()
25609           .cr(8)
25610           .kr(9)
25611           .channels(channels)
25612           .width(3)
25613           .step(step)
25614           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25615       }
25616     }
25617   }
25618 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,multipixel_with_output_stride)25619   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
25620     for (size_t channels = 1; channels <= 40; channels += 7) {
25621       DWConvMicrokernelTester()
25622         .cr(8)
25623         .kr(9)
25624         .channels(8)
25625         .width(5)
25626         .output_stride(43)
25627         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25628     }
25629   }
25630 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,multipixel_with_qmin)25631   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
25632     for (size_t channels = 1; channels <= 40; channels += 7) {
25633       DWConvMicrokernelTester()
25634         .cr(8)
25635         .kr(9)
25636         .channels(channels)
25637         .width(3)
25638         .qmin(128)
25639         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25640     }
25641   }
25642 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,multipixel_with_qmax)25643   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
25644     for (size_t channels = 1; channels <= 40; channels += 7) {
25645       DWConvMicrokernelTester()
25646         .cr(8)
25647         .kr(9)
25648         .channels(channels)
25649         .width(3)
25650         .qmax(128)
25651         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25652     }
25653   }
25654 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,input_offset)25655   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, input_offset) {
25656     for (uint32_t channels = 16; channels < 128; channels += 24) {
25657       DWConvMicrokernelTester()
25658         .cr(8)
25659         .kr(9)
25660         .channels(channels)
25661         .input_offset(176)
25662         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25663     }
25664   }
25665 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2,zero)25666   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, zero) {
25667     for (uint32_t mz = 0; mz < 9; mz++) {
25668       for (uint32_t channels = 16; channels < 128; channels += 24) {
25669         DWConvMicrokernelTester()
25670           .cr(8)
25671           .kr(9)
25672           .channels(channels)
25673           .input_offset(176)
25674           .zero_index(mz)
25675           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
25676       }
25677     }
25678   }
25679 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25680 
25681 
25682 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,c_eq_8)25683   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_eq_8) {
25684     DWConvMicrokernelTester()
25685       .cr(8)
25686       .kr(9)
25687       .channels(8)
25688       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25689   }
25690 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,c_div_8)25691   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_div_8) {
25692     for (uint32_t channels = 16; channels < 128; channels += 24) {
25693       DWConvMicrokernelTester()
25694         .cr(8)
25695         .kr(9)
25696         .channels(channels)
25697         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25698     }
25699   }
25700 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,c_div_8_with_qmin)25701   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_div_8_with_qmin) {
25702     for (uint32_t channels = 16; channels < 128; channels += 24) {
25703       DWConvMicrokernelTester()
25704         .cr(8)
25705         .kr(9)
25706         .channels(channels)
25707         .qmin(128)
25708         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25709     }
25710   }
25711 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,c_div_8_with_qmax)25712   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_div_8_with_qmax) {
25713     for (uint32_t channels = 16; channels < 128; channels += 24) {
25714       DWConvMicrokernelTester()
25715         .cr(8)
25716         .kr(9)
25717         .channels(channels)
25718         .qmax(128)
25719         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25720     }
25721   }
25722 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,c_lt_8)25723   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_lt_8) {
25724     for (uint32_t channels = 1; channels < 8; channels++) {
25725       DWConvMicrokernelTester()
25726         .cr(8)
25727         .kr(9)
25728         .channels(channels)
25729         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25730     }
25731   }
25732 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,c_gt_8)25733   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_gt_8) {
25734     for (uint32_t channels = 9; channels < 16; channels++) {
25735       DWConvMicrokernelTester()
25736         .cr(8)
25737         .kr(9)
25738         .channels(channels)
25739         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25740     }
25741   }
25742 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,c_gt_8_with_qmin)25743   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_gt_8_with_qmin) {
25744     for (uint32_t channels = 9; channels < 16; channels++) {
25745       DWConvMicrokernelTester()
25746         .cr(8)
25747         .kr(9)
25748         .channels(channels)
25749         .qmin(128)
25750         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25751     }
25752   }
25753 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,c_gt_8_with_qmax)25754   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_gt_8_with_qmax) {
25755     for (uint32_t channels = 9; channels < 16; channels++) {
25756       DWConvMicrokernelTester()
25757         .cr(8)
25758         .kr(9)
25759         .channels(channels)
25760         .qmax(128)
25761         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25762     }
25763   }
25764 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,multipixel)25765   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel) {
25766     for (size_t channels = 1; channels <= 40; channels += 7) {
25767       DWConvMicrokernelTester()
25768         .cr(8)
25769         .kr(9)
25770         .channels(channels)
25771         .width(3)
25772         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25773     }
25774   }
25775 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,multipixel_with_step)25776   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_step) {
25777     for (size_t channels = 1; channels <= 40; channels += 7) {
25778       for (size_t step = 2; step <= 9; step++) {
25779         DWConvMicrokernelTester()
25780           .cr(8)
25781           .kr(9)
25782           .channels(channels)
25783           .width(3)
25784           .step(step)
25785           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25786       }
25787     }
25788   }
25789 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,multipixel_with_output_stride)25790   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_output_stride) {
25791     for (size_t channels = 1; channels <= 40; channels += 7) {
25792       DWConvMicrokernelTester()
25793         .cr(8)
25794         .kr(9)
25795         .channels(8)
25796         .width(5)
25797         .output_stride(43)
25798         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25799     }
25800   }
25801 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,multipixel_with_qmin)25802   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_qmin) {
25803     for (size_t channels = 1; channels <= 40; channels += 7) {
25804       DWConvMicrokernelTester()
25805         .cr(8)
25806         .kr(9)
25807         .channels(channels)
25808         .width(3)
25809         .qmin(128)
25810         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25811     }
25812   }
25813 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,multipixel_with_qmax)25814   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_qmax) {
25815     for (size_t channels = 1; channels <= 40; channels += 7) {
25816       DWConvMicrokernelTester()
25817         .cr(8)
25818         .kr(9)
25819         .channels(channels)
25820         .width(3)
25821         .qmax(128)
25822         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25823     }
25824   }
25825 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,input_offset)25826   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, input_offset) {
25827     for (uint32_t channels = 16; channels < 128; channels += 24) {
25828       DWConvMicrokernelTester()
25829         .cr(8)
25830         .kr(9)
25831         .channels(channels)
25832         .input_offset(176)
25833         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25834     }
25835   }
25836 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86,zero)25837   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, zero) {
25838     for (uint32_t mz = 0; mz < 9; mz++) {
25839       for (uint32_t channels = 16; channels < 128; channels += 24) {
25840         DWConvMicrokernelTester()
25841           .cr(8)
25842           .kr(9)
25843           .channels(channels)
25844           .input_offset(176)
25845           .zero_index(mz)
25846           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
25847       }
25848     }
25849   }
25850 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
25851 
25852 
25853 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,c_eq_8)25854   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_eq_8) {
25855     DWConvMicrokernelTester()
25856       .cr(8)
25857       .kr(9)
25858       .channels(8)
25859       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25860   }
25861 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,c_div_8)25862   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_div_8) {
25863     for (uint32_t channels = 16; channels < 128; channels += 24) {
25864       DWConvMicrokernelTester()
25865         .cr(8)
25866         .kr(9)
25867         .channels(channels)
25868         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25869     }
25870   }
25871 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,c_div_8_with_qmin)25872   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_div_8_with_qmin) {
25873     for (uint32_t channels = 16; channels < 128; channels += 24) {
25874       DWConvMicrokernelTester()
25875         .cr(8)
25876         .kr(9)
25877         .channels(channels)
25878         .qmin(128)
25879         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25880     }
25881   }
25882 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,c_div_8_with_qmax)25883   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_div_8_with_qmax) {
25884     for (uint32_t channels = 16; channels < 128; channels += 24) {
25885       DWConvMicrokernelTester()
25886         .cr(8)
25887         .kr(9)
25888         .channels(channels)
25889         .qmax(128)
25890         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25891     }
25892   }
25893 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,c_lt_8)25894   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_lt_8) {
25895     for (uint32_t channels = 1; channels < 8; channels++) {
25896       DWConvMicrokernelTester()
25897         .cr(8)
25898         .kr(9)
25899         .channels(channels)
25900         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25901     }
25902   }
25903 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,c_gt_8)25904   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_gt_8) {
25905     for (uint32_t channels = 9; channels < 16; channels++) {
25906       DWConvMicrokernelTester()
25907         .cr(8)
25908         .kr(9)
25909         .channels(channels)
25910         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25911     }
25912   }
25913 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,c_gt_8_with_qmin)25914   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_gt_8_with_qmin) {
25915     for (uint32_t channels = 9; channels < 16; channels++) {
25916       DWConvMicrokernelTester()
25917         .cr(8)
25918         .kr(9)
25919         .channels(channels)
25920         .qmin(128)
25921         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25922     }
25923   }
25924 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,c_gt_8_with_qmax)25925   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_gt_8_with_qmax) {
25926     for (uint32_t channels = 9; channels < 16; channels++) {
25927       DWConvMicrokernelTester()
25928         .cr(8)
25929         .kr(9)
25930         .channels(channels)
25931         .qmax(128)
25932         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25933     }
25934   }
25935 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,multipixel)25936   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, multipixel) {
25937     for (size_t channels = 1; channels <= 40; channels += 7) {
25938       DWConvMicrokernelTester()
25939         .cr(8)
25940         .kr(9)
25941         .channels(channels)
25942         .width(3)
25943         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25944     }
25945   }
25946 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,multipixel_with_step)25947   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, multipixel_with_step) {
25948     for (size_t channels = 1; channels <= 40; channels += 7) {
25949       for (size_t step = 2; step <= 9; step++) {
25950         DWConvMicrokernelTester()
25951           .cr(8)
25952           .kr(9)
25953           .channels(channels)
25954           .width(3)
25955           .step(step)
25956           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25957       }
25958     }
25959   }
25960 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,multipixel_with_output_stride)25961   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
25962     for (size_t channels = 1; channels <= 40; channels += 7) {
25963       DWConvMicrokernelTester()
25964         .cr(8)
25965         .kr(9)
25966         .channels(8)
25967         .width(5)
25968         .output_stride(43)
25969         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25970     }
25971   }
25972 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,multipixel_with_qmin)25973   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
25974     for (size_t channels = 1; channels <= 40; channels += 7) {
25975       DWConvMicrokernelTester()
25976         .cr(8)
25977         .kr(9)
25978         .channels(channels)
25979         .width(3)
25980         .qmin(128)
25981         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25982     }
25983   }
25984 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,multipixel_with_qmax)25985   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
25986     for (size_t channels = 1; channels <= 40; channels += 7) {
25987       DWConvMicrokernelTester()
25988         .cr(8)
25989         .kr(9)
25990         .channels(channels)
25991         .width(3)
25992         .qmax(128)
25993         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
25994     }
25995   }
25996 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,input_offset)25997   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, input_offset) {
25998     for (uint32_t channels = 16; channels < 128; channels += 24) {
25999       DWConvMicrokernelTester()
26000         .cr(8)
26001         .kr(9)
26002         .channels(channels)
26003         .input_offset(176)
26004         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26005     }
26006   }
26007 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2,zero)26008   TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, zero) {
26009     for (uint32_t mz = 0; mz < 9; mz++) {
26010       for (uint32_t channels = 16; channels < 128; channels += 24) {
26011         DWConvMicrokernelTester()
26012           .cr(8)
26013           .kr(9)
26014           .channels(channels)
26015           .input_offset(176)
26016           .zero_index(mz)
26017           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26018       }
26019     }
26020   }
26021 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26022 
26023 
26024 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,c_eq_8)26025   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_eq_8) {
26026     DWConvMicrokernelTester()
26027       .cr(8)
26028       .kr(25)
26029       .channels(8)
26030       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26031   }
26032 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,c_div_8)26033   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_div_8) {
26034     for (uint32_t channels = 16; channels < 128; channels += 24) {
26035       DWConvMicrokernelTester()
26036         .cr(8)
26037         .kr(25)
26038         .channels(channels)
26039         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26040     }
26041   }
26042 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,c_div_8_with_qmin)26043   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_div_8_with_qmin) {
26044     for (uint32_t channels = 16; channels < 128; channels += 24) {
26045       DWConvMicrokernelTester()
26046         .cr(8)
26047         .kr(25)
26048         .channels(channels)
26049         .qmin(128)
26050         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26051     }
26052   }
26053 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,c_div_8_with_qmax)26054   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_div_8_with_qmax) {
26055     for (uint32_t channels = 16; channels < 128; channels += 24) {
26056       DWConvMicrokernelTester()
26057         .cr(8)
26058         .kr(25)
26059         .channels(channels)
26060         .qmax(128)
26061         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26062     }
26063   }
26064 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,c_lt_8)26065   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_lt_8) {
26066     for (uint32_t channels = 1; channels < 8; channels++) {
26067       DWConvMicrokernelTester()
26068         .cr(8)
26069         .kr(25)
26070         .channels(channels)
26071         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26072     }
26073   }
26074 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,c_gt_8)26075   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_gt_8) {
26076     for (uint32_t channels = 9; channels < 16; channels++) {
26077       DWConvMicrokernelTester()
26078         .cr(8)
26079         .kr(25)
26080         .channels(channels)
26081         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26082     }
26083   }
26084 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,c_gt_8_with_qmin)26085   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_gt_8_with_qmin) {
26086     for (uint32_t channels = 9; channels < 16; channels++) {
26087       DWConvMicrokernelTester()
26088         .cr(8)
26089         .kr(25)
26090         .channels(channels)
26091         .qmin(128)
26092         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26093     }
26094   }
26095 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,c_gt_8_with_qmax)26096   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_gt_8_with_qmax) {
26097     for (uint32_t channels = 9; channels < 16; channels++) {
26098       DWConvMicrokernelTester()
26099         .cr(8)
26100         .kr(25)
26101         .channels(channels)
26102         .qmax(128)
26103         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26104     }
26105   }
26106 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,multipixel)26107   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel) {
26108     for (size_t channels = 1; channels <= 40; channels += 7) {
26109       DWConvMicrokernelTester()
26110         .cr(8)
26111         .kr(25)
26112         .channels(channels)
26113         .width(3)
26114         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26115     }
26116   }
26117 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,multipixel_with_step)26118   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_step) {
26119     for (size_t channels = 1; channels <= 40; channels += 7) {
26120       for (size_t step = 2; step <= 25; step++) {
26121         DWConvMicrokernelTester()
26122           .cr(8)
26123           .kr(25)
26124           .channels(channels)
26125           .width(3)
26126           .step(step)
26127           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26128       }
26129     }
26130   }
26131 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,multipixel_with_output_stride)26132   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_output_stride) {
26133     for (size_t channels = 1; channels <= 40; channels += 7) {
26134       DWConvMicrokernelTester()
26135         .cr(8)
26136         .kr(25)
26137         .channels(8)
26138         .width(5)
26139         .output_stride(43)
26140         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26141     }
26142   }
26143 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,multipixel_with_qmin)26144   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_qmin) {
26145     for (size_t channels = 1; channels <= 40; channels += 7) {
26146       DWConvMicrokernelTester()
26147         .cr(8)
26148         .kr(25)
26149         .channels(channels)
26150         .width(3)
26151         .qmin(128)
26152         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26153     }
26154   }
26155 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,multipixel_with_qmax)26156   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_qmax) {
26157     for (size_t channels = 1; channels <= 40; channels += 7) {
26158       DWConvMicrokernelTester()
26159         .cr(8)
26160         .kr(25)
26161         .channels(channels)
26162         .width(3)
26163         .qmax(128)
26164         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26165     }
26166   }
26167 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,input_offset)26168   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, input_offset) {
26169     for (uint32_t channels = 16; channels < 128; channels += 24) {
26170       DWConvMicrokernelTester()
26171         .cr(8)
26172         .kr(25)
26173         .channels(channels)
26174         .input_offset(176)
26175         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26176     }
26177   }
26178 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM,zero)26179   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, zero) {
26180     for (uint32_t mz = 0; mz < 25; mz++) {
26181       for (uint32_t channels = 16; channels < 128; channels += 24) {
26182         DWConvMicrokernelTester()
26183           .cr(8)
26184           .kr(25)
26185           .channels(channels)
26186           .input_offset(176)
26187           .zero_index(mz)
26188           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
26189       }
26190     }
26191   }
26192 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26193 
26194 
26195 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,c_eq_8)26196   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_eq_8) {
26197     DWConvMicrokernelTester()
26198       .cr(8)
26199       .kr(25)
26200       .channels(8)
26201       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26202   }
26203 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,c_div_8)26204   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_div_8) {
26205     for (uint32_t channels = 16; channels < 128; channels += 24) {
26206       DWConvMicrokernelTester()
26207         .cr(8)
26208         .kr(25)
26209         .channels(channels)
26210         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26211     }
26212   }
26213 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,c_div_8_with_qmin)26214   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_div_8_with_qmin) {
26215     for (uint32_t channels = 16; channels < 128; channels += 24) {
26216       DWConvMicrokernelTester()
26217         .cr(8)
26218         .kr(25)
26219         .channels(channels)
26220         .qmin(128)
26221         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26222     }
26223   }
26224 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,c_div_8_with_qmax)26225   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_div_8_with_qmax) {
26226     for (uint32_t channels = 16; channels < 128; channels += 24) {
26227       DWConvMicrokernelTester()
26228         .cr(8)
26229         .kr(25)
26230         .channels(channels)
26231         .qmax(128)
26232         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26233     }
26234   }
26235 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,c_lt_8)26236   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_lt_8) {
26237     for (uint32_t channels = 1; channels < 8; channels++) {
26238       DWConvMicrokernelTester()
26239         .cr(8)
26240         .kr(25)
26241         .channels(channels)
26242         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26243     }
26244   }
26245 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,c_gt_8)26246   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_gt_8) {
26247     for (uint32_t channels = 9; channels < 16; channels++) {
26248       DWConvMicrokernelTester()
26249         .cr(8)
26250         .kr(25)
26251         .channels(channels)
26252         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26253     }
26254   }
26255 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,c_gt_8_with_qmin)26256   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_gt_8_with_qmin) {
26257     for (uint32_t channels = 9; channels < 16; channels++) {
26258       DWConvMicrokernelTester()
26259         .cr(8)
26260         .kr(25)
26261         .channels(channels)
26262         .qmin(128)
26263         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26264     }
26265   }
26266 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,c_gt_8_with_qmax)26267   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_gt_8_with_qmax) {
26268     for (uint32_t channels = 9; channels < 16; channels++) {
26269       DWConvMicrokernelTester()
26270         .cr(8)
26271         .kr(25)
26272         .channels(channels)
26273         .qmax(128)
26274         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26275     }
26276   }
26277 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,multipixel)26278   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, multipixel) {
26279     for (size_t channels = 1; channels <= 40; channels += 7) {
26280       DWConvMicrokernelTester()
26281         .cr(8)
26282         .kr(25)
26283         .channels(channels)
26284         .width(3)
26285         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26286     }
26287   }
26288 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,multipixel_with_step)26289   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, multipixel_with_step) {
26290     for (size_t channels = 1; channels <= 40; channels += 7) {
26291       for (size_t step = 2; step <= 25; step++) {
26292         DWConvMicrokernelTester()
26293           .cr(8)
26294           .kr(25)
26295           .channels(channels)
26296           .width(3)
26297           .step(step)
26298           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26299       }
26300     }
26301   }
26302 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,multipixel_with_output_stride)26303   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
26304     for (size_t channels = 1; channels <= 40; channels += 7) {
26305       DWConvMicrokernelTester()
26306         .cr(8)
26307         .kr(25)
26308         .channels(8)
26309         .width(5)
26310         .output_stride(43)
26311         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26312     }
26313   }
26314 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,multipixel_with_qmin)26315   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
26316     for (size_t channels = 1; channels <= 40; channels += 7) {
26317       DWConvMicrokernelTester()
26318         .cr(8)
26319         .kr(25)
26320         .channels(channels)
26321         .width(3)
26322         .qmin(128)
26323         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26324     }
26325   }
26326 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,multipixel_with_qmax)26327   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
26328     for (size_t channels = 1; channels <= 40; channels += 7) {
26329       DWConvMicrokernelTester()
26330         .cr(8)
26331         .kr(25)
26332         .channels(channels)
26333         .width(3)
26334         .qmax(128)
26335         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26336     }
26337   }
26338 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,input_offset)26339   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, input_offset) {
26340     for (uint32_t channels = 16; channels < 128; channels += 24) {
26341       DWConvMicrokernelTester()
26342         .cr(8)
26343         .kr(25)
26344         .channels(channels)
26345         .input_offset(176)
26346         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26347     }
26348   }
26349 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2,zero)26350   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, zero) {
26351     for (uint32_t mz = 0; mz < 25; mz++) {
26352       for (uint32_t channels = 16; channels < 128; channels += 24) {
26353         DWConvMicrokernelTester()
26354           .cr(8)
26355           .kr(25)
26356           .channels(channels)
26357           .input_offset(176)
26358           .zero_index(mz)
26359           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
26360       }
26361     }
26362   }
26363 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26364 
26365 
26366 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,c_eq_8)26367   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_eq_8) {
26368     DWConvMicrokernelTester()
26369       .cr(8)
26370       .kr(25)
26371       .channels(8)
26372       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26373   }
26374 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,c_div_8)26375   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_div_8) {
26376     for (uint32_t channels = 16; channels < 128; channels += 24) {
26377       DWConvMicrokernelTester()
26378         .cr(8)
26379         .kr(25)
26380         .channels(channels)
26381         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26382     }
26383   }
26384 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,c_div_8_with_qmin)26385   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_div_8_with_qmin) {
26386     for (uint32_t channels = 16; channels < 128; channels += 24) {
26387       DWConvMicrokernelTester()
26388         .cr(8)
26389         .kr(25)
26390         .channels(channels)
26391         .qmin(128)
26392         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26393     }
26394   }
26395 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,c_div_8_with_qmax)26396   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_div_8_with_qmax) {
26397     for (uint32_t channels = 16; channels < 128; channels += 24) {
26398       DWConvMicrokernelTester()
26399         .cr(8)
26400         .kr(25)
26401         .channels(channels)
26402         .qmax(128)
26403         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26404     }
26405   }
26406 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,c_lt_8)26407   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_lt_8) {
26408     for (uint32_t channels = 1; channels < 8; channels++) {
26409       DWConvMicrokernelTester()
26410         .cr(8)
26411         .kr(25)
26412         .channels(channels)
26413         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26414     }
26415   }
26416 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,c_gt_8)26417   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_gt_8) {
26418     for (uint32_t channels = 9; channels < 16; channels++) {
26419       DWConvMicrokernelTester()
26420         .cr(8)
26421         .kr(25)
26422         .channels(channels)
26423         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26424     }
26425   }
26426 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,c_gt_8_with_qmin)26427   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_gt_8_with_qmin) {
26428     for (uint32_t channels = 9; channels < 16; channels++) {
26429       DWConvMicrokernelTester()
26430         .cr(8)
26431         .kr(25)
26432         .channels(channels)
26433         .qmin(128)
26434         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26435     }
26436   }
26437 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,c_gt_8_with_qmax)26438   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_gt_8_with_qmax) {
26439     for (uint32_t channels = 9; channels < 16; channels++) {
26440       DWConvMicrokernelTester()
26441         .cr(8)
26442         .kr(25)
26443         .channels(channels)
26444         .qmax(128)
26445         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26446     }
26447   }
26448 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,multipixel)26449   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel) {
26450     for (size_t channels = 1; channels <= 40; channels += 7) {
26451       DWConvMicrokernelTester()
26452         .cr(8)
26453         .kr(25)
26454         .channels(channels)
26455         .width(3)
26456         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26457     }
26458   }
26459 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,multipixel_with_step)26460   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_step) {
26461     for (size_t channels = 1; channels <= 40; channels += 7) {
26462       for (size_t step = 2; step <= 25; step++) {
26463         DWConvMicrokernelTester()
26464           .cr(8)
26465           .kr(25)
26466           .channels(channels)
26467           .width(3)
26468           .step(step)
26469           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26470       }
26471     }
26472   }
26473 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,multipixel_with_output_stride)26474   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_output_stride) {
26475     for (size_t channels = 1; channels <= 40; channels += 7) {
26476       DWConvMicrokernelTester()
26477         .cr(8)
26478         .kr(25)
26479         .channels(8)
26480         .width(5)
26481         .output_stride(43)
26482         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26483     }
26484   }
26485 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,multipixel_with_qmin)26486   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_qmin) {
26487     for (size_t channels = 1; channels <= 40; channels += 7) {
26488       DWConvMicrokernelTester()
26489         .cr(8)
26490         .kr(25)
26491         .channels(channels)
26492         .width(3)
26493         .qmin(128)
26494         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26495     }
26496   }
26497 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,multipixel_with_qmax)26498   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_qmax) {
26499     for (size_t channels = 1; channels <= 40; channels += 7) {
26500       DWConvMicrokernelTester()
26501         .cr(8)
26502         .kr(25)
26503         .channels(channels)
26504         .width(3)
26505         .qmax(128)
26506         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26507     }
26508   }
26509 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,input_offset)26510   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, input_offset) {
26511     for (uint32_t channels = 16; channels < 128; channels += 24) {
26512       DWConvMicrokernelTester()
26513         .cr(8)
26514         .kr(25)
26515         .channels(channels)
26516         .input_offset(176)
26517         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26518     }
26519   }
26520 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86,zero)26521   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, zero) {
26522     for (uint32_t mz = 0; mz < 25; mz++) {
26523       for (uint32_t channels = 16; channels < 128; channels += 24) {
26524         DWConvMicrokernelTester()
26525           .cr(8)
26526           .kr(25)
26527           .channels(channels)
26528           .input_offset(176)
26529           .zero_index(mz)
26530           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
26531       }
26532     }
26533   }
26534 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26535 
26536 
26537 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,c_eq_8)26538   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_eq_8) {
26539     DWConvMicrokernelTester()
26540       .cr(8)
26541       .kr(25)
26542       .channels(8)
26543       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26544   }
26545 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,c_div_8)26546   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_div_8) {
26547     for (uint32_t channels = 16; channels < 128; channels += 24) {
26548       DWConvMicrokernelTester()
26549         .cr(8)
26550         .kr(25)
26551         .channels(channels)
26552         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26553     }
26554   }
26555 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,c_div_8_with_qmin)26556   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_div_8_with_qmin) {
26557     for (uint32_t channels = 16; channels < 128; channels += 24) {
26558       DWConvMicrokernelTester()
26559         .cr(8)
26560         .kr(25)
26561         .channels(channels)
26562         .qmin(128)
26563         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26564     }
26565   }
26566 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,c_div_8_with_qmax)26567   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_div_8_with_qmax) {
26568     for (uint32_t channels = 16; channels < 128; channels += 24) {
26569       DWConvMicrokernelTester()
26570         .cr(8)
26571         .kr(25)
26572         .channels(channels)
26573         .qmax(128)
26574         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26575     }
26576   }
26577 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,c_lt_8)26578   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_lt_8) {
26579     for (uint32_t channels = 1; channels < 8; channels++) {
26580       DWConvMicrokernelTester()
26581         .cr(8)
26582         .kr(25)
26583         .channels(channels)
26584         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26585     }
26586   }
26587 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,c_gt_8)26588   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_gt_8) {
26589     for (uint32_t channels = 9; channels < 16; channels++) {
26590       DWConvMicrokernelTester()
26591         .cr(8)
26592         .kr(25)
26593         .channels(channels)
26594         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26595     }
26596   }
26597 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,c_gt_8_with_qmin)26598   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_gt_8_with_qmin) {
26599     for (uint32_t channels = 9; channels < 16; channels++) {
26600       DWConvMicrokernelTester()
26601         .cr(8)
26602         .kr(25)
26603         .channels(channels)
26604         .qmin(128)
26605         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26606     }
26607   }
26608 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,c_gt_8_with_qmax)26609   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_gt_8_with_qmax) {
26610     for (uint32_t channels = 9; channels < 16; channels++) {
26611       DWConvMicrokernelTester()
26612         .cr(8)
26613         .kr(25)
26614         .channels(channels)
26615         .qmax(128)
26616         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26617     }
26618   }
26619 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,multipixel)26620   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, multipixel) {
26621     for (size_t channels = 1; channels <= 40; channels += 7) {
26622       DWConvMicrokernelTester()
26623         .cr(8)
26624         .kr(25)
26625         .channels(channels)
26626         .width(3)
26627         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26628     }
26629   }
26630 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,multipixel_with_step)26631   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, multipixel_with_step) {
26632     for (size_t channels = 1; channels <= 40; channels += 7) {
26633       for (size_t step = 2; step <= 25; step++) {
26634         DWConvMicrokernelTester()
26635           .cr(8)
26636           .kr(25)
26637           .channels(channels)
26638           .width(3)
26639           .step(step)
26640           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26641       }
26642     }
26643   }
26644 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,multipixel_with_output_stride)26645   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
26646     for (size_t channels = 1; channels <= 40; channels += 7) {
26647       DWConvMicrokernelTester()
26648         .cr(8)
26649         .kr(25)
26650         .channels(8)
26651         .width(5)
26652         .output_stride(43)
26653         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26654     }
26655   }
26656 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,multipixel_with_qmin)26657   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
26658     for (size_t channels = 1; channels <= 40; channels += 7) {
26659       DWConvMicrokernelTester()
26660         .cr(8)
26661         .kr(25)
26662         .channels(channels)
26663         .width(3)
26664         .qmin(128)
26665         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26666     }
26667   }
26668 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,multipixel_with_qmax)26669   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
26670     for (size_t channels = 1; channels <= 40; channels += 7) {
26671       DWConvMicrokernelTester()
26672         .cr(8)
26673         .kr(25)
26674         .channels(channels)
26675         .width(3)
26676         .qmax(128)
26677         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26678     }
26679   }
26680 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,input_offset)26681   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, input_offset) {
26682     for (uint32_t channels = 16; channels < 128; channels += 24) {
26683       DWConvMicrokernelTester()
26684         .cr(8)
26685         .kr(25)
26686         .channels(channels)
26687         .input_offset(176)
26688         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26689     }
26690   }
26691 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2,zero)26692   TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, zero) {
26693     for (uint32_t mz = 0; mz < 25; mz++) {
26694       for (uint32_t channels = 16; channels < 128; channels += 24) {
26695         DWConvMicrokernelTester()
26696           .cr(8)
26697           .kr(25)
26698           .channels(channels)
26699           .input_offset(176)
26700           .zero_index(mz)
26701           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
26702       }
26703     }
26704   }
26705 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
26706 
26707 
26708 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,c_eq_4)26709   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, c_eq_4) {
26710     DWConvMicrokernelTester()
26711       .cr(4)
26712       .kr(3)
26713       .channels(4)
26714       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26715   }
26716 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,c_div_4)26717   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, c_div_4) {
26718     for (uint32_t channels = 8; channels < 64; channels += 12) {
26719       DWConvMicrokernelTester()
26720         .cr(4)
26721         .kr(3)
26722         .channels(channels)
26723         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26724     }
26725   }
26726 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,c_div_4_with_qmin)26727   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, c_div_4_with_qmin) {
26728     for (uint32_t channels = 8; channels < 64; channels += 12) {
26729       DWConvMicrokernelTester()
26730         .cr(4)
26731         .kr(3)
26732         .channels(channels)
26733         .qmin(128)
26734         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26735     }
26736   }
26737 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,c_div_4_with_qmax)26738   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, c_div_4_with_qmax) {
26739     for (uint32_t channels = 8; channels < 64; channels += 12) {
26740       DWConvMicrokernelTester()
26741         .cr(4)
26742         .kr(3)
26743         .channels(channels)
26744         .qmax(128)
26745         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26746     }
26747   }
26748 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,c_lt_4)26749   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, c_lt_4) {
26750     for (uint32_t channels = 1; channels < 4; channels++) {
26751       DWConvMicrokernelTester()
26752         .cr(4)
26753         .kr(3)
26754         .channels(channels)
26755         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26756     }
26757   }
26758 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,c_gt_4)26759   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, c_gt_4) {
26760     for (uint32_t channels = 5; channels < 8; channels++) {
26761       DWConvMicrokernelTester()
26762         .cr(4)
26763         .kr(3)
26764         .channels(channels)
26765         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26766     }
26767   }
26768 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,c_gt_4_with_qmin)26769   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, c_gt_4_with_qmin) {
26770     for (uint32_t channels = 5; channels < 8; channels++) {
26771       DWConvMicrokernelTester()
26772         .cr(4)
26773         .kr(3)
26774         .channels(channels)
26775         .qmin(128)
26776         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26777     }
26778   }
26779 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,c_gt_4_with_qmax)26780   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, c_gt_4_with_qmax) {
26781     for (uint32_t channels = 5; channels < 8; channels++) {
26782       DWConvMicrokernelTester()
26783         .cr(4)
26784         .kr(3)
26785         .channels(channels)
26786         .qmax(128)
26787         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26788     }
26789   }
26790 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,multipixel)26791   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, multipixel) {
26792     for (size_t channels = 1; channels <= 20; channels += 3) {
26793       DWConvMicrokernelTester()
26794         .cr(4)
26795         .kr(3)
26796         .channels(channels)
26797         .width(3)
26798         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26799     }
26800   }
26801 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,multipixel_with_step)26802   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, multipixel_with_step) {
26803     for (size_t channels = 1; channels <= 20; channels += 3) {
26804       for (size_t step = 2; step <= 3; step++) {
26805         DWConvMicrokernelTester()
26806           .cr(4)
26807           .kr(3)
26808           .channels(channels)
26809           .width(3)
26810           .step(step)
26811           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26812       }
26813     }
26814   }
26815 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,multipixel_with_output_stride)26816   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, multipixel_with_output_stride) {
26817     for (size_t channels = 1; channels <= 20; channels += 3) {
26818       DWConvMicrokernelTester()
26819         .cr(4)
26820         .kr(3)
26821         .channels(4)
26822         .width(5)
26823         .output_stride(23)
26824         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26825     }
26826   }
26827 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,multipixel_with_qmin)26828   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, multipixel_with_qmin) {
26829     for (size_t channels = 1; channels <= 20; channels += 3) {
26830       DWConvMicrokernelTester()
26831         .cr(4)
26832         .kr(3)
26833         .channels(channels)
26834         .width(3)
26835         .qmin(128)
26836         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26837     }
26838   }
26839 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,multipixel_with_qmax)26840   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, multipixel_with_qmax) {
26841     for (size_t channels = 1; channels <= 20; channels += 3) {
26842       DWConvMicrokernelTester()
26843         .cr(4)
26844         .kr(3)
26845         .channels(channels)
26846         .width(3)
26847         .qmax(128)
26848         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26849     }
26850   }
26851 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,input_offset)26852   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, input_offset) {
26853     for (uint32_t channels = 8; channels < 64; channels += 12) {
26854       DWConvMicrokernelTester()
26855         .cr(4)
26856         .kr(3)
26857         .channels(channels)
26858         .input_offset(112)
26859         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26860     }
26861   }
26862 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD,zero)26863   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD, zero) {
26864     for (uint32_t mz = 0; mz < 3; mz++) {
26865       for (uint32_t channels = 8; channels < 64; channels += 12) {
26866         DWConvMicrokernelTester()
26867           .cr(4)
26868           .kr(3)
26869           .channels(channels)
26870           .input_offset(112)
26871           .zero_index(mz)
26872           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
26873       }
26874     }
26875   }
26876 #endif  // XNN_ARCH_WASMRELAXEDSIMD
26877 
26878 
26879 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,c_eq_4)26880   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, c_eq_4) {
26881     DWConvMicrokernelTester()
26882       .cr(4)
26883       .kr(3)
26884       .channels(4)
26885       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
26886   }
26887 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,c_div_4)26888   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, c_div_4) {
26889     for (uint32_t channels = 8; channels < 64; channels += 12) {
26890       DWConvMicrokernelTester()
26891         .cr(4)
26892         .kr(3)
26893         .channels(channels)
26894         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
26895     }
26896   }
26897 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,c_div_4_with_qmin)26898   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, c_div_4_with_qmin) {
26899     for (uint32_t channels = 8; channels < 64; channels += 12) {
26900       DWConvMicrokernelTester()
26901         .cr(4)
26902         .kr(3)
26903         .channels(channels)
26904         .qmin(128)
26905         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
26906     }
26907   }
26908 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,c_div_4_with_qmax)26909   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, c_div_4_with_qmax) {
26910     for (uint32_t channels = 8; channels < 64; channels += 12) {
26911       DWConvMicrokernelTester()
26912         .cr(4)
26913         .kr(3)
26914         .channels(channels)
26915         .qmax(128)
26916         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
26917     }
26918   }
26919 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,c_lt_4)26920   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, c_lt_4) {
26921     for (uint32_t channels = 1; channels < 4; channels++) {
26922       DWConvMicrokernelTester()
26923         .cr(4)
26924         .kr(3)
26925         .channels(channels)
26926         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
26927     }
26928   }
26929 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,c_gt_4)26930   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, c_gt_4) {
26931     for (uint32_t channels = 5; channels < 8; channels++) {
26932       DWConvMicrokernelTester()
26933         .cr(4)
26934         .kr(3)
26935         .channels(channels)
26936         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
26937     }
26938   }
26939 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,c_gt_4_with_qmin)26940   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, c_gt_4_with_qmin) {
26941     for (uint32_t channels = 5; channels < 8; channels++) {
26942       DWConvMicrokernelTester()
26943         .cr(4)
26944         .kr(3)
26945         .channels(channels)
26946         .qmin(128)
26947         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
26948     }
26949   }
26950 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,c_gt_4_with_qmax)26951   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, c_gt_4_with_qmax) {
26952     for (uint32_t channels = 5; channels < 8; channels++) {
26953       DWConvMicrokernelTester()
26954         .cr(4)
26955         .kr(3)
26956         .channels(channels)
26957         .qmax(128)
26958         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
26959     }
26960   }
26961 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,multipixel)26962   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, multipixel) {
26963     for (size_t channels = 1; channels <= 20; channels += 3) {
26964       DWConvMicrokernelTester()
26965         .cr(4)
26966         .kr(3)
26967         .channels(channels)
26968         .width(3)
26969         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
26970     }
26971   }
26972 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,multipixel_with_step)26973   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, multipixel_with_step) {
26974     for (size_t channels = 1; channels <= 20; channels += 3) {
26975       for (size_t step = 2; step <= 3; step++) {
26976         DWConvMicrokernelTester()
26977           .cr(4)
26978           .kr(3)
26979           .channels(channels)
26980           .width(3)
26981           .step(step)
26982           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
26983       }
26984     }
26985   }
26986 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,multipixel_with_output_stride)26987   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, multipixel_with_output_stride) {
26988     for (size_t channels = 1; channels <= 20; channels += 3) {
26989       DWConvMicrokernelTester()
26990         .cr(4)
26991         .kr(3)
26992         .channels(4)
26993         .width(5)
26994         .output_stride(23)
26995         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
26996     }
26997   }
26998 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,multipixel_with_qmin)26999   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, multipixel_with_qmin) {
27000     for (size_t channels = 1; channels <= 20; channels += 3) {
27001       DWConvMicrokernelTester()
27002         .cr(4)
27003         .kr(3)
27004         .channels(channels)
27005         .width(3)
27006         .qmin(128)
27007         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27008     }
27009   }
27010 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,multipixel_with_qmax)27011   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, multipixel_with_qmax) {
27012     for (size_t channels = 1; channels <= 20; channels += 3) {
27013       DWConvMicrokernelTester()
27014         .cr(4)
27015         .kr(3)
27016         .channels(channels)
27017         .width(3)
27018         .qmax(128)
27019         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27020     }
27021   }
27022 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,input_offset)27023   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, input_offset) {
27024     for (uint32_t channels = 8; channels < 64; channels += 12) {
27025       DWConvMicrokernelTester()
27026         .cr(4)
27027         .kr(3)
27028         .channels(channels)
27029         .input_offset(112)
27030         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27031     }
27032   }
27033 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2,zero)27034   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_ACC2, zero) {
27035     for (uint32_t mz = 0; mz < 3; mz++) {
27036       for (uint32_t channels = 8; channels < 64; channels += 12) {
27037         DWConvMicrokernelTester()
27038           .cr(4)
27039           .kr(3)
27040           .channels(channels)
27041           .input_offset(112)
27042           .zero_index(mz)
27043           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27044       }
27045     }
27046   }
27047 #endif  // XNN_ARCH_WASMRELAXEDSIMD
27048 
27049 
27050 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,c_eq_4)27051   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, c_eq_4) {
27052     DWConvMicrokernelTester()
27053       .cr(4)
27054       .kr(3)
27055       .channels(4)
27056       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27057   }
27058 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,c_div_4)27059   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, c_div_4) {
27060     for (uint32_t channels = 8; channels < 64; channels += 12) {
27061       DWConvMicrokernelTester()
27062         .cr(4)
27063         .kr(3)
27064         .channels(channels)
27065         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27066     }
27067   }
27068 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,c_div_4_with_qmin)27069   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, c_div_4_with_qmin) {
27070     for (uint32_t channels = 8; channels < 64; channels += 12) {
27071       DWConvMicrokernelTester()
27072         .cr(4)
27073         .kr(3)
27074         .channels(channels)
27075         .qmin(128)
27076         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27077     }
27078   }
27079 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,c_div_4_with_qmax)27080   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, c_div_4_with_qmax) {
27081     for (uint32_t channels = 8; channels < 64; channels += 12) {
27082       DWConvMicrokernelTester()
27083         .cr(4)
27084         .kr(3)
27085         .channels(channels)
27086         .qmax(128)
27087         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27088     }
27089   }
27090 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,c_lt_4)27091   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, c_lt_4) {
27092     for (uint32_t channels = 1; channels < 4; channels++) {
27093       DWConvMicrokernelTester()
27094         .cr(4)
27095         .kr(3)
27096         .channels(channels)
27097         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27098     }
27099   }
27100 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,c_gt_4)27101   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, c_gt_4) {
27102     for (uint32_t channels = 5; channels < 8; channels++) {
27103       DWConvMicrokernelTester()
27104         .cr(4)
27105         .kr(3)
27106         .channels(channels)
27107         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27108     }
27109   }
27110 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,c_gt_4_with_qmin)27111   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, c_gt_4_with_qmin) {
27112     for (uint32_t channels = 5; channels < 8; channels++) {
27113       DWConvMicrokernelTester()
27114         .cr(4)
27115         .kr(3)
27116         .channels(channels)
27117         .qmin(128)
27118         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27119     }
27120   }
27121 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,c_gt_4_with_qmax)27122   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, c_gt_4_with_qmax) {
27123     for (uint32_t channels = 5; channels < 8; channels++) {
27124       DWConvMicrokernelTester()
27125         .cr(4)
27126         .kr(3)
27127         .channels(channels)
27128         .qmax(128)
27129         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27130     }
27131   }
27132 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,multipixel)27133   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, multipixel) {
27134     for (size_t channels = 1; channels <= 20; channels += 3) {
27135       DWConvMicrokernelTester()
27136         .cr(4)
27137         .kr(3)
27138         .channels(channels)
27139         .width(3)
27140         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27141     }
27142   }
27143 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,multipixel_with_step)27144   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, multipixel_with_step) {
27145     for (size_t channels = 1; channels <= 20; channels += 3) {
27146       for (size_t step = 2; step <= 3; step++) {
27147         DWConvMicrokernelTester()
27148           .cr(4)
27149           .kr(3)
27150           .channels(channels)
27151           .width(3)
27152           .step(step)
27153           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27154       }
27155     }
27156   }
27157 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,multipixel_with_output_stride)27158   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, multipixel_with_output_stride) {
27159     for (size_t channels = 1; channels <= 20; channels += 3) {
27160       DWConvMicrokernelTester()
27161         .cr(4)
27162         .kr(3)
27163         .channels(4)
27164         .width(5)
27165         .output_stride(23)
27166         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27167     }
27168   }
27169 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,multipixel_with_qmin)27170   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, multipixel_with_qmin) {
27171     for (size_t channels = 1; channels <= 20; channels += 3) {
27172       DWConvMicrokernelTester()
27173         .cr(4)
27174         .kr(3)
27175         .channels(channels)
27176         .width(3)
27177         .qmin(128)
27178         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27179     }
27180   }
27181 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,multipixel_with_qmax)27182   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, multipixel_with_qmax) {
27183     for (size_t channels = 1; channels <= 20; channels += 3) {
27184       DWConvMicrokernelTester()
27185         .cr(4)
27186         .kr(3)
27187         .channels(channels)
27188         .width(3)
27189         .qmax(128)
27190         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27191     }
27192   }
27193 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,input_offset)27194   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, input_offset) {
27195     for (uint32_t channels = 8; channels < 64; channels += 12) {
27196       DWConvMicrokernelTester()
27197         .cr(4)
27198         .kr(3)
27199         .channels(channels)
27200         .input_offset(112)
27201         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27202     }
27203   }
27204 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA,zero)27205   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA, zero) {
27206     for (uint32_t mz = 0; mz < 3; mz++) {
27207       for (uint32_t channels = 8; channels < 64; channels += 12) {
27208         DWConvMicrokernelTester()
27209           .cr(4)
27210           .kr(3)
27211           .channels(channels)
27212           .input_offset(112)
27213           .zero_index(mz)
27214           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27215       }
27216     }
27217   }
27218 #endif  // XNN_ARCH_WASMRELAXEDSIMD
27219 
27220 
27221 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,c_eq_4)27222   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, c_eq_4) {
27223     DWConvMicrokernelTester()
27224       .cr(4)
27225       .kr(3)
27226       .channels(4)
27227       .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27228   }
27229 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,c_div_4)27230   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, c_div_4) {
27231     for (uint32_t channels = 8; channels < 64; channels += 12) {
27232       DWConvMicrokernelTester()
27233         .cr(4)
27234         .kr(3)
27235         .channels(channels)
27236         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27237     }
27238   }
27239 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,c_div_4_with_qmin)27240   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, c_div_4_with_qmin) {
27241     for (uint32_t channels = 8; channels < 64; channels += 12) {
27242       DWConvMicrokernelTester()
27243         .cr(4)
27244         .kr(3)
27245         .channels(channels)
27246         .qmin(128)
27247         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27248     }
27249   }
27250 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,c_div_4_with_qmax)27251   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, c_div_4_with_qmax) {
27252     for (uint32_t channels = 8; channels < 64; channels += 12) {
27253       DWConvMicrokernelTester()
27254         .cr(4)
27255         .kr(3)
27256         .channels(channels)
27257         .qmax(128)
27258         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27259     }
27260   }
27261 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,c_lt_4)27262   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, c_lt_4) {
27263     for (uint32_t channels = 1; channels < 4; channels++) {
27264       DWConvMicrokernelTester()
27265         .cr(4)
27266         .kr(3)
27267         .channels(channels)
27268         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27269     }
27270   }
27271 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,c_gt_4)27272   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, c_gt_4) {
27273     for (uint32_t channels = 5; channels < 8; channels++) {
27274       DWConvMicrokernelTester()
27275         .cr(4)
27276         .kr(3)
27277         .channels(channels)
27278         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27279     }
27280   }
27281 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,c_gt_4_with_qmin)27282   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, c_gt_4_with_qmin) {
27283     for (uint32_t channels = 5; channels < 8; channels++) {
27284       DWConvMicrokernelTester()
27285         .cr(4)
27286         .kr(3)
27287         .channels(channels)
27288         .qmin(128)
27289         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27290     }
27291   }
27292 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,c_gt_4_with_qmax)27293   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, c_gt_4_with_qmax) {
27294     for (uint32_t channels = 5; channels < 8; channels++) {
27295       DWConvMicrokernelTester()
27296         .cr(4)
27297         .kr(3)
27298         .channels(channels)
27299         .qmax(128)
27300         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27301     }
27302   }
27303 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,multipixel)27304   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, multipixel) {
27305     for (size_t channels = 1; channels <= 20; channels += 3) {
27306       DWConvMicrokernelTester()
27307         .cr(4)
27308         .kr(3)
27309         .channels(channels)
27310         .width(3)
27311         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27312     }
27313   }
27314 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_step)27315   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_step) {
27316     for (size_t channels = 1; channels <= 20; channels += 3) {
27317       for (size_t step = 2; step <= 3; step++) {
27318         DWConvMicrokernelTester()
27319           .cr(4)
27320           .kr(3)
27321           .channels(channels)
27322           .width(3)
27323           .step(step)
27324           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27325       }
27326     }
27327   }
27328 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_output_stride)27329   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_output_stride) {
27330     for (size_t channels = 1; channels <= 20; channels += 3) {
27331       DWConvMicrokernelTester()
27332         .cr(4)
27333         .kr(3)
27334         .channels(4)
27335         .width(5)
27336         .output_stride(23)
27337         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27338     }
27339   }
27340 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmin)27341   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmin) {
27342     for (size_t channels = 1; channels <= 20; channels += 3) {
27343       DWConvMicrokernelTester()
27344         .cr(4)
27345         .kr(3)
27346         .channels(channels)
27347         .width(3)
27348         .qmin(128)
27349         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27350     }
27351   }
27352 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmax)27353   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmax) {
27354     for (size_t channels = 1; channels <= 20; channels += 3) {
27355       DWConvMicrokernelTester()
27356         .cr(4)
27357         .kr(3)
27358         .channels(channels)
27359         .width(3)
27360         .qmax(128)
27361         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27362     }
27363   }
27364 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,input_offset)27365   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, input_offset) {
27366     for (uint32_t channels = 8; channels < 64; channels += 12) {
27367       DWConvMicrokernelTester()
27368         .cr(4)
27369         .kr(3)
27370         .channels(channels)
27371         .input_offset(112)
27372         .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27373     }
27374   }
27375 
TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2,zero)27376   TEST(F32_DWCONV_MINMAX_UP4X3__WASMRELAXEDSIMD_FMA_ACC2, zero) {
27377     for (uint32_t mz = 0; mz < 3; mz++) {
27378       for (uint32_t channels = 8; channels < 64; channels += 12) {
27379         DWConvMicrokernelTester()
27380           .cr(4)
27381           .kr(3)
27382           .channels(channels)
27383           .input_offset(112)
27384           .zero_index(mz)
27385           .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27386       }
27387     }
27388   }
27389 #endif  // XNN_ARCH_WASMRELAXEDSIMD
27390 
27391 
27392 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,c_eq_4)27393   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, c_eq_4) {
27394     DWConvMicrokernelTester()
27395       .cr(4)
27396       .kr(4)
27397       .channels(4)
27398       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27399   }
27400 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,c_div_4)27401   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, c_div_4) {
27402     for (uint32_t channels = 8; channels < 64; channels += 12) {
27403       DWConvMicrokernelTester()
27404         .cr(4)
27405         .kr(4)
27406         .channels(channels)
27407         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27408     }
27409   }
27410 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,c_div_4_with_qmin)27411   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, c_div_4_with_qmin) {
27412     for (uint32_t channels = 8; channels < 64; channels += 12) {
27413       DWConvMicrokernelTester()
27414         .cr(4)
27415         .kr(4)
27416         .channels(channels)
27417         .qmin(128)
27418         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27419     }
27420   }
27421 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,c_div_4_with_qmax)27422   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, c_div_4_with_qmax) {
27423     for (uint32_t channels = 8; channels < 64; channels += 12) {
27424       DWConvMicrokernelTester()
27425         .cr(4)
27426         .kr(4)
27427         .channels(channels)
27428         .qmax(128)
27429         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27430     }
27431   }
27432 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,c_lt_4)27433   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, c_lt_4) {
27434     for (uint32_t channels = 1; channels < 4; channels++) {
27435       DWConvMicrokernelTester()
27436         .cr(4)
27437         .kr(4)
27438         .channels(channels)
27439         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27440     }
27441   }
27442 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,c_gt_4)27443   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, c_gt_4) {
27444     for (uint32_t channels = 5; channels < 8; channels++) {
27445       DWConvMicrokernelTester()
27446         .cr(4)
27447         .kr(4)
27448         .channels(channels)
27449         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27450     }
27451   }
27452 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,c_gt_4_with_qmin)27453   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, c_gt_4_with_qmin) {
27454     for (uint32_t channels = 5; channels < 8; channels++) {
27455       DWConvMicrokernelTester()
27456         .cr(4)
27457         .kr(4)
27458         .channels(channels)
27459         .qmin(128)
27460         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27461     }
27462   }
27463 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,c_gt_4_with_qmax)27464   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, c_gt_4_with_qmax) {
27465     for (uint32_t channels = 5; channels < 8; channels++) {
27466       DWConvMicrokernelTester()
27467         .cr(4)
27468         .kr(4)
27469         .channels(channels)
27470         .qmax(128)
27471         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27472     }
27473   }
27474 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,multipixel)27475   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, multipixel) {
27476     for (size_t channels = 1; channels <= 20; channels += 3) {
27477       DWConvMicrokernelTester()
27478         .cr(4)
27479         .kr(4)
27480         .channels(channels)
27481         .width(3)
27482         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27483     }
27484   }
27485 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,multipixel_with_step)27486   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, multipixel_with_step) {
27487     for (size_t channels = 1; channels <= 20; channels += 3) {
27488       for (size_t step = 2; step <= 4; step++) {
27489         DWConvMicrokernelTester()
27490           .cr(4)
27491           .kr(4)
27492           .channels(channels)
27493           .width(3)
27494           .step(step)
27495           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27496       }
27497     }
27498   }
27499 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,multipixel_with_output_stride)27500   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, multipixel_with_output_stride) {
27501     for (size_t channels = 1; channels <= 20; channels += 3) {
27502       DWConvMicrokernelTester()
27503         .cr(4)
27504         .kr(4)
27505         .channels(4)
27506         .width(5)
27507         .output_stride(23)
27508         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27509     }
27510   }
27511 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,multipixel_with_qmin)27512   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, multipixel_with_qmin) {
27513     for (size_t channels = 1; channels <= 20; channels += 3) {
27514       DWConvMicrokernelTester()
27515         .cr(4)
27516         .kr(4)
27517         .channels(channels)
27518         .width(3)
27519         .qmin(128)
27520         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27521     }
27522   }
27523 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,multipixel_with_qmax)27524   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, multipixel_with_qmax) {
27525     for (size_t channels = 1; channels <= 20; channels += 3) {
27526       DWConvMicrokernelTester()
27527         .cr(4)
27528         .kr(4)
27529         .channels(channels)
27530         .width(3)
27531         .qmax(128)
27532         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27533     }
27534   }
27535 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,input_offset)27536   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, input_offset) {
27537     for (uint32_t channels = 8; channels < 64; channels += 12) {
27538       DWConvMicrokernelTester()
27539         .cr(4)
27540         .kr(4)
27541         .channels(channels)
27542         .input_offset(112)
27543         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27544     }
27545   }
27546 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD,zero)27547   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD, zero) {
27548     for (uint32_t mz = 0; mz < 4; mz++) {
27549       for (uint32_t channels = 8; channels < 64; channels += 12) {
27550         DWConvMicrokernelTester()
27551           .cr(4)
27552           .kr(4)
27553           .channels(channels)
27554           .input_offset(112)
27555           .zero_index(mz)
27556           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
27557       }
27558     }
27559   }
27560 #endif  // XNN_ARCH_WASMRELAXEDSIMD
27561 
27562 
27563 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,c_eq_4)27564   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, c_eq_4) {
27565     DWConvMicrokernelTester()
27566       .cr(4)
27567       .kr(4)
27568       .channels(4)
27569       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27570   }
27571 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,c_div_4)27572   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, c_div_4) {
27573     for (uint32_t channels = 8; channels < 64; channels += 12) {
27574       DWConvMicrokernelTester()
27575         .cr(4)
27576         .kr(4)
27577         .channels(channels)
27578         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27579     }
27580   }
27581 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,c_div_4_with_qmin)27582   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, c_div_4_with_qmin) {
27583     for (uint32_t channels = 8; channels < 64; channels += 12) {
27584       DWConvMicrokernelTester()
27585         .cr(4)
27586         .kr(4)
27587         .channels(channels)
27588         .qmin(128)
27589         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27590     }
27591   }
27592 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,c_div_4_with_qmax)27593   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, c_div_4_with_qmax) {
27594     for (uint32_t channels = 8; channels < 64; channels += 12) {
27595       DWConvMicrokernelTester()
27596         .cr(4)
27597         .kr(4)
27598         .channels(channels)
27599         .qmax(128)
27600         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27601     }
27602   }
27603 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,c_lt_4)27604   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, c_lt_4) {
27605     for (uint32_t channels = 1; channels < 4; channels++) {
27606       DWConvMicrokernelTester()
27607         .cr(4)
27608         .kr(4)
27609         .channels(channels)
27610         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27611     }
27612   }
27613 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,c_gt_4)27614   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, c_gt_4) {
27615     for (uint32_t channels = 5; channels < 8; channels++) {
27616       DWConvMicrokernelTester()
27617         .cr(4)
27618         .kr(4)
27619         .channels(channels)
27620         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27621     }
27622   }
27623 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,c_gt_4_with_qmin)27624   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, c_gt_4_with_qmin) {
27625     for (uint32_t channels = 5; channels < 8; channels++) {
27626       DWConvMicrokernelTester()
27627         .cr(4)
27628         .kr(4)
27629         .channels(channels)
27630         .qmin(128)
27631         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27632     }
27633   }
27634 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,c_gt_4_with_qmax)27635   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, c_gt_4_with_qmax) {
27636     for (uint32_t channels = 5; channels < 8; channels++) {
27637       DWConvMicrokernelTester()
27638         .cr(4)
27639         .kr(4)
27640         .channels(channels)
27641         .qmax(128)
27642         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27643     }
27644   }
27645 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,multipixel)27646   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, multipixel) {
27647     for (size_t channels = 1; channels <= 20; channels += 3) {
27648       DWConvMicrokernelTester()
27649         .cr(4)
27650         .kr(4)
27651         .channels(channels)
27652         .width(3)
27653         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27654     }
27655   }
27656 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,multipixel_with_step)27657   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, multipixel_with_step) {
27658     for (size_t channels = 1; channels <= 20; channels += 3) {
27659       for (size_t step = 2; step <= 4; step++) {
27660         DWConvMicrokernelTester()
27661           .cr(4)
27662           .kr(4)
27663           .channels(channels)
27664           .width(3)
27665           .step(step)
27666           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27667       }
27668     }
27669   }
27670 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,multipixel_with_output_stride)27671   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, multipixel_with_output_stride) {
27672     for (size_t channels = 1; channels <= 20; channels += 3) {
27673       DWConvMicrokernelTester()
27674         .cr(4)
27675         .kr(4)
27676         .channels(4)
27677         .width(5)
27678         .output_stride(23)
27679         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27680     }
27681   }
27682 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,multipixel_with_qmin)27683   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, multipixel_with_qmin) {
27684     for (size_t channels = 1; channels <= 20; channels += 3) {
27685       DWConvMicrokernelTester()
27686         .cr(4)
27687         .kr(4)
27688         .channels(channels)
27689         .width(3)
27690         .qmin(128)
27691         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27692     }
27693   }
27694 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,multipixel_with_qmax)27695   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, multipixel_with_qmax) {
27696     for (size_t channels = 1; channels <= 20; channels += 3) {
27697       DWConvMicrokernelTester()
27698         .cr(4)
27699         .kr(4)
27700         .channels(channels)
27701         .width(3)
27702         .qmax(128)
27703         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27704     }
27705   }
27706 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,input_offset)27707   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, input_offset) {
27708     for (uint32_t channels = 8; channels < 64; channels += 12) {
27709       DWConvMicrokernelTester()
27710         .cr(4)
27711         .kr(4)
27712         .channels(channels)
27713         .input_offset(112)
27714         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27715     }
27716   }
27717 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2,zero)27718   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_ACC2, zero) {
27719     for (uint32_t mz = 0; mz < 4; mz++) {
27720       for (uint32_t channels = 8; channels < 64; channels += 12) {
27721         DWConvMicrokernelTester()
27722           .cr(4)
27723           .kr(4)
27724           .channels(channels)
27725           .input_offset(112)
27726           .zero_index(mz)
27727           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
27728       }
27729     }
27730   }
27731 #endif  // XNN_ARCH_WASMRELAXEDSIMD
27732 
27733 
27734 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,c_eq_4)27735   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, c_eq_4) {
27736     DWConvMicrokernelTester()
27737       .cr(4)
27738       .kr(4)
27739       .channels(4)
27740       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27741   }
27742 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,c_div_4)27743   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, c_div_4) {
27744     for (uint32_t channels = 8; channels < 64; channels += 12) {
27745       DWConvMicrokernelTester()
27746         .cr(4)
27747         .kr(4)
27748         .channels(channels)
27749         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27750     }
27751   }
27752 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,c_div_4_with_qmin)27753   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, c_div_4_with_qmin) {
27754     for (uint32_t channels = 8; channels < 64; channels += 12) {
27755       DWConvMicrokernelTester()
27756         .cr(4)
27757         .kr(4)
27758         .channels(channels)
27759         .qmin(128)
27760         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27761     }
27762   }
27763 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,c_div_4_with_qmax)27764   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, c_div_4_with_qmax) {
27765     for (uint32_t channels = 8; channels < 64; channels += 12) {
27766       DWConvMicrokernelTester()
27767         .cr(4)
27768         .kr(4)
27769         .channels(channels)
27770         .qmax(128)
27771         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27772     }
27773   }
27774 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,c_lt_4)27775   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, c_lt_4) {
27776     for (uint32_t channels = 1; channels < 4; channels++) {
27777       DWConvMicrokernelTester()
27778         .cr(4)
27779         .kr(4)
27780         .channels(channels)
27781         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27782     }
27783   }
27784 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,c_gt_4)27785   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, c_gt_4) {
27786     for (uint32_t channels = 5; channels < 8; channels++) {
27787       DWConvMicrokernelTester()
27788         .cr(4)
27789         .kr(4)
27790         .channels(channels)
27791         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27792     }
27793   }
27794 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,c_gt_4_with_qmin)27795   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, c_gt_4_with_qmin) {
27796     for (uint32_t channels = 5; channels < 8; channels++) {
27797       DWConvMicrokernelTester()
27798         .cr(4)
27799         .kr(4)
27800         .channels(channels)
27801         .qmin(128)
27802         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27803     }
27804   }
27805 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,c_gt_4_with_qmax)27806   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, c_gt_4_with_qmax) {
27807     for (uint32_t channels = 5; channels < 8; channels++) {
27808       DWConvMicrokernelTester()
27809         .cr(4)
27810         .kr(4)
27811         .channels(channels)
27812         .qmax(128)
27813         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27814     }
27815   }
27816 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,multipixel)27817   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, multipixel) {
27818     for (size_t channels = 1; channels <= 20; channels += 3) {
27819       DWConvMicrokernelTester()
27820         .cr(4)
27821         .kr(4)
27822         .channels(channels)
27823         .width(3)
27824         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27825     }
27826   }
27827 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,multipixel_with_step)27828   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, multipixel_with_step) {
27829     for (size_t channels = 1; channels <= 20; channels += 3) {
27830       for (size_t step = 2; step <= 4; step++) {
27831         DWConvMicrokernelTester()
27832           .cr(4)
27833           .kr(4)
27834           .channels(channels)
27835           .width(3)
27836           .step(step)
27837           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27838       }
27839     }
27840   }
27841 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,multipixel_with_output_stride)27842   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, multipixel_with_output_stride) {
27843     for (size_t channels = 1; channels <= 20; channels += 3) {
27844       DWConvMicrokernelTester()
27845         .cr(4)
27846         .kr(4)
27847         .channels(4)
27848         .width(5)
27849         .output_stride(23)
27850         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27851     }
27852   }
27853 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,multipixel_with_qmin)27854   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, multipixel_with_qmin) {
27855     for (size_t channels = 1; channels <= 20; channels += 3) {
27856       DWConvMicrokernelTester()
27857         .cr(4)
27858         .kr(4)
27859         .channels(channels)
27860         .width(3)
27861         .qmin(128)
27862         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27863     }
27864   }
27865 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,multipixel_with_qmax)27866   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, multipixel_with_qmax) {
27867     for (size_t channels = 1; channels <= 20; channels += 3) {
27868       DWConvMicrokernelTester()
27869         .cr(4)
27870         .kr(4)
27871         .channels(channels)
27872         .width(3)
27873         .qmax(128)
27874         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27875     }
27876   }
27877 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,input_offset)27878   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, input_offset) {
27879     for (uint32_t channels = 8; channels < 64; channels += 12) {
27880       DWConvMicrokernelTester()
27881         .cr(4)
27882         .kr(4)
27883         .channels(channels)
27884         .input_offset(112)
27885         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27886     }
27887   }
27888 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA,zero)27889   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA, zero) {
27890     for (uint32_t mz = 0; mz < 4; mz++) {
27891       for (uint32_t channels = 8; channels < 64; channels += 12) {
27892         DWConvMicrokernelTester()
27893           .cr(4)
27894           .kr(4)
27895           .channels(channels)
27896           .input_offset(112)
27897           .zero_index(mz)
27898           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
27899       }
27900     }
27901   }
27902 #endif  // XNN_ARCH_WASMRELAXEDSIMD
27903 
27904 
27905 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,c_eq_4)27906   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, c_eq_4) {
27907     DWConvMicrokernelTester()
27908       .cr(4)
27909       .kr(4)
27910       .channels(4)
27911       .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27912   }
27913 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,c_div_4)27914   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, c_div_4) {
27915     for (uint32_t channels = 8; channels < 64; channels += 12) {
27916       DWConvMicrokernelTester()
27917         .cr(4)
27918         .kr(4)
27919         .channels(channels)
27920         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27921     }
27922   }
27923 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,c_div_4_with_qmin)27924   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, c_div_4_with_qmin) {
27925     for (uint32_t channels = 8; channels < 64; channels += 12) {
27926       DWConvMicrokernelTester()
27927         .cr(4)
27928         .kr(4)
27929         .channels(channels)
27930         .qmin(128)
27931         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27932     }
27933   }
27934 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,c_div_4_with_qmax)27935   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, c_div_4_with_qmax) {
27936     for (uint32_t channels = 8; channels < 64; channels += 12) {
27937       DWConvMicrokernelTester()
27938         .cr(4)
27939         .kr(4)
27940         .channels(channels)
27941         .qmax(128)
27942         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27943     }
27944   }
27945 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,c_lt_4)27946   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, c_lt_4) {
27947     for (uint32_t channels = 1; channels < 4; channels++) {
27948       DWConvMicrokernelTester()
27949         .cr(4)
27950         .kr(4)
27951         .channels(channels)
27952         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27953     }
27954   }
27955 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,c_gt_4)27956   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, c_gt_4) {
27957     for (uint32_t channels = 5; channels < 8; channels++) {
27958       DWConvMicrokernelTester()
27959         .cr(4)
27960         .kr(4)
27961         .channels(channels)
27962         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27963     }
27964   }
27965 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,c_gt_4_with_qmin)27966   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, c_gt_4_with_qmin) {
27967     for (uint32_t channels = 5; channels < 8; channels++) {
27968       DWConvMicrokernelTester()
27969         .cr(4)
27970         .kr(4)
27971         .channels(channels)
27972         .qmin(128)
27973         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27974     }
27975   }
27976 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,c_gt_4_with_qmax)27977   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, c_gt_4_with_qmax) {
27978     for (uint32_t channels = 5; channels < 8; channels++) {
27979       DWConvMicrokernelTester()
27980         .cr(4)
27981         .kr(4)
27982         .channels(channels)
27983         .qmax(128)
27984         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27985     }
27986   }
27987 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,multipixel)27988   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, multipixel) {
27989     for (size_t channels = 1; channels <= 20; channels += 3) {
27990       DWConvMicrokernelTester()
27991         .cr(4)
27992         .kr(4)
27993         .channels(channels)
27994         .width(3)
27995         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
27996     }
27997   }
27998 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_step)27999   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_step) {
28000     for (size_t channels = 1; channels <= 20; channels += 3) {
28001       for (size_t step = 2; step <= 4; step++) {
28002         DWConvMicrokernelTester()
28003           .cr(4)
28004           .kr(4)
28005           .channels(channels)
28006           .width(3)
28007           .step(step)
28008           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28009       }
28010     }
28011   }
28012 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_output_stride)28013   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_output_stride) {
28014     for (size_t channels = 1; channels <= 20; channels += 3) {
28015       DWConvMicrokernelTester()
28016         .cr(4)
28017         .kr(4)
28018         .channels(4)
28019         .width(5)
28020         .output_stride(23)
28021         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28022     }
28023   }
28024 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmin)28025   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmin) {
28026     for (size_t channels = 1; channels <= 20; channels += 3) {
28027       DWConvMicrokernelTester()
28028         .cr(4)
28029         .kr(4)
28030         .channels(channels)
28031         .width(3)
28032         .qmin(128)
28033         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28034     }
28035   }
28036 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmax)28037   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmax) {
28038     for (size_t channels = 1; channels <= 20; channels += 3) {
28039       DWConvMicrokernelTester()
28040         .cr(4)
28041         .kr(4)
28042         .channels(channels)
28043         .width(3)
28044         .qmax(128)
28045         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28046     }
28047   }
28048 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,input_offset)28049   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, input_offset) {
28050     for (uint32_t channels = 8; channels < 64; channels += 12) {
28051       DWConvMicrokernelTester()
28052         .cr(4)
28053         .kr(4)
28054         .channels(channels)
28055         .input_offset(112)
28056         .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28057     }
28058   }
28059 
TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2,zero)28060   TEST(F32_DWCONV_MINMAX_UP4X4__WASMRELAXEDSIMD_FMA_ACC2, zero) {
28061     for (uint32_t mz = 0; mz < 4; mz++) {
28062       for (uint32_t channels = 8; channels < 64; channels += 12) {
28063         DWConvMicrokernelTester()
28064           .cr(4)
28065           .kr(4)
28066           .channels(channels)
28067           .input_offset(112)
28068           .zero_index(mz)
28069           .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28070       }
28071     }
28072   }
28073 #endif  // XNN_ARCH_WASMRELAXEDSIMD
28074 
28075 
28076 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,c_eq_4)28077   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, c_eq_4) {
28078     DWConvMicrokernelTester()
28079       .cr(4)
28080       .kr(9)
28081       .channels(4)
28082       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28083   }
28084 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,c_div_4)28085   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, c_div_4) {
28086     for (uint32_t channels = 8; channels < 64; channels += 12) {
28087       DWConvMicrokernelTester()
28088         .cr(4)
28089         .kr(9)
28090         .channels(channels)
28091         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28092     }
28093   }
28094 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,c_div_4_with_qmin)28095   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, c_div_4_with_qmin) {
28096     for (uint32_t channels = 8; channels < 64; channels += 12) {
28097       DWConvMicrokernelTester()
28098         .cr(4)
28099         .kr(9)
28100         .channels(channels)
28101         .qmin(128)
28102         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28103     }
28104   }
28105 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,c_div_4_with_qmax)28106   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, c_div_4_with_qmax) {
28107     for (uint32_t channels = 8; channels < 64; channels += 12) {
28108       DWConvMicrokernelTester()
28109         .cr(4)
28110         .kr(9)
28111         .channels(channels)
28112         .qmax(128)
28113         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28114     }
28115   }
28116 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,c_lt_4)28117   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, c_lt_4) {
28118     for (uint32_t channels = 1; channels < 4; channels++) {
28119       DWConvMicrokernelTester()
28120         .cr(4)
28121         .kr(9)
28122         .channels(channels)
28123         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28124     }
28125   }
28126 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,c_gt_4)28127   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, c_gt_4) {
28128     for (uint32_t channels = 5; channels < 8; channels++) {
28129       DWConvMicrokernelTester()
28130         .cr(4)
28131         .kr(9)
28132         .channels(channels)
28133         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28134     }
28135   }
28136 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,c_gt_4_with_qmin)28137   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, c_gt_4_with_qmin) {
28138     for (uint32_t channels = 5; channels < 8; channels++) {
28139       DWConvMicrokernelTester()
28140         .cr(4)
28141         .kr(9)
28142         .channels(channels)
28143         .qmin(128)
28144         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28145     }
28146   }
28147 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,c_gt_4_with_qmax)28148   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, c_gt_4_with_qmax) {
28149     for (uint32_t channels = 5; channels < 8; channels++) {
28150       DWConvMicrokernelTester()
28151         .cr(4)
28152         .kr(9)
28153         .channels(channels)
28154         .qmax(128)
28155         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28156     }
28157   }
28158 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,multipixel)28159   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, multipixel) {
28160     for (size_t channels = 1; channels <= 20; channels += 3) {
28161       DWConvMicrokernelTester()
28162         .cr(4)
28163         .kr(9)
28164         .channels(channels)
28165         .width(3)
28166         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28167     }
28168   }
28169 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,multipixel_with_step)28170   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, multipixel_with_step) {
28171     for (size_t channels = 1; channels <= 20; channels += 3) {
28172       for (size_t step = 2; step <= 9; step++) {
28173         DWConvMicrokernelTester()
28174           .cr(4)
28175           .kr(9)
28176           .channels(channels)
28177           .width(3)
28178           .step(step)
28179           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28180       }
28181     }
28182   }
28183 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,multipixel_with_output_stride)28184   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, multipixel_with_output_stride) {
28185     for (size_t channels = 1; channels <= 20; channels += 3) {
28186       DWConvMicrokernelTester()
28187         .cr(4)
28188         .kr(9)
28189         .channels(4)
28190         .width(5)
28191         .output_stride(23)
28192         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28193     }
28194   }
28195 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,multipixel_with_qmin)28196   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, multipixel_with_qmin) {
28197     for (size_t channels = 1; channels <= 20; channels += 3) {
28198       DWConvMicrokernelTester()
28199         .cr(4)
28200         .kr(9)
28201         .channels(channels)
28202         .width(3)
28203         .qmin(128)
28204         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28205     }
28206   }
28207 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,multipixel_with_qmax)28208   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, multipixel_with_qmax) {
28209     for (size_t channels = 1; channels <= 20; channels += 3) {
28210       DWConvMicrokernelTester()
28211         .cr(4)
28212         .kr(9)
28213         .channels(channels)
28214         .width(3)
28215         .qmax(128)
28216         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28217     }
28218   }
28219 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,input_offset)28220   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, input_offset) {
28221     for (uint32_t channels = 8; channels < 64; channels += 12) {
28222       DWConvMicrokernelTester()
28223         .cr(4)
28224         .kr(9)
28225         .channels(channels)
28226         .input_offset(112)
28227         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28228     }
28229   }
28230 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD,zero)28231   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD, zero) {
28232     for (uint32_t mz = 0; mz < 9; mz++) {
28233       for (uint32_t channels = 8; channels < 64; channels += 12) {
28234         DWConvMicrokernelTester()
28235           .cr(4)
28236           .kr(9)
28237           .channels(channels)
28238           .input_offset(112)
28239           .zero_index(mz)
28240           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28241       }
28242     }
28243   }
28244 #endif  // XNN_ARCH_WASMRELAXEDSIMD
28245 
28246 
28247 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,c_eq_4)28248   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, c_eq_4) {
28249     DWConvMicrokernelTester()
28250       .cr(4)
28251       .kr(9)
28252       .channels(4)
28253       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28254   }
28255 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,c_div_4)28256   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, c_div_4) {
28257     for (uint32_t channels = 8; channels < 64; channels += 12) {
28258       DWConvMicrokernelTester()
28259         .cr(4)
28260         .kr(9)
28261         .channels(channels)
28262         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28263     }
28264   }
28265 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,c_div_4_with_qmin)28266   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, c_div_4_with_qmin) {
28267     for (uint32_t channels = 8; channels < 64; channels += 12) {
28268       DWConvMicrokernelTester()
28269         .cr(4)
28270         .kr(9)
28271         .channels(channels)
28272         .qmin(128)
28273         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28274     }
28275   }
28276 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,c_div_4_with_qmax)28277   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, c_div_4_with_qmax) {
28278     for (uint32_t channels = 8; channels < 64; channels += 12) {
28279       DWConvMicrokernelTester()
28280         .cr(4)
28281         .kr(9)
28282         .channels(channels)
28283         .qmax(128)
28284         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28285     }
28286   }
28287 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,c_lt_4)28288   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, c_lt_4) {
28289     for (uint32_t channels = 1; channels < 4; channels++) {
28290       DWConvMicrokernelTester()
28291         .cr(4)
28292         .kr(9)
28293         .channels(channels)
28294         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28295     }
28296   }
28297 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,c_gt_4)28298   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, c_gt_4) {
28299     for (uint32_t channels = 5; channels < 8; channels++) {
28300       DWConvMicrokernelTester()
28301         .cr(4)
28302         .kr(9)
28303         .channels(channels)
28304         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28305     }
28306   }
28307 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,c_gt_4_with_qmin)28308   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, c_gt_4_with_qmin) {
28309     for (uint32_t channels = 5; channels < 8; channels++) {
28310       DWConvMicrokernelTester()
28311         .cr(4)
28312         .kr(9)
28313         .channels(channels)
28314         .qmin(128)
28315         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28316     }
28317   }
28318 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,c_gt_4_with_qmax)28319   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, c_gt_4_with_qmax) {
28320     for (uint32_t channels = 5; channels < 8; channels++) {
28321       DWConvMicrokernelTester()
28322         .cr(4)
28323         .kr(9)
28324         .channels(channels)
28325         .qmax(128)
28326         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28327     }
28328   }
28329 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,multipixel)28330   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, multipixel) {
28331     for (size_t channels = 1; channels <= 20; channels += 3) {
28332       DWConvMicrokernelTester()
28333         .cr(4)
28334         .kr(9)
28335         .channels(channels)
28336         .width(3)
28337         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28338     }
28339   }
28340 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,multipixel_with_step)28341   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, multipixel_with_step) {
28342     for (size_t channels = 1; channels <= 20; channels += 3) {
28343       for (size_t step = 2; step <= 9; step++) {
28344         DWConvMicrokernelTester()
28345           .cr(4)
28346           .kr(9)
28347           .channels(channels)
28348           .width(3)
28349           .step(step)
28350           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28351       }
28352     }
28353   }
28354 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,multipixel_with_output_stride)28355   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, multipixel_with_output_stride) {
28356     for (size_t channels = 1; channels <= 20; channels += 3) {
28357       DWConvMicrokernelTester()
28358         .cr(4)
28359         .kr(9)
28360         .channels(4)
28361         .width(5)
28362         .output_stride(23)
28363         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28364     }
28365   }
28366 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,multipixel_with_qmin)28367   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, multipixel_with_qmin) {
28368     for (size_t channels = 1; channels <= 20; channels += 3) {
28369       DWConvMicrokernelTester()
28370         .cr(4)
28371         .kr(9)
28372         .channels(channels)
28373         .width(3)
28374         .qmin(128)
28375         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28376     }
28377   }
28378 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,multipixel_with_qmax)28379   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, multipixel_with_qmax) {
28380     for (size_t channels = 1; channels <= 20; channels += 3) {
28381       DWConvMicrokernelTester()
28382         .cr(4)
28383         .kr(9)
28384         .channels(channels)
28385         .width(3)
28386         .qmax(128)
28387         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28388     }
28389   }
28390 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,input_offset)28391   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, input_offset) {
28392     for (uint32_t channels = 8; channels < 64; channels += 12) {
28393       DWConvMicrokernelTester()
28394         .cr(4)
28395         .kr(9)
28396         .channels(channels)
28397         .input_offset(112)
28398         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28399     }
28400   }
28401 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2,zero)28402   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_ACC2, zero) {
28403     for (uint32_t mz = 0; mz < 9; mz++) {
28404       for (uint32_t channels = 8; channels < 64; channels += 12) {
28405         DWConvMicrokernelTester()
28406           .cr(4)
28407           .kr(9)
28408           .channels(channels)
28409           .input_offset(112)
28410           .zero_index(mz)
28411           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28412       }
28413     }
28414   }
28415 #endif  // XNN_ARCH_WASMRELAXEDSIMD
28416 
28417 
28418 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,c_eq_4)28419   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, c_eq_4) {
28420     DWConvMicrokernelTester()
28421       .cr(4)
28422       .kr(9)
28423       .channels(4)
28424       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28425   }
28426 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,c_div_4)28427   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, c_div_4) {
28428     for (uint32_t channels = 8; channels < 64; channels += 12) {
28429       DWConvMicrokernelTester()
28430         .cr(4)
28431         .kr(9)
28432         .channels(channels)
28433         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28434     }
28435   }
28436 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,c_div_4_with_qmin)28437   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, c_div_4_with_qmin) {
28438     for (uint32_t channels = 8; channels < 64; channels += 12) {
28439       DWConvMicrokernelTester()
28440         .cr(4)
28441         .kr(9)
28442         .channels(channels)
28443         .qmin(128)
28444         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28445     }
28446   }
28447 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,c_div_4_with_qmax)28448   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, c_div_4_with_qmax) {
28449     for (uint32_t channels = 8; channels < 64; channels += 12) {
28450       DWConvMicrokernelTester()
28451         .cr(4)
28452         .kr(9)
28453         .channels(channels)
28454         .qmax(128)
28455         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28456     }
28457   }
28458 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,c_lt_4)28459   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, c_lt_4) {
28460     for (uint32_t channels = 1; channels < 4; channels++) {
28461       DWConvMicrokernelTester()
28462         .cr(4)
28463         .kr(9)
28464         .channels(channels)
28465         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28466     }
28467   }
28468 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,c_gt_4)28469   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, c_gt_4) {
28470     for (uint32_t channels = 5; channels < 8; channels++) {
28471       DWConvMicrokernelTester()
28472         .cr(4)
28473         .kr(9)
28474         .channels(channels)
28475         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28476     }
28477   }
28478 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,c_gt_4_with_qmin)28479   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, c_gt_4_with_qmin) {
28480     for (uint32_t channels = 5; channels < 8; channels++) {
28481       DWConvMicrokernelTester()
28482         .cr(4)
28483         .kr(9)
28484         .channels(channels)
28485         .qmin(128)
28486         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28487     }
28488   }
28489 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,c_gt_4_with_qmax)28490   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, c_gt_4_with_qmax) {
28491     for (uint32_t channels = 5; channels < 8; channels++) {
28492       DWConvMicrokernelTester()
28493         .cr(4)
28494         .kr(9)
28495         .channels(channels)
28496         .qmax(128)
28497         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28498     }
28499   }
28500 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,multipixel)28501   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, multipixel) {
28502     for (size_t channels = 1; channels <= 20; channels += 3) {
28503       DWConvMicrokernelTester()
28504         .cr(4)
28505         .kr(9)
28506         .channels(channels)
28507         .width(3)
28508         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28509     }
28510   }
28511 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,multipixel_with_step)28512   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, multipixel_with_step) {
28513     for (size_t channels = 1; channels <= 20; channels += 3) {
28514       for (size_t step = 2; step <= 9; step++) {
28515         DWConvMicrokernelTester()
28516           .cr(4)
28517           .kr(9)
28518           .channels(channels)
28519           .width(3)
28520           .step(step)
28521           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28522       }
28523     }
28524   }
28525 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,multipixel_with_output_stride)28526   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, multipixel_with_output_stride) {
28527     for (size_t channels = 1; channels <= 20; channels += 3) {
28528       DWConvMicrokernelTester()
28529         .cr(4)
28530         .kr(9)
28531         .channels(4)
28532         .width(5)
28533         .output_stride(23)
28534         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28535     }
28536   }
28537 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,multipixel_with_qmin)28538   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, multipixel_with_qmin) {
28539     for (size_t channels = 1; channels <= 20; channels += 3) {
28540       DWConvMicrokernelTester()
28541         .cr(4)
28542         .kr(9)
28543         .channels(channels)
28544         .width(3)
28545         .qmin(128)
28546         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28547     }
28548   }
28549 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,multipixel_with_qmax)28550   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, multipixel_with_qmax) {
28551     for (size_t channels = 1; channels <= 20; channels += 3) {
28552       DWConvMicrokernelTester()
28553         .cr(4)
28554         .kr(9)
28555         .channels(channels)
28556         .width(3)
28557         .qmax(128)
28558         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28559     }
28560   }
28561 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,input_offset)28562   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, input_offset) {
28563     for (uint32_t channels = 8; channels < 64; channels += 12) {
28564       DWConvMicrokernelTester()
28565         .cr(4)
28566         .kr(9)
28567         .channels(channels)
28568         .input_offset(112)
28569         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28570     }
28571   }
28572 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA,zero)28573   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA, zero) {
28574     for (uint32_t mz = 0; mz < 9; mz++) {
28575       for (uint32_t channels = 8; channels < 64; channels += 12) {
28576         DWConvMicrokernelTester()
28577           .cr(4)
28578           .kr(9)
28579           .channels(channels)
28580           .input_offset(112)
28581           .zero_index(mz)
28582           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
28583       }
28584     }
28585   }
28586 #endif  // XNN_ARCH_WASMRELAXEDSIMD
28587 
28588 
28589 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,c_eq_4)28590   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, c_eq_4) {
28591     DWConvMicrokernelTester()
28592       .cr(4)
28593       .kr(9)
28594       .channels(4)
28595       .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28596   }
28597 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,c_div_4)28598   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, c_div_4) {
28599     for (uint32_t channels = 8; channels < 64; channels += 12) {
28600       DWConvMicrokernelTester()
28601         .cr(4)
28602         .kr(9)
28603         .channels(channels)
28604         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28605     }
28606   }
28607 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,c_div_4_with_qmin)28608   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, c_div_4_with_qmin) {
28609     for (uint32_t channels = 8; channels < 64; channels += 12) {
28610       DWConvMicrokernelTester()
28611         .cr(4)
28612         .kr(9)
28613         .channels(channels)
28614         .qmin(128)
28615         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28616     }
28617   }
28618 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,c_div_4_with_qmax)28619   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, c_div_4_with_qmax) {
28620     for (uint32_t channels = 8; channels < 64; channels += 12) {
28621       DWConvMicrokernelTester()
28622         .cr(4)
28623         .kr(9)
28624         .channels(channels)
28625         .qmax(128)
28626         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28627     }
28628   }
28629 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,c_lt_4)28630   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, c_lt_4) {
28631     for (uint32_t channels = 1; channels < 4; channels++) {
28632       DWConvMicrokernelTester()
28633         .cr(4)
28634         .kr(9)
28635         .channels(channels)
28636         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28637     }
28638   }
28639 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,c_gt_4)28640   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, c_gt_4) {
28641     for (uint32_t channels = 5; channels < 8; channels++) {
28642       DWConvMicrokernelTester()
28643         .cr(4)
28644         .kr(9)
28645         .channels(channels)
28646         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28647     }
28648   }
28649 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,c_gt_4_with_qmin)28650   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, c_gt_4_with_qmin) {
28651     for (uint32_t channels = 5; channels < 8; channels++) {
28652       DWConvMicrokernelTester()
28653         .cr(4)
28654         .kr(9)
28655         .channels(channels)
28656         .qmin(128)
28657         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28658     }
28659   }
28660 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,c_gt_4_with_qmax)28661   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, c_gt_4_with_qmax) {
28662     for (uint32_t channels = 5; channels < 8; channels++) {
28663       DWConvMicrokernelTester()
28664         .cr(4)
28665         .kr(9)
28666         .channels(channels)
28667         .qmax(128)
28668         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28669     }
28670   }
28671 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,multipixel)28672   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, multipixel) {
28673     for (size_t channels = 1; channels <= 20; channels += 3) {
28674       DWConvMicrokernelTester()
28675         .cr(4)
28676         .kr(9)
28677         .channels(channels)
28678         .width(3)
28679         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28680     }
28681   }
28682 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_step)28683   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_step) {
28684     for (size_t channels = 1; channels <= 20; channels += 3) {
28685       for (size_t step = 2; step <= 9; step++) {
28686         DWConvMicrokernelTester()
28687           .cr(4)
28688           .kr(9)
28689           .channels(channels)
28690           .width(3)
28691           .step(step)
28692           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28693       }
28694     }
28695   }
28696 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_output_stride)28697   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_output_stride) {
28698     for (size_t channels = 1; channels <= 20; channels += 3) {
28699       DWConvMicrokernelTester()
28700         .cr(4)
28701         .kr(9)
28702         .channels(4)
28703         .width(5)
28704         .output_stride(23)
28705         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28706     }
28707   }
28708 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmin)28709   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmin) {
28710     for (size_t channels = 1; channels <= 20; channels += 3) {
28711       DWConvMicrokernelTester()
28712         .cr(4)
28713         .kr(9)
28714         .channels(channels)
28715         .width(3)
28716         .qmin(128)
28717         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28718     }
28719   }
28720 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmax)28721   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmax) {
28722     for (size_t channels = 1; channels <= 20; channels += 3) {
28723       DWConvMicrokernelTester()
28724         .cr(4)
28725         .kr(9)
28726         .channels(channels)
28727         .width(3)
28728         .qmax(128)
28729         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28730     }
28731   }
28732 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,input_offset)28733   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, input_offset) {
28734     for (uint32_t channels = 8; channels < 64; channels += 12) {
28735       DWConvMicrokernelTester()
28736         .cr(4)
28737         .kr(9)
28738         .channels(channels)
28739         .input_offset(112)
28740         .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28741     }
28742   }
28743 
TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2,zero)28744   TEST(F32_DWCONV_MINMAX_UP4X9__WASMRELAXEDSIMD_FMA_ACC2, zero) {
28745     for (uint32_t mz = 0; mz < 9; mz++) {
28746       for (uint32_t channels = 8; channels < 64; channels += 12) {
28747         DWConvMicrokernelTester()
28748           .cr(4)
28749           .kr(9)
28750           .channels(channels)
28751           .input_offset(112)
28752           .zero_index(mz)
28753           .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
28754       }
28755     }
28756   }
28757 #endif  // XNN_ARCH_WASMRELAXEDSIMD
28758 
28759 
28760 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,c_eq_4)28761   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, c_eq_4) {
28762     DWConvMicrokernelTester()
28763       .cr(4)
28764       .kr(25)
28765       .channels(4)
28766       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28767   }
28768 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,c_div_4)28769   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, c_div_4) {
28770     for (uint32_t channels = 8; channels < 64; channels += 12) {
28771       DWConvMicrokernelTester()
28772         .cr(4)
28773         .kr(25)
28774         .channels(channels)
28775         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28776     }
28777   }
28778 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,c_div_4_with_qmin)28779   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, c_div_4_with_qmin) {
28780     for (uint32_t channels = 8; channels < 64; channels += 12) {
28781       DWConvMicrokernelTester()
28782         .cr(4)
28783         .kr(25)
28784         .channels(channels)
28785         .qmin(128)
28786         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28787     }
28788   }
28789 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,c_div_4_with_qmax)28790   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, c_div_4_with_qmax) {
28791     for (uint32_t channels = 8; channels < 64; channels += 12) {
28792       DWConvMicrokernelTester()
28793         .cr(4)
28794         .kr(25)
28795         .channels(channels)
28796         .qmax(128)
28797         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28798     }
28799   }
28800 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,c_lt_4)28801   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, c_lt_4) {
28802     for (uint32_t channels = 1; channels < 4; channels++) {
28803       DWConvMicrokernelTester()
28804         .cr(4)
28805         .kr(25)
28806         .channels(channels)
28807         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28808     }
28809   }
28810 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,c_gt_4)28811   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, c_gt_4) {
28812     for (uint32_t channels = 5; channels < 8; channels++) {
28813       DWConvMicrokernelTester()
28814         .cr(4)
28815         .kr(25)
28816         .channels(channels)
28817         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28818     }
28819   }
28820 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,c_gt_4_with_qmin)28821   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, c_gt_4_with_qmin) {
28822     for (uint32_t channels = 5; channels < 8; channels++) {
28823       DWConvMicrokernelTester()
28824         .cr(4)
28825         .kr(25)
28826         .channels(channels)
28827         .qmin(128)
28828         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28829     }
28830   }
28831 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,c_gt_4_with_qmax)28832   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, c_gt_4_with_qmax) {
28833     for (uint32_t channels = 5; channels < 8; channels++) {
28834       DWConvMicrokernelTester()
28835         .cr(4)
28836         .kr(25)
28837         .channels(channels)
28838         .qmax(128)
28839         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28840     }
28841   }
28842 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,multipixel)28843   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, multipixel) {
28844     for (size_t channels = 1; channels <= 20; channels += 3) {
28845       DWConvMicrokernelTester()
28846         .cr(4)
28847         .kr(25)
28848         .channels(channels)
28849         .width(3)
28850         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28851     }
28852   }
28853 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,multipixel_with_step)28854   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, multipixel_with_step) {
28855     for (size_t channels = 1; channels <= 20; channels += 3) {
28856       for (size_t step = 2; step <= 25; step++) {
28857         DWConvMicrokernelTester()
28858           .cr(4)
28859           .kr(25)
28860           .channels(channels)
28861           .width(3)
28862           .step(step)
28863           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28864       }
28865     }
28866   }
28867 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,multipixel_with_output_stride)28868   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, multipixel_with_output_stride) {
28869     for (size_t channels = 1; channels <= 20; channels += 3) {
28870       DWConvMicrokernelTester()
28871         .cr(4)
28872         .kr(25)
28873         .channels(4)
28874         .width(5)
28875         .output_stride(23)
28876         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28877     }
28878   }
28879 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,multipixel_with_qmin)28880   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, multipixel_with_qmin) {
28881     for (size_t channels = 1; channels <= 20; channels += 3) {
28882       DWConvMicrokernelTester()
28883         .cr(4)
28884         .kr(25)
28885         .channels(channels)
28886         .width(3)
28887         .qmin(128)
28888         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28889     }
28890   }
28891 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,multipixel_with_qmax)28892   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, multipixel_with_qmax) {
28893     for (size_t channels = 1; channels <= 20; channels += 3) {
28894       DWConvMicrokernelTester()
28895         .cr(4)
28896         .kr(25)
28897         .channels(channels)
28898         .width(3)
28899         .qmax(128)
28900         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28901     }
28902   }
28903 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,input_offset)28904   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, input_offset) {
28905     for (uint32_t channels = 8; channels < 64; channels += 12) {
28906       DWConvMicrokernelTester()
28907         .cr(4)
28908         .kr(25)
28909         .channels(channels)
28910         .input_offset(112)
28911         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28912     }
28913   }
28914 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD,zero)28915   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD, zero) {
28916     for (uint32_t mz = 0; mz < 25; mz++) {
28917       for (uint32_t channels = 8; channels < 64; channels += 12) {
28918         DWConvMicrokernelTester()
28919           .cr(4)
28920           .kr(25)
28921           .channels(channels)
28922           .input_offset(112)
28923           .zero_index(mz)
28924           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
28925       }
28926     }
28927   }
28928 #endif  // XNN_ARCH_WASMRELAXEDSIMD
28929 
28930 
28931 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,c_eq_4)28932   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, c_eq_4) {
28933     DWConvMicrokernelTester()
28934       .cr(4)
28935       .kr(25)
28936       .channels(4)
28937       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28938   }
28939 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,c_div_4)28940   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, c_div_4) {
28941     for (uint32_t channels = 8; channels < 64; channels += 12) {
28942       DWConvMicrokernelTester()
28943         .cr(4)
28944         .kr(25)
28945         .channels(channels)
28946         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28947     }
28948   }
28949 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,c_div_4_with_qmin)28950   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, c_div_4_with_qmin) {
28951     for (uint32_t channels = 8; channels < 64; channels += 12) {
28952       DWConvMicrokernelTester()
28953         .cr(4)
28954         .kr(25)
28955         .channels(channels)
28956         .qmin(128)
28957         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28958     }
28959   }
28960 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,c_div_4_with_qmax)28961   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, c_div_4_with_qmax) {
28962     for (uint32_t channels = 8; channels < 64; channels += 12) {
28963       DWConvMicrokernelTester()
28964         .cr(4)
28965         .kr(25)
28966         .channels(channels)
28967         .qmax(128)
28968         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28969     }
28970   }
28971 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,c_lt_4)28972   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, c_lt_4) {
28973     for (uint32_t channels = 1; channels < 4; channels++) {
28974       DWConvMicrokernelTester()
28975         .cr(4)
28976         .kr(25)
28977         .channels(channels)
28978         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28979     }
28980   }
28981 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,c_gt_4)28982   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, c_gt_4) {
28983     for (uint32_t channels = 5; channels < 8; channels++) {
28984       DWConvMicrokernelTester()
28985         .cr(4)
28986         .kr(25)
28987         .channels(channels)
28988         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
28989     }
28990   }
28991 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,c_gt_4_with_qmin)28992   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, c_gt_4_with_qmin) {
28993     for (uint32_t channels = 5; channels < 8; channels++) {
28994       DWConvMicrokernelTester()
28995         .cr(4)
28996         .kr(25)
28997         .channels(channels)
28998         .qmin(128)
28999         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29000     }
29001   }
29002 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,c_gt_4_with_qmax)29003   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, c_gt_4_with_qmax) {
29004     for (uint32_t channels = 5; channels < 8; channels++) {
29005       DWConvMicrokernelTester()
29006         .cr(4)
29007         .kr(25)
29008         .channels(channels)
29009         .qmax(128)
29010         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29011     }
29012   }
29013 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,multipixel)29014   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, multipixel) {
29015     for (size_t channels = 1; channels <= 20; channels += 3) {
29016       DWConvMicrokernelTester()
29017         .cr(4)
29018         .kr(25)
29019         .channels(channels)
29020         .width(3)
29021         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29022     }
29023   }
29024 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,multipixel_with_step)29025   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, multipixel_with_step) {
29026     for (size_t channels = 1; channels <= 20; channels += 3) {
29027       for (size_t step = 2; step <= 25; step++) {
29028         DWConvMicrokernelTester()
29029           .cr(4)
29030           .kr(25)
29031           .channels(channels)
29032           .width(3)
29033           .step(step)
29034           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29035       }
29036     }
29037   }
29038 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,multipixel_with_output_stride)29039   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, multipixel_with_output_stride) {
29040     for (size_t channels = 1; channels <= 20; channels += 3) {
29041       DWConvMicrokernelTester()
29042         .cr(4)
29043         .kr(25)
29044         .channels(4)
29045         .width(5)
29046         .output_stride(23)
29047         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29048     }
29049   }
29050 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,multipixel_with_qmin)29051   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, multipixel_with_qmin) {
29052     for (size_t channels = 1; channels <= 20; channels += 3) {
29053       DWConvMicrokernelTester()
29054         .cr(4)
29055         .kr(25)
29056         .channels(channels)
29057         .width(3)
29058         .qmin(128)
29059         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29060     }
29061   }
29062 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,multipixel_with_qmax)29063   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, multipixel_with_qmax) {
29064     for (size_t channels = 1; channels <= 20; channels += 3) {
29065       DWConvMicrokernelTester()
29066         .cr(4)
29067         .kr(25)
29068         .channels(channels)
29069         .width(3)
29070         .qmax(128)
29071         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29072     }
29073   }
29074 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,input_offset)29075   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, input_offset) {
29076     for (uint32_t channels = 8; channels < 64; channels += 12) {
29077       DWConvMicrokernelTester()
29078         .cr(4)
29079         .kr(25)
29080         .channels(channels)
29081         .input_offset(112)
29082         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29083     }
29084   }
29085 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2,zero)29086   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_ACC2, zero) {
29087     for (uint32_t mz = 0; mz < 25; mz++) {
29088       for (uint32_t channels = 8; channels < 64; channels += 12) {
29089         DWConvMicrokernelTester()
29090           .cr(4)
29091           .kr(25)
29092           .channels(channels)
29093           .input_offset(112)
29094           .zero_index(mz)
29095           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29096       }
29097     }
29098   }
29099 #endif  // XNN_ARCH_WASMRELAXEDSIMD
29100 
29101 
29102 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,c_eq_4)29103   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, c_eq_4) {
29104     DWConvMicrokernelTester()
29105       .cr(4)
29106       .kr(25)
29107       .channels(4)
29108       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29109   }
29110 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,c_div_4)29111   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, c_div_4) {
29112     for (uint32_t channels = 8; channels < 64; channels += 12) {
29113       DWConvMicrokernelTester()
29114         .cr(4)
29115         .kr(25)
29116         .channels(channels)
29117         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29118     }
29119   }
29120 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,c_div_4_with_qmin)29121   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, c_div_4_with_qmin) {
29122     for (uint32_t channels = 8; channels < 64; channels += 12) {
29123       DWConvMicrokernelTester()
29124         .cr(4)
29125         .kr(25)
29126         .channels(channels)
29127         .qmin(128)
29128         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29129     }
29130   }
29131 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,c_div_4_with_qmax)29132   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, c_div_4_with_qmax) {
29133     for (uint32_t channels = 8; channels < 64; channels += 12) {
29134       DWConvMicrokernelTester()
29135         .cr(4)
29136         .kr(25)
29137         .channels(channels)
29138         .qmax(128)
29139         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29140     }
29141   }
29142 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,c_lt_4)29143   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, c_lt_4) {
29144     for (uint32_t channels = 1; channels < 4; channels++) {
29145       DWConvMicrokernelTester()
29146         .cr(4)
29147         .kr(25)
29148         .channels(channels)
29149         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29150     }
29151   }
29152 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,c_gt_4)29153   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, c_gt_4) {
29154     for (uint32_t channels = 5; channels < 8; channels++) {
29155       DWConvMicrokernelTester()
29156         .cr(4)
29157         .kr(25)
29158         .channels(channels)
29159         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29160     }
29161   }
29162 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,c_gt_4_with_qmin)29163   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, c_gt_4_with_qmin) {
29164     for (uint32_t channels = 5; channels < 8; channels++) {
29165       DWConvMicrokernelTester()
29166         .cr(4)
29167         .kr(25)
29168         .channels(channels)
29169         .qmin(128)
29170         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29171     }
29172   }
29173 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,c_gt_4_with_qmax)29174   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, c_gt_4_with_qmax) {
29175     for (uint32_t channels = 5; channels < 8; channels++) {
29176       DWConvMicrokernelTester()
29177         .cr(4)
29178         .kr(25)
29179         .channels(channels)
29180         .qmax(128)
29181         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29182     }
29183   }
29184 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,multipixel)29185   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, multipixel) {
29186     for (size_t channels = 1; channels <= 20; channels += 3) {
29187       DWConvMicrokernelTester()
29188         .cr(4)
29189         .kr(25)
29190         .channels(channels)
29191         .width(3)
29192         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29193     }
29194   }
29195 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,multipixel_with_step)29196   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, multipixel_with_step) {
29197     for (size_t channels = 1; channels <= 20; channels += 3) {
29198       for (size_t step = 2; step <= 25; step++) {
29199         DWConvMicrokernelTester()
29200           .cr(4)
29201           .kr(25)
29202           .channels(channels)
29203           .width(3)
29204           .step(step)
29205           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29206       }
29207     }
29208   }
29209 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,multipixel_with_output_stride)29210   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, multipixel_with_output_stride) {
29211     for (size_t channels = 1; channels <= 20; channels += 3) {
29212       DWConvMicrokernelTester()
29213         .cr(4)
29214         .kr(25)
29215         .channels(4)
29216         .width(5)
29217         .output_stride(23)
29218         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29219     }
29220   }
29221 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,multipixel_with_qmin)29222   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, multipixel_with_qmin) {
29223     for (size_t channels = 1; channels <= 20; channels += 3) {
29224       DWConvMicrokernelTester()
29225         .cr(4)
29226         .kr(25)
29227         .channels(channels)
29228         .width(3)
29229         .qmin(128)
29230         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29231     }
29232   }
29233 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,multipixel_with_qmax)29234   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, multipixel_with_qmax) {
29235     for (size_t channels = 1; channels <= 20; channels += 3) {
29236       DWConvMicrokernelTester()
29237         .cr(4)
29238         .kr(25)
29239         .channels(channels)
29240         .width(3)
29241         .qmax(128)
29242         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29243     }
29244   }
29245 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,input_offset)29246   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, input_offset) {
29247     for (uint32_t channels = 8; channels < 64; channels += 12) {
29248       DWConvMicrokernelTester()
29249         .cr(4)
29250         .kr(25)
29251         .channels(channels)
29252         .input_offset(112)
29253         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29254     }
29255   }
29256 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA,zero)29257   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA, zero) {
29258     for (uint32_t mz = 0; mz < 25; mz++) {
29259       for (uint32_t channels = 8; channels < 64; channels += 12) {
29260         DWConvMicrokernelTester()
29261           .cr(4)
29262           .kr(25)
29263           .channels(channels)
29264           .input_offset(112)
29265           .zero_index(mz)
29266           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29267       }
29268     }
29269   }
29270 #endif  // XNN_ARCH_WASMRELAXEDSIMD
29271 
29272 
29273 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,c_eq_4)29274   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, c_eq_4) {
29275     DWConvMicrokernelTester()
29276       .cr(4)
29277       .kr(25)
29278       .channels(4)
29279       .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29280   }
29281 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,c_div_4)29282   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, c_div_4) {
29283     for (uint32_t channels = 8; channels < 64; channels += 12) {
29284       DWConvMicrokernelTester()
29285         .cr(4)
29286         .kr(25)
29287         .channels(channels)
29288         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29289     }
29290   }
29291 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,c_div_4_with_qmin)29292   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, c_div_4_with_qmin) {
29293     for (uint32_t channels = 8; channels < 64; channels += 12) {
29294       DWConvMicrokernelTester()
29295         .cr(4)
29296         .kr(25)
29297         .channels(channels)
29298         .qmin(128)
29299         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29300     }
29301   }
29302 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,c_div_4_with_qmax)29303   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, c_div_4_with_qmax) {
29304     for (uint32_t channels = 8; channels < 64; channels += 12) {
29305       DWConvMicrokernelTester()
29306         .cr(4)
29307         .kr(25)
29308         .channels(channels)
29309         .qmax(128)
29310         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29311     }
29312   }
29313 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,c_lt_4)29314   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, c_lt_4) {
29315     for (uint32_t channels = 1; channels < 4; channels++) {
29316       DWConvMicrokernelTester()
29317         .cr(4)
29318         .kr(25)
29319         .channels(channels)
29320         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29321     }
29322   }
29323 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,c_gt_4)29324   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, c_gt_4) {
29325     for (uint32_t channels = 5; channels < 8; channels++) {
29326       DWConvMicrokernelTester()
29327         .cr(4)
29328         .kr(25)
29329         .channels(channels)
29330         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29331     }
29332   }
29333 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,c_gt_4_with_qmin)29334   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, c_gt_4_with_qmin) {
29335     for (uint32_t channels = 5; channels < 8; channels++) {
29336       DWConvMicrokernelTester()
29337         .cr(4)
29338         .kr(25)
29339         .channels(channels)
29340         .qmin(128)
29341         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29342     }
29343   }
29344 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,c_gt_4_with_qmax)29345   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, c_gt_4_with_qmax) {
29346     for (uint32_t channels = 5; channels < 8; channels++) {
29347       DWConvMicrokernelTester()
29348         .cr(4)
29349         .kr(25)
29350         .channels(channels)
29351         .qmax(128)
29352         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29353     }
29354   }
29355 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,multipixel)29356   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, multipixel) {
29357     for (size_t channels = 1; channels <= 20; channels += 3) {
29358       DWConvMicrokernelTester()
29359         .cr(4)
29360         .kr(25)
29361         .channels(channels)
29362         .width(3)
29363         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29364     }
29365   }
29366 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_step)29367   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_step) {
29368     for (size_t channels = 1; channels <= 20; channels += 3) {
29369       for (size_t step = 2; step <= 25; step++) {
29370         DWConvMicrokernelTester()
29371           .cr(4)
29372           .kr(25)
29373           .channels(channels)
29374           .width(3)
29375           .step(step)
29376           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29377       }
29378     }
29379   }
29380 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_output_stride)29381   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_output_stride) {
29382     for (size_t channels = 1; channels <= 20; channels += 3) {
29383       DWConvMicrokernelTester()
29384         .cr(4)
29385         .kr(25)
29386         .channels(4)
29387         .width(5)
29388         .output_stride(23)
29389         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29390     }
29391   }
29392 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmin)29393   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmin) {
29394     for (size_t channels = 1; channels <= 20; channels += 3) {
29395       DWConvMicrokernelTester()
29396         .cr(4)
29397         .kr(25)
29398         .channels(channels)
29399         .width(3)
29400         .qmin(128)
29401         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29402     }
29403   }
29404 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmax)29405   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmax) {
29406     for (size_t channels = 1; channels <= 20; channels += 3) {
29407       DWConvMicrokernelTester()
29408         .cr(4)
29409         .kr(25)
29410         .channels(channels)
29411         .width(3)
29412         .qmax(128)
29413         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29414     }
29415   }
29416 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,input_offset)29417   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, input_offset) {
29418     for (uint32_t channels = 8; channels < 64; channels += 12) {
29419       DWConvMicrokernelTester()
29420         .cr(4)
29421         .kr(25)
29422         .channels(channels)
29423         .input_offset(112)
29424         .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29425     }
29426   }
29427 
TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2,zero)29428   TEST(F32_DWCONV_MINMAX_UP4X25__WASMRELAXEDSIMD_FMA_ACC2, zero) {
29429     for (uint32_t mz = 0; mz < 25; mz++) {
29430       for (uint32_t channels = 8; channels < 64; channels += 12) {
29431         DWConvMicrokernelTester()
29432           .cr(4)
29433           .kr(25)
29434           .channels(channels)
29435           .input_offset(112)
29436           .zero_index(mz)
29437           .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29438       }
29439     }
29440   }
29441 #endif  // XNN_ARCH_WASMRELAXEDSIMD
29442 
29443 
29444 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,c_eq_8)29445   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, c_eq_8) {
29446     DWConvMicrokernelTester()
29447       .cr(8)
29448       .kr(3)
29449       .channels(8)
29450       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29451   }
29452 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,c_div_8)29453   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, c_div_8) {
29454     for (uint32_t channels = 16; channels < 128; channels += 24) {
29455       DWConvMicrokernelTester()
29456         .cr(8)
29457         .kr(3)
29458         .channels(channels)
29459         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29460     }
29461   }
29462 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,c_div_8_with_qmin)29463   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, c_div_8_with_qmin) {
29464     for (uint32_t channels = 16; channels < 128; channels += 24) {
29465       DWConvMicrokernelTester()
29466         .cr(8)
29467         .kr(3)
29468         .channels(channels)
29469         .qmin(128)
29470         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29471     }
29472   }
29473 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,c_div_8_with_qmax)29474   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, c_div_8_with_qmax) {
29475     for (uint32_t channels = 16; channels < 128; channels += 24) {
29476       DWConvMicrokernelTester()
29477         .cr(8)
29478         .kr(3)
29479         .channels(channels)
29480         .qmax(128)
29481         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29482     }
29483   }
29484 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,c_lt_8)29485   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, c_lt_8) {
29486     for (uint32_t channels = 1; channels < 8; channels++) {
29487       DWConvMicrokernelTester()
29488         .cr(8)
29489         .kr(3)
29490         .channels(channels)
29491         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29492     }
29493   }
29494 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,c_gt_8)29495   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, c_gt_8) {
29496     for (uint32_t channels = 9; channels < 16; channels++) {
29497       DWConvMicrokernelTester()
29498         .cr(8)
29499         .kr(3)
29500         .channels(channels)
29501         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29502     }
29503   }
29504 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,c_gt_8_with_qmin)29505   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, c_gt_8_with_qmin) {
29506     for (uint32_t channels = 9; channels < 16; channels++) {
29507       DWConvMicrokernelTester()
29508         .cr(8)
29509         .kr(3)
29510         .channels(channels)
29511         .qmin(128)
29512         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29513     }
29514   }
29515 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,c_gt_8_with_qmax)29516   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, c_gt_8_with_qmax) {
29517     for (uint32_t channels = 9; channels < 16; channels++) {
29518       DWConvMicrokernelTester()
29519         .cr(8)
29520         .kr(3)
29521         .channels(channels)
29522         .qmax(128)
29523         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29524     }
29525   }
29526 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,multipixel)29527   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, multipixel) {
29528     for (size_t channels = 1; channels <= 40; channels += 7) {
29529       DWConvMicrokernelTester()
29530         .cr(8)
29531         .kr(3)
29532         .channels(channels)
29533         .width(3)
29534         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29535     }
29536   }
29537 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,multipixel_with_step)29538   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, multipixel_with_step) {
29539     for (size_t channels = 1; channels <= 40; channels += 7) {
29540       for (size_t step = 2; step <= 3; step++) {
29541         DWConvMicrokernelTester()
29542           .cr(8)
29543           .kr(3)
29544           .channels(channels)
29545           .width(3)
29546           .step(step)
29547           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29548       }
29549     }
29550   }
29551 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,multipixel_with_output_stride)29552   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, multipixel_with_output_stride) {
29553     for (size_t channels = 1; channels <= 40; channels += 7) {
29554       DWConvMicrokernelTester()
29555         .cr(8)
29556         .kr(3)
29557         .channels(8)
29558         .width(5)
29559         .output_stride(43)
29560         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29561     }
29562   }
29563 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,multipixel_with_qmin)29564   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, multipixel_with_qmin) {
29565     for (size_t channels = 1; channels <= 40; channels += 7) {
29566       DWConvMicrokernelTester()
29567         .cr(8)
29568         .kr(3)
29569         .channels(channels)
29570         .width(3)
29571         .qmin(128)
29572         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29573     }
29574   }
29575 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,multipixel_with_qmax)29576   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, multipixel_with_qmax) {
29577     for (size_t channels = 1; channels <= 40; channels += 7) {
29578       DWConvMicrokernelTester()
29579         .cr(8)
29580         .kr(3)
29581         .channels(channels)
29582         .width(3)
29583         .qmax(128)
29584         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29585     }
29586   }
29587 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,input_offset)29588   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, input_offset) {
29589     for (uint32_t channels = 16; channels < 128; channels += 24) {
29590       DWConvMicrokernelTester()
29591         .cr(8)
29592         .kr(3)
29593         .channels(channels)
29594         .input_offset(176)
29595         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29596     }
29597   }
29598 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD,zero)29599   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD, zero) {
29600     for (uint32_t mz = 0; mz < 3; mz++) {
29601       for (uint32_t channels = 16; channels < 128; channels += 24) {
29602         DWConvMicrokernelTester()
29603           .cr(8)
29604           .kr(3)
29605           .channels(channels)
29606           .input_offset(176)
29607           .zero_index(mz)
29608           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
29609       }
29610     }
29611   }
29612 #endif  // XNN_ARCH_WASMRELAXEDSIMD
29613 
29614 
29615 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,c_eq_8)29616   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, c_eq_8) {
29617     DWConvMicrokernelTester()
29618       .cr(8)
29619       .kr(3)
29620       .channels(8)
29621       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29622   }
29623 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,c_div_8)29624   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, c_div_8) {
29625     for (uint32_t channels = 16; channels < 128; channels += 24) {
29626       DWConvMicrokernelTester()
29627         .cr(8)
29628         .kr(3)
29629         .channels(channels)
29630         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29631     }
29632   }
29633 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,c_div_8_with_qmin)29634   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, c_div_8_with_qmin) {
29635     for (uint32_t channels = 16; channels < 128; channels += 24) {
29636       DWConvMicrokernelTester()
29637         .cr(8)
29638         .kr(3)
29639         .channels(channels)
29640         .qmin(128)
29641         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29642     }
29643   }
29644 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,c_div_8_with_qmax)29645   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, c_div_8_with_qmax) {
29646     for (uint32_t channels = 16; channels < 128; channels += 24) {
29647       DWConvMicrokernelTester()
29648         .cr(8)
29649         .kr(3)
29650         .channels(channels)
29651         .qmax(128)
29652         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29653     }
29654   }
29655 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,c_lt_8)29656   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, c_lt_8) {
29657     for (uint32_t channels = 1; channels < 8; channels++) {
29658       DWConvMicrokernelTester()
29659         .cr(8)
29660         .kr(3)
29661         .channels(channels)
29662         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29663     }
29664   }
29665 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,c_gt_8)29666   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, c_gt_8) {
29667     for (uint32_t channels = 9; channels < 16; channels++) {
29668       DWConvMicrokernelTester()
29669         .cr(8)
29670         .kr(3)
29671         .channels(channels)
29672         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29673     }
29674   }
29675 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,c_gt_8_with_qmin)29676   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, c_gt_8_with_qmin) {
29677     for (uint32_t channels = 9; channels < 16; channels++) {
29678       DWConvMicrokernelTester()
29679         .cr(8)
29680         .kr(3)
29681         .channels(channels)
29682         .qmin(128)
29683         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29684     }
29685   }
29686 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,c_gt_8_with_qmax)29687   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, c_gt_8_with_qmax) {
29688     for (uint32_t channels = 9; channels < 16; channels++) {
29689       DWConvMicrokernelTester()
29690         .cr(8)
29691         .kr(3)
29692         .channels(channels)
29693         .qmax(128)
29694         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29695     }
29696   }
29697 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,multipixel)29698   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, multipixel) {
29699     for (size_t channels = 1; channels <= 40; channels += 7) {
29700       DWConvMicrokernelTester()
29701         .cr(8)
29702         .kr(3)
29703         .channels(channels)
29704         .width(3)
29705         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29706     }
29707   }
29708 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,multipixel_with_step)29709   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, multipixel_with_step) {
29710     for (size_t channels = 1; channels <= 40; channels += 7) {
29711       for (size_t step = 2; step <= 3; step++) {
29712         DWConvMicrokernelTester()
29713           .cr(8)
29714           .kr(3)
29715           .channels(channels)
29716           .width(3)
29717           .step(step)
29718           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29719       }
29720     }
29721   }
29722 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,multipixel_with_output_stride)29723   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, multipixel_with_output_stride) {
29724     for (size_t channels = 1; channels <= 40; channels += 7) {
29725       DWConvMicrokernelTester()
29726         .cr(8)
29727         .kr(3)
29728         .channels(8)
29729         .width(5)
29730         .output_stride(43)
29731         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29732     }
29733   }
29734 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,multipixel_with_qmin)29735   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, multipixel_with_qmin) {
29736     for (size_t channels = 1; channels <= 40; channels += 7) {
29737       DWConvMicrokernelTester()
29738         .cr(8)
29739         .kr(3)
29740         .channels(channels)
29741         .width(3)
29742         .qmin(128)
29743         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29744     }
29745   }
29746 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,multipixel_with_qmax)29747   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, multipixel_with_qmax) {
29748     for (size_t channels = 1; channels <= 40; channels += 7) {
29749       DWConvMicrokernelTester()
29750         .cr(8)
29751         .kr(3)
29752         .channels(channels)
29753         .width(3)
29754         .qmax(128)
29755         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29756     }
29757   }
29758 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,input_offset)29759   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, input_offset) {
29760     for (uint32_t channels = 16; channels < 128; channels += 24) {
29761       DWConvMicrokernelTester()
29762         .cr(8)
29763         .kr(3)
29764         .channels(channels)
29765         .input_offset(176)
29766         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29767     }
29768   }
29769 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2,zero)29770   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_ACC2, zero) {
29771     for (uint32_t mz = 0; mz < 3; mz++) {
29772       for (uint32_t channels = 16; channels < 128; channels += 24) {
29773         DWConvMicrokernelTester()
29774           .cr(8)
29775           .kr(3)
29776           .channels(channels)
29777           .input_offset(176)
29778           .zero_index(mz)
29779           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
29780       }
29781     }
29782   }
29783 #endif  // XNN_ARCH_WASMRELAXEDSIMD
29784 
29785 
29786 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,c_eq_8)29787   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, c_eq_8) {
29788     DWConvMicrokernelTester()
29789       .cr(8)
29790       .kr(3)
29791       .channels(8)
29792       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29793   }
29794 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,c_div_8)29795   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, c_div_8) {
29796     for (uint32_t channels = 16; channels < 128; channels += 24) {
29797       DWConvMicrokernelTester()
29798         .cr(8)
29799         .kr(3)
29800         .channels(channels)
29801         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29802     }
29803   }
29804 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,c_div_8_with_qmin)29805   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, c_div_8_with_qmin) {
29806     for (uint32_t channels = 16; channels < 128; channels += 24) {
29807       DWConvMicrokernelTester()
29808         .cr(8)
29809         .kr(3)
29810         .channels(channels)
29811         .qmin(128)
29812         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29813     }
29814   }
29815 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,c_div_8_with_qmax)29816   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, c_div_8_with_qmax) {
29817     for (uint32_t channels = 16; channels < 128; channels += 24) {
29818       DWConvMicrokernelTester()
29819         .cr(8)
29820         .kr(3)
29821         .channels(channels)
29822         .qmax(128)
29823         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29824     }
29825   }
29826 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,c_lt_8)29827   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, c_lt_8) {
29828     for (uint32_t channels = 1; channels < 8; channels++) {
29829       DWConvMicrokernelTester()
29830         .cr(8)
29831         .kr(3)
29832         .channels(channels)
29833         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29834     }
29835   }
29836 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,c_gt_8)29837   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, c_gt_8) {
29838     for (uint32_t channels = 9; channels < 16; channels++) {
29839       DWConvMicrokernelTester()
29840         .cr(8)
29841         .kr(3)
29842         .channels(channels)
29843         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29844     }
29845   }
29846 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,c_gt_8_with_qmin)29847   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, c_gt_8_with_qmin) {
29848     for (uint32_t channels = 9; channels < 16; channels++) {
29849       DWConvMicrokernelTester()
29850         .cr(8)
29851         .kr(3)
29852         .channels(channels)
29853         .qmin(128)
29854         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29855     }
29856   }
29857 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,c_gt_8_with_qmax)29858   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, c_gt_8_with_qmax) {
29859     for (uint32_t channels = 9; channels < 16; channels++) {
29860       DWConvMicrokernelTester()
29861         .cr(8)
29862         .kr(3)
29863         .channels(channels)
29864         .qmax(128)
29865         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29866     }
29867   }
29868 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,multipixel)29869   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, multipixel) {
29870     for (size_t channels = 1; channels <= 40; channels += 7) {
29871       DWConvMicrokernelTester()
29872         .cr(8)
29873         .kr(3)
29874         .channels(channels)
29875         .width(3)
29876         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29877     }
29878   }
29879 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,multipixel_with_step)29880   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, multipixel_with_step) {
29881     for (size_t channels = 1; channels <= 40; channels += 7) {
29882       for (size_t step = 2; step <= 3; step++) {
29883         DWConvMicrokernelTester()
29884           .cr(8)
29885           .kr(3)
29886           .channels(channels)
29887           .width(3)
29888           .step(step)
29889           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29890       }
29891     }
29892   }
29893 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,multipixel_with_output_stride)29894   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, multipixel_with_output_stride) {
29895     for (size_t channels = 1; channels <= 40; channels += 7) {
29896       DWConvMicrokernelTester()
29897         .cr(8)
29898         .kr(3)
29899         .channels(8)
29900         .width(5)
29901         .output_stride(43)
29902         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29903     }
29904   }
29905 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,multipixel_with_qmin)29906   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, multipixel_with_qmin) {
29907     for (size_t channels = 1; channels <= 40; channels += 7) {
29908       DWConvMicrokernelTester()
29909         .cr(8)
29910         .kr(3)
29911         .channels(channels)
29912         .width(3)
29913         .qmin(128)
29914         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29915     }
29916   }
29917 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,multipixel_with_qmax)29918   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, multipixel_with_qmax) {
29919     for (size_t channels = 1; channels <= 40; channels += 7) {
29920       DWConvMicrokernelTester()
29921         .cr(8)
29922         .kr(3)
29923         .channels(channels)
29924         .width(3)
29925         .qmax(128)
29926         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29927     }
29928   }
29929 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,input_offset)29930   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, input_offset) {
29931     for (uint32_t channels = 16; channels < 128; channels += 24) {
29932       DWConvMicrokernelTester()
29933         .cr(8)
29934         .kr(3)
29935         .channels(channels)
29936         .input_offset(176)
29937         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29938     }
29939   }
29940 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA,zero)29941   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA, zero) {
29942     for (uint32_t mz = 0; mz < 3; mz++) {
29943       for (uint32_t channels = 16; channels < 128; channels += 24) {
29944         DWConvMicrokernelTester()
29945           .cr(8)
29946           .kr(3)
29947           .channels(channels)
29948           .input_offset(176)
29949           .zero_index(mz)
29950           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
29951       }
29952     }
29953   }
29954 #endif  // XNN_ARCH_WASMRELAXEDSIMD
29955 
29956 
29957 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,c_eq_8)29958   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, c_eq_8) {
29959     DWConvMicrokernelTester()
29960       .cr(8)
29961       .kr(3)
29962       .channels(8)
29963       .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29964   }
29965 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,c_div_8)29966   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, c_div_8) {
29967     for (uint32_t channels = 16; channels < 128; channels += 24) {
29968       DWConvMicrokernelTester()
29969         .cr(8)
29970         .kr(3)
29971         .channels(channels)
29972         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29973     }
29974   }
29975 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,c_div_8_with_qmin)29976   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, c_div_8_with_qmin) {
29977     for (uint32_t channels = 16; channels < 128; channels += 24) {
29978       DWConvMicrokernelTester()
29979         .cr(8)
29980         .kr(3)
29981         .channels(channels)
29982         .qmin(128)
29983         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29984     }
29985   }
29986 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,c_div_8_with_qmax)29987   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, c_div_8_with_qmax) {
29988     for (uint32_t channels = 16; channels < 128; channels += 24) {
29989       DWConvMicrokernelTester()
29990         .cr(8)
29991         .kr(3)
29992         .channels(channels)
29993         .qmax(128)
29994         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
29995     }
29996   }
29997 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,c_lt_8)29998   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, c_lt_8) {
29999     for (uint32_t channels = 1; channels < 8; channels++) {
30000       DWConvMicrokernelTester()
30001         .cr(8)
30002         .kr(3)
30003         .channels(channels)
30004         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30005     }
30006   }
30007 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,c_gt_8)30008   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, c_gt_8) {
30009     for (uint32_t channels = 9; channels < 16; channels++) {
30010       DWConvMicrokernelTester()
30011         .cr(8)
30012         .kr(3)
30013         .channels(channels)
30014         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30015     }
30016   }
30017 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,c_gt_8_with_qmin)30018   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, c_gt_8_with_qmin) {
30019     for (uint32_t channels = 9; channels < 16; channels++) {
30020       DWConvMicrokernelTester()
30021         .cr(8)
30022         .kr(3)
30023         .channels(channels)
30024         .qmin(128)
30025         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30026     }
30027   }
30028 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,c_gt_8_with_qmax)30029   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, c_gt_8_with_qmax) {
30030     for (uint32_t channels = 9; channels < 16; channels++) {
30031       DWConvMicrokernelTester()
30032         .cr(8)
30033         .kr(3)
30034         .channels(channels)
30035         .qmax(128)
30036         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30037     }
30038   }
30039 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,multipixel)30040   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, multipixel) {
30041     for (size_t channels = 1; channels <= 40; channels += 7) {
30042       DWConvMicrokernelTester()
30043         .cr(8)
30044         .kr(3)
30045         .channels(channels)
30046         .width(3)
30047         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30048     }
30049   }
30050 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_step)30051   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_step) {
30052     for (size_t channels = 1; channels <= 40; channels += 7) {
30053       for (size_t step = 2; step <= 3; step++) {
30054         DWConvMicrokernelTester()
30055           .cr(8)
30056           .kr(3)
30057           .channels(channels)
30058           .width(3)
30059           .step(step)
30060           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30061       }
30062     }
30063   }
30064 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_output_stride)30065   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_output_stride) {
30066     for (size_t channels = 1; channels <= 40; channels += 7) {
30067       DWConvMicrokernelTester()
30068         .cr(8)
30069         .kr(3)
30070         .channels(8)
30071         .width(5)
30072         .output_stride(43)
30073         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30074     }
30075   }
30076 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmin)30077   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmin) {
30078     for (size_t channels = 1; channels <= 40; channels += 7) {
30079       DWConvMicrokernelTester()
30080         .cr(8)
30081         .kr(3)
30082         .channels(channels)
30083         .width(3)
30084         .qmin(128)
30085         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30086     }
30087   }
30088 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmax)30089   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmax) {
30090     for (size_t channels = 1; channels <= 40; channels += 7) {
30091       DWConvMicrokernelTester()
30092         .cr(8)
30093         .kr(3)
30094         .channels(channels)
30095         .width(3)
30096         .qmax(128)
30097         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30098     }
30099   }
30100 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,input_offset)30101   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, input_offset) {
30102     for (uint32_t channels = 16; channels < 128; channels += 24) {
30103       DWConvMicrokernelTester()
30104         .cr(8)
30105         .kr(3)
30106         .channels(channels)
30107         .input_offset(176)
30108         .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30109     }
30110   }
30111 
TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2,zero)30112   TEST(F32_DWCONV_MINMAX_UP8X3__WASMRELAXEDSIMD_FMA_ACC2, zero) {
30113     for (uint32_t mz = 0; mz < 3; mz++) {
30114       for (uint32_t channels = 16; channels < 128; channels += 24) {
30115         DWConvMicrokernelTester()
30116           .cr(8)
30117           .kr(3)
30118           .channels(channels)
30119           .input_offset(176)
30120           .zero_index(mz)
30121           .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30122       }
30123     }
30124   }
30125 #endif  // XNN_ARCH_WASMRELAXEDSIMD
30126 
30127 
30128 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,c_eq_8)30129   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, c_eq_8) {
30130     DWConvMicrokernelTester()
30131       .cr(8)
30132       .kr(4)
30133       .channels(8)
30134       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30135   }
30136 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,c_div_8)30137   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, c_div_8) {
30138     for (uint32_t channels = 16; channels < 128; channels += 24) {
30139       DWConvMicrokernelTester()
30140         .cr(8)
30141         .kr(4)
30142         .channels(channels)
30143         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30144     }
30145   }
30146 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,c_div_8_with_qmin)30147   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, c_div_8_with_qmin) {
30148     for (uint32_t channels = 16; channels < 128; channels += 24) {
30149       DWConvMicrokernelTester()
30150         .cr(8)
30151         .kr(4)
30152         .channels(channels)
30153         .qmin(128)
30154         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30155     }
30156   }
30157 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,c_div_8_with_qmax)30158   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, c_div_8_with_qmax) {
30159     for (uint32_t channels = 16; channels < 128; channels += 24) {
30160       DWConvMicrokernelTester()
30161         .cr(8)
30162         .kr(4)
30163         .channels(channels)
30164         .qmax(128)
30165         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30166     }
30167   }
30168 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,c_lt_8)30169   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, c_lt_8) {
30170     for (uint32_t channels = 1; channels < 8; channels++) {
30171       DWConvMicrokernelTester()
30172         .cr(8)
30173         .kr(4)
30174         .channels(channels)
30175         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30176     }
30177   }
30178 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,c_gt_8)30179   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, c_gt_8) {
30180     for (uint32_t channels = 9; channels < 16; channels++) {
30181       DWConvMicrokernelTester()
30182         .cr(8)
30183         .kr(4)
30184         .channels(channels)
30185         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30186     }
30187   }
30188 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,c_gt_8_with_qmin)30189   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, c_gt_8_with_qmin) {
30190     for (uint32_t channels = 9; channels < 16; channels++) {
30191       DWConvMicrokernelTester()
30192         .cr(8)
30193         .kr(4)
30194         .channels(channels)
30195         .qmin(128)
30196         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30197     }
30198   }
30199 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,c_gt_8_with_qmax)30200   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, c_gt_8_with_qmax) {
30201     for (uint32_t channels = 9; channels < 16; channels++) {
30202       DWConvMicrokernelTester()
30203         .cr(8)
30204         .kr(4)
30205         .channels(channels)
30206         .qmax(128)
30207         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30208     }
30209   }
30210 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,multipixel)30211   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, multipixel) {
30212     for (size_t channels = 1; channels <= 40; channels += 7) {
30213       DWConvMicrokernelTester()
30214         .cr(8)
30215         .kr(4)
30216         .channels(channels)
30217         .width(3)
30218         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30219     }
30220   }
30221 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,multipixel_with_step)30222   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, multipixel_with_step) {
30223     for (size_t channels = 1; channels <= 40; channels += 7) {
30224       for (size_t step = 2; step <= 4; step++) {
30225         DWConvMicrokernelTester()
30226           .cr(8)
30227           .kr(4)
30228           .channels(channels)
30229           .width(3)
30230           .step(step)
30231           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30232       }
30233     }
30234   }
30235 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,multipixel_with_output_stride)30236   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, multipixel_with_output_stride) {
30237     for (size_t channels = 1; channels <= 40; channels += 7) {
30238       DWConvMicrokernelTester()
30239         .cr(8)
30240         .kr(4)
30241         .channels(8)
30242         .width(5)
30243         .output_stride(43)
30244         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30245     }
30246   }
30247 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,multipixel_with_qmin)30248   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, multipixel_with_qmin) {
30249     for (size_t channels = 1; channels <= 40; channels += 7) {
30250       DWConvMicrokernelTester()
30251         .cr(8)
30252         .kr(4)
30253         .channels(channels)
30254         .width(3)
30255         .qmin(128)
30256         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30257     }
30258   }
30259 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,multipixel_with_qmax)30260   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, multipixel_with_qmax) {
30261     for (size_t channels = 1; channels <= 40; channels += 7) {
30262       DWConvMicrokernelTester()
30263         .cr(8)
30264         .kr(4)
30265         .channels(channels)
30266         .width(3)
30267         .qmax(128)
30268         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30269     }
30270   }
30271 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,input_offset)30272   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, input_offset) {
30273     for (uint32_t channels = 16; channels < 128; channels += 24) {
30274       DWConvMicrokernelTester()
30275         .cr(8)
30276         .kr(4)
30277         .channels(channels)
30278         .input_offset(176)
30279         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30280     }
30281   }
30282 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD,zero)30283   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD, zero) {
30284     for (uint32_t mz = 0; mz < 4; mz++) {
30285       for (uint32_t channels = 16; channels < 128; channels += 24) {
30286         DWConvMicrokernelTester()
30287           .cr(8)
30288           .kr(4)
30289           .channels(channels)
30290           .input_offset(176)
30291           .zero_index(mz)
30292           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30293       }
30294     }
30295   }
30296 #endif  // XNN_ARCH_WASMRELAXEDSIMD
30297 
30298 
30299 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,c_eq_8)30300   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, c_eq_8) {
30301     DWConvMicrokernelTester()
30302       .cr(8)
30303       .kr(4)
30304       .channels(8)
30305       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30306   }
30307 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,c_div_8)30308   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, c_div_8) {
30309     for (uint32_t channels = 16; channels < 128; channels += 24) {
30310       DWConvMicrokernelTester()
30311         .cr(8)
30312         .kr(4)
30313         .channels(channels)
30314         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30315     }
30316   }
30317 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,c_div_8_with_qmin)30318   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, c_div_8_with_qmin) {
30319     for (uint32_t channels = 16; channels < 128; channels += 24) {
30320       DWConvMicrokernelTester()
30321         .cr(8)
30322         .kr(4)
30323         .channels(channels)
30324         .qmin(128)
30325         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30326     }
30327   }
30328 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,c_div_8_with_qmax)30329   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, c_div_8_with_qmax) {
30330     for (uint32_t channels = 16; channels < 128; channels += 24) {
30331       DWConvMicrokernelTester()
30332         .cr(8)
30333         .kr(4)
30334         .channels(channels)
30335         .qmax(128)
30336         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30337     }
30338   }
30339 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,c_lt_8)30340   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, c_lt_8) {
30341     for (uint32_t channels = 1; channels < 8; channels++) {
30342       DWConvMicrokernelTester()
30343         .cr(8)
30344         .kr(4)
30345         .channels(channels)
30346         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30347     }
30348   }
30349 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,c_gt_8)30350   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, c_gt_8) {
30351     for (uint32_t channels = 9; channels < 16; channels++) {
30352       DWConvMicrokernelTester()
30353         .cr(8)
30354         .kr(4)
30355         .channels(channels)
30356         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30357     }
30358   }
30359 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,c_gt_8_with_qmin)30360   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, c_gt_8_with_qmin) {
30361     for (uint32_t channels = 9; channels < 16; channels++) {
30362       DWConvMicrokernelTester()
30363         .cr(8)
30364         .kr(4)
30365         .channels(channels)
30366         .qmin(128)
30367         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30368     }
30369   }
30370 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,c_gt_8_with_qmax)30371   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, c_gt_8_with_qmax) {
30372     for (uint32_t channels = 9; channels < 16; channels++) {
30373       DWConvMicrokernelTester()
30374         .cr(8)
30375         .kr(4)
30376         .channels(channels)
30377         .qmax(128)
30378         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30379     }
30380   }
30381 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,multipixel)30382   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, multipixel) {
30383     for (size_t channels = 1; channels <= 40; channels += 7) {
30384       DWConvMicrokernelTester()
30385         .cr(8)
30386         .kr(4)
30387         .channels(channels)
30388         .width(3)
30389         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30390     }
30391   }
30392 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,multipixel_with_step)30393   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, multipixel_with_step) {
30394     for (size_t channels = 1; channels <= 40; channels += 7) {
30395       for (size_t step = 2; step <= 4; step++) {
30396         DWConvMicrokernelTester()
30397           .cr(8)
30398           .kr(4)
30399           .channels(channels)
30400           .width(3)
30401           .step(step)
30402           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30403       }
30404     }
30405   }
30406 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,multipixel_with_output_stride)30407   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, multipixel_with_output_stride) {
30408     for (size_t channels = 1; channels <= 40; channels += 7) {
30409       DWConvMicrokernelTester()
30410         .cr(8)
30411         .kr(4)
30412         .channels(8)
30413         .width(5)
30414         .output_stride(43)
30415         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30416     }
30417   }
30418 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,multipixel_with_qmin)30419   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, multipixel_with_qmin) {
30420     for (size_t channels = 1; channels <= 40; channels += 7) {
30421       DWConvMicrokernelTester()
30422         .cr(8)
30423         .kr(4)
30424         .channels(channels)
30425         .width(3)
30426         .qmin(128)
30427         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30428     }
30429   }
30430 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,multipixel_with_qmax)30431   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, multipixel_with_qmax) {
30432     for (size_t channels = 1; channels <= 40; channels += 7) {
30433       DWConvMicrokernelTester()
30434         .cr(8)
30435         .kr(4)
30436         .channels(channels)
30437         .width(3)
30438         .qmax(128)
30439         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30440     }
30441   }
30442 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,input_offset)30443   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, input_offset) {
30444     for (uint32_t channels = 16; channels < 128; channels += 24) {
30445       DWConvMicrokernelTester()
30446         .cr(8)
30447         .kr(4)
30448         .channels(channels)
30449         .input_offset(176)
30450         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30451     }
30452   }
30453 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2,zero)30454   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_ACC2, zero) {
30455     for (uint32_t mz = 0; mz < 4; mz++) {
30456       for (uint32_t channels = 16; channels < 128; channels += 24) {
30457         DWConvMicrokernelTester()
30458           .cr(8)
30459           .kr(4)
30460           .channels(channels)
30461           .input_offset(176)
30462           .zero_index(mz)
30463           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30464       }
30465     }
30466   }
30467 #endif  // XNN_ARCH_WASMRELAXEDSIMD
30468 
30469 
30470 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,c_eq_8)30471   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, c_eq_8) {
30472     DWConvMicrokernelTester()
30473       .cr(8)
30474       .kr(4)
30475       .channels(8)
30476       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30477   }
30478 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,c_div_8)30479   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, c_div_8) {
30480     for (uint32_t channels = 16; channels < 128; channels += 24) {
30481       DWConvMicrokernelTester()
30482         .cr(8)
30483         .kr(4)
30484         .channels(channels)
30485         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30486     }
30487   }
30488 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,c_div_8_with_qmin)30489   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, c_div_8_with_qmin) {
30490     for (uint32_t channels = 16; channels < 128; channels += 24) {
30491       DWConvMicrokernelTester()
30492         .cr(8)
30493         .kr(4)
30494         .channels(channels)
30495         .qmin(128)
30496         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30497     }
30498   }
30499 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,c_div_8_with_qmax)30500   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, c_div_8_with_qmax) {
30501     for (uint32_t channels = 16; channels < 128; channels += 24) {
30502       DWConvMicrokernelTester()
30503         .cr(8)
30504         .kr(4)
30505         .channels(channels)
30506         .qmax(128)
30507         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30508     }
30509   }
30510 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,c_lt_8)30511   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, c_lt_8) {
30512     for (uint32_t channels = 1; channels < 8; channels++) {
30513       DWConvMicrokernelTester()
30514         .cr(8)
30515         .kr(4)
30516         .channels(channels)
30517         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30518     }
30519   }
30520 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,c_gt_8)30521   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, c_gt_8) {
30522     for (uint32_t channels = 9; channels < 16; channels++) {
30523       DWConvMicrokernelTester()
30524         .cr(8)
30525         .kr(4)
30526         .channels(channels)
30527         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30528     }
30529   }
30530 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,c_gt_8_with_qmin)30531   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, c_gt_8_with_qmin) {
30532     for (uint32_t channels = 9; channels < 16; channels++) {
30533       DWConvMicrokernelTester()
30534         .cr(8)
30535         .kr(4)
30536         .channels(channels)
30537         .qmin(128)
30538         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30539     }
30540   }
30541 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,c_gt_8_with_qmax)30542   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, c_gt_8_with_qmax) {
30543     for (uint32_t channels = 9; channels < 16; channels++) {
30544       DWConvMicrokernelTester()
30545         .cr(8)
30546         .kr(4)
30547         .channels(channels)
30548         .qmax(128)
30549         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30550     }
30551   }
30552 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,multipixel)30553   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, multipixel) {
30554     for (size_t channels = 1; channels <= 40; channels += 7) {
30555       DWConvMicrokernelTester()
30556         .cr(8)
30557         .kr(4)
30558         .channels(channels)
30559         .width(3)
30560         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30561     }
30562   }
30563 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,multipixel_with_step)30564   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, multipixel_with_step) {
30565     for (size_t channels = 1; channels <= 40; channels += 7) {
30566       for (size_t step = 2; step <= 4; step++) {
30567         DWConvMicrokernelTester()
30568           .cr(8)
30569           .kr(4)
30570           .channels(channels)
30571           .width(3)
30572           .step(step)
30573           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30574       }
30575     }
30576   }
30577 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,multipixel_with_output_stride)30578   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, multipixel_with_output_stride) {
30579     for (size_t channels = 1; channels <= 40; channels += 7) {
30580       DWConvMicrokernelTester()
30581         .cr(8)
30582         .kr(4)
30583         .channels(8)
30584         .width(5)
30585         .output_stride(43)
30586         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30587     }
30588   }
30589 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,multipixel_with_qmin)30590   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, multipixel_with_qmin) {
30591     for (size_t channels = 1; channels <= 40; channels += 7) {
30592       DWConvMicrokernelTester()
30593         .cr(8)
30594         .kr(4)
30595         .channels(channels)
30596         .width(3)
30597         .qmin(128)
30598         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30599     }
30600   }
30601 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,multipixel_with_qmax)30602   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, multipixel_with_qmax) {
30603     for (size_t channels = 1; channels <= 40; channels += 7) {
30604       DWConvMicrokernelTester()
30605         .cr(8)
30606         .kr(4)
30607         .channels(channels)
30608         .width(3)
30609         .qmax(128)
30610         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30611     }
30612   }
30613 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,input_offset)30614   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, input_offset) {
30615     for (uint32_t channels = 16; channels < 128; channels += 24) {
30616       DWConvMicrokernelTester()
30617         .cr(8)
30618         .kr(4)
30619         .channels(channels)
30620         .input_offset(176)
30621         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30622     }
30623   }
30624 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA,zero)30625   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA, zero) {
30626     for (uint32_t mz = 0; mz < 4; mz++) {
30627       for (uint32_t channels = 16; channels < 128; channels += 24) {
30628         DWConvMicrokernelTester()
30629           .cr(8)
30630           .kr(4)
30631           .channels(channels)
30632           .input_offset(176)
30633           .zero_index(mz)
30634           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
30635       }
30636     }
30637   }
30638 #endif  // XNN_ARCH_WASMRELAXEDSIMD
30639 
30640 
30641 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,c_eq_8)30642   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, c_eq_8) {
30643     DWConvMicrokernelTester()
30644       .cr(8)
30645       .kr(4)
30646       .channels(8)
30647       .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30648   }
30649 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,c_div_8)30650   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, c_div_8) {
30651     for (uint32_t channels = 16; channels < 128; channels += 24) {
30652       DWConvMicrokernelTester()
30653         .cr(8)
30654         .kr(4)
30655         .channels(channels)
30656         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30657     }
30658   }
30659 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,c_div_8_with_qmin)30660   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, c_div_8_with_qmin) {
30661     for (uint32_t channels = 16; channels < 128; channels += 24) {
30662       DWConvMicrokernelTester()
30663         .cr(8)
30664         .kr(4)
30665         .channels(channels)
30666         .qmin(128)
30667         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30668     }
30669   }
30670 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,c_div_8_with_qmax)30671   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, c_div_8_with_qmax) {
30672     for (uint32_t channels = 16; channels < 128; channels += 24) {
30673       DWConvMicrokernelTester()
30674         .cr(8)
30675         .kr(4)
30676         .channels(channels)
30677         .qmax(128)
30678         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30679     }
30680   }
30681 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,c_lt_8)30682   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, c_lt_8) {
30683     for (uint32_t channels = 1; channels < 8; channels++) {
30684       DWConvMicrokernelTester()
30685         .cr(8)
30686         .kr(4)
30687         .channels(channels)
30688         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30689     }
30690   }
30691 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,c_gt_8)30692   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, c_gt_8) {
30693     for (uint32_t channels = 9; channels < 16; channels++) {
30694       DWConvMicrokernelTester()
30695         .cr(8)
30696         .kr(4)
30697         .channels(channels)
30698         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30699     }
30700   }
30701 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,c_gt_8_with_qmin)30702   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, c_gt_8_with_qmin) {
30703     for (uint32_t channels = 9; channels < 16; channels++) {
30704       DWConvMicrokernelTester()
30705         .cr(8)
30706         .kr(4)
30707         .channels(channels)
30708         .qmin(128)
30709         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30710     }
30711   }
30712 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,c_gt_8_with_qmax)30713   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, c_gt_8_with_qmax) {
30714     for (uint32_t channels = 9; channels < 16; channels++) {
30715       DWConvMicrokernelTester()
30716         .cr(8)
30717         .kr(4)
30718         .channels(channels)
30719         .qmax(128)
30720         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30721     }
30722   }
30723 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,multipixel)30724   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, multipixel) {
30725     for (size_t channels = 1; channels <= 40; channels += 7) {
30726       DWConvMicrokernelTester()
30727         .cr(8)
30728         .kr(4)
30729         .channels(channels)
30730         .width(3)
30731         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30732     }
30733   }
30734 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_step)30735   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_step) {
30736     for (size_t channels = 1; channels <= 40; channels += 7) {
30737       for (size_t step = 2; step <= 4; step++) {
30738         DWConvMicrokernelTester()
30739           .cr(8)
30740           .kr(4)
30741           .channels(channels)
30742           .width(3)
30743           .step(step)
30744           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30745       }
30746     }
30747   }
30748 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_output_stride)30749   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_output_stride) {
30750     for (size_t channels = 1; channels <= 40; channels += 7) {
30751       DWConvMicrokernelTester()
30752         .cr(8)
30753         .kr(4)
30754         .channels(8)
30755         .width(5)
30756         .output_stride(43)
30757         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30758     }
30759   }
30760 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmin)30761   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmin) {
30762     for (size_t channels = 1; channels <= 40; channels += 7) {
30763       DWConvMicrokernelTester()
30764         .cr(8)
30765         .kr(4)
30766         .channels(channels)
30767         .width(3)
30768         .qmin(128)
30769         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30770     }
30771   }
30772 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmax)30773   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmax) {
30774     for (size_t channels = 1; channels <= 40; channels += 7) {
30775       DWConvMicrokernelTester()
30776         .cr(8)
30777         .kr(4)
30778         .channels(channels)
30779         .width(3)
30780         .qmax(128)
30781         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30782     }
30783   }
30784 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,input_offset)30785   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, input_offset) {
30786     for (uint32_t channels = 16; channels < 128; channels += 24) {
30787       DWConvMicrokernelTester()
30788         .cr(8)
30789         .kr(4)
30790         .channels(channels)
30791         .input_offset(176)
30792         .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30793     }
30794   }
30795 
TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2,zero)30796   TEST(F32_DWCONV_MINMAX_UP8X4__WASMRELAXEDSIMD_FMA_ACC2, zero) {
30797     for (uint32_t mz = 0; mz < 4; mz++) {
30798       for (uint32_t channels = 16; channels < 128; channels += 24) {
30799         DWConvMicrokernelTester()
30800           .cr(8)
30801           .kr(4)
30802           .channels(channels)
30803           .input_offset(176)
30804           .zero_index(mz)
30805           .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
30806       }
30807     }
30808   }
30809 #endif  // XNN_ARCH_WASMRELAXEDSIMD
30810 
30811 
30812 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,c_eq_8)30813   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, c_eq_8) {
30814     DWConvMicrokernelTester()
30815       .cr(8)
30816       .kr(9)
30817       .channels(8)
30818       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30819   }
30820 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,c_div_8)30821   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, c_div_8) {
30822     for (uint32_t channels = 16; channels < 128; channels += 24) {
30823       DWConvMicrokernelTester()
30824         .cr(8)
30825         .kr(9)
30826         .channels(channels)
30827         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30828     }
30829   }
30830 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,c_div_8_with_qmin)30831   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, c_div_8_with_qmin) {
30832     for (uint32_t channels = 16; channels < 128; channels += 24) {
30833       DWConvMicrokernelTester()
30834         .cr(8)
30835         .kr(9)
30836         .channels(channels)
30837         .qmin(128)
30838         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30839     }
30840   }
30841 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,c_div_8_with_qmax)30842   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, c_div_8_with_qmax) {
30843     for (uint32_t channels = 16; channels < 128; channels += 24) {
30844       DWConvMicrokernelTester()
30845         .cr(8)
30846         .kr(9)
30847         .channels(channels)
30848         .qmax(128)
30849         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30850     }
30851   }
30852 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,c_lt_8)30853   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, c_lt_8) {
30854     for (uint32_t channels = 1; channels < 8; channels++) {
30855       DWConvMicrokernelTester()
30856         .cr(8)
30857         .kr(9)
30858         .channels(channels)
30859         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30860     }
30861   }
30862 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,c_gt_8)30863   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, c_gt_8) {
30864     for (uint32_t channels = 9; channels < 16; channels++) {
30865       DWConvMicrokernelTester()
30866         .cr(8)
30867         .kr(9)
30868         .channels(channels)
30869         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30870     }
30871   }
30872 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,c_gt_8_with_qmin)30873   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, c_gt_8_with_qmin) {
30874     for (uint32_t channels = 9; channels < 16; channels++) {
30875       DWConvMicrokernelTester()
30876         .cr(8)
30877         .kr(9)
30878         .channels(channels)
30879         .qmin(128)
30880         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30881     }
30882   }
30883 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,c_gt_8_with_qmax)30884   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, c_gt_8_with_qmax) {
30885     for (uint32_t channels = 9; channels < 16; channels++) {
30886       DWConvMicrokernelTester()
30887         .cr(8)
30888         .kr(9)
30889         .channels(channels)
30890         .qmax(128)
30891         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30892     }
30893   }
30894 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,multipixel)30895   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, multipixel) {
30896     for (size_t channels = 1; channels <= 40; channels += 7) {
30897       DWConvMicrokernelTester()
30898         .cr(8)
30899         .kr(9)
30900         .channels(channels)
30901         .width(3)
30902         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30903     }
30904   }
30905 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,multipixel_with_step)30906   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, multipixel_with_step) {
30907     for (size_t channels = 1; channels <= 40; channels += 7) {
30908       for (size_t step = 2; step <= 9; step++) {
30909         DWConvMicrokernelTester()
30910           .cr(8)
30911           .kr(9)
30912           .channels(channels)
30913           .width(3)
30914           .step(step)
30915           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30916       }
30917     }
30918   }
30919 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,multipixel_with_output_stride)30920   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, multipixel_with_output_stride) {
30921     for (size_t channels = 1; channels <= 40; channels += 7) {
30922       DWConvMicrokernelTester()
30923         .cr(8)
30924         .kr(9)
30925         .channels(8)
30926         .width(5)
30927         .output_stride(43)
30928         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30929     }
30930   }
30931 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,multipixel_with_qmin)30932   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, multipixel_with_qmin) {
30933     for (size_t channels = 1; channels <= 40; channels += 7) {
30934       DWConvMicrokernelTester()
30935         .cr(8)
30936         .kr(9)
30937         .channels(channels)
30938         .width(3)
30939         .qmin(128)
30940         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30941     }
30942   }
30943 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,multipixel_with_qmax)30944   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, multipixel_with_qmax) {
30945     for (size_t channels = 1; channels <= 40; channels += 7) {
30946       DWConvMicrokernelTester()
30947         .cr(8)
30948         .kr(9)
30949         .channels(channels)
30950         .width(3)
30951         .qmax(128)
30952         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30953     }
30954   }
30955 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,input_offset)30956   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, input_offset) {
30957     for (uint32_t channels = 16; channels < 128; channels += 24) {
30958       DWConvMicrokernelTester()
30959         .cr(8)
30960         .kr(9)
30961         .channels(channels)
30962         .input_offset(176)
30963         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30964     }
30965   }
30966 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD,zero)30967   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD, zero) {
30968     for (uint32_t mz = 0; mz < 9; mz++) {
30969       for (uint32_t channels = 16; channels < 128; channels += 24) {
30970         DWConvMicrokernelTester()
30971           .cr(8)
30972           .kr(9)
30973           .channels(channels)
30974           .input_offset(176)
30975           .zero_index(mz)
30976           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
30977       }
30978     }
30979   }
30980 #endif  // XNN_ARCH_WASMRELAXEDSIMD
30981 
30982 
30983 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,c_eq_8)30984   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, c_eq_8) {
30985     DWConvMicrokernelTester()
30986       .cr(8)
30987       .kr(9)
30988       .channels(8)
30989       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30990   }
30991 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,c_div_8)30992   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, c_div_8) {
30993     for (uint32_t channels = 16; channels < 128; channels += 24) {
30994       DWConvMicrokernelTester()
30995         .cr(8)
30996         .kr(9)
30997         .channels(channels)
30998         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
30999     }
31000   }
31001 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,c_div_8_with_qmin)31002   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, c_div_8_with_qmin) {
31003     for (uint32_t channels = 16; channels < 128; channels += 24) {
31004       DWConvMicrokernelTester()
31005         .cr(8)
31006         .kr(9)
31007         .channels(channels)
31008         .qmin(128)
31009         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31010     }
31011   }
31012 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,c_div_8_with_qmax)31013   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, c_div_8_with_qmax) {
31014     for (uint32_t channels = 16; channels < 128; channels += 24) {
31015       DWConvMicrokernelTester()
31016         .cr(8)
31017         .kr(9)
31018         .channels(channels)
31019         .qmax(128)
31020         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31021     }
31022   }
31023 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,c_lt_8)31024   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, c_lt_8) {
31025     for (uint32_t channels = 1; channels < 8; channels++) {
31026       DWConvMicrokernelTester()
31027         .cr(8)
31028         .kr(9)
31029         .channels(channels)
31030         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31031     }
31032   }
31033 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,c_gt_8)31034   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, c_gt_8) {
31035     for (uint32_t channels = 9; channels < 16; channels++) {
31036       DWConvMicrokernelTester()
31037         .cr(8)
31038         .kr(9)
31039         .channels(channels)
31040         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31041     }
31042   }
31043 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,c_gt_8_with_qmin)31044   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, c_gt_8_with_qmin) {
31045     for (uint32_t channels = 9; channels < 16; channels++) {
31046       DWConvMicrokernelTester()
31047         .cr(8)
31048         .kr(9)
31049         .channels(channels)
31050         .qmin(128)
31051         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31052     }
31053   }
31054 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,c_gt_8_with_qmax)31055   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, c_gt_8_with_qmax) {
31056     for (uint32_t channels = 9; channels < 16; channels++) {
31057       DWConvMicrokernelTester()
31058         .cr(8)
31059         .kr(9)
31060         .channels(channels)
31061         .qmax(128)
31062         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31063     }
31064   }
31065 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,multipixel)31066   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, multipixel) {
31067     for (size_t channels = 1; channels <= 40; channels += 7) {
31068       DWConvMicrokernelTester()
31069         .cr(8)
31070         .kr(9)
31071         .channels(channels)
31072         .width(3)
31073         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31074     }
31075   }
31076 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,multipixel_with_step)31077   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, multipixel_with_step) {
31078     for (size_t channels = 1; channels <= 40; channels += 7) {
31079       for (size_t step = 2; step <= 9; step++) {
31080         DWConvMicrokernelTester()
31081           .cr(8)
31082           .kr(9)
31083           .channels(channels)
31084           .width(3)
31085           .step(step)
31086           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31087       }
31088     }
31089   }
31090 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,multipixel_with_output_stride)31091   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, multipixel_with_output_stride) {
31092     for (size_t channels = 1; channels <= 40; channels += 7) {
31093       DWConvMicrokernelTester()
31094         .cr(8)
31095         .kr(9)
31096         .channels(8)
31097         .width(5)
31098         .output_stride(43)
31099         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31100     }
31101   }
31102 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,multipixel_with_qmin)31103   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, multipixel_with_qmin) {
31104     for (size_t channels = 1; channels <= 40; channels += 7) {
31105       DWConvMicrokernelTester()
31106         .cr(8)
31107         .kr(9)
31108         .channels(channels)
31109         .width(3)
31110         .qmin(128)
31111         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31112     }
31113   }
31114 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,multipixel_with_qmax)31115   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, multipixel_with_qmax) {
31116     for (size_t channels = 1; channels <= 40; channels += 7) {
31117       DWConvMicrokernelTester()
31118         .cr(8)
31119         .kr(9)
31120         .channels(channels)
31121         .width(3)
31122         .qmax(128)
31123         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31124     }
31125   }
31126 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,input_offset)31127   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, input_offset) {
31128     for (uint32_t channels = 16; channels < 128; channels += 24) {
31129       DWConvMicrokernelTester()
31130         .cr(8)
31131         .kr(9)
31132         .channels(channels)
31133         .input_offset(176)
31134         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31135     }
31136   }
31137 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2,zero)31138   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_ACC2, zero) {
31139     for (uint32_t mz = 0; mz < 9; mz++) {
31140       for (uint32_t channels = 16; channels < 128; channels += 24) {
31141         DWConvMicrokernelTester()
31142           .cr(8)
31143           .kr(9)
31144           .channels(channels)
31145           .input_offset(176)
31146           .zero_index(mz)
31147           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31148       }
31149     }
31150   }
31151 #endif  // XNN_ARCH_WASMRELAXEDSIMD
31152 
31153 
31154 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,c_eq_8)31155   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, c_eq_8) {
31156     DWConvMicrokernelTester()
31157       .cr(8)
31158       .kr(9)
31159       .channels(8)
31160       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31161   }
31162 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,c_div_8)31163   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, c_div_8) {
31164     for (uint32_t channels = 16; channels < 128; channels += 24) {
31165       DWConvMicrokernelTester()
31166         .cr(8)
31167         .kr(9)
31168         .channels(channels)
31169         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31170     }
31171   }
31172 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,c_div_8_with_qmin)31173   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, c_div_8_with_qmin) {
31174     for (uint32_t channels = 16; channels < 128; channels += 24) {
31175       DWConvMicrokernelTester()
31176         .cr(8)
31177         .kr(9)
31178         .channels(channels)
31179         .qmin(128)
31180         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31181     }
31182   }
31183 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,c_div_8_with_qmax)31184   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, c_div_8_with_qmax) {
31185     for (uint32_t channels = 16; channels < 128; channels += 24) {
31186       DWConvMicrokernelTester()
31187         .cr(8)
31188         .kr(9)
31189         .channels(channels)
31190         .qmax(128)
31191         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31192     }
31193   }
31194 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,c_lt_8)31195   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, c_lt_8) {
31196     for (uint32_t channels = 1; channels < 8; channels++) {
31197       DWConvMicrokernelTester()
31198         .cr(8)
31199         .kr(9)
31200         .channels(channels)
31201         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31202     }
31203   }
31204 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,c_gt_8)31205   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, c_gt_8) {
31206     for (uint32_t channels = 9; channels < 16; channels++) {
31207       DWConvMicrokernelTester()
31208         .cr(8)
31209         .kr(9)
31210         .channels(channels)
31211         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31212     }
31213   }
31214 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,c_gt_8_with_qmin)31215   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, c_gt_8_with_qmin) {
31216     for (uint32_t channels = 9; channels < 16; channels++) {
31217       DWConvMicrokernelTester()
31218         .cr(8)
31219         .kr(9)
31220         .channels(channels)
31221         .qmin(128)
31222         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31223     }
31224   }
31225 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,c_gt_8_with_qmax)31226   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, c_gt_8_with_qmax) {
31227     for (uint32_t channels = 9; channels < 16; channels++) {
31228       DWConvMicrokernelTester()
31229         .cr(8)
31230         .kr(9)
31231         .channels(channels)
31232         .qmax(128)
31233         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31234     }
31235   }
31236 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,multipixel)31237   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, multipixel) {
31238     for (size_t channels = 1; channels <= 40; channels += 7) {
31239       DWConvMicrokernelTester()
31240         .cr(8)
31241         .kr(9)
31242         .channels(channels)
31243         .width(3)
31244         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31245     }
31246   }
31247 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,multipixel_with_step)31248   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, multipixel_with_step) {
31249     for (size_t channels = 1; channels <= 40; channels += 7) {
31250       for (size_t step = 2; step <= 9; step++) {
31251         DWConvMicrokernelTester()
31252           .cr(8)
31253           .kr(9)
31254           .channels(channels)
31255           .width(3)
31256           .step(step)
31257           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31258       }
31259     }
31260   }
31261 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,multipixel_with_output_stride)31262   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, multipixel_with_output_stride) {
31263     for (size_t channels = 1; channels <= 40; channels += 7) {
31264       DWConvMicrokernelTester()
31265         .cr(8)
31266         .kr(9)
31267         .channels(8)
31268         .width(5)
31269         .output_stride(43)
31270         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31271     }
31272   }
31273 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,multipixel_with_qmin)31274   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, multipixel_with_qmin) {
31275     for (size_t channels = 1; channels <= 40; channels += 7) {
31276       DWConvMicrokernelTester()
31277         .cr(8)
31278         .kr(9)
31279         .channels(channels)
31280         .width(3)
31281         .qmin(128)
31282         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31283     }
31284   }
31285 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,multipixel_with_qmax)31286   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, multipixel_with_qmax) {
31287     for (size_t channels = 1; channels <= 40; channels += 7) {
31288       DWConvMicrokernelTester()
31289         .cr(8)
31290         .kr(9)
31291         .channels(channels)
31292         .width(3)
31293         .qmax(128)
31294         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31295     }
31296   }
31297 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,input_offset)31298   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, input_offset) {
31299     for (uint32_t channels = 16; channels < 128; channels += 24) {
31300       DWConvMicrokernelTester()
31301         .cr(8)
31302         .kr(9)
31303         .channels(channels)
31304         .input_offset(176)
31305         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31306     }
31307   }
31308 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA,zero)31309   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA, zero) {
31310     for (uint32_t mz = 0; mz < 9; mz++) {
31311       for (uint32_t channels = 16; channels < 128; channels += 24) {
31312         DWConvMicrokernelTester()
31313           .cr(8)
31314           .kr(9)
31315           .channels(channels)
31316           .input_offset(176)
31317           .zero_index(mz)
31318           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31319       }
31320     }
31321   }
31322 #endif  // XNN_ARCH_WASMRELAXEDSIMD
31323 
31324 
31325 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,c_eq_8)31326   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, c_eq_8) {
31327     DWConvMicrokernelTester()
31328       .cr(8)
31329       .kr(9)
31330       .channels(8)
31331       .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31332   }
31333 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,c_div_8)31334   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, c_div_8) {
31335     for (uint32_t channels = 16; channels < 128; channels += 24) {
31336       DWConvMicrokernelTester()
31337         .cr(8)
31338         .kr(9)
31339         .channels(channels)
31340         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31341     }
31342   }
31343 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,c_div_8_with_qmin)31344   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, c_div_8_with_qmin) {
31345     for (uint32_t channels = 16; channels < 128; channels += 24) {
31346       DWConvMicrokernelTester()
31347         .cr(8)
31348         .kr(9)
31349         .channels(channels)
31350         .qmin(128)
31351         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31352     }
31353   }
31354 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,c_div_8_with_qmax)31355   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, c_div_8_with_qmax) {
31356     for (uint32_t channels = 16; channels < 128; channels += 24) {
31357       DWConvMicrokernelTester()
31358         .cr(8)
31359         .kr(9)
31360         .channels(channels)
31361         .qmax(128)
31362         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31363     }
31364   }
31365 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,c_lt_8)31366   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, c_lt_8) {
31367     for (uint32_t channels = 1; channels < 8; channels++) {
31368       DWConvMicrokernelTester()
31369         .cr(8)
31370         .kr(9)
31371         .channels(channels)
31372         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31373     }
31374   }
31375 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,c_gt_8)31376   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, c_gt_8) {
31377     for (uint32_t channels = 9; channels < 16; channels++) {
31378       DWConvMicrokernelTester()
31379         .cr(8)
31380         .kr(9)
31381         .channels(channels)
31382         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31383     }
31384   }
31385 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,c_gt_8_with_qmin)31386   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, c_gt_8_with_qmin) {
31387     for (uint32_t channels = 9; channels < 16; channels++) {
31388       DWConvMicrokernelTester()
31389         .cr(8)
31390         .kr(9)
31391         .channels(channels)
31392         .qmin(128)
31393         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31394     }
31395   }
31396 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,c_gt_8_with_qmax)31397   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, c_gt_8_with_qmax) {
31398     for (uint32_t channels = 9; channels < 16; channels++) {
31399       DWConvMicrokernelTester()
31400         .cr(8)
31401         .kr(9)
31402         .channels(channels)
31403         .qmax(128)
31404         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31405     }
31406   }
31407 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,multipixel)31408   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, multipixel) {
31409     for (size_t channels = 1; channels <= 40; channels += 7) {
31410       DWConvMicrokernelTester()
31411         .cr(8)
31412         .kr(9)
31413         .channels(channels)
31414         .width(3)
31415         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31416     }
31417   }
31418 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_step)31419   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_step) {
31420     for (size_t channels = 1; channels <= 40; channels += 7) {
31421       for (size_t step = 2; step <= 9; step++) {
31422         DWConvMicrokernelTester()
31423           .cr(8)
31424           .kr(9)
31425           .channels(channels)
31426           .width(3)
31427           .step(step)
31428           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31429       }
31430     }
31431   }
31432 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_output_stride)31433   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_output_stride) {
31434     for (size_t channels = 1; channels <= 40; channels += 7) {
31435       DWConvMicrokernelTester()
31436         .cr(8)
31437         .kr(9)
31438         .channels(8)
31439         .width(5)
31440         .output_stride(43)
31441         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31442     }
31443   }
31444 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmin)31445   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmin) {
31446     for (size_t channels = 1; channels <= 40; channels += 7) {
31447       DWConvMicrokernelTester()
31448         .cr(8)
31449         .kr(9)
31450         .channels(channels)
31451         .width(3)
31452         .qmin(128)
31453         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31454     }
31455   }
31456 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmax)31457   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmax) {
31458     for (size_t channels = 1; channels <= 40; channels += 7) {
31459       DWConvMicrokernelTester()
31460         .cr(8)
31461         .kr(9)
31462         .channels(channels)
31463         .width(3)
31464         .qmax(128)
31465         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31466     }
31467   }
31468 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,input_offset)31469   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, input_offset) {
31470     for (uint32_t channels = 16; channels < 128; channels += 24) {
31471       DWConvMicrokernelTester()
31472         .cr(8)
31473         .kr(9)
31474         .channels(channels)
31475         .input_offset(176)
31476         .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31477     }
31478   }
31479 
TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2,zero)31480   TEST(F32_DWCONV_MINMAX_UP8X9__WASMRELAXEDSIMD_FMA_ACC2, zero) {
31481     for (uint32_t mz = 0; mz < 9; mz++) {
31482       for (uint32_t channels = 16; channels < 128; channels += 24) {
31483         DWConvMicrokernelTester()
31484           .cr(8)
31485           .kr(9)
31486           .channels(channels)
31487           .input_offset(176)
31488           .zero_index(mz)
31489           .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
31490       }
31491     }
31492   }
31493 #endif  // XNN_ARCH_WASMRELAXEDSIMD
31494 
31495 
31496 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,c_eq_8)31497   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, c_eq_8) {
31498     DWConvMicrokernelTester()
31499       .cr(8)
31500       .kr(25)
31501       .channels(8)
31502       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31503   }
31504 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,c_div_8)31505   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, c_div_8) {
31506     for (uint32_t channels = 16; channels < 128; channels += 24) {
31507       DWConvMicrokernelTester()
31508         .cr(8)
31509         .kr(25)
31510         .channels(channels)
31511         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31512     }
31513   }
31514 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,c_div_8_with_qmin)31515   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, c_div_8_with_qmin) {
31516     for (uint32_t channels = 16; channels < 128; channels += 24) {
31517       DWConvMicrokernelTester()
31518         .cr(8)
31519         .kr(25)
31520         .channels(channels)
31521         .qmin(128)
31522         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31523     }
31524   }
31525 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,c_div_8_with_qmax)31526   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, c_div_8_with_qmax) {
31527     for (uint32_t channels = 16; channels < 128; channels += 24) {
31528       DWConvMicrokernelTester()
31529         .cr(8)
31530         .kr(25)
31531         .channels(channels)
31532         .qmax(128)
31533         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31534     }
31535   }
31536 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,c_lt_8)31537   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, c_lt_8) {
31538     for (uint32_t channels = 1; channels < 8; channels++) {
31539       DWConvMicrokernelTester()
31540         .cr(8)
31541         .kr(25)
31542         .channels(channels)
31543         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31544     }
31545   }
31546 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,c_gt_8)31547   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, c_gt_8) {
31548     for (uint32_t channels = 9; channels < 16; channels++) {
31549       DWConvMicrokernelTester()
31550         .cr(8)
31551         .kr(25)
31552         .channels(channels)
31553         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31554     }
31555   }
31556 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,c_gt_8_with_qmin)31557   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, c_gt_8_with_qmin) {
31558     for (uint32_t channels = 9; channels < 16; channels++) {
31559       DWConvMicrokernelTester()
31560         .cr(8)
31561         .kr(25)
31562         .channels(channels)
31563         .qmin(128)
31564         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31565     }
31566   }
31567 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,c_gt_8_with_qmax)31568   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, c_gt_8_with_qmax) {
31569     for (uint32_t channels = 9; channels < 16; channels++) {
31570       DWConvMicrokernelTester()
31571         .cr(8)
31572         .kr(25)
31573         .channels(channels)
31574         .qmax(128)
31575         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31576     }
31577   }
31578 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,multipixel)31579   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, multipixel) {
31580     for (size_t channels = 1; channels <= 40; channels += 7) {
31581       DWConvMicrokernelTester()
31582         .cr(8)
31583         .kr(25)
31584         .channels(channels)
31585         .width(3)
31586         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31587     }
31588   }
31589 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,multipixel_with_step)31590   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, multipixel_with_step) {
31591     for (size_t channels = 1; channels <= 40; channels += 7) {
31592       for (size_t step = 2; step <= 25; step++) {
31593         DWConvMicrokernelTester()
31594           .cr(8)
31595           .kr(25)
31596           .channels(channels)
31597           .width(3)
31598           .step(step)
31599           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31600       }
31601     }
31602   }
31603 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,multipixel_with_output_stride)31604   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, multipixel_with_output_stride) {
31605     for (size_t channels = 1; channels <= 40; channels += 7) {
31606       DWConvMicrokernelTester()
31607         .cr(8)
31608         .kr(25)
31609         .channels(8)
31610         .width(5)
31611         .output_stride(43)
31612         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31613     }
31614   }
31615 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,multipixel_with_qmin)31616   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, multipixel_with_qmin) {
31617     for (size_t channels = 1; channels <= 40; channels += 7) {
31618       DWConvMicrokernelTester()
31619         .cr(8)
31620         .kr(25)
31621         .channels(channels)
31622         .width(3)
31623         .qmin(128)
31624         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31625     }
31626   }
31627 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,multipixel_with_qmax)31628   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, multipixel_with_qmax) {
31629     for (size_t channels = 1; channels <= 40; channels += 7) {
31630       DWConvMicrokernelTester()
31631         .cr(8)
31632         .kr(25)
31633         .channels(channels)
31634         .width(3)
31635         .qmax(128)
31636         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31637     }
31638   }
31639 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,input_offset)31640   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, input_offset) {
31641     for (uint32_t channels = 16; channels < 128; channels += 24) {
31642       DWConvMicrokernelTester()
31643         .cr(8)
31644         .kr(25)
31645         .channels(channels)
31646         .input_offset(176)
31647         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31648     }
31649   }
31650 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD,zero)31651   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD, zero) {
31652     for (uint32_t mz = 0; mz < 25; mz++) {
31653       for (uint32_t channels = 16; channels < 128; channels += 24) {
31654         DWConvMicrokernelTester()
31655           .cr(8)
31656           .kr(25)
31657           .channels(channels)
31658           .input_offset(176)
31659           .zero_index(mz)
31660           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd, xnn_init_f32_minmax_wasmsimd_params);
31661       }
31662     }
31663   }
31664 #endif  // XNN_ARCH_WASMRELAXEDSIMD
31665 
31666 
31667 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,c_eq_8)31668   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, c_eq_8) {
31669     DWConvMicrokernelTester()
31670       .cr(8)
31671       .kr(25)
31672       .channels(8)
31673       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31674   }
31675 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,c_div_8)31676   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, c_div_8) {
31677     for (uint32_t channels = 16; channels < 128; channels += 24) {
31678       DWConvMicrokernelTester()
31679         .cr(8)
31680         .kr(25)
31681         .channels(channels)
31682         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31683     }
31684   }
31685 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,c_div_8_with_qmin)31686   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, c_div_8_with_qmin) {
31687     for (uint32_t channels = 16; channels < 128; channels += 24) {
31688       DWConvMicrokernelTester()
31689         .cr(8)
31690         .kr(25)
31691         .channels(channels)
31692         .qmin(128)
31693         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31694     }
31695   }
31696 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,c_div_8_with_qmax)31697   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, c_div_8_with_qmax) {
31698     for (uint32_t channels = 16; channels < 128; channels += 24) {
31699       DWConvMicrokernelTester()
31700         .cr(8)
31701         .kr(25)
31702         .channels(channels)
31703         .qmax(128)
31704         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31705     }
31706   }
31707 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,c_lt_8)31708   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, c_lt_8) {
31709     for (uint32_t channels = 1; channels < 8; channels++) {
31710       DWConvMicrokernelTester()
31711         .cr(8)
31712         .kr(25)
31713         .channels(channels)
31714         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31715     }
31716   }
31717 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,c_gt_8)31718   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, c_gt_8) {
31719     for (uint32_t channels = 9; channels < 16; channels++) {
31720       DWConvMicrokernelTester()
31721         .cr(8)
31722         .kr(25)
31723         .channels(channels)
31724         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31725     }
31726   }
31727 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,c_gt_8_with_qmin)31728   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, c_gt_8_with_qmin) {
31729     for (uint32_t channels = 9; channels < 16; channels++) {
31730       DWConvMicrokernelTester()
31731         .cr(8)
31732         .kr(25)
31733         .channels(channels)
31734         .qmin(128)
31735         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31736     }
31737   }
31738 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,c_gt_8_with_qmax)31739   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, c_gt_8_with_qmax) {
31740     for (uint32_t channels = 9; channels < 16; channels++) {
31741       DWConvMicrokernelTester()
31742         .cr(8)
31743         .kr(25)
31744         .channels(channels)
31745         .qmax(128)
31746         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31747     }
31748   }
31749 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,multipixel)31750   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, multipixel) {
31751     for (size_t channels = 1; channels <= 40; channels += 7) {
31752       DWConvMicrokernelTester()
31753         .cr(8)
31754         .kr(25)
31755         .channels(channels)
31756         .width(3)
31757         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31758     }
31759   }
31760 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,multipixel_with_step)31761   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, multipixel_with_step) {
31762     for (size_t channels = 1; channels <= 40; channels += 7) {
31763       for (size_t step = 2; step <= 25; step++) {
31764         DWConvMicrokernelTester()
31765           .cr(8)
31766           .kr(25)
31767           .channels(channels)
31768           .width(3)
31769           .step(step)
31770           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31771       }
31772     }
31773   }
31774 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,multipixel_with_output_stride)31775   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, multipixel_with_output_stride) {
31776     for (size_t channels = 1; channels <= 40; channels += 7) {
31777       DWConvMicrokernelTester()
31778         .cr(8)
31779         .kr(25)
31780         .channels(8)
31781         .width(5)
31782         .output_stride(43)
31783         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31784     }
31785   }
31786 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,multipixel_with_qmin)31787   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, multipixel_with_qmin) {
31788     for (size_t channels = 1; channels <= 40; channels += 7) {
31789       DWConvMicrokernelTester()
31790         .cr(8)
31791         .kr(25)
31792         .channels(channels)
31793         .width(3)
31794         .qmin(128)
31795         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31796     }
31797   }
31798 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,multipixel_with_qmax)31799   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, multipixel_with_qmax) {
31800     for (size_t channels = 1; channels <= 40; channels += 7) {
31801       DWConvMicrokernelTester()
31802         .cr(8)
31803         .kr(25)
31804         .channels(channels)
31805         .width(3)
31806         .qmax(128)
31807         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31808     }
31809   }
31810 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,input_offset)31811   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, input_offset) {
31812     for (uint32_t channels = 16; channels < 128; channels += 24) {
31813       DWConvMicrokernelTester()
31814         .cr(8)
31815         .kr(25)
31816         .channels(channels)
31817         .input_offset(176)
31818         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31819     }
31820   }
31821 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2,zero)31822   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_ACC2, zero) {
31823     for (uint32_t mz = 0; mz < 25; mz++) {
31824       for (uint32_t channels = 16; channels < 128; channels += 24) {
31825         DWConvMicrokernelTester()
31826           .cr(8)
31827           .kr(25)
31828           .channels(channels)
31829           .input_offset(176)
31830           .zero_index(mz)
31831           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_acc2, xnn_init_f32_minmax_wasmsimd_params);
31832       }
31833     }
31834   }
31835 #endif  // XNN_ARCH_WASMRELAXEDSIMD
31836 
31837 
31838 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,c_eq_8)31839   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, c_eq_8) {
31840     DWConvMicrokernelTester()
31841       .cr(8)
31842       .kr(25)
31843       .channels(8)
31844       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31845   }
31846 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,c_div_8)31847   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, c_div_8) {
31848     for (uint32_t channels = 16; channels < 128; channels += 24) {
31849       DWConvMicrokernelTester()
31850         .cr(8)
31851         .kr(25)
31852         .channels(channels)
31853         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31854     }
31855   }
31856 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,c_div_8_with_qmin)31857   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, c_div_8_with_qmin) {
31858     for (uint32_t channels = 16; channels < 128; channels += 24) {
31859       DWConvMicrokernelTester()
31860         .cr(8)
31861         .kr(25)
31862         .channels(channels)
31863         .qmin(128)
31864         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31865     }
31866   }
31867 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,c_div_8_with_qmax)31868   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, c_div_8_with_qmax) {
31869     for (uint32_t channels = 16; channels < 128; channels += 24) {
31870       DWConvMicrokernelTester()
31871         .cr(8)
31872         .kr(25)
31873         .channels(channels)
31874         .qmax(128)
31875         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31876     }
31877   }
31878 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,c_lt_8)31879   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, c_lt_8) {
31880     for (uint32_t channels = 1; channels < 8; channels++) {
31881       DWConvMicrokernelTester()
31882         .cr(8)
31883         .kr(25)
31884         .channels(channels)
31885         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31886     }
31887   }
31888 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,c_gt_8)31889   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, c_gt_8) {
31890     for (uint32_t channels = 9; channels < 16; channels++) {
31891       DWConvMicrokernelTester()
31892         .cr(8)
31893         .kr(25)
31894         .channels(channels)
31895         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31896     }
31897   }
31898 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,c_gt_8_with_qmin)31899   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, c_gt_8_with_qmin) {
31900     for (uint32_t channels = 9; channels < 16; channels++) {
31901       DWConvMicrokernelTester()
31902         .cr(8)
31903         .kr(25)
31904         .channels(channels)
31905         .qmin(128)
31906         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31907     }
31908   }
31909 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,c_gt_8_with_qmax)31910   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, c_gt_8_with_qmax) {
31911     for (uint32_t channels = 9; channels < 16; channels++) {
31912       DWConvMicrokernelTester()
31913         .cr(8)
31914         .kr(25)
31915         .channels(channels)
31916         .qmax(128)
31917         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31918     }
31919   }
31920 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,multipixel)31921   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, multipixel) {
31922     for (size_t channels = 1; channels <= 40; channels += 7) {
31923       DWConvMicrokernelTester()
31924         .cr(8)
31925         .kr(25)
31926         .channels(channels)
31927         .width(3)
31928         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31929     }
31930   }
31931 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,multipixel_with_step)31932   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, multipixel_with_step) {
31933     for (size_t channels = 1; channels <= 40; channels += 7) {
31934       for (size_t step = 2; step <= 25; step++) {
31935         DWConvMicrokernelTester()
31936           .cr(8)
31937           .kr(25)
31938           .channels(channels)
31939           .width(3)
31940           .step(step)
31941           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31942       }
31943     }
31944   }
31945 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,multipixel_with_output_stride)31946   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, multipixel_with_output_stride) {
31947     for (size_t channels = 1; channels <= 40; channels += 7) {
31948       DWConvMicrokernelTester()
31949         .cr(8)
31950         .kr(25)
31951         .channels(8)
31952         .width(5)
31953         .output_stride(43)
31954         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31955     }
31956   }
31957 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,multipixel_with_qmin)31958   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, multipixel_with_qmin) {
31959     for (size_t channels = 1; channels <= 40; channels += 7) {
31960       DWConvMicrokernelTester()
31961         .cr(8)
31962         .kr(25)
31963         .channels(channels)
31964         .width(3)
31965         .qmin(128)
31966         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31967     }
31968   }
31969 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,multipixel_with_qmax)31970   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, multipixel_with_qmax) {
31971     for (size_t channels = 1; channels <= 40; channels += 7) {
31972       DWConvMicrokernelTester()
31973         .cr(8)
31974         .kr(25)
31975         .channels(channels)
31976         .width(3)
31977         .qmax(128)
31978         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31979     }
31980   }
31981 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,input_offset)31982   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, input_offset) {
31983     for (uint32_t channels = 16; channels < 128; channels += 24) {
31984       DWConvMicrokernelTester()
31985         .cr(8)
31986         .kr(25)
31987         .channels(channels)
31988         .input_offset(176)
31989         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
31990     }
31991   }
31992 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA,zero)31993   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA, zero) {
31994     for (uint32_t mz = 0; mz < 25; mz++) {
31995       for (uint32_t channels = 16; channels < 128; channels += 24) {
31996         DWConvMicrokernelTester()
31997           .cr(8)
31998           .kr(25)
31999           .channels(channels)
32000           .input_offset(176)
32001           .zero_index(mz)
32002           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma, xnn_init_f32_minmax_wasmsimd_params);
32003       }
32004     }
32005   }
32006 #endif  // XNN_ARCH_WASMRELAXEDSIMD
32007 
32008 
32009 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,c_eq_8)32010   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, c_eq_8) {
32011     DWConvMicrokernelTester()
32012       .cr(8)
32013       .kr(25)
32014       .channels(8)
32015       .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32016   }
32017 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,c_div_8)32018   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, c_div_8) {
32019     for (uint32_t channels = 16; channels < 128; channels += 24) {
32020       DWConvMicrokernelTester()
32021         .cr(8)
32022         .kr(25)
32023         .channels(channels)
32024         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32025     }
32026   }
32027 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,c_div_8_with_qmin)32028   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, c_div_8_with_qmin) {
32029     for (uint32_t channels = 16; channels < 128; channels += 24) {
32030       DWConvMicrokernelTester()
32031         .cr(8)
32032         .kr(25)
32033         .channels(channels)
32034         .qmin(128)
32035         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32036     }
32037   }
32038 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,c_div_8_with_qmax)32039   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, c_div_8_with_qmax) {
32040     for (uint32_t channels = 16; channels < 128; channels += 24) {
32041       DWConvMicrokernelTester()
32042         .cr(8)
32043         .kr(25)
32044         .channels(channels)
32045         .qmax(128)
32046         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32047     }
32048   }
32049 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,c_lt_8)32050   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, c_lt_8) {
32051     for (uint32_t channels = 1; channels < 8; channels++) {
32052       DWConvMicrokernelTester()
32053         .cr(8)
32054         .kr(25)
32055         .channels(channels)
32056         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32057     }
32058   }
32059 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,c_gt_8)32060   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, c_gt_8) {
32061     for (uint32_t channels = 9; channels < 16; channels++) {
32062       DWConvMicrokernelTester()
32063         .cr(8)
32064         .kr(25)
32065         .channels(channels)
32066         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32067     }
32068   }
32069 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,c_gt_8_with_qmin)32070   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, c_gt_8_with_qmin) {
32071     for (uint32_t channels = 9; channels < 16; channels++) {
32072       DWConvMicrokernelTester()
32073         .cr(8)
32074         .kr(25)
32075         .channels(channels)
32076         .qmin(128)
32077         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32078     }
32079   }
32080 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,c_gt_8_with_qmax)32081   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, c_gt_8_with_qmax) {
32082     for (uint32_t channels = 9; channels < 16; channels++) {
32083       DWConvMicrokernelTester()
32084         .cr(8)
32085         .kr(25)
32086         .channels(channels)
32087         .qmax(128)
32088         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32089     }
32090   }
32091 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,multipixel)32092   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, multipixel) {
32093     for (size_t channels = 1; channels <= 40; channels += 7) {
32094       DWConvMicrokernelTester()
32095         .cr(8)
32096         .kr(25)
32097         .channels(channels)
32098         .width(3)
32099         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32100     }
32101   }
32102 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_step)32103   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_step) {
32104     for (size_t channels = 1; channels <= 40; channels += 7) {
32105       for (size_t step = 2; step <= 25; step++) {
32106         DWConvMicrokernelTester()
32107           .cr(8)
32108           .kr(25)
32109           .channels(channels)
32110           .width(3)
32111           .step(step)
32112           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32113       }
32114     }
32115   }
32116 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_output_stride)32117   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_output_stride) {
32118     for (size_t channels = 1; channels <= 40; channels += 7) {
32119       DWConvMicrokernelTester()
32120         .cr(8)
32121         .kr(25)
32122         .channels(8)
32123         .width(5)
32124         .output_stride(43)
32125         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32126     }
32127   }
32128 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmin)32129   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmin) {
32130     for (size_t channels = 1; channels <= 40; channels += 7) {
32131       DWConvMicrokernelTester()
32132         .cr(8)
32133         .kr(25)
32134         .channels(channels)
32135         .width(3)
32136         .qmin(128)
32137         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32138     }
32139   }
32140 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,multipixel_with_qmax)32141   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, multipixel_with_qmax) {
32142     for (size_t channels = 1; channels <= 40; channels += 7) {
32143       DWConvMicrokernelTester()
32144         .cr(8)
32145         .kr(25)
32146         .channels(channels)
32147         .width(3)
32148         .qmax(128)
32149         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32150     }
32151   }
32152 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,input_offset)32153   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, input_offset) {
32154     for (uint32_t channels = 16; channels < 128; channels += 24) {
32155       DWConvMicrokernelTester()
32156         .cr(8)
32157         .kr(25)
32158         .channels(channels)
32159         .input_offset(176)
32160         .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32161     }
32162   }
32163 
TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2,zero)32164   TEST(F32_DWCONV_MINMAX_UP8X25__WASMRELAXEDSIMD_FMA_ACC2, zero) {
32165     for (uint32_t mz = 0; mz < 25; mz++) {
32166       for (uint32_t channels = 16; channels < 128; channels += 24) {
32167         DWConvMicrokernelTester()
32168           .cr(8)
32169           .kr(25)
32170           .channels(channels)
32171           .input_offset(176)
32172           .zero_index(mz)
32173           .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmrelaxedsimd_fma_acc2, xnn_init_f32_minmax_wasmsimd_params);
32174       }
32175     }
32176   }
32177 #endif  // XNN_ARCH_WASMRELAXEDSIMD
32178 
32179 
32180 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP1X3__WASM,c_eq_1)32181   TEST(F32_DWCONV_MINMAX_UP1X3__WASM, c_eq_1) {
32182     DWConvMicrokernelTester()
32183       .cr(1)
32184       .kr(3)
32185       .channels(1)
32186       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
32187   }
32188 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM,c_gt_1)32189   TEST(F32_DWCONV_MINMAX_UP1X3__WASM, c_gt_1) {
32190     for (uint32_t channels = 2; channels < 10; channels++) {
32191       DWConvMicrokernelTester()
32192         .cr(1)
32193         .kr(3)
32194         .channels(channels)
32195         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
32196     }
32197   }
32198 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM,c_gt_1_with_qmin)32199   TEST(F32_DWCONV_MINMAX_UP1X3__WASM, c_gt_1_with_qmin) {
32200     for (uint32_t channels = 2; channels < 10; channels++) {
32201       DWConvMicrokernelTester()
32202         .cr(1)
32203         .kr(3)
32204         .channels(channels)
32205         .qmin(128)
32206         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
32207     }
32208   }
32209 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM,c_gt_1_with_qmax)32210   TEST(F32_DWCONV_MINMAX_UP1X3__WASM, c_gt_1_with_qmax) {
32211     for (uint32_t channels = 2; channels < 10; channels++) {
32212       DWConvMicrokernelTester()
32213         .cr(1)
32214         .kr(3)
32215         .channels(channels)
32216         .qmax(128)
32217         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
32218     }
32219   }
32220 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM,multipixel)32221   TEST(F32_DWCONV_MINMAX_UP1X3__WASM, multipixel) {
32222     for (size_t channels = 1; channels <= 5; channels += 1) {
32223       DWConvMicrokernelTester()
32224         .cr(1)
32225         .kr(3)
32226         .channels(channels)
32227         .width(3)
32228         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
32229     }
32230   }
32231 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM,multipixel_with_step)32232   TEST(F32_DWCONV_MINMAX_UP1X3__WASM, multipixel_with_step) {
32233     for (size_t channels = 1; channels <= 5; channels += 1) {
32234       for (size_t step = 2; step <= 3; step++) {
32235         DWConvMicrokernelTester()
32236           .cr(1)
32237           .kr(3)
32238           .channels(channels)
32239           .width(3)
32240           .step(step)
32241           .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
32242       }
32243     }
32244   }
32245 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM,multipixel_with_output_stride)32246   TEST(F32_DWCONV_MINMAX_UP1X3__WASM, multipixel_with_output_stride) {
32247     for (size_t channels = 1; channels <= 5; channels += 1) {
32248       DWConvMicrokernelTester()
32249         .cr(1)
32250         .kr(3)
32251         .channels(1)
32252         .width(5)
32253         .output_stride(7)
32254         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
32255     }
32256   }
32257 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM,multipixel_with_qmin)32258   TEST(F32_DWCONV_MINMAX_UP1X3__WASM, multipixel_with_qmin) {
32259     for (size_t channels = 1; channels <= 5; channels += 1) {
32260       DWConvMicrokernelTester()
32261         .cr(1)
32262         .kr(3)
32263         .channels(channels)
32264         .width(3)
32265         .qmin(128)
32266         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
32267     }
32268   }
32269 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM,multipixel_with_qmax)32270   TEST(F32_DWCONV_MINMAX_UP1X3__WASM, multipixel_with_qmax) {
32271     for (size_t channels = 1; channels <= 5; channels += 1) {
32272       DWConvMicrokernelTester()
32273         .cr(1)
32274         .kr(3)
32275         .channels(channels)
32276         .width(3)
32277         .qmax(128)
32278         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
32279     }
32280   }
32281 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM,input_offset)32282   TEST(F32_DWCONV_MINMAX_UP1X3__WASM, input_offset) {
32283     for (uint32_t channels = 2; channels < 16; channels += 3) {
32284       DWConvMicrokernelTester()
32285         .cr(1)
32286         .kr(3)
32287         .channels(channels)
32288         .input_offset(48)
32289         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
32290     }
32291   }
32292 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM,zero)32293   TEST(F32_DWCONV_MINMAX_UP1X3__WASM, zero) {
32294     for (uint32_t mz = 0; mz < 3; mz++) {
32295       for (uint32_t channels = 2; channels < 16; channels += 3) {
32296         DWConvMicrokernelTester()
32297           .cr(1)
32298           .kr(3)
32299           .channels(channels)
32300           .input_offset(48)
32301           .zero_index(mz)
32302           .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
32303       }
32304     }
32305   }
32306 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32307 
32308 
32309 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2,c_eq_1)32310   TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, c_eq_1) {
32311     DWConvMicrokernelTester()
32312       .cr(1)
32313       .kr(3)
32314       .channels(1)
32315       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32316   }
32317 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2,c_gt_1)32318   TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, c_gt_1) {
32319     for (uint32_t channels = 2; channels < 10; channels++) {
32320       DWConvMicrokernelTester()
32321         .cr(1)
32322         .kr(3)
32323         .channels(channels)
32324         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32325     }
32326   }
32327 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2,c_gt_1_with_qmin)32328   TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, c_gt_1_with_qmin) {
32329     for (uint32_t channels = 2; channels < 10; channels++) {
32330       DWConvMicrokernelTester()
32331         .cr(1)
32332         .kr(3)
32333         .channels(channels)
32334         .qmin(128)
32335         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32336     }
32337   }
32338 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2,c_gt_1_with_qmax)32339   TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, c_gt_1_with_qmax) {
32340     for (uint32_t channels = 2; channels < 10; channels++) {
32341       DWConvMicrokernelTester()
32342         .cr(1)
32343         .kr(3)
32344         .channels(channels)
32345         .qmax(128)
32346         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32347     }
32348   }
32349 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2,multipixel)32350   TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, multipixel) {
32351     for (size_t channels = 1; channels <= 5; channels += 1) {
32352       DWConvMicrokernelTester()
32353         .cr(1)
32354         .kr(3)
32355         .channels(channels)
32356         .width(3)
32357         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32358     }
32359   }
32360 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2,multipixel_with_step)32361   TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, multipixel_with_step) {
32362     for (size_t channels = 1; channels <= 5; channels += 1) {
32363       for (size_t step = 2; step <= 3; step++) {
32364         DWConvMicrokernelTester()
32365           .cr(1)
32366           .kr(3)
32367           .channels(channels)
32368           .width(3)
32369           .step(step)
32370           .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32371       }
32372     }
32373   }
32374 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2,multipixel_with_output_stride)32375   TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, multipixel_with_output_stride) {
32376     for (size_t channels = 1; channels <= 5; channels += 1) {
32377       DWConvMicrokernelTester()
32378         .cr(1)
32379         .kr(3)
32380         .channels(1)
32381         .width(5)
32382         .output_stride(7)
32383         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32384     }
32385   }
32386 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2,multipixel_with_qmin)32387   TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, multipixel_with_qmin) {
32388     for (size_t channels = 1; channels <= 5; channels += 1) {
32389       DWConvMicrokernelTester()
32390         .cr(1)
32391         .kr(3)
32392         .channels(channels)
32393         .width(3)
32394         .qmin(128)
32395         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32396     }
32397   }
32398 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2,multipixel_with_qmax)32399   TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, multipixel_with_qmax) {
32400     for (size_t channels = 1; channels <= 5; channels += 1) {
32401       DWConvMicrokernelTester()
32402         .cr(1)
32403         .kr(3)
32404         .channels(channels)
32405         .width(3)
32406         .qmax(128)
32407         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32408     }
32409   }
32410 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2,input_offset)32411   TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, input_offset) {
32412     for (uint32_t channels = 2; channels < 16; channels += 3) {
32413       DWConvMicrokernelTester()
32414         .cr(1)
32415         .kr(3)
32416         .channels(channels)
32417         .input_offset(48)
32418         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32419     }
32420   }
32421 
TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2,zero)32422   TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, zero) {
32423     for (uint32_t mz = 0; mz < 3; mz++) {
32424       for (uint32_t channels = 2; channels < 16; channels += 3) {
32425         DWConvMicrokernelTester()
32426           .cr(1)
32427           .kr(3)
32428           .channels(channels)
32429           .input_offset(48)
32430           .zero_index(mz)
32431           .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32432       }
32433     }
32434   }
32435 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32436 
32437 
32438 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP1X4__WASM,c_eq_1)32439   TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_eq_1) {
32440     DWConvMicrokernelTester()
32441       .cr(1)
32442       .kr(4)
32443       .channels(1)
32444       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
32445   }
32446 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM,c_gt_1)32447   TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_gt_1) {
32448     for (uint32_t channels = 2; channels < 10; channels++) {
32449       DWConvMicrokernelTester()
32450         .cr(1)
32451         .kr(4)
32452         .channels(channels)
32453         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
32454     }
32455   }
32456 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM,c_gt_1_with_qmin)32457   TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_gt_1_with_qmin) {
32458     for (uint32_t channels = 2; channels < 10; channels++) {
32459       DWConvMicrokernelTester()
32460         .cr(1)
32461         .kr(4)
32462         .channels(channels)
32463         .qmin(128)
32464         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
32465     }
32466   }
32467 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM,c_gt_1_with_qmax)32468   TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_gt_1_with_qmax) {
32469     for (uint32_t channels = 2; channels < 10; channels++) {
32470       DWConvMicrokernelTester()
32471         .cr(1)
32472         .kr(4)
32473         .channels(channels)
32474         .qmax(128)
32475         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
32476     }
32477   }
32478 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM,multipixel)32479   TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel) {
32480     for (size_t channels = 1; channels <= 5; channels += 1) {
32481       DWConvMicrokernelTester()
32482         .cr(1)
32483         .kr(4)
32484         .channels(channels)
32485         .width(3)
32486         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
32487     }
32488   }
32489 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM,multipixel_with_step)32490   TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_step) {
32491     for (size_t channels = 1; channels <= 5; channels += 1) {
32492       for (size_t step = 2; step <= 4; step++) {
32493         DWConvMicrokernelTester()
32494           .cr(1)
32495           .kr(4)
32496           .channels(channels)
32497           .width(3)
32498           .step(step)
32499           .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
32500       }
32501     }
32502   }
32503 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM,multipixel_with_output_stride)32504   TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_output_stride) {
32505     for (size_t channels = 1; channels <= 5; channels += 1) {
32506       DWConvMicrokernelTester()
32507         .cr(1)
32508         .kr(4)
32509         .channels(1)
32510         .width(5)
32511         .output_stride(7)
32512         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
32513     }
32514   }
32515 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM,multipixel_with_qmin)32516   TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_qmin) {
32517     for (size_t channels = 1; channels <= 5; channels += 1) {
32518       DWConvMicrokernelTester()
32519         .cr(1)
32520         .kr(4)
32521         .channels(channels)
32522         .width(3)
32523         .qmin(128)
32524         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
32525     }
32526   }
32527 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM,multipixel_with_qmax)32528   TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_qmax) {
32529     for (size_t channels = 1; channels <= 5; channels += 1) {
32530       DWConvMicrokernelTester()
32531         .cr(1)
32532         .kr(4)
32533         .channels(channels)
32534         .width(3)
32535         .qmax(128)
32536         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
32537     }
32538   }
32539 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM,input_offset)32540   TEST(F32_DWCONV_MINMAX_UP1X4__WASM, input_offset) {
32541     for (uint32_t channels = 2; channels < 16; channels += 3) {
32542       DWConvMicrokernelTester()
32543         .cr(1)
32544         .kr(4)
32545         .channels(channels)
32546         .input_offset(48)
32547         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
32548     }
32549   }
32550 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM,zero)32551   TEST(F32_DWCONV_MINMAX_UP1X4__WASM, zero) {
32552     for (uint32_t mz = 0; mz < 4; mz++) {
32553       for (uint32_t channels = 2; channels < 16; channels += 3) {
32554         DWConvMicrokernelTester()
32555           .cr(1)
32556           .kr(4)
32557           .channels(channels)
32558           .input_offset(48)
32559           .zero_index(mz)
32560           .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
32561       }
32562     }
32563   }
32564 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32565 
32566 
32567 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2,c_eq_1)32568   TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_eq_1) {
32569     DWConvMicrokernelTester()
32570       .cr(1)
32571       .kr(4)
32572       .channels(1)
32573       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32574   }
32575 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2,c_gt_1)32576   TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_gt_1) {
32577     for (uint32_t channels = 2; channels < 10; channels++) {
32578       DWConvMicrokernelTester()
32579         .cr(1)
32580         .kr(4)
32581         .channels(channels)
32582         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32583     }
32584   }
32585 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2,c_gt_1_with_qmin)32586   TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_gt_1_with_qmin) {
32587     for (uint32_t channels = 2; channels < 10; channels++) {
32588       DWConvMicrokernelTester()
32589         .cr(1)
32590         .kr(4)
32591         .channels(channels)
32592         .qmin(128)
32593         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32594     }
32595   }
32596 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2,c_gt_1_with_qmax)32597   TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_gt_1_with_qmax) {
32598     for (uint32_t channels = 2; channels < 10; channels++) {
32599       DWConvMicrokernelTester()
32600         .cr(1)
32601         .kr(4)
32602         .channels(channels)
32603         .qmax(128)
32604         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32605     }
32606   }
32607 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2,multipixel)32608   TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel) {
32609     for (size_t channels = 1; channels <= 5; channels += 1) {
32610       DWConvMicrokernelTester()
32611         .cr(1)
32612         .kr(4)
32613         .channels(channels)
32614         .width(3)
32615         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32616     }
32617   }
32618 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2,multipixel_with_step)32619   TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_step) {
32620     for (size_t channels = 1; channels <= 5; channels += 1) {
32621       for (size_t step = 2; step <= 4; step++) {
32622         DWConvMicrokernelTester()
32623           .cr(1)
32624           .kr(4)
32625           .channels(channels)
32626           .width(3)
32627           .step(step)
32628           .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32629       }
32630     }
32631   }
32632 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2,multipixel_with_output_stride)32633   TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_output_stride) {
32634     for (size_t channels = 1; channels <= 5; channels += 1) {
32635       DWConvMicrokernelTester()
32636         .cr(1)
32637         .kr(4)
32638         .channels(1)
32639         .width(5)
32640         .output_stride(7)
32641         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32642     }
32643   }
32644 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2,multipixel_with_qmin)32645   TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_qmin) {
32646     for (size_t channels = 1; channels <= 5; channels += 1) {
32647       DWConvMicrokernelTester()
32648         .cr(1)
32649         .kr(4)
32650         .channels(channels)
32651         .width(3)
32652         .qmin(128)
32653         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32654     }
32655   }
32656 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2,multipixel_with_qmax)32657   TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_qmax) {
32658     for (size_t channels = 1; channels <= 5; channels += 1) {
32659       DWConvMicrokernelTester()
32660         .cr(1)
32661         .kr(4)
32662         .channels(channels)
32663         .width(3)
32664         .qmax(128)
32665         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32666     }
32667   }
32668 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2,input_offset)32669   TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, input_offset) {
32670     for (uint32_t channels = 2; channels < 16; channels += 3) {
32671       DWConvMicrokernelTester()
32672         .cr(1)
32673         .kr(4)
32674         .channels(channels)
32675         .input_offset(48)
32676         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32677     }
32678   }
32679 
TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2,zero)32680   TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, zero) {
32681     for (uint32_t mz = 0; mz < 4; mz++) {
32682       for (uint32_t channels = 2; channels < 16; channels += 3) {
32683         DWConvMicrokernelTester()
32684           .cr(1)
32685           .kr(4)
32686           .channels(channels)
32687           .input_offset(48)
32688           .zero_index(mz)
32689           .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32690       }
32691     }
32692   }
32693 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32694 
32695 
32696 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP1X9__WASM,c_eq_1)32697   TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_eq_1) {
32698     DWConvMicrokernelTester()
32699       .cr(1)
32700       .kr(9)
32701       .channels(1)
32702       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
32703   }
32704 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM,c_gt_1)32705   TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_gt_1) {
32706     for (uint32_t channels = 2; channels < 10; channels++) {
32707       DWConvMicrokernelTester()
32708         .cr(1)
32709         .kr(9)
32710         .channels(channels)
32711         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
32712     }
32713   }
32714 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM,c_gt_1_with_qmin)32715   TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_gt_1_with_qmin) {
32716     for (uint32_t channels = 2; channels < 10; channels++) {
32717       DWConvMicrokernelTester()
32718         .cr(1)
32719         .kr(9)
32720         .channels(channels)
32721         .qmin(128)
32722         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
32723     }
32724   }
32725 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM,c_gt_1_with_qmax)32726   TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_gt_1_with_qmax) {
32727     for (uint32_t channels = 2; channels < 10; channels++) {
32728       DWConvMicrokernelTester()
32729         .cr(1)
32730         .kr(9)
32731         .channels(channels)
32732         .qmax(128)
32733         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
32734     }
32735   }
32736 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM,multipixel)32737   TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel) {
32738     for (size_t channels = 1; channels <= 5; channels += 1) {
32739       DWConvMicrokernelTester()
32740         .cr(1)
32741         .kr(9)
32742         .channels(channels)
32743         .width(3)
32744         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
32745     }
32746   }
32747 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM,multipixel_with_step)32748   TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_step) {
32749     for (size_t channels = 1; channels <= 5; channels += 1) {
32750       for (size_t step = 2; step <= 9; step++) {
32751         DWConvMicrokernelTester()
32752           .cr(1)
32753           .kr(9)
32754           .channels(channels)
32755           .width(3)
32756           .step(step)
32757           .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
32758       }
32759     }
32760   }
32761 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM,multipixel_with_output_stride)32762   TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_output_stride) {
32763     for (size_t channels = 1; channels <= 5; channels += 1) {
32764       DWConvMicrokernelTester()
32765         .cr(1)
32766         .kr(9)
32767         .channels(1)
32768         .width(5)
32769         .output_stride(7)
32770         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
32771     }
32772   }
32773 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM,multipixel_with_qmin)32774   TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_qmin) {
32775     for (size_t channels = 1; channels <= 5; channels += 1) {
32776       DWConvMicrokernelTester()
32777         .cr(1)
32778         .kr(9)
32779         .channels(channels)
32780         .width(3)
32781         .qmin(128)
32782         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
32783     }
32784   }
32785 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM,multipixel_with_qmax)32786   TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_qmax) {
32787     for (size_t channels = 1; channels <= 5; channels += 1) {
32788       DWConvMicrokernelTester()
32789         .cr(1)
32790         .kr(9)
32791         .channels(channels)
32792         .width(3)
32793         .qmax(128)
32794         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
32795     }
32796   }
32797 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM,input_offset)32798   TEST(F32_DWCONV_MINMAX_UP1X9__WASM, input_offset) {
32799     for (uint32_t channels = 2; channels < 16; channels += 3) {
32800       DWConvMicrokernelTester()
32801         .cr(1)
32802         .kr(9)
32803         .channels(channels)
32804         .input_offset(48)
32805         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
32806     }
32807   }
32808 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM,zero)32809   TEST(F32_DWCONV_MINMAX_UP1X9__WASM, zero) {
32810     for (uint32_t mz = 0; mz < 9; mz++) {
32811       for (uint32_t channels = 2; channels < 16; channels += 3) {
32812         DWConvMicrokernelTester()
32813           .cr(1)
32814           .kr(9)
32815           .channels(channels)
32816           .input_offset(48)
32817           .zero_index(mz)
32818           .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
32819       }
32820     }
32821   }
32822 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32823 
32824 
32825 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2,c_eq_1)32826   TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_eq_1) {
32827     DWConvMicrokernelTester()
32828       .cr(1)
32829       .kr(9)
32830       .channels(1)
32831       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32832   }
32833 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2,c_gt_1)32834   TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_gt_1) {
32835     for (uint32_t channels = 2; channels < 10; channels++) {
32836       DWConvMicrokernelTester()
32837         .cr(1)
32838         .kr(9)
32839         .channels(channels)
32840         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32841     }
32842   }
32843 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2,c_gt_1_with_qmin)32844   TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_gt_1_with_qmin) {
32845     for (uint32_t channels = 2; channels < 10; channels++) {
32846       DWConvMicrokernelTester()
32847         .cr(1)
32848         .kr(9)
32849         .channels(channels)
32850         .qmin(128)
32851         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32852     }
32853   }
32854 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2,c_gt_1_with_qmax)32855   TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_gt_1_with_qmax) {
32856     for (uint32_t channels = 2; channels < 10; channels++) {
32857       DWConvMicrokernelTester()
32858         .cr(1)
32859         .kr(9)
32860         .channels(channels)
32861         .qmax(128)
32862         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32863     }
32864   }
32865 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2,multipixel)32866   TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel) {
32867     for (size_t channels = 1; channels <= 5; channels += 1) {
32868       DWConvMicrokernelTester()
32869         .cr(1)
32870         .kr(9)
32871         .channels(channels)
32872         .width(3)
32873         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32874     }
32875   }
32876 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2,multipixel_with_step)32877   TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_step) {
32878     for (size_t channels = 1; channels <= 5; channels += 1) {
32879       for (size_t step = 2; step <= 9; step++) {
32880         DWConvMicrokernelTester()
32881           .cr(1)
32882           .kr(9)
32883           .channels(channels)
32884           .width(3)
32885           .step(step)
32886           .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32887       }
32888     }
32889   }
32890 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2,multipixel_with_output_stride)32891   TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_output_stride) {
32892     for (size_t channels = 1; channels <= 5; channels += 1) {
32893       DWConvMicrokernelTester()
32894         .cr(1)
32895         .kr(9)
32896         .channels(1)
32897         .width(5)
32898         .output_stride(7)
32899         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32900     }
32901   }
32902 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2,multipixel_with_qmin)32903   TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_qmin) {
32904     for (size_t channels = 1; channels <= 5; channels += 1) {
32905       DWConvMicrokernelTester()
32906         .cr(1)
32907         .kr(9)
32908         .channels(channels)
32909         .width(3)
32910         .qmin(128)
32911         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32912     }
32913   }
32914 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2,multipixel_with_qmax)32915   TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_qmax) {
32916     for (size_t channels = 1; channels <= 5; channels += 1) {
32917       DWConvMicrokernelTester()
32918         .cr(1)
32919         .kr(9)
32920         .channels(channels)
32921         .width(3)
32922         .qmax(128)
32923         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32924     }
32925   }
32926 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2,input_offset)32927   TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, input_offset) {
32928     for (uint32_t channels = 2; channels < 16; channels += 3) {
32929       DWConvMicrokernelTester()
32930         .cr(1)
32931         .kr(9)
32932         .channels(channels)
32933         .input_offset(48)
32934         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32935     }
32936   }
32937 
TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2,zero)32938   TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, zero) {
32939     for (uint32_t mz = 0; mz < 9; mz++) {
32940       for (uint32_t channels = 2; channels < 16; channels += 3) {
32941         DWConvMicrokernelTester()
32942           .cr(1)
32943           .kr(9)
32944           .channels(channels)
32945           .input_offset(48)
32946           .zero_index(mz)
32947           .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
32948       }
32949     }
32950   }
32951 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
32952 
32953 
32954 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP1X25__WASM,c_eq_1)32955   TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_eq_1) {
32956     DWConvMicrokernelTester()
32957       .cr(1)
32958       .kr(25)
32959       .channels(1)
32960       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
32961   }
32962 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM,c_gt_1)32963   TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_gt_1) {
32964     for (uint32_t channels = 2; channels < 10; channels++) {
32965       DWConvMicrokernelTester()
32966         .cr(1)
32967         .kr(25)
32968         .channels(channels)
32969         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
32970     }
32971   }
32972 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM,c_gt_1_with_qmin)32973   TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_gt_1_with_qmin) {
32974     for (uint32_t channels = 2; channels < 10; channels++) {
32975       DWConvMicrokernelTester()
32976         .cr(1)
32977         .kr(25)
32978         .channels(channels)
32979         .qmin(128)
32980         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
32981     }
32982   }
32983 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM,c_gt_1_with_qmax)32984   TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_gt_1_with_qmax) {
32985     for (uint32_t channels = 2; channels < 10; channels++) {
32986       DWConvMicrokernelTester()
32987         .cr(1)
32988         .kr(25)
32989         .channels(channels)
32990         .qmax(128)
32991         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
32992     }
32993   }
32994 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM,multipixel)32995   TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel) {
32996     for (size_t channels = 1; channels <= 5; channels += 1) {
32997       DWConvMicrokernelTester()
32998         .cr(1)
32999         .kr(25)
33000         .channels(channels)
33001         .width(3)
33002         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
33003     }
33004   }
33005 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM,multipixel_with_step)33006   TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_step) {
33007     for (size_t channels = 1; channels <= 5; channels += 1) {
33008       for (size_t step = 2; step <= 25; step++) {
33009         DWConvMicrokernelTester()
33010           .cr(1)
33011           .kr(25)
33012           .channels(channels)
33013           .width(3)
33014           .step(step)
33015           .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
33016       }
33017     }
33018   }
33019 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM,multipixel_with_output_stride)33020   TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_output_stride) {
33021     for (size_t channels = 1; channels <= 5; channels += 1) {
33022       DWConvMicrokernelTester()
33023         .cr(1)
33024         .kr(25)
33025         .channels(1)
33026         .width(5)
33027         .output_stride(7)
33028         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
33029     }
33030   }
33031 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM,multipixel_with_qmin)33032   TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_qmin) {
33033     for (size_t channels = 1; channels <= 5; channels += 1) {
33034       DWConvMicrokernelTester()
33035         .cr(1)
33036         .kr(25)
33037         .channels(channels)
33038         .width(3)
33039         .qmin(128)
33040         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
33041     }
33042   }
33043 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM,multipixel_with_qmax)33044   TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_qmax) {
33045     for (size_t channels = 1; channels <= 5; channels += 1) {
33046       DWConvMicrokernelTester()
33047         .cr(1)
33048         .kr(25)
33049         .channels(channels)
33050         .width(3)
33051         .qmax(128)
33052         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
33053     }
33054   }
33055 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM,input_offset)33056   TEST(F32_DWCONV_MINMAX_UP1X25__WASM, input_offset) {
33057     for (uint32_t channels = 2; channels < 16; channels += 3) {
33058       DWConvMicrokernelTester()
33059         .cr(1)
33060         .kr(25)
33061         .channels(channels)
33062         .input_offset(48)
33063         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
33064     }
33065   }
33066 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM,zero)33067   TEST(F32_DWCONV_MINMAX_UP1X25__WASM, zero) {
33068     for (uint32_t mz = 0; mz < 25; mz++) {
33069       for (uint32_t channels = 2; channels < 16; channels += 3) {
33070         DWConvMicrokernelTester()
33071           .cr(1)
33072           .kr(25)
33073           .channels(channels)
33074           .input_offset(48)
33075           .zero_index(mz)
33076           .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
33077       }
33078     }
33079   }
33080 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33081 
33082 
33083 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2,c_eq_1)33084   TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_eq_1) {
33085     DWConvMicrokernelTester()
33086       .cr(1)
33087       .kr(25)
33088       .channels(1)
33089       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33090   }
33091 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2,c_gt_1)33092   TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_gt_1) {
33093     for (uint32_t channels = 2; channels < 10; channels++) {
33094       DWConvMicrokernelTester()
33095         .cr(1)
33096         .kr(25)
33097         .channels(channels)
33098         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33099     }
33100   }
33101 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2,c_gt_1_with_qmin)33102   TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_gt_1_with_qmin) {
33103     for (uint32_t channels = 2; channels < 10; channels++) {
33104       DWConvMicrokernelTester()
33105         .cr(1)
33106         .kr(25)
33107         .channels(channels)
33108         .qmin(128)
33109         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33110     }
33111   }
33112 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2,c_gt_1_with_qmax)33113   TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_gt_1_with_qmax) {
33114     for (uint32_t channels = 2; channels < 10; channels++) {
33115       DWConvMicrokernelTester()
33116         .cr(1)
33117         .kr(25)
33118         .channels(channels)
33119         .qmax(128)
33120         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33121     }
33122   }
33123 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2,multipixel)33124   TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel) {
33125     for (size_t channels = 1; channels <= 5; channels += 1) {
33126       DWConvMicrokernelTester()
33127         .cr(1)
33128         .kr(25)
33129         .channels(channels)
33130         .width(3)
33131         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33132     }
33133   }
33134 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2,multipixel_with_step)33135   TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_step) {
33136     for (size_t channels = 1; channels <= 5; channels += 1) {
33137       for (size_t step = 2; step <= 25; step++) {
33138         DWConvMicrokernelTester()
33139           .cr(1)
33140           .kr(25)
33141           .channels(channels)
33142           .width(3)
33143           .step(step)
33144           .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33145       }
33146     }
33147   }
33148 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2,multipixel_with_output_stride)33149   TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_output_stride) {
33150     for (size_t channels = 1; channels <= 5; channels += 1) {
33151       DWConvMicrokernelTester()
33152         .cr(1)
33153         .kr(25)
33154         .channels(1)
33155         .width(5)
33156         .output_stride(7)
33157         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33158     }
33159   }
33160 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2,multipixel_with_qmin)33161   TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_qmin) {
33162     for (size_t channels = 1; channels <= 5; channels += 1) {
33163       DWConvMicrokernelTester()
33164         .cr(1)
33165         .kr(25)
33166         .channels(channels)
33167         .width(3)
33168         .qmin(128)
33169         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33170     }
33171   }
33172 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2,multipixel_with_qmax)33173   TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_qmax) {
33174     for (size_t channels = 1; channels <= 5; channels += 1) {
33175       DWConvMicrokernelTester()
33176         .cr(1)
33177         .kr(25)
33178         .channels(channels)
33179         .width(3)
33180         .qmax(128)
33181         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33182     }
33183   }
33184 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2,input_offset)33185   TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, input_offset) {
33186     for (uint32_t channels = 2; channels < 16; channels += 3) {
33187       DWConvMicrokernelTester()
33188         .cr(1)
33189         .kr(25)
33190         .channels(channels)
33191         .input_offset(48)
33192         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33193     }
33194   }
33195 
TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2,zero)33196   TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, zero) {
33197     for (uint32_t mz = 0; mz < 25; mz++) {
33198       for (uint32_t channels = 2; channels < 16; channels += 3) {
33199         DWConvMicrokernelTester()
33200           .cr(1)
33201           .kr(25)
33202           .channels(channels)
33203           .input_offset(48)
33204           .zero_index(mz)
33205           .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33206       }
33207     }
33208   }
33209 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33210 
33211 
33212 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,c_eq_2)33213   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_eq_2) {
33214     DWConvMicrokernelTester()
33215       .cr(2)
33216       .kr(3)
33217       .channels(2)
33218       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33219   }
33220 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,c_div_2)33221   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_div_2) {
33222     for (uint32_t channels = 4; channels < 32; channels += 6) {
33223       DWConvMicrokernelTester()
33224         .cr(2)
33225         .kr(3)
33226         .channels(channels)
33227         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33228     }
33229   }
33230 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,c_div_2_with_qmin)33231   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_div_2_with_qmin) {
33232     for (uint32_t channels = 4; channels < 32; channels += 6) {
33233       DWConvMicrokernelTester()
33234         .cr(2)
33235         .kr(3)
33236         .channels(channels)
33237         .qmin(128)
33238         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33239     }
33240   }
33241 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,c_div_2_with_qmax)33242   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_div_2_with_qmax) {
33243     for (uint32_t channels = 4; channels < 32; channels += 6) {
33244       DWConvMicrokernelTester()
33245         .cr(2)
33246         .kr(3)
33247         .channels(channels)
33248         .qmax(128)
33249         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33250     }
33251   }
33252 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,c_lt_2)33253   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_lt_2) {
33254     for (uint32_t channels = 1; channels < 2; channels++) {
33255       DWConvMicrokernelTester()
33256         .cr(2)
33257         .kr(3)
33258         .channels(channels)
33259         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33260     }
33261   }
33262 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,c_gt_2)33263   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_gt_2) {
33264     for (uint32_t channels = 3; channels < 4; channels++) {
33265       DWConvMicrokernelTester()
33266         .cr(2)
33267         .kr(3)
33268         .channels(channels)
33269         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33270     }
33271   }
33272 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,c_gt_2_with_qmin)33273   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_gt_2_with_qmin) {
33274     for (uint32_t channels = 3; channels < 4; channels++) {
33275       DWConvMicrokernelTester()
33276         .cr(2)
33277         .kr(3)
33278         .channels(channels)
33279         .qmin(128)
33280         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33281     }
33282   }
33283 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,c_gt_2_with_qmax)33284   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_gt_2_with_qmax) {
33285     for (uint32_t channels = 3; channels < 4; channels++) {
33286       DWConvMicrokernelTester()
33287         .cr(2)
33288         .kr(3)
33289         .channels(channels)
33290         .qmax(128)
33291         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33292     }
33293   }
33294 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,multipixel)33295   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, multipixel) {
33296     for (size_t channels = 1; channels <= 10; channels += 1) {
33297       DWConvMicrokernelTester()
33298         .cr(2)
33299         .kr(3)
33300         .channels(channels)
33301         .width(3)
33302         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33303     }
33304   }
33305 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,multipixel_with_step)33306   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, multipixel_with_step) {
33307     for (size_t channels = 1; channels <= 10; channels += 1) {
33308       for (size_t step = 2; step <= 3; step++) {
33309         DWConvMicrokernelTester()
33310           .cr(2)
33311           .kr(3)
33312           .channels(channels)
33313           .width(3)
33314           .step(step)
33315           .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33316       }
33317     }
33318   }
33319 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,multipixel_with_output_stride)33320   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, multipixel_with_output_stride) {
33321     for (size_t channels = 1; channels <= 10; channels += 1) {
33322       DWConvMicrokernelTester()
33323         .cr(2)
33324         .kr(3)
33325         .channels(2)
33326         .width(5)
33327         .output_stride(13)
33328         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33329     }
33330   }
33331 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,multipixel_with_qmin)33332   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, multipixel_with_qmin) {
33333     for (size_t channels = 1; channels <= 10; channels += 1) {
33334       DWConvMicrokernelTester()
33335         .cr(2)
33336         .kr(3)
33337         .channels(channels)
33338         .width(3)
33339         .qmin(128)
33340         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33341     }
33342   }
33343 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,multipixel_with_qmax)33344   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, multipixel_with_qmax) {
33345     for (size_t channels = 1; channels <= 10; channels += 1) {
33346       DWConvMicrokernelTester()
33347         .cr(2)
33348         .kr(3)
33349         .channels(channels)
33350         .width(3)
33351         .qmax(128)
33352         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33353     }
33354   }
33355 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,input_offset)33356   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, input_offset) {
33357     for (uint32_t channels = 4; channels < 32; channels += 6) {
33358       DWConvMicrokernelTester()
33359         .cr(2)
33360         .kr(3)
33361         .channels(channels)
33362         .input_offset(80)
33363         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33364     }
33365   }
33366 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM,zero)33367   TEST(F32_DWCONV_MINMAX_UP2X3__WASM, zero) {
33368     for (uint32_t mz = 0; mz < 3; mz++) {
33369       for (uint32_t channels = 4; channels < 32; channels += 6) {
33370         DWConvMicrokernelTester()
33371           .cr(2)
33372           .kr(3)
33373           .channels(channels)
33374           .input_offset(80)
33375           .zero_index(mz)
33376           .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
33377       }
33378     }
33379   }
33380 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33381 
33382 
33383 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,c_eq_2)33384   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_eq_2) {
33385     DWConvMicrokernelTester()
33386       .cr(2)
33387       .kr(3)
33388       .channels(2)
33389       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33390   }
33391 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,c_div_2)33392   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_div_2) {
33393     for (uint32_t channels = 4; channels < 32; channels += 6) {
33394       DWConvMicrokernelTester()
33395         .cr(2)
33396         .kr(3)
33397         .channels(channels)
33398         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33399     }
33400   }
33401 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,c_div_2_with_qmin)33402   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_div_2_with_qmin) {
33403     for (uint32_t channels = 4; channels < 32; channels += 6) {
33404       DWConvMicrokernelTester()
33405         .cr(2)
33406         .kr(3)
33407         .channels(channels)
33408         .qmin(128)
33409         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33410     }
33411   }
33412 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,c_div_2_with_qmax)33413   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_div_2_with_qmax) {
33414     for (uint32_t channels = 4; channels < 32; channels += 6) {
33415       DWConvMicrokernelTester()
33416         .cr(2)
33417         .kr(3)
33418         .channels(channels)
33419         .qmax(128)
33420         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33421     }
33422   }
33423 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,c_lt_2)33424   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_lt_2) {
33425     for (uint32_t channels = 1; channels < 2; channels++) {
33426       DWConvMicrokernelTester()
33427         .cr(2)
33428         .kr(3)
33429         .channels(channels)
33430         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33431     }
33432   }
33433 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,c_gt_2)33434   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_gt_2) {
33435     for (uint32_t channels = 3; channels < 4; channels++) {
33436       DWConvMicrokernelTester()
33437         .cr(2)
33438         .kr(3)
33439         .channels(channels)
33440         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33441     }
33442   }
33443 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,c_gt_2_with_qmin)33444   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_gt_2_with_qmin) {
33445     for (uint32_t channels = 3; channels < 4; channels++) {
33446       DWConvMicrokernelTester()
33447         .cr(2)
33448         .kr(3)
33449         .channels(channels)
33450         .qmin(128)
33451         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33452     }
33453   }
33454 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,c_gt_2_with_qmax)33455   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_gt_2_with_qmax) {
33456     for (uint32_t channels = 3; channels < 4; channels++) {
33457       DWConvMicrokernelTester()
33458         .cr(2)
33459         .kr(3)
33460         .channels(channels)
33461         .qmax(128)
33462         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33463     }
33464   }
33465 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,multipixel)33466   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, multipixel) {
33467     for (size_t channels = 1; channels <= 10; channels += 1) {
33468       DWConvMicrokernelTester()
33469         .cr(2)
33470         .kr(3)
33471         .channels(channels)
33472         .width(3)
33473         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33474     }
33475   }
33476 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,multipixel_with_step)33477   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, multipixel_with_step) {
33478     for (size_t channels = 1; channels <= 10; channels += 1) {
33479       for (size_t step = 2; step <= 3; step++) {
33480         DWConvMicrokernelTester()
33481           .cr(2)
33482           .kr(3)
33483           .channels(channels)
33484           .width(3)
33485           .step(step)
33486           .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33487       }
33488     }
33489   }
33490 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,multipixel_with_output_stride)33491   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, multipixel_with_output_stride) {
33492     for (size_t channels = 1; channels <= 10; channels += 1) {
33493       DWConvMicrokernelTester()
33494         .cr(2)
33495         .kr(3)
33496         .channels(2)
33497         .width(5)
33498         .output_stride(13)
33499         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33500     }
33501   }
33502 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,multipixel_with_qmin)33503   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, multipixel_with_qmin) {
33504     for (size_t channels = 1; channels <= 10; channels += 1) {
33505       DWConvMicrokernelTester()
33506         .cr(2)
33507         .kr(3)
33508         .channels(channels)
33509         .width(3)
33510         .qmin(128)
33511         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33512     }
33513   }
33514 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,multipixel_with_qmax)33515   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, multipixel_with_qmax) {
33516     for (size_t channels = 1; channels <= 10; channels += 1) {
33517       DWConvMicrokernelTester()
33518         .cr(2)
33519         .kr(3)
33520         .channels(channels)
33521         .width(3)
33522         .qmax(128)
33523         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33524     }
33525   }
33526 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,input_offset)33527   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, input_offset) {
33528     for (uint32_t channels = 4; channels < 32; channels += 6) {
33529       DWConvMicrokernelTester()
33530         .cr(2)
33531         .kr(3)
33532         .channels(channels)
33533         .input_offset(80)
33534         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33535     }
33536   }
33537 
TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2,zero)33538   TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, zero) {
33539     for (uint32_t mz = 0; mz < 3; mz++) {
33540       for (uint32_t channels = 4; channels < 32; channels += 6) {
33541         DWConvMicrokernelTester()
33542           .cr(2)
33543           .kr(3)
33544           .channels(channels)
33545           .input_offset(80)
33546           .zero_index(mz)
33547           .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33548       }
33549     }
33550   }
33551 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33552 
33553 
33554 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,c_eq_2)33555   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_eq_2) {
33556     DWConvMicrokernelTester()
33557       .cr(2)
33558       .kr(4)
33559       .channels(2)
33560       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33561   }
33562 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,c_div_2)33563   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_div_2) {
33564     for (uint32_t channels = 4; channels < 32; channels += 6) {
33565       DWConvMicrokernelTester()
33566         .cr(2)
33567         .kr(4)
33568         .channels(channels)
33569         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33570     }
33571   }
33572 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,c_div_2_with_qmin)33573   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_div_2_with_qmin) {
33574     for (uint32_t channels = 4; channels < 32; channels += 6) {
33575       DWConvMicrokernelTester()
33576         .cr(2)
33577         .kr(4)
33578         .channels(channels)
33579         .qmin(128)
33580         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33581     }
33582   }
33583 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,c_div_2_with_qmax)33584   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_div_2_with_qmax) {
33585     for (uint32_t channels = 4; channels < 32; channels += 6) {
33586       DWConvMicrokernelTester()
33587         .cr(2)
33588         .kr(4)
33589         .channels(channels)
33590         .qmax(128)
33591         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33592     }
33593   }
33594 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,c_lt_2)33595   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_lt_2) {
33596     for (uint32_t channels = 1; channels < 2; channels++) {
33597       DWConvMicrokernelTester()
33598         .cr(2)
33599         .kr(4)
33600         .channels(channels)
33601         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33602     }
33603   }
33604 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,c_gt_2)33605   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_gt_2) {
33606     for (uint32_t channels = 3; channels < 4; channels++) {
33607       DWConvMicrokernelTester()
33608         .cr(2)
33609         .kr(4)
33610         .channels(channels)
33611         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33612     }
33613   }
33614 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,c_gt_2_with_qmin)33615   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_gt_2_with_qmin) {
33616     for (uint32_t channels = 3; channels < 4; channels++) {
33617       DWConvMicrokernelTester()
33618         .cr(2)
33619         .kr(4)
33620         .channels(channels)
33621         .qmin(128)
33622         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33623     }
33624   }
33625 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,c_gt_2_with_qmax)33626   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_gt_2_with_qmax) {
33627     for (uint32_t channels = 3; channels < 4; channels++) {
33628       DWConvMicrokernelTester()
33629         .cr(2)
33630         .kr(4)
33631         .channels(channels)
33632         .qmax(128)
33633         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33634     }
33635   }
33636 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,multipixel)33637   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel) {
33638     for (size_t channels = 1; channels <= 10; channels += 1) {
33639       DWConvMicrokernelTester()
33640         .cr(2)
33641         .kr(4)
33642         .channels(channels)
33643         .width(3)
33644         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33645     }
33646   }
33647 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,multipixel_with_step)33648   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_step) {
33649     for (size_t channels = 1; channels <= 10; channels += 1) {
33650       for (size_t step = 2; step <= 4; step++) {
33651         DWConvMicrokernelTester()
33652           .cr(2)
33653           .kr(4)
33654           .channels(channels)
33655           .width(3)
33656           .step(step)
33657           .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33658       }
33659     }
33660   }
33661 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,multipixel_with_output_stride)33662   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_output_stride) {
33663     for (size_t channels = 1; channels <= 10; channels += 1) {
33664       DWConvMicrokernelTester()
33665         .cr(2)
33666         .kr(4)
33667         .channels(2)
33668         .width(5)
33669         .output_stride(13)
33670         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33671     }
33672   }
33673 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,multipixel_with_qmin)33674   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_qmin) {
33675     for (size_t channels = 1; channels <= 10; channels += 1) {
33676       DWConvMicrokernelTester()
33677         .cr(2)
33678         .kr(4)
33679         .channels(channels)
33680         .width(3)
33681         .qmin(128)
33682         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33683     }
33684   }
33685 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,multipixel_with_qmax)33686   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_qmax) {
33687     for (size_t channels = 1; channels <= 10; channels += 1) {
33688       DWConvMicrokernelTester()
33689         .cr(2)
33690         .kr(4)
33691         .channels(channels)
33692         .width(3)
33693         .qmax(128)
33694         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33695     }
33696   }
33697 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,input_offset)33698   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, input_offset) {
33699     for (uint32_t channels = 4; channels < 32; channels += 6) {
33700       DWConvMicrokernelTester()
33701         .cr(2)
33702         .kr(4)
33703         .channels(channels)
33704         .input_offset(80)
33705         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33706     }
33707   }
33708 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM,zero)33709   TEST(F32_DWCONV_MINMAX_UP2X4__WASM, zero) {
33710     for (uint32_t mz = 0; mz < 4; mz++) {
33711       for (uint32_t channels = 4; channels < 32; channels += 6) {
33712         DWConvMicrokernelTester()
33713           .cr(2)
33714           .kr(4)
33715           .channels(channels)
33716           .input_offset(80)
33717           .zero_index(mz)
33718           .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
33719       }
33720     }
33721   }
33722 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33723 
33724 
33725 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,c_eq_2)33726   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_eq_2) {
33727     DWConvMicrokernelTester()
33728       .cr(2)
33729       .kr(4)
33730       .channels(2)
33731       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33732   }
33733 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,c_div_2)33734   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_div_2) {
33735     for (uint32_t channels = 4; channels < 32; channels += 6) {
33736       DWConvMicrokernelTester()
33737         .cr(2)
33738         .kr(4)
33739         .channels(channels)
33740         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33741     }
33742   }
33743 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,c_div_2_with_qmin)33744   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_div_2_with_qmin) {
33745     for (uint32_t channels = 4; channels < 32; channels += 6) {
33746       DWConvMicrokernelTester()
33747         .cr(2)
33748         .kr(4)
33749         .channels(channels)
33750         .qmin(128)
33751         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33752     }
33753   }
33754 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,c_div_2_with_qmax)33755   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_div_2_with_qmax) {
33756     for (uint32_t channels = 4; channels < 32; channels += 6) {
33757       DWConvMicrokernelTester()
33758         .cr(2)
33759         .kr(4)
33760         .channels(channels)
33761         .qmax(128)
33762         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33763     }
33764   }
33765 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,c_lt_2)33766   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_lt_2) {
33767     for (uint32_t channels = 1; channels < 2; channels++) {
33768       DWConvMicrokernelTester()
33769         .cr(2)
33770         .kr(4)
33771         .channels(channels)
33772         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33773     }
33774   }
33775 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,c_gt_2)33776   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_gt_2) {
33777     for (uint32_t channels = 3; channels < 4; channels++) {
33778       DWConvMicrokernelTester()
33779         .cr(2)
33780         .kr(4)
33781         .channels(channels)
33782         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33783     }
33784   }
33785 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,c_gt_2_with_qmin)33786   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_gt_2_with_qmin) {
33787     for (uint32_t channels = 3; channels < 4; channels++) {
33788       DWConvMicrokernelTester()
33789         .cr(2)
33790         .kr(4)
33791         .channels(channels)
33792         .qmin(128)
33793         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33794     }
33795   }
33796 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,c_gt_2_with_qmax)33797   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_gt_2_with_qmax) {
33798     for (uint32_t channels = 3; channels < 4; channels++) {
33799       DWConvMicrokernelTester()
33800         .cr(2)
33801         .kr(4)
33802         .channels(channels)
33803         .qmax(128)
33804         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33805     }
33806   }
33807 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,multipixel)33808   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel) {
33809     for (size_t channels = 1; channels <= 10; channels += 1) {
33810       DWConvMicrokernelTester()
33811         .cr(2)
33812         .kr(4)
33813         .channels(channels)
33814         .width(3)
33815         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33816     }
33817   }
33818 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,multipixel_with_step)33819   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_step) {
33820     for (size_t channels = 1; channels <= 10; channels += 1) {
33821       for (size_t step = 2; step <= 4; step++) {
33822         DWConvMicrokernelTester()
33823           .cr(2)
33824           .kr(4)
33825           .channels(channels)
33826           .width(3)
33827           .step(step)
33828           .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33829       }
33830     }
33831   }
33832 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,multipixel_with_output_stride)33833   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_output_stride) {
33834     for (size_t channels = 1; channels <= 10; channels += 1) {
33835       DWConvMicrokernelTester()
33836         .cr(2)
33837         .kr(4)
33838         .channels(2)
33839         .width(5)
33840         .output_stride(13)
33841         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33842     }
33843   }
33844 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,multipixel_with_qmin)33845   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_qmin) {
33846     for (size_t channels = 1; channels <= 10; channels += 1) {
33847       DWConvMicrokernelTester()
33848         .cr(2)
33849         .kr(4)
33850         .channels(channels)
33851         .width(3)
33852         .qmin(128)
33853         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33854     }
33855   }
33856 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,multipixel_with_qmax)33857   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_qmax) {
33858     for (size_t channels = 1; channels <= 10; channels += 1) {
33859       DWConvMicrokernelTester()
33860         .cr(2)
33861         .kr(4)
33862         .channels(channels)
33863         .width(3)
33864         .qmax(128)
33865         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33866     }
33867   }
33868 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,input_offset)33869   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, input_offset) {
33870     for (uint32_t channels = 4; channels < 32; channels += 6) {
33871       DWConvMicrokernelTester()
33872         .cr(2)
33873         .kr(4)
33874         .channels(channels)
33875         .input_offset(80)
33876         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33877     }
33878   }
33879 
TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2,zero)33880   TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, zero) {
33881     for (uint32_t mz = 0; mz < 4; mz++) {
33882       for (uint32_t channels = 4; channels < 32; channels += 6) {
33883         DWConvMicrokernelTester()
33884           .cr(2)
33885           .kr(4)
33886           .channels(channels)
33887           .input_offset(80)
33888           .zero_index(mz)
33889           .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
33890       }
33891     }
33892   }
33893 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
33894 
33895 
33896 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,c_eq_2)33897   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_eq_2) {
33898     DWConvMicrokernelTester()
33899       .cr(2)
33900       .kr(9)
33901       .channels(2)
33902       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
33903   }
33904 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,c_div_2)33905   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_div_2) {
33906     for (uint32_t channels = 4; channels < 32; channels += 6) {
33907       DWConvMicrokernelTester()
33908         .cr(2)
33909         .kr(9)
33910         .channels(channels)
33911         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
33912     }
33913   }
33914 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,c_div_2_with_qmin)33915   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_div_2_with_qmin) {
33916     for (uint32_t channels = 4; channels < 32; channels += 6) {
33917       DWConvMicrokernelTester()
33918         .cr(2)
33919         .kr(9)
33920         .channels(channels)
33921         .qmin(128)
33922         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
33923     }
33924   }
33925 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,c_div_2_with_qmax)33926   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_div_2_with_qmax) {
33927     for (uint32_t channels = 4; channels < 32; channels += 6) {
33928       DWConvMicrokernelTester()
33929         .cr(2)
33930         .kr(9)
33931         .channels(channels)
33932         .qmax(128)
33933         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
33934     }
33935   }
33936 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,c_lt_2)33937   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_lt_2) {
33938     for (uint32_t channels = 1; channels < 2; channels++) {
33939       DWConvMicrokernelTester()
33940         .cr(2)
33941         .kr(9)
33942         .channels(channels)
33943         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
33944     }
33945   }
33946 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,c_gt_2)33947   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_gt_2) {
33948     for (uint32_t channels = 3; channels < 4; channels++) {
33949       DWConvMicrokernelTester()
33950         .cr(2)
33951         .kr(9)
33952         .channels(channels)
33953         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
33954     }
33955   }
33956 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,c_gt_2_with_qmin)33957   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_gt_2_with_qmin) {
33958     for (uint32_t channels = 3; channels < 4; channels++) {
33959       DWConvMicrokernelTester()
33960         .cr(2)
33961         .kr(9)
33962         .channels(channels)
33963         .qmin(128)
33964         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
33965     }
33966   }
33967 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,c_gt_2_with_qmax)33968   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_gt_2_with_qmax) {
33969     for (uint32_t channels = 3; channels < 4; channels++) {
33970       DWConvMicrokernelTester()
33971         .cr(2)
33972         .kr(9)
33973         .channels(channels)
33974         .qmax(128)
33975         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
33976     }
33977   }
33978 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,multipixel)33979   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel) {
33980     for (size_t channels = 1; channels <= 10; channels += 1) {
33981       DWConvMicrokernelTester()
33982         .cr(2)
33983         .kr(9)
33984         .channels(channels)
33985         .width(3)
33986         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
33987     }
33988   }
33989 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,multipixel_with_step)33990   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_step) {
33991     for (size_t channels = 1; channels <= 10; channels += 1) {
33992       for (size_t step = 2; step <= 9; step++) {
33993         DWConvMicrokernelTester()
33994           .cr(2)
33995           .kr(9)
33996           .channels(channels)
33997           .width(3)
33998           .step(step)
33999           .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
34000       }
34001     }
34002   }
34003 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,multipixel_with_output_stride)34004   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_output_stride) {
34005     for (size_t channels = 1; channels <= 10; channels += 1) {
34006       DWConvMicrokernelTester()
34007         .cr(2)
34008         .kr(9)
34009         .channels(2)
34010         .width(5)
34011         .output_stride(13)
34012         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
34013     }
34014   }
34015 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,multipixel_with_qmin)34016   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_qmin) {
34017     for (size_t channels = 1; channels <= 10; channels += 1) {
34018       DWConvMicrokernelTester()
34019         .cr(2)
34020         .kr(9)
34021         .channels(channels)
34022         .width(3)
34023         .qmin(128)
34024         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
34025     }
34026   }
34027 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,multipixel_with_qmax)34028   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_qmax) {
34029     for (size_t channels = 1; channels <= 10; channels += 1) {
34030       DWConvMicrokernelTester()
34031         .cr(2)
34032         .kr(9)
34033         .channels(channels)
34034         .width(3)
34035         .qmax(128)
34036         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
34037     }
34038   }
34039 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,input_offset)34040   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, input_offset) {
34041     for (uint32_t channels = 4; channels < 32; channels += 6) {
34042       DWConvMicrokernelTester()
34043         .cr(2)
34044         .kr(9)
34045         .channels(channels)
34046         .input_offset(80)
34047         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
34048     }
34049   }
34050 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM,zero)34051   TEST(F32_DWCONV_MINMAX_UP2X9__WASM, zero) {
34052     for (uint32_t mz = 0; mz < 9; mz++) {
34053       for (uint32_t channels = 4; channels < 32; channels += 6) {
34054         DWConvMicrokernelTester()
34055           .cr(2)
34056           .kr(9)
34057           .channels(channels)
34058           .input_offset(80)
34059           .zero_index(mz)
34060           .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
34061       }
34062     }
34063   }
34064 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
34065 
34066 
34067 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,c_eq_2)34068   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_eq_2) {
34069     DWConvMicrokernelTester()
34070       .cr(2)
34071       .kr(9)
34072       .channels(2)
34073       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34074   }
34075 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,c_div_2)34076   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_div_2) {
34077     for (uint32_t channels = 4; channels < 32; channels += 6) {
34078       DWConvMicrokernelTester()
34079         .cr(2)
34080         .kr(9)
34081         .channels(channels)
34082         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34083     }
34084   }
34085 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,c_div_2_with_qmin)34086   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_div_2_with_qmin) {
34087     for (uint32_t channels = 4; channels < 32; channels += 6) {
34088       DWConvMicrokernelTester()
34089         .cr(2)
34090         .kr(9)
34091         .channels(channels)
34092         .qmin(128)
34093         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34094     }
34095   }
34096 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,c_div_2_with_qmax)34097   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_div_2_with_qmax) {
34098     for (uint32_t channels = 4; channels < 32; channels += 6) {
34099       DWConvMicrokernelTester()
34100         .cr(2)
34101         .kr(9)
34102         .channels(channels)
34103         .qmax(128)
34104         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34105     }
34106   }
34107 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,c_lt_2)34108   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_lt_2) {
34109     for (uint32_t channels = 1; channels < 2; channels++) {
34110       DWConvMicrokernelTester()
34111         .cr(2)
34112         .kr(9)
34113         .channels(channels)
34114         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34115     }
34116   }
34117 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,c_gt_2)34118   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_gt_2) {
34119     for (uint32_t channels = 3; channels < 4; channels++) {
34120       DWConvMicrokernelTester()
34121         .cr(2)
34122         .kr(9)
34123         .channels(channels)
34124         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34125     }
34126   }
34127 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,c_gt_2_with_qmin)34128   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_gt_2_with_qmin) {
34129     for (uint32_t channels = 3; channels < 4; channels++) {
34130       DWConvMicrokernelTester()
34131         .cr(2)
34132         .kr(9)
34133         .channels(channels)
34134         .qmin(128)
34135         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34136     }
34137   }
34138 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,c_gt_2_with_qmax)34139   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_gt_2_with_qmax) {
34140     for (uint32_t channels = 3; channels < 4; channels++) {
34141       DWConvMicrokernelTester()
34142         .cr(2)
34143         .kr(9)
34144         .channels(channels)
34145         .qmax(128)
34146         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34147     }
34148   }
34149 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,multipixel)34150   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel) {
34151     for (size_t channels = 1; channels <= 10; channels += 1) {
34152       DWConvMicrokernelTester()
34153         .cr(2)
34154         .kr(9)
34155         .channels(channels)
34156         .width(3)
34157         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34158     }
34159   }
34160 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,multipixel_with_step)34161   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_step) {
34162     for (size_t channels = 1; channels <= 10; channels += 1) {
34163       for (size_t step = 2; step <= 9; step++) {
34164         DWConvMicrokernelTester()
34165           .cr(2)
34166           .kr(9)
34167           .channels(channels)
34168           .width(3)
34169           .step(step)
34170           .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34171       }
34172     }
34173   }
34174 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,multipixel_with_output_stride)34175   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_output_stride) {
34176     for (size_t channels = 1; channels <= 10; channels += 1) {
34177       DWConvMicrokernelTester()
34178         .cr(2)
34179         .kr(9)
34180         .channels(2)
34181         .width(5)
34182         .output_stride(13)
34183         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34184     }
34185   }
34186 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,multipixel_with_qmin)34187   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_qmin) {
34188     for (size_t channels = 1; channels <= 10; channels += 1) {
34189       DWConvMicrokernelTester()
34190         .cr(2)
34191         .kr(9)
34192         .channels(channels)
34193         .width(3)
34194         .qmin(128)
34195         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34196     }
34197   }
34198 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,multipixel_with_qmax)34199   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_qmax) {
34200     for (size_t channels = 1; channels <= 10; channels += 1) {
34201       DWConvMicrokernelTester()
34202         .cr(2)
34203         .kr(9)
34204         .channels(channels)
34205         .width(3)
34206         .qmax(128)
34207         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34208     }
34209   }
34210 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,input_offset)34211   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, input_offset) {
34212     for (uint32_t channels = 4; channels < 32; channels += 6) {
34213       DWConvMicrokernelTester()
34214         .cr(2)
34215         .kr(9)
34216         .channels(channels)
34217         .input_offset(80)
34218         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34219     }
34220   }
34221 
TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2,zero)34222   TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, zero) {
34223     for (uint32_t mz = 0; mz < 9; mz++) {
34224       for (uint32_t channels = 4; channels < 32; channels += 6) {
34225         DWConvMicrokernelTester()
34226           .cr(2)
34227           .kr(9)
34228           .channels(channels)
34229           .input_offset(80)
34230           .zero_index(mz)
34231           .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34232       }
34233     }
34234   }
34235 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
34236 
34237 
34238 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,c_eq_2)34239   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_eq_2) {
34240     DWConvMicrokernelTester()
34241       .cr(2)
34242       .kr(25)
34243       .channels(2)
34244       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34245   }
34246 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,c_div_2)34247   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_div_2) {
34248     for (uint32_t channels = 4; channels < 32; channels += 6) {
34249       DWConvMicrokernelTester()
34250         .cr(2)
34251         .kr(25)
34252         .channels(channels)
34253         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34254     }
34255   }
34256 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,c_div_2_with_qmin)34257   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_div_2_with_qmin) {
34258     for (uint32_t channels = 4; channels < 32; channels += 6) {
34259       DWConvMicrokernelTester()
34260         .cr(2)
34261         .kr(25)
34262         .channels(channels)
34263         .qmin(128)
34264         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34265     }
34266   }
34267 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,c_div_2_with_qmax)34268   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_div_2_with_qmax) {
34269     for (uint32_t channels = 4; channels < 32; channels += 6) {
34270       DWConvMicrokernelTester()
34271         .cr(2)
34272         .kr(25)
34273         .channels(channels)
34274         .qmax(128)
34275         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34276     }
34277   }
34278 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,c_lt_2)34279   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_lt_2) {
34280     for (uint32_t channels = 1; channels < 2; channels++) {
34281       DWConvMicrokernelTester()
34282         .cr(2)
34283         .kr(25)
34284         .channels(channels)
34285         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34286     }
34287   }
34288 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,c_gt_2)34289   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_gt_2) {
34290     for (uint32_t channels = 3; channels < 4; channels++) {
34291       DWConvMicrokernelTester()
34292         .cr(2)
34293         .kr(25)
34294         .channels(channels)
34295         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34296     }
34297   }
34298 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,c_gt_2_with_qmin)34299   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_gt_2_with_qmin) {
34300     for (uint32_t channels = 3; channels < 4; channels++) {
34301       DWConvMicrokernelTester()
34302         .cr(2)
34303         .kr(25)
34304         .channels(channels)
34305         .qmin(128)
34306         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34307     }
34308   }
34309 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,c_gt_2_with_qmax)34310   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_gt_2_with_qmax) {
34311     for (uint32_t channels = 3; channels < 4; channels++) {
34312       DWConvMicrokernelTester()
34313         .cr(2)
34314         .kr(25)
34315         .channels(channels)
34316         .qmax(128)
34317         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34318     }
34319   }
34320 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,multipixel)34321   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel) {
34322     for (size_t channels = 1; channels <= 10; channels += 1) {
34323       DWConvMicrokernelTester()
34324         .cr(2)
34325         .kr(25)
34326         .channels(channels)
34327         .width(3)
34328         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34329     }
34330   }
34331 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,multipixel_with_step)34332   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_step) {
34333     for (size_t channels = 1; channels <= 10; channels += 1) {
34334       for (size_t step = 2; step <= 25; step++) {
34335         DWConvMicrokernelTester()
34336           .cr(2)
34337           .kr(25)
34338           .channels(channels)
34339           .width(3)
34340           .step(step)
34341           .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34342       }
34343     }
34344   }
34345 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,multipixel_with_output_stride)34346   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_output_stride) {
34347     for (size_t channels = 1; channels <= 10; channels += 1) {
34348       DWConvMicrokernelTester()
34349         .cr(2)
34350         .kr(25)
34351         .channels(2)
34352         .width(5)
34353         .output_stride(13)
34354         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34355     }
34356   }
34357 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,multipixel_with_qmin)34358   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_qmin) {
34359     for (size_t channels = 1; channels <= 10; channels += 1) {
34360       DWConvMicrokernelTester()
34361         .cr(2)
34362         .kr(25)
34363         .channels(channels)
34364         .width(3)
34365         .qmin(128)
34366         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34367     }
34368   }
34369 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,multipixel_with_qmax)34370   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_qmax) {
34371     for (size_t channels = 1; channels <= 10; channels += 1) {
34372       DWConvMicrokernelTester()
34373         .cr(2)
34374         .kr(25)
34375         .channels(channels)
34376         .width(3)
34377         .qmax(128)
34378         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34379     }
34380   }
34381 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,input_offset)34382   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, input_offset) {
34383     for (uint32_t channels = 4; channels < 32; channels += 6) {
34384       DWConvMicrokernelTester()
34385         .cr(2)
34386         .kr(25)
34387         .channels(channels)
34388         .input_offset(80)
34389         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34390     }
34391   }
34392 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM,zero)34393   TEST(F32_DWCONV_MINMAX_UP2X25__WASM, zero) {
34394     for (uint32_t mz = 0; mz < 25; mz++) {
34395       for (uint32_t channels = 4; channels < 32; channels += 6) {
34396         DWConvMicrokernelTester()
34397           .cr(2)
34398           .kr(25)
34399           .channels(channels)
34400           .input_offset(80)
34401           .zero_index(mz)
34402           .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
34403       }
34404     }
34405   }
34406 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
34407 
34408 
34409 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,c_eq_2)34410   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_eq_2) {
34411     DWConvMicrokernelTester()
34412       .cr(2)
34413       .kr(25)
34414       .channels(2)
34415       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34416   }
34417 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,c_div_2)34418   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_div_2) {
34419     for (uint32_t channels = 4; channels < 32; channels += 6) {
34420       DWConvMicrokernelTester()
34421         .cr(2)
34422         .kr(25)
34423         .channels(channels)
34424         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34425     }
34426   }
34427 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,c_div_2_with_qmin)34428   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_div_2_with_qmin) {
34429     for (uint32_t channels = 4; channels < 32; channels += 6) {
34430       DWConvMicrokernelTester()
34431         .cr(2)
34432         .kr(25)
34433         .channels(channels)
34434         .qmin(128)
34435         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34436     }
34437   }
34438 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,c_div_2_with_qmax)34439   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_div_2_with_qmax) {
34440     for (uint32_t channels = 4; channels < 32; channels += 6) {
34441       DWConvMicrokernelTester()
34442         .cr(2)
34443         .kr(25)
34444         .channels(channels)
34445         .qmax(128)
34446         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34447     }
34448   }
34449 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,c_lt_2)34450   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_lt_2) {
34451     for (uint32_t channels = 1; channels < 2; channels++) {
34452       DWConvMicrokernelTester()
34453         .cr(2)
34454         .kr(25)
34455         .channels(channels)
34456         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34457     }
34458   }
34459 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,c_gt_2)34460   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_gt_2) {
34461     for (uint32_t channels = 3; channels < 4; channels++) {
34462       DWConvMicrokernelTester()
34463         .cr(2)
34464         .kr(25)
34465         .channels(channels)
34466         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34467     }
34468   }
34469 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,c_gt_2_with_qmin)34470   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_gt_2_with_qmin) {
34471     for (uint32_t channels = 3; channels < 4; channels++) {
34472       DWConvMicrokernelTester()
34473         .cr(2)
34474         .kr(25)
34475         .channels(channels)
34476         .qmin(128)
34477         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34478     }
34479   }
34480 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,c_gt_2_with_qmax)34481   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_gt_2_with_qmax) {
34482     for (uint32_t channels = 3; channels < 4; channels++) {
34483       DWConvMicrokernelTester()
34484         .cr(2)
34485         .kr(25)
34486         .channels(channels)
34487         .qmax(128)
34488         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34489     }
34490   }
34491 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,multipixel)34492   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel) {
34493     for (size_t channels = 1; channels <= 10; channels += 1) {
34494       DWConvMicrokernelTester()
34495         .cr(2)
34496         .kr(25)
34497         .channels(channels)
34498         .width(3)
34499         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34500     }
34501   }
34502 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,multipixel_with_step)34503   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_step) {
34504     for (size_t channels = 1; channels <= 10; channels += 1) {
34505       for (size_t step = 2; step <= 25; step++) {
34506         DWConvMicrokernelTester()
34507           .cr(2)
34508           .kr(25)
34509           .channels(channels)
34510           .width(3)
34511           .step(step)
34512           .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34513       }
34514     }
34515   }
34516 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,multipixel_with_output_stride)34517   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_output_stride) {
34518     for (size_t channels = 1; channels <= 10; channels += 1) {
34519       DWConvMicrokernelTester()
34520         .cr(2)
34521         .kr(25)
34522         .channels(2)
34523         .width(5)
34524         .output_stride(13)
34525         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34526     }
34527   }
34528 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,multipixel_with_qmin)34529   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_qmin) {
34530     for (size_t channels = 1; channels <= 10; channels += 1) {
34531       DWConvMicrokernelTester()
34532         .cr(2)
34533         .kr(25)
34534         .channels(channels)
34535         .width(3)
34536         .qmin(128)
34537         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34538     }
34539   }
34540 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,multipixel_with_qmax)34541   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_qmax) {
34542     for (size_t channels = 1; channels <= 10; channels += 1) {
34543       DWConvMicrokernelTester()
34544         .cr(2)
34545         .kr(25)
34546         .channels(channels)
34547         .width(3)
34548         .qmax(128)
34549         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34550     }
34551   }
34552 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,input_offset)34553   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, input_offset) {
34554     for (uint32_t channels = 4; channels < 32; channels += 6) {
34555       DWConvMicrokernelTester()
34556         .cr(2)
34557         .kr(25)
34558         .channels(channels)
34559         .input_offset(80)
34560         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34561     }
34562   }
34563 
TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2,zero)34564   TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, zero) {
34565     for (uint32_t mz = 0; mz < 25; mz++) {
34566       for (uint32_t channels = 4; channels < 32; channels += 6) {
34567         DWConvMicrokernelTester()
34568           .cr(2)
34569           .kr(25)
34570           .channels(channels)
34571           .input_offset(80)
34572           .zero_index(mz)
34573           .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
34574       }
34575     }
34576   }
34577 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
34578 
34579 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR,c_eq_1)34580 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, c_eq_1) {
34581   DWConvMicrokernelTester()
34582     .cr(1)
34583     .kr(3)
34584     .channels(1)
34585     .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
34586 }
34587 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR,c_gt_1)34588 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, c_gt_1) {
34589   for (uint32_t channels = 2; channels < 10; channels++) {
34590     DWConvMicrokernelTester()
34591       .cr(1)
34592       .kr(3)
34593       .channels(channels)
34594       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
34595   }
34596 }
34597 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR,c_gt_1_with_qmin)34598 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, c_gt_1_with_qmin) {
34599   for (uint32_t channels = 2; channels < 10; channels++) {
34600     DWConvMicrokernelTester()
34601       .cr(1)
34602       .kr(3)
34603       .channels(channels)
34604       .qmin(128)
34605       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
34606   }
34607 }
34608 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR,c_gt_1_with_qmax)34609 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, c_gt_1_with_qmax) {
34610   for (uint32_t channels = 2; channels < 10; channels++) {
34611     DWConvMicrokernelTester()
34612       .cr(1)
34613       .kr(3)
34614       .channels(channels)
34615       .qmax(128)
34616       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
34617   }
34618 }
34619 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR,multipixel)34620 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, multipixel) {
34621   for (size_t channels = 1; channels <= 5; channels += 1) {
34622     DWConvMicrokernelTester()
34623       .cr(1)
34624       .kr(3)
34625       .channels(channels)
34626       .width(3)
34627       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
34628   }
34629 }
34630 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR,multipixel_with_step)34631 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, multipixel_with_step) {
34632   for (size_t channels = 1; channels <= 5; channels += 1) {
34633     for (size_t step = 2; step <= 3; step++) {
34634       DWConvMicrokernelTester()
34635         .cr(1)
34636         .kr(3)
34637         .channels(channels)
34638         .width(3)
34639         .step(step)
34640         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
34641     }
34642   }
34643 }
34644 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR,multipixel_with_output_stride)34645 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, multipixel_with_output_stride) {
34646   for (size_t channels = 1; channels <= 5; channels += 1) {
34647     DWConvMicrokernelTester()
34648       .cr(1)
34649       .kr(3)
34650       .channels(1)
34651       .width(5)
34652       .output_stride(7)
34653       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
34654   }
34655 }
34656 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR,multipixel_with_qmin)34657 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, multipixel_with_qmin) {
34658   for (size_t channels = 1; channels <= 5; channels += 1) {
34659     DWConvMicrokernelTester()
34660       .cr(1)
34661       .kr(3)
34662       .channels(channels)
34663       .width(3)
34664       .qmin(128)
34665       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
34666   }
34667 }
34668 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR,multipixel_with_qmax)34669 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, multipixel_with_qmax) {
34670   for (size_t channels = 1; channels <= 5; channels += 1) {
34671     DWConvMicrokernelTester()
34672       .cr(1)
34673       .kr(3)
34674       .channels(channels)
34675       .width(3)
34676       .qmax(128)
34677       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
34678   }
34679 }
34680 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR,input_offset)34681 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, input_offset) {
34682   for (uint32_t channels = 2; channels < 16; channels += 3) {
34683     DWConvMicrokernelTester()
34684       .cr(1)
34685       .kr(3)
34686       .channels(channels)
34687       .input_offset(48)
34688       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
34689   }
34690 }
34691 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR,zero)34692 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, zero) {
34693   for (uint32_t mz = 0; mz < 3; mz++) {
34694     for (uint32_t channels = 2; channels < 16; channels += 3) {
34695       DWConvMicrokernelTester()
34696         .cr(1)
34697         .kr(3)
34698         .channels(channels)
34699         .input_offset(48)
34700         .zero_index(mz)
34701         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
34702     }
34703   }
34704 }
34705 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2,c_eq_1)34706 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, c_eq_1) {
34707   DWConvMicrokernelTester()
34708     .cr(1)
34709     .kr(3)
34710     .channels(1)
34711     .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34712 }
34713 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2,c_gt_1)34714 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, c_gt_1) {
34715   for (uint32_t channels = 2; channels < 10; channels++) {
34716     DWConvMicrokernelTester()
34717       .cr(1)
34718       .kr(3)
34719       .channels(channels)
34720       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34721   }
34722 }
34723 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2,c_gt_1_with_qmin)34724 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, c_gt_1_with_qmin) {
34725   for (uint32_t channels = 2; channels < 10; channels++) {
34726     DWConvMicrokernelTester()
34727       .cr(1)
34728       .kr(3)
34729       .channels(channels)
34730       .qmin(128)
34731       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34732   }
34733 }
34734 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2,c_gt_1_with_qmax)34735 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, c_gt_1_with_qmax) {
34736   for (uint32_t channels = 2; channels < 10; channels++) {
34737     DWConvMicrokernelTester()
34738       .cr(1)
34739       .kr(3)
34740       .channels(channels)
34741       .qmax(128)
34742       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34743   }
34744 }
34745 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2,multipixel)34746 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, multipixel) {
34747   for (size_t channels = 1; channels <= 5; channels += 1) {
34748     DWConvMicrokernelTester()
34749       .cr(1)
34750       .kr(3)
34751       .channels(channels)
34752       .width(3)
34753       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34754   }
34755 }
34756 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2,multipixel_with_step)34757 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, multipixel_with_step) {
34758   for (size_t channels = 1; channels <= 5; channels += 1) {
34759     for (size_t step = 2; step <= 3; step++) {
34760       DWConvMicrokernelTester()
34761         .cr(1)
34762         .kr(3)
34763         .channels(channels)
34764         .width(3)
34765         .step(step)
34766         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34767     }
34768   }
34769 }
34770 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2,multipixel_with_output_stride)34771 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, multipixel_with_output_stride) {
34772   for (size_t channels = 1; channels <= 5; channels += 1) {
34773     DWConvMicrokernelTester()
34774       .cr(1)
34775       .kr(3)
34776       .channels(1)
34777       .width(5)
34778       .output_stride(7)
34779       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34780   }
34781 }
34782 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2,multipixel_with_qmin)34783 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, multipixel_with_qmin) {
34784   for (size_t channels = 1; channels <= 5; channels += 1) {
34785     DWConvMicrokernelTester()
34786       .cr(1)
34787       .kr(3)
34788       .channels(channels)
34789       .width(3)
34790       .qmin(128)
34791       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34792   }
34793 }
34794 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2,multipixel_with_qmax)34795 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, multipixel_with_qmax) {
34796   for (size_t channels = 1; channels <= 5; channels += 1) {
34797     DWConvMicrokernelTester()
34798       .cr(1)
34799       .kr(3)
34800       .channels(channels)
34801       .width(3)
34802       .qmax(128)
34803       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34804   }
34805 }
34806 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2,input_offset)34807 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, input_offset) {
34808   for (uint32_t channels = 2; channels < 16; channels += 3) {
34809     DWConvMicrokernelTester()
34810       .cr(1)
34811       .kr(3)
34812       .channels(channels)
34813       .input_offset(48)
34814       .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34815   }
34816 }
34817 
TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2,zero)34818 TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, zero) {
34819   for (uint32_t mz = 0; mz < 3; mz++) {
34820     for (uint32_t channels = 2; channels < 16; channels += 3) {
34821       DWConvMicrokernelTester()
34822         .cr(1)
34823         .kr(3)
34824         .channels(channels)
34825         .input_offset(48)
34826         .zero_index(mz)
34827         .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34828     }
34829   }
34830 }
34831 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR,c_eq_1)34832 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_eq_1) {
34833   DWConvMicrokernelTester()
34834     .cr(1)
34835     .kr(4)
34836     .channels(1)
34837     .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
34838 }
34839 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR,c_gt_1)34840 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_gt_1) {
34841   for (uint32_t channels = 2; channels < 10; channels++) {
34842     DWConvMicrokernelTester()
34843       .cr(1)
34844       .kr(4)
34845       .channels(channels)
34846       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
34847   }
34848 }
34849 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR,c_gt_1_with_qmin)34850 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_gt_1_with_qmin) {
34851   for (uint32_t channels = 2; channels < 10; channels++) {
34852     DWConvMicrokernelTester()
34853       .cr(1)
34854       .kr(4)
34855       .channels(channels)
34856       .qmin(128)
34857       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
34858   }
34859 }
34860 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR,c_gt_1_with_qmax)34861 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_gt_1_with_qmax) {
34862   for (uint32_t channels = 2; channels < 10; channels++) {
34863     DWConvMicrokernelTester()
34864       .cr(1)
34865       .kr(4)
34866       .channels(channels)
34867       .qmax(128)
34868       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
34869   }
34870 }
34871 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR,multipixel)34872 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel) {
34873   for (size_t channels = 1; channels <= 5; channels += 1) {
34874     DWConvMicrokernelTester()
34875       .cr(1)
34876       .kr(4)
34877       .channels(channels)
34878       .width(3)
34879       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
34880   }
34881 }
34882 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR,multipixel_with_step)34883 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_step) {
34884   for (size_t channels = 1; channels <= 5; channels += 1) {
34885     for (size_t step = 2; step <= 4; step++) {
34886       DWConvMicrokernelTester()
34887         .cr(1)
34888         .kr(4)
34889         .channels(channels)
34890         .width(3)
34891         .step(step)
34892         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
34893     }
34894   }
34895 }
34896 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR,multipixel_with_output_stride)34897 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_output_stride) {
34898   for (size_t channels = 1; channels <= 5; channels += 1) {
34899     DWConvMicrokernelTester()
34900       .cr(1)
34901       .kr(4)
34902       .channels(1)
34903       .width(5)
34904       .output_stride(7)
34905       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
34906   }
34907 }
34908 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR,multipixel_with_qmin)34909 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_qmin) {
34910   for (size_t channels = 1; channels <= 5; channels += 1) {
34911     DWConvMicrokernelTester()
34912       .cr(1)
34913       .kr(4)
34914       .channels(channels)
34915       .width(3)
34916       .qmin(128)
34917       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
34918   }
34919 }
34920 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR,multipixel_with_qmax)34921 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_qmax) {
34922   for (size_t channels = 1; channels <= 5; channels += 1) {
34923     DWConvMicrokernelTester()
34924       .cr(1)
34925       .kr(4)
34926       .channels(channels)
34927       .width(3)
34928       .qmax(128)
34929       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
34930   }
34931 }
34932 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR,input_offset)34933 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, input_offset) {
34934   for (uint32_t channels = 2; channels < 16; channels += 3) {
34935     DWConvMicrokernelTester()
34936       .cr(1)
34937       .kr(4)
34938       .channels(channels)
34939       .input_offset(48)
34940       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
34941   }
34942 }
34943 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR,zero)34944 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, zero) {
34945   for (uint32_t mz = 0; mz < 4; mz++) {
34946     for (uint32_t channels = 2; channels < 16; channels += 3) {
34947       DWConvMicrokernelTester()
34948         .cr(1)
34949         .kr(4)
34950         .channels(channels)
34951         .input_offset(48)
34952         .zero_index(mz)
34953         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
34954     }
34955   }
34956 }
34957 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2,c_eq_1)34958 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_eq_1) {
34959   DWConvMicrokernelTester()
34960     .cr(1)
34961     .kr(4)
34962     .channels(1)
34963     .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34964 }
34965 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2,c_gt_1)34966 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_gt_1) {
34967   for (uint32_t channels = 2; channels < 10; channels++) {
34968     DWConvMicrokernelTester()
34969       .cr(1)
34970       .kr(4)
34971       .channels(channels)
34972       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34973   }
34974 }
34975 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2,c_gt_1_with_qmin)34976 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_gt_1_with_qmin) {
34977   for (uint32_t channels = 2; channels < 10; channels++) {
34978     DWConvMicrokernelTester()
34979       .cr(1)
34980       .kr(4)
34981       .channels(channels)
34982       .qmin(128)
34983       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34984   }
34985 }
34986 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2,c_gt_1_with_qmax)34987 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_gt_1_with_qmax) {
34988   for (uint32_t channels = 2; channels < 10; channels++) {
34989     DWConvMicrokernelTester()
34990       .cr(1)
34991       .kr(4)
34992       .channels(channels)
34993       .qmax(128)
34994       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
34995   }
34996 }
34997 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2,multipixel)34998 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel) {
34999   for (size_t channels = 1; channels <= 5; channels += 1) {
35000     DWConvMicrokernelTester()
35001       .cr(1)
35002       .kr(4)
35003       .channels(channels)
35004       .width(3)
35005       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35006   }
35007 }
35008 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2,multipixel_with_step)35009 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_step) {
35010   for (size_t channels = 1; channels <= 5; channels += 1) {
35011     for (size_t step = 2; step <= 4; step++) {
35012       DWConvMicrokernelTester()
35013         .cr(1)
35014         .kr(4)
35015         .channels(channels)
35016         .width(3)
35017         .step(step)
35018         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35019     }
35020   }
35021 }
35022 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2,multipixel_with_output_stride)35023 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_output_stride) {
35024   for (size_t channels = 1; channels <= 5; channels += 1) {
35025     DWConvMicrokernelTester()
35026       .cr(1)
35027       .kr(4)
35028       .channels(1)
35029       .width(5)
35030       .output_stride(7)
35031       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35032   }
35033 }
35034 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2,multipixel_with_qmin)35035 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_qmin) {
35036   for (size_t channels = 1; channels <= 5; channels += 1) {
35037     DWConvMicrokernelTester()
35038       .cr(1)
35039       .kr(4)
35040       .channels(channels)
35041       .width(3)
35042       .qmin(128)
35043       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35044   }
35045 }
35046 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2,multipixel_with_qmax)35047 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_qmax) {
35048   for (size_t channels = 1; channels <= 5; channels += 1) {
35049     DWConvMicrokernelTester()
35050       .cr(1)
35051       .kr(4)
35052       .channels(channels)
35053       .width(3)
35054       .qmax(128)
35055       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35056   }
35057 }
35058 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2,input_offset)35059 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, input_offset) {
35060   for (uint32_t channels = 2; channels < 16; channels += 3) {
35061     DWConvMicrokernelTester()
35062       .cr(1)
35063       .kr(4)
35064       .channels(channels)
35065       .input_offset(48)
35066       .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35067   }
35068 }
35069 
TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2,zero)35070 TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, zero) {
35071   for (uint32_t mz = 0; mz < 4; mz++) {
35072     for (uint32_t channels = 2; channels < 16; channels += 3) {
35073       DWConvMicrokernelTester()
35074         .cr(1)
35075         .kr(4)
35076         .channels(channels)
35077         .input_offset(48)
35078         .zero_index(mz)
35079         .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35080     }
35081   }
35082 }
35083 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR,c_eq_1)35084 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_eq_1) {
35085   DWConvMicrokernelTester()
35086     .cr(1)
35087     .kr(9)
35088     .channels(1)
35089     .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
35090 }
35091 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR,c_gt_1)35092 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_gt_1) {
35093   for (uint32_t channels = 2; channels < 10; channels++) {
35094     DWConvMicrokernelTester()
35095       .cr(1)
35096       .kr(9)
35097       .channels(channels)
35098       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
35099   }
35100 }
35101 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR,c_gt_1_with_qmin)35102 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_gt_1_with_qmin) {
35103   for (uint32_t channels = 2; channels < 10; channels++) {
35104     DWConvMicrokernelTester()
35105       .cr(1)
35106       .kr(9)
35107       .channels(channels)
35108       .qmin(128)
35109       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
35110   }
35111 }
35112 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR,c_gt_1_with_qmax)35113 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_gt_1_with_qmax) {
35114   for (uint32_t channels = 2; channels < 10; channels++) {
35115     DWConvMicrokernelTester()
35116       .cr(1)
35117       .kr(9)
35118       .channels(channels)
35119       .qmax(128)
35120       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
35121   }
35122 }
35123 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR,multipixel)35124 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel) {
35125   for (size_t channels = 1; channels <= 5; channels += 1) {
35126     DWConvMicrokernelTester()
35127       .cr(1)
35128       .kr(9)
35129       .channels(channels)
35130       .width(3)
35131       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
35132   }
35133 }
35134 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR,multipixel_with_step)35135 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_step) {
35136   for (size_t channels = 1; channels <= 5; channels += 1) {
35137     for (size_t step = 2; step <= 9; step++) {
35138       DWConvMicrokernelTester()
35139         .cr(1)
35140         .kr(9)
35141         .channels(channels)
35142         .width(3)
35143         .step(step)
35144         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
35145     }
35146   }
35147 }
35148 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR,multipixel_with_output_stride)35149 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_output_stride) {
35150   for (size_t channels = 1; channels <= 5; channels += 1) {
35151     DWConvMicrokernelTester()
35152       .cr(1)
35153       .kr(9)
35154       .channels(1)
35155       .width(5)
35156       .output_stride(7)
35157       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
35158   }
35159 }
35160 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR,multipixel_with_qmin)35161 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_qmin) {
35162   for (size_t channels = 1; channels <= 5; channels += 1) {
35163     DWConvMicrokernelTester()
35164       .cr(1)
35165       .kr(9)
35166       .channels(channels)
35167       .width(3)
35168       .qmin(128)
35169       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
35170   }
35171 }
35172 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR,multipixel_with_qmax)35173 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_qmax) {
35174   for (size_t channels = 1; channels <= 5; channels += 1) {
35175     DWConvMicrokernelTester()
35176       .cr(1)
35177       .kr(9)
35178       .channels(channels)
35179       .width(3)
35180       .qmax(128)
35181       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
35182   }
35183 }
35184 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR,input_offset)35185 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, input_offset) {
35186   for (uint32_t channels = 2; channels < 16; channels += 3) {
35187     DWConvMicrokernelTester()
35188       .cr(1)
35189       .kr(9)
35190       .channels(channels)
35191       .input_offset(48)
35192       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
35193   }
35194 }
35195 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR,zero)35196 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, zero) {
35197   for (uint32_t mz = 0; mz < 9; mz++) {
35198     for (uint32_t channels = 2; channels < 16; channels += 3) {
35199       DWConvMicrokernelTester()
35200         .cr(1)
35201         .kr(9)
35202         .channels(channels)
35203         .input_offset(48)
35204         .zero_index(mz)
35205         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
35206     }
35207   }
35208 }
35209 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2,c_eq_1)35210 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_eq_1) {
35211   DWConvMicrokernelTester()
35212     .cr(1)
35213     .kr(9)
35214     .channels(1)
35215     .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35216 }
35217 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2,c_gt_1)35218 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_gt_1) {
35219   for (uint32_t channels = 2; channels < 10; channels++) {
35220     DWConvMicrokernelTester()
35221       .cr(1)
35222       .kr(9)
35223       .channels(channels)
35224       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35225   }
35226 }
35227 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2,c_gt_1_with_qmin)35228 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_gt_1_with_qmin) {
35229   for (uint32_t channels = 2; channels < 10; channels++) {
35230     DWConvMicrokernelTester()
35231       .cr(1)
35232       .kr(9)
35233       .channels(channels)
35234       .qmin(128)
35235       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35236   }
35237 }
35238 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2,c_gt_1_with_qmax)35239 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_gt_1_with_qmax) {
35240   for (uint32_t channels = 2; channels < 10; channels++) {
35241     DWConvMicrokernelTester()
35242       .cr(1)
35243       .kr(9)
35244       .channels(channels)
35245       .qmax(128)
35246       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35247   }
35248 }
35249 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2,multipixel)35250 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel) {
35251   for (size_t channels = 1; channels <= 5; channels += 1) {
35252     DWConvMicrokernelTester()
35253       .cr(1)
35254       .kr(9)
35255       .channels(channels)
35256       .width(3)
35257       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35258   }
35259 }
35260 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2,multipixel_with_step)35261 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_step) {
35262   for (size_t channels = 1; channels <= 5; channels += 1) {
35263     for (size_t step = 2; step <= 9; step++) {
35264       DWConvMicrokernelTester()
35265         .cr(1)
35266         .kr(9)
35267         .channels(channels)
35268         .width(3)
35269         .step(step)
35270         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35271     }
35272   }
35273 }
35274 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2,multipixel_with_output_stride)35275 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_output_stride) {
35276   for (size_t channels = 1; channels <= 5; channels += 1) {
35277     DWConvMicrokernelTester()
35278       .cr(1)
35279       .kr(9)
35280       .channels(1)
35281       .width(5)
35282       .output_stride(7)
35283       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35284   }
35285 }
35286 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2,multipixel_with_qmin)35287 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_qmin) {
35288   for (size_t channels = 1; channels <= 5; channels += 1) {
35289     DWConvMicrokernelTester()
35290       .cr(1)
35291       .kr(9)
35292       .channels(channels)
35293       .width(3)
35294       .qmin(128)
35295       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35296   }
35297 }
35298 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2,multipixel_with_qmax)35299 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_qmax) {
35300   for (size_t channels = 1; channels <= 5; channels += 1) {
35301     DWConvMicrokernelTester()
35302       .cr(1)
35303       .kr(9)
35304       .channels(channels)
35305       .width(3)
35306       .qmax(128)
35307       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35308   }
35309 }
35310 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2,input_offset)35311 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, input_offset) {
35312   for (uint32_t channels = 2; channels < 16; channels += 3) {
35313     DWConvMicrokernelTester()
35314       .cr(1)
35315       .kr(9)
35316       .channels(channels)
35317       .input_offset(48)
35318       .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35319   }
35320 }
35321 
TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2,zero)35322 TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, zero) {
35323   for (uint32_t mz = 0; mz < 9; mz++) {
35324     for (uint32_t channels = 2; channels < 16; channels += 3) {
35325       DWConvMicrokernelTester()
35326         .cr(1)
35327         .kr(9)
35328         .channels(channels)
35329         .input_offset(48)
35330         .zero_index(mz)
35331         .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35332     }
35333   }
35334 }
35335 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR,c_eq_1)35336 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_eq_1) {
35337   DWConvMicrokernelTester()
35338     .cr(1)
35339     .kr(25)
35340     .channels(1)
35341     .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
35342 }
35343 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR,c_gt_1)35344 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_gt_1) {
35345   for (uint32_t channels = 2; channels < 10; channels++) {
35346     DWConvMicrokernelTester()
35347       .cr(1)
35348       .kr(25)
35349       .channels(channels)
35350       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
35351   }
35352 }
35353 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR,c_gt_1_with_qmin)35354 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_gt_1_with_qmin) {
35355   for (uint32_t channels = 2; channels < 10; channels++) {
35356     DWConvMicrokernelTester()
35357       .cr(1)
35358       .kr(25)
35359       .channels(channels)
35360       .qmin(128)
35361       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
35362   }
35363 }
35364 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR,c_gt_1_with_qmax)35365 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_gt_1_with_qmax) {
35366   for (uint32_t channels = 2; channels < 10; channels++) {
35367     DWConvMicrokernelTester()
35368       .cr(1)
35369       .kr(25)
35370       .channels(channels)
35371       .qmax(128)
35372       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
35373   }
35374 }
35375 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR,multipixel)35376 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel) {
35377   for (size_t channels = 1; channels <= 5; channels += 1) {
35378     DWConvMicrokernelTester()
35379       .cr(1)
35380       .kr(25)
35381       .channels(channels)
35382       .width(3)
35383       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
35384   }
35385 }
35386 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR,multipixel_with_step)35387 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_step) {
35388   for (size_t channels = 1; channels <= 5; channels += 1) {
35389     for (size_t step = 2; step <= 25; step++) {
35390       DWConvMicrokernelTester()
35391         .cr(1)
35392         .kr(25)
35393         .channels(channels)
35394         .width(3)
35395         .step(step)
35396         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
35397     }
35398   }
35399 }
35400 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR,multipixel_with_output_stride)35401 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_output_stride) {
35402   for (size_t channels = 1; channels <= 5; channels += 1) {
35403     DWConvMicrokernelTester()
35404       .cr(1)
35405       .kr(25)
35406       .channels(1)
35407       .width(5)
35408       .output_stride(7)
35409       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
35410   }
35411 }
35412 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR,multipixel_with_qmin)35413 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_qmin) {
35414   for (size_t channels = 1; channels <= 5; channels += 1) {
35415     DWConvMicrokernelTester()
35416       .cr(1)
35417       .kr(25)
35418       .channels(channels)
35419       .width(3)
35420       .qmin(128)
35421       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
35422   }
35423 }
35424 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR,multipixel_with_qmax)35425 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_qmax) {
35426   for (size_t channels = 1; channels <= 5; channels += 1) {
35427     DWConvMicrokernelTester()
35428       .cr(1)
35429       .kr(25)
35430       .channels(channels)
35431       .width(3)
35432       .qmax(128)
35433       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
35434   }
35435 }
35436 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR,input_offset)35437 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, input_offset) {
35438   for (uint32_t channels = 2; channels < 16; channels += 3) {
35439     DWConvMicrokernelTester()
35440       .cr(1)
35441       .kr(25)
35442       .channels(channels)
35443       .input_offset(48)
35444       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
35445   }
35446 }
35447 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR,zero)35448 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, zero) {
35449   for (uint32_t mz = 0; mz < 25; mz++) {
35450     for (uint32_t channels = 2; channels < 16; channels += 3) {
35451       DWConvMicrokernelTester()
35452         .cr(1)
35453         .kr(25)
35454         .channels(channels)
35455         .input_offset(48)
35456         .zero_index(mz)
35457         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
35458     }
35459   }
35460 }
35461 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2,c_eq_1)35462 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_eq_1) {
35463   DWConvMicrokernelTester()
35464     .cr(1)
35465     .kr(25)
35466     .channels(1)
35467     .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35468 }
35469 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2,c_gt_1)35470 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_gt_1) {
35471   for (uint32_t channels = 2; channels < 10; channels++) {
35472     DWConvMicrokernelTester()
35473       .cr(1)
35474       .kr(25)
35475       .channels(channels)
35476       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35477   }
35478 }
35479 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2,c_gt_1_with_qmin)35480 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_gt_1_with_qmin) {
35481   for (uint32_t channels = 2; channels < 10; channels++) {
35482     DWConvMicrokernelTester()
35483       .cr(1)
35484       .kr(25)
35485       .channels(channels)
35486       .qmin(128)
35487       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35488   }
35489 }
35490 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2,c_gt_1_with_qmax)35491 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_gt_1_with_qmax) {
35492   for (uint32_t channels = 2; channels < 10; channels++) {
35493     DWConvMicrokernelTester()
35494       .cr(1)
35495       .kr(25)
35496       .channels(channels)
35497       .qmax(128)
35498       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35499   }
35500 }
35501 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2,multipixel)35502 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel) {
35503   for (size_t channels = 1; channels <= 5; channels += 1) {
35504     DWConvMicrokernelTester()
35505       .cr(1)
35506       .kr(25)
35507       .channels(channels)
35508       .width(3)
35509       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35510   }
35511 }
35512 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2,multipixel_with_step)35513 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_step) {
35514   for (size_t channels = 1; channels <= 5; channels += 1) {
35515     for (size_t step = 2; step <= 25; step++) {
35516       DWConvMicrokernelTester()
35517         .cr(1)
35518         .kr(25)
35519         .channels(channels)
35520         .width(3)
35521         .step(step)
35522         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35523     }
35524   }
35525 }
35526 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2,multipixel_with_output_stride)35527 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_output_stride) {
35528   for (size_t channels = 1; channels <= 5; channels += 1) {
35529     DWConvMicrokernelTester()
35530       .cr(1)
35531       .kr(25)
35532       .channels(1)
35533       .width(5)
35534       .output_stride(7)
35535       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35536   }
35537 }
35538 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2,multipixel_with_qmin)35539 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_qmin) {
35540   for (size_t channels = 1; channels <= 5; channels += 1) {
35541     DWConvMicrokernelTester()
35542       .cr(1)
35543       .kr(25)
35544       .channels(channels)
35545       .width(3)
35546       .qmin(128)
35547       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35548   }
35549 }
35550 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2,multipixel_with_qmax)35551 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_qmax) {
35552   for (size_t channels = 1; channels <= 5; channels += 1) {
35553     DWConvMicrokernelTester()
35554       .cr(1)
35555       .kr(25)
35556       .channels(channels)
35557       .width(3)
35558       .qmax(128)
35559       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35560   }
35561 }
35562 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2,input_offset)35563 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, input_offset) {
35564   for (uint32_t channels = 2; channels < 16; channels += 3) {
35565     DWConvMicrokernelTester()
35566       .cr(1)
35567       .kr(25)
35568       .channels(channels)
35569       .input_offset(48)
35570       .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35571   }
35572 }
35573 
TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2,zero)35574 TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, zero) {
35575   for (uint32_t mz = 0; mz < 25; mz++) {
35576     for (uint32_t channels = 2; channels < 16; channels += 3) {
35577       DWConvMicrokernelTester()
35578         .cr(1)
35579         .kr(25)
35580         .channels(channels)
35581         .input_offset(48)
35582         .zero_index(mz)
35583         .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35584     }
35585   }
35586 }
35587 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,c_eq_2)35588 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_eq_2) {
35589   DWConvMicrokernelTester()
35590     .cr(2)
35591     .kr(3)
35592     .channels(2)
35593     .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35594 }
35595 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,c_div_2)35596 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_div_2) {
35597   for (uint32_t channels = 4; channels < 32; channels += 6) {
35598     DWConvMicrokernelTester()
35599       .cr(2)
35600       .kr(3)
35601       .channels(channels)
35602       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35603   }
35604 }
35605 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,c_div_2_with_qmin)35606 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_div_2_with_qmin) {
35607   for (uint32_t channels = 4; channels < 32; channels += 6) {
35608     DWConvMicrokernelTester()
35609       .cr(2)
35610       .kr(3)
35611       .channels(channels)
35612       .qmin(128)
35613       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35614   }
35615 }
35616 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,c_div_2_with_qmax)35617 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_div_2_with_qmax) {
35618   for (uint32_t channels = 4; channels < 32; channels += 6) {
35619     DWConvMicrokernelTester()
35620       .cr(2)
35621       .kr(3)
35622       .channels(channels)
35623       .qmax(128)
35624       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35625   }
35626 }
35627 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,c_lt_2)35628 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_lt_2) {
35629   for (uint32_t channels = 1; channels < 2; channels++) {
35630     DWConvMicrokernelTester()
35631       .cr(2)
35632       .kr(3)
35633       .channels(channels)
35634       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35635   }
35636 }
35637 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,c_gt_2)35638 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_gt_2) {
35639   for (uint32_t channels = 3; channels < 4; channels++) {
35640     DWConvMicrokernelTester()
35641       .cr(2)
35642       .kr(3)
35643       .channels(channels)
35644       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35645   }
35646 }
35647 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,c_gt_2_with_qmin)35648 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_gt_2_with_qmin) {
35649   for (uint32_t channels = 3; channels < 4; channels++) {
35650     DWConvMicrokernelTester()
35651       .cr(2)
35652       .kr(3)
35653       .channels(channels)
35654       .qmin(128)
35655       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35656   }
35657 }
35658 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,c_gt_2_with_qmax)35659 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_gt_2_with_qmax) {
35660   for (uint32_t channels = 3; channels < 4; channels++) {
35661     DWConvMicrokernelTester()
35662       .cr(2)
35663       .kr(3)
35664       .channels(channels)
35665       .qmax(128)
35666       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35667   }
35668 }
35669 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,multipixel)35670 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, multipixel) {
35671   for (size_t channels = 1; channels <= 10; channels += 1) {
35672     DWConvMicrokernelTester()
35673       .cr(2)
35674       .kr(3)
35675       .channels(channels)
35676       .width(3)
35677       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35678   }
35679 }
35680 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,multipixel_with_step)35681 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, multipixel_with_step) {
35682   for (size_t channels = 1; channels <= 10; channels += 1) {
35683     for (size_t step = 2; step <= 3; step++) {
35684       DWConvMicrokernelTester()
35685         .cr(2)
35686         .kr(3)
35687         .channels(channels)
35688         .width(3)
35689         .step(step)
35690         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35691     }
35692   }
35693 }
35694 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,multipixel_with_output_stride)35695 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, multipixel_with_output_stride) {
35696   for (size_t channels = 1; channels <= 10; channels += 1) {
35697     DWConvMicrokernelTester()
35698       .cr(2)
35699       .kr(3)
35700       .channels(2)
35701       .width(5)
35702       .output_stride(13)
35703       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35704   }
35705 }
35706 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,multipixel_with_qmin)35707 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, multipixel_with_qmin) {
35708   for (size_t channels = 1; channels <= 10; channels += 1) {
35709     DWConvMicrokernelTester()
35710       .cr(2)
35711       .kr(3)
35712       .channels(channels)
35713       .width(3)
35714       .qmin(128)
35715       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35716   }
35717 }
35718 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,multipixel_with_qmax)35719 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, multipixel_with_qmax) {
35720   for (size_t channels = 1; channels <= 10; channels += 1) {
35721     DWConvMicrokernelTester()
35722       .cr(2)
35723       .kr(3)
35724       .channels(channels)
35725       .width(3)
35726       .qmax(128)
35727       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35728   }
35729 }
35730 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,input_offset)35731 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, input_offset) {
35732   for (uint32_t channels = 4; channels < 32; channels += 6) {
35733     DWConvMicrokernelTester()
35734       .cr(2)
35735       .kr(3)
35736       .channels(channels)
35737       .input_offset(80)
35738       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35739   }
35740 }
35741 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR,zero)35742 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, zero) {
35743   for (uint32_t mz = 0; mz < 3; mz++) {
35744     for (uint32_t channels = 4; channels < 32; channels += 6) {
35745       DWConvMicrokernelTester()
35746         .cr(2)
35747         .kr(3)
35748         .channels(channels)
35749         .input_offset(80)
35750         .zero_index(mz)
35751         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
35752     }
35753   }
35754 }
35755 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,c_eq_2)35756 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_eq_2) {
35757   DWConvMicrokernelTester()
35758     .cr(2)
35759     .kr(3)
35760     .channels(2)
35761     .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35762 }
35763 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,c_div_2)35764 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_div_2) {
35765   for (uint32_t channels = 4; channels < 32; channels += 6) {
35766     DWConvMicrokernelTester()
35767       .cr(2)
35768       .kr(3)
35769       .channels(channels)
35770       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35771   }
35772 }
35773 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,c_div_2_with_qmin)35774 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_div_2_with_qmin) {
35775   for (uint32_t channels = 4; channels < 32; channels += 6) {
35776     DWConvMicrokernelTester()
35777       .cr(2)
35778       .kr(3)
35779       .channels(channels)
35780       .qmin(128)
35781       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35782   }
35783 }
35784 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,c_div_2_with_qmax)35785 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_div_2_with_qmax) {
35786   for (uint32_t channels = 4; channels < 32; channels += 6) {
35787     DWConvMicrokernelTester()
35788       .cr(2)
35789       .kr(3)
35790       .channels(channels)
35791       .qmax(128)
35792       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35793   }
35794 }
35795 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,c_lt_2)35796 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_lt_2) {
35797   for (uint32_t channels = 1; channels < 2; channels++) {
35798     DWConvMicrokernelTester()
35799       .cr(2)
35800       .kr(3)
35801       .channels(channels)
35802       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35803   }
35804 }
35805 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,c_gt_2)35806 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_gt_2) {
35807   for (uint32_t channels = 3; channels < 4; channels++) {
35808     DWConvMicrokernelTester()
35809       .cr(2)
35810       .kr(3)
35811       .channels(channels)
35812       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35813   }
35814 }
35815 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,c_gt_2_with_qmin)35816 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_gt_2_with_qmin) {
35817   for (uint32_t channels = 3; channels < 4; channels++) {
35818     DWConvMicrokernelTester()
35819       .cr(2)
35820       .kr(3)
35821       .channels(channels)
35822       .qmin(128)
35823       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35824   }
35825 }
35826 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,c_gt_2_with_qmax)35827 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_gt_2_with_qmax) {
35828   for (uint32_t channels = 3; channels < 4; channels++) {
35829     DWConvMicrokernelTester()
35830       .cr(2)
35831       .kr(3)
35832       .channels(channels)
35833       .qmax(128)
35834       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35835   }
35836 }
35837 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,multipixel)35838 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, multipixel) {
35839   for (size_t channels = 1; channels <= 10; channels += 1) {
35840     DWConvMicrokernelTester()
35841       .cr(2)
35842       .kr(3)
35843       .channels(channels)
35844       .width(3)
35845       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35846   }
35847 }
35848 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,multipixel_with_step)35849 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, multipixel_with_step) {
35850   for (size_t channels = 1; channels <= 10; channels += 1) {
35851     for (size_t step = 2; step <= 3; step++) {
35852       DWConvMicrokernelTester()
35853         .cr(2)
35854         .kr(3)
35855         .channels(channels)
35856         .width(3)
35857         .step(step)
35858         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35859     }
35860   }
35861 }
35862 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,multipixel_with_output_stride)35863 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, multipixel_with_output_stride) {
35864   for (size_t channels = 1; channels <= 10; channels += 1) {
35865     DWConvMicrokernelTester()
35866       .cr(2)
35867       .kr(3)
35868       .channels(2)
35869       .width(5)
35870       .output_stride(13)
35871       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35872   }
35873 }
35874 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,multipixel_with_qmin)35875 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, multipixel_with_qmin) {
35876   for (size_t channels = 1; channels <= 10; channels += 1) {
35877     DWConvMicrokernelTester()
35878       .cr(2)
35879       .kr(3)
35880       .channels(channels)
35881       .width(3)
35882       .qmin(128)
35883       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35884   }
35885 }
35886 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,multipixel_with_qmax)35887 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, multipixel_with_qmax) {
35888   for (size_t channels = 1; channels <= 10; channels += 1) {
35889     DWConvMicrokernelTester()
35890       .cr(2)
35891       .kr(3)
35892       .channels(channels)
35893       .width(3)
35894       .qmax(128)
35895       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35896   }
35897 }
35898 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,input_offset)35899 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, input_offset) {
35900   for (uint32_t channels = 4; channels < 32; channels += 6) {
35901     DWConvMicrokernelTester()
35902       .cr(2)
35903       .kr(3)
35904       .channels(channels)
35905       .input_offset(80)
35906       .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35907   }
35908 }
35909 
TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2,zero)35910 TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, zero) {
35911   for (uint32_t mz = 0; mz < 3; mz++) {
35912     for (uint32_t channels = 4; channels < 32; channels += 6) {
35913       DWConvMicrokernelTester()
35914         .cr(2)
35915         .kr(3)
35916         .channels(channels)
35917         .input_offset(80)
35918         .zero_index(mz)
35919         .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
35920     }
35921   }
35922 }
35923 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,c_eq_2)35924 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_eq_2) {
35925   DWConvMicrokernelTester()
35926     .cr(2)
35927     .kr(4)
35928     .channels(2)
35929     .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
35930 }
35931 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,c_div_2)35932 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_div_2) {
35933   for (uint32_t channels = 4; channels < 32; channels += 6) {
35934     DWConvMicrokernelTester()
35935       .cr(2)
35936       .kr(4)
35937       .channels(channels)
35938       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
35939   }
35940 }
35941 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,c_div_2_with_qmin)35942 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_div_2_with_qmin) {
35943   for (uint32_t channels = 4; channels < 32; channels += 6) {
35944     DWConvMicrokernelTester()
35945       .cr(2)
35946       .kr(4)
35947       .channels(channels)
35948       .qmin(128)
35949       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
35950   }
35951 }
35952 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,c_div_2_with_qmax)35953 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_div_2_with_qmax) {
35954   for (uint32_t channels = 4; channels < 32; channels += 6) {
35955     DWConvMicrokernelTester()
35956       .cr(2)
35957       .kr(4)
35958       .channels(channels)
35959       .qmax(128)
35960       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
35961   }
35962 }
35963 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,c_lt_2)35964 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_lt_2) {
35965   for (uint32_t channels = 1; channels < 2; channels++) {
35966     DWConvMicrokernelTester()
35967       .cr(2)
35968       .kr(4)
35969       .channels(channels)
35970       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
35971   }
35972 }
35973 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,c_gt_2)35974 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_gt_2) {
35975   for (uint32_t channels = 3; channels < 4; channels++) {
35976     DWConvMicrokernelTester()
35977       .cr(2)
35978       .kr(4)
35979       .channels(channels)
35980       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
35981   }
35982 }
35983 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,c_gt_2_with_qmin)35984 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_gt_2_with_qmin) {
35985   for (uint32_t channels = 3; channels < 4; channels++) {
35986     DWConvMicrokernelTester()
35987       .cr(2)
35988       .kr(4)
35989       .channels(channels)
35990       .qmin(128)
35991       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
35992   }
35993 }
35994 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,c_gt_2_with_qmax)35995 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_gt_2_with_qmax) {
35996   for (uint32_t channels = 3; channels < 4; channels++) {
35997     DWConvMicrokernelTester()
35998       .cr(2)
35999       .kr(4)
36000       .channels(channels)
36001       .qmax(128)
36002       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
36003   }
36004 }
36005 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,multipixel)36006 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel) {
36007   for (size_t channels = 1; channels <= 10; channels += 1) {
36008     DWConvMicrokernelTester()
36009       .cr(2)
36010       .kr(4)
36011       .channels(channels)
36012       .width(3)
36013       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
36014   }
36015 }
36016 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,multipixel_with_step)36017 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_step) {
36018   for (size_t channels = 1; channels <= 10; channels += 1) {
36019     for (size_t step = 2; step <= 4; step++) {
36020       DWConvMicrokernelTester()
36021         .cr(2)
36022         .kr(4)
36023         .channels(channels)
36024         .width(3)
36025         .step(step)
36026         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
36027     }
36028   }
36029 }
36030 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,multipixel_with_output_stride)36031 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_output_stride) {
36032   for (size_t channels = 1; channels <= 10; channels += 1) {
36033     DWConvMicrokernelTester()
36034       .cr(2)
36035       .kr(4)
36036       .channels(2)
36037       .width(5)
36038       .output_stride(13)
36039       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
36040   }
36041 }
36042 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,multipixel_with_qmin)36043 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_qmin) {
36044   for (size_t channels = 1; channels <= 10; channels += 1) {
36045     DWConvMicrokernelTester()
36046       .cr(2)
36047       .kr(4)
36048       .channels(channels)
36049       .width(3)
36050       .qmin(128)
36051       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
36052   }
36053 }
36054 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,multipixel_with_qmax)36055 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_qmax) {
36056   for (size_t channels = 1; channels <= 10; channels += 1) {
36057     DWConvMicrokernelTester()
36058       .cr(2)
36059       .kr(4)
36060       .channels(channels)
36061       .width(3)
36062       .qmax(128)
36063       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
36064   }
36065 }
36066 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,input_offset)36067 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, input_offset) {
36068   for (uint32_t channels = 4; channels < 32; channels += 6) {
36069     DWConvMicrokernelTester()
36070       .cr(2)
36071       .kr(4)
36072       .channels(channels)
36073       .input_offset(80)
36074       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
36075   }
36076 }
36077 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR,zero)36078 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, zero) {
36079   for (uint32_t mz = 0; mz < 4; mz++) {
36080     for (uint32_t channels = 4; channels < 32; channels += 6) {
36081       DWConvMicrokernelTester()
36082         .cr(2)
36083         .kr(4)
36084         .channels(channels)
36085         .input_offset(80)
36086         .zero_index(mz)
36087         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
36088     }
36089   }
36090 }
36091 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,c_eq_2)36092 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_eq_2) {
36093   DWConvMicrokernelTester()
36094     .cr(2)
36095     .kr(4)
36096     .channels(2)
36097     .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36098 }
36099 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,c_div_2)36100 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_div_2) {
36101   for (uint32_t channels = 4; channels < 32; channels += 6) {
36102     DWConvMicrokernelTester()
36103       .cr(2)
36104       .kr(4)
36105       .channels(channels)
36106       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36107   }
36108 }
36109 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,c_div_2_with_qmin)36110 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_div_2_with_qmin) {
36111   for (uint32_t channels = 4; channels < 32; channels += 6) {
36112     DWConvMicrokernelTester()
36113       .cr(2)
36114       .kr(4)
36115       .channels(channels)
36116       .qmin(128)
36117       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36118   }
36119 }
36120 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,c_div_2_with_qmax)36121 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_div_2_with_qmax) {
36122   for (uint32_t channels = 4; channels < 32; channels += 6) {
36123     DWConvMicrokernelTester()
36124       .cr(2)
36125       .kr(4)
36126       .channels(channels)
36127       .qmax(128)
36128       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36129   }
36130 }
36131 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,c_lt_2)36132 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_lt_2) {
36133   for (uint32_t channels = 1; channels < 2; channels++) {
36134     DWConvMicrokernelTester()
36135       .cr(2)
36136       .kr(4)
36137       .channels(channels)
36138       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36139   }
36140 }
36141 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,c_gt_2)36142 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_gt_2) {
36143   for (uint32_t channels = 3; channels < 4; channels++) {
36144     DWConvMicrokernelTester()
36145       .cr(2)
36146       .kr(4)
36147       .channels(channels)
36148       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36149   }
36150 }
36151 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,c_gt_2_with_qmin)36152 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_gt_2_with_qmin) {
36153   for (uint32_t channels = 3; channels < 4; channels++) {
36154     DWConvMicrokernelTester()
36155       .cr(2)
36156       .kr(4)
36157       .channels(channels)
36158       .qmin(128)
36159       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36160   }
36161 }
36162 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,c_gt_2_with_qmax)36163 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_gt_2_with_qmax) {
36164   for (uint32_t channels = 3; channels < 4; channels++) {
36165     DWConvMicrokernelTester()
36166       .cr(2)
36167       .kr(4)
36168       .channels(channels)
36169       .qmax(128)
36170       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36171   }
36172 }
36173 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,multipixel)36174 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel) {
36175   for (size_t channels = 1; channels <= 10; channels += 1) {
36176     DWConvMicrokernelTester()
36177       .cr(2)
36178       .kr(4)
36179       .channels(channels)
36180       .width(3)
36181       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36182   }
36183 }
36184 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,multipixel_with_step)36185 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_step) {
36186   for (size_t channels = 1; channels <= 10; channels += 1) {
36187     for (size_t step = 2; step <= 4; step++) {
36188       DWConvMicrokernelTester()
36189         .cr(2)
36190         .kr(4)
36191         .channels(channels)
36192         .width(3)
36193         .step(step)
36194         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36195     }
36196   }
36197 }
36198 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,multipixel_with_output_stride)36199 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_output_stride) {
36200   for (size_t channels = 1; channels <= 10; channels += 1) {
36201     DWConvMicrokernelTester()
36202       .cr(2)
36203       .kr(4)
36204       .channels(2)
36205       .width(5)
36206       .output_stride(13)
36207       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36208   }
36209 }
36210 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,multipixel_with_qmin)36211 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_qmin) {
36212   for (size_t channels = 1; channels <= 10; channels += 1) {
36213     DWConvMicrokernelTester()
36214       .cr(2)
36215       .kr(4)
36216       .channels(channels)
36217       .width(3)
36218       .qmin(128)
36219       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36220   }
36221 }
36222 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,multipixel_with_qmax)36223 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_qmax) {
36224   for (size_t channels = 1; channels <= 10; channels += 1) {
36225     DWConvMicrokernelTester()
36226       .cr(2)
36227       .kr(4)
36228       .channels(channels)
36229       .width(3)
36230       .qmax(128)
36231       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36232   }
36233 }
36234 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,input_offset)36235 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, input_offset) {
36236   for (uint32_t channels = 4; channels < 32; channels += 6) {
36237     DWConvMicrokernelTester()
36238       .cr(2)
36239       .kr(4)
36240       .channels(channels)
36241       .input_offset(80)
36242       .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36243   }
36244 }
36245 
TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2,zero)36246 TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, zero) {
36247   for (uint32_t mz = 0; mz < 4; mz++) {
36248     for (uint32_t channels = 4; channels < 32; channels += 6) {
36249       DWConvMicrokernelTester()
36250         .cr(2)
36251         .kr(4)
36252         .channels(channels)
36253         .input_offset(80)
36254         .zero_index(mz)
36255         .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36256     }
36257   }
36258 }
36259 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,c_eq_2)36260 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_eq_2) {
36261   DWConvMicrokernelTester()
36262     .cr(2)
36263     .kr(9)
36264     .channels(2)
36265     .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36266 }
36267 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,c_div_2)36268 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_div_2) {
36269   for (uint32_t channels = 4; channels < 32; channels += 6) {
36270     DWConvMicrokernelTester()
36271       .cr(2)
36272       .kr(9)
36273       .channels(channels)
36274       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36275   }
36276 }
36277 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,c_div_2_with_qmin)36278 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_div_2_with_qmin) {
36279   for (uint32_t channels = 4; channels < 32; channels += 6) {
36280     DWConvMicrokernelTester()
36281       .cr(2)
36282       .kr(9)
36283       .channels(channels)
36284       .qmin(128)
36285       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36286   }
36287 }
36288 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,c_div_2_with_qmax)36289 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_div_2_with_qmax) {
36290   for (uint32_t channels = 4; channels < 32; channels += 6) {
36291     DWConvMicrokernelTester()
36292       .cr(2)
36293       .kr(9)
36294       .channels(channels)
36295       .qmax(128)
36296       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36297   }
36298 }
36299 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,c_lt_2)36300 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_lt_2) {
36301   for (uint32_t channels = 1; channels < 2; channels++) {
36302     DWConvMicrokernelTester()
36303       .cr(2)
36304       .kr(9)
36305       .channels(channels)
36306       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36307   }
36308 }
36309 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,c_gt_2)36310 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_gt_2) {
36311   for (uint32_t channels = 3; channels < 4; channels++) {
36312     DWConvMicrokernelTester()
36313       .cr(2)
36314       .kr(9)
36315       .channels(channels)
36316       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36317   }
36318 }
36319 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,c_gt_2_with_qmin)36320 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_gt_2_with_qmin) {
36321   for (uint32_t channels = 3; channels < 4; channels++) {
36322     DWConvMicrokernelTester()
36323       .cr(2)
36324       .kr(9)
36325       .channels(channels)
36326       .qmin(128)
36327       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36328   }
36329 }
36330 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,c_gt_2_with_qmax)36331 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_gt_2_with_qmax) {
36332   for (uint32_t channels = 3; channels < 4; channels++) {
36333     DWConvMicrokernelTester()
36334       .cr(2)
36335       .kr(9)
36336       .channels(channels)
36337       .qmax(128)
36338       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36339   }
36340 }
36341 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,multipixel)36342 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel) {
36343   for (size_t channels = 1; channels <= 10; channels += 1) {
36344     DWConvMicrokernelTester()
36345       .cr(2)
36346       .kr(9)
36347       .channels(channels)
36348       .width(3)
36349       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36350   }
36351 }
36352 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,multipixel_with_step)36353 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_step) {
36354   for (size_t channels = 1; channels <= 10; channels += 1) {
36355     for (size_t step = 2; step <= 9; step++) {
36356       DWConvMicrokernelTester()
36357         .cr(2)
36358         .kr(9)
36359         .channels(channels)
36360         .width(3)
36361         .step(step)
36362         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36363     }
36364   }
36365 }
36366 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,multipixel_with_output_stride)36367 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_output_stride) {
36368   for (size_t channels = 1; channels <= 10; channels += 1) {
36369     DWConvMicrokernelTester()
36370       .cr(2)
36371       .kr(9)
36372       .channels(2)
36373       .width(5)
36374       .output_stride(13)
36375       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36376   }
36377 }
36378 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,multipixel_with_qmin)36379 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_qmin) {
36380   for (size_t channels = 1; channels <= 10; channels += 1) {
36381     DWConvMicrokernelTester()
36382       .cr(2)
36383       .kr(9)
36384       .channels(channels)
36385       .width(3)
36386       .qmin(128)
36387       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36388   }
36389 }
36390 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,multipixel_with_qmax)36391 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_qmax) {
36392   for (size_t channels = 1; channels <= 10; channels += 1) {
36393     DWConvMicrokernelTester()
36394       .cr(2)
36395       .kr(9)
36396       .channels(channels)
36397       .width(3)
36398       .qmax(128)
36399       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36400   }
36401 }
36402 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,input_offset)36403 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, input_offset) {
36404   for (uint32_t channels = 4; channels < 32; channels += 6) {
36405     DWConvMicrokernelTester()
36406       .cr(2)
36407       .kr(9)
36408       .channels(channels)
36409       .input_offset(80)
36410       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36411   }
36412 }
36413 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR,zero)36414 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, zero) {
36415   for (uint32_t mz = 0; mz < 9; mz++) {
36416     for (uint32_t channels = 4; channels < 32; channels += 6) {
36417       DWConvMicrokernelTester()
36418         .cr(2)
36419         .kr(9)
36420         .channels(channels)
36421         .input_offset(80)
36422         .zero_index(mz)
36423         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
36424     }
36425   }
36426 }
36427 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,c_eq_2)36428 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_eq_2) {
36429   DWConvMicrokernelTester()
36430     .cr(2)
36431     .kr(9)
36432     .channels(2)
36433     .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36434 }
36435 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,c_div_2)36436 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_div_2) {
36437   for (uint32_t channels = 4; channels < 32; channels += 6) {
36438     DWConvMicrokernelTester()
36439       .cr(2)
36440       .kr(9)
36441       .channels(channels)
36442       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36443   }
36444 }
36445 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,c_div_2_with_qmin)36446 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_div_2_with_qmin) {
36447   for (uint32_t channels = 4; channels < 32; channels += 6) {
36448     DWConvMicrokernelTester()
36449       .cr(2)
36450       .kr(9)
36451       .channels(channels)
36452       .qmin(128)
36453       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36454   }
36455 }
36456 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,c_div_2_with_qmax)36457 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_div_2_with_qmax) {
36458   for (uint32_t channels = 4; channels < 32; channels += 6) {
36459     DWConvMicrokernelTester()
36460       .cr(2)
36461       .kr(9)
36462       .channels(channels)
36463       .qmax(128)
36464       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36465   }
36466 }
36467 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,c_lt_2)36468 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_lt_2) {
36469   for (uint32_t channels = 1; channels < 2; channels++) {
36470     DWConvMicrokernelTester()
36471       .cr(2)
36472       .kr(9)
36473       .channels(channels)
36474       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36475   }
36476 }
36477 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,c_gt_2)36478 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_gt_2) {
36479   for (uint32_t channels = 3; channels < 4; channels++) {
36480     DWConvMicrokernelTester()
36481       .cr(2)
36482       .kr(9)
36483       .channels(channels)
36484       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36485   }
36486 }
36487 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,c_gt_2_with_qmin)36488 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_gt_2_with_qmin) {
36489   for (uint32_t channels = 3; channels < 4; channels++) {
36490     DWConvMicrokernelTester()
36491       .cr(2)
36492       .kr(9)
36493       .channels(channels)
36494       .qmin(128)
36495       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36496   }
36497 }
36498 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,c_gt_2_with_qmax)36499 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_gt_2_with_qmax) {
36500   for (uint32_t channels = 3; channels < 4; channels++) {
36501     DWConvMicrokernelTester()
36502       .cr(2)
36503       .kr(9)
36504       .channels(channels)
36505       .qmax(128)
36506       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36507   }
36508 }
36509 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,multipixel)36510 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel) {
36511   for (size_t channels = 1; channels <= 10; channels += 1) {
36512     DWConvMicrokernelTester()
36513       .cr(2)
36514       .kr(9)
36515       .channels(channels)
36516       .width(3)
36517       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36518   }
36519 }
36520 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,multipixel_with_step)36521 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_step) {
36522   for (size_t channels = 1; channels <= 10; channels += 1) {
36523     for (size_t step = 2; step <= 9; step++) {
36524       DWConvMicrokernelTester()
36525         .cr(2)
36526         .kr(9)
36527         .channels(channels)
36528         .width(3)
36529         .step(step)
36530         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36531     }
36532   }
36533 }
36534 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,multipixel_with_output_stride)36535 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_output_stride) {
36536   for (size_t channels = 1; channels <= 10; channels += 1) {
36537     DWConvMicrokernelTester()
36538       .cr(2)
36539       .kr(9)
36540       .channels(2)
36541       .width(5)
36542       .output_stride(13)
36543       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36544   }
36545 }
36546 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,multipixel_with_qmin)36547 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_qmin) {
36548   for (size_t channels = 1; channels <= 10; channels += 1) {
36549     DWConvMicrokernelTester()
36550       .cr(2)
36551       .kr(9)
36552       .channels(channels)
36553       .width(3)
36554       .qmin(128)
36555       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36556   }
36557 }
36558 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,multipixel_with_qmax)36559 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_qmax) {
36560   for (size_t channels = 1; channels <= 10; channels += 1) {
36561     DWConvMicrokernelTester()
36562       .cr(2)
36563       .kr(9)
36564       .channels(channels)
36565       .width(3)
36566       .qmax(128)
36567       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36568   }
36569 }
36570 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,input_offset)36571 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, input_offset) {
36572   for (uint32_t channels = 4; channels < 32; channels += 6) {
36573     DWConvMicrokernelTester()
36574       .cr(2)
36575       .kr(9)
36576       .channels(channels)
36577       .input_offset(80)
36578       .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36579   }
36580 }
36581 
TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2,zero)36582 TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, zero) {
36583   for (uint32_t mz = 0; mz < 9; mz++) {
36584     for (uint32_t channels = 4; channels < 32; channels += 6) {
36585       DWConvMicrokernelTester()
36586         .cr(2)
36587         .kr(9)
36588         .channels(channels)
36589         .input_offset(80)
36590         .zero_index(mz)
36591         .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36592     }
36593   }
36594 }
36595 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,c_eq_2)36596 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_eq_2) {
36597   DWConvMicrokernelTester()
36598     .cr(2)
36599     .kr(25)
36600     .channels(2)
36601     .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36602 }
36603 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,c_div_2)36604 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_div_2) {
36605   for (uint32_t channels = 4; channels < 32; channels += 6) {
36606     DWConvMicrokernelTester()
36607       .cr(2)
36608       .kr(25)
36609       .channels(channels)
36610       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36611   }
36612 }
36613 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,c_div_2_with_qmin)36614 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_div_2_with_qmin) {
36615   for (uint32_t channels = 4; channels < 32; channels += 6) {
36616     DWConvMicrokernelTester()
36617       .cr(2)
36618       .kr(25)
36619       .channels(channels)
36620       .qmin(128)
36621       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36622   }
36623 }
36624 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,c_div_2_with_qmax)36625 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_div_2_with_qmax) {
36626   for (uint32_t channels = 4; channels < 32; channels += 6) {
36627     DWConvMicrokernelTester()
36628       .cr(2)
36629       .kr(25)
36630       .channels(channels)
36631       .qmax(128)
36632       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36633   }
36634 }
36635 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,c_lt_2)36636 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_lt_2) {
36637   for (uint32_t channels = 1; channels < 2; channels++) {
36638     DWConvMicrokernelTester()
36639       .cr(2)
36640       .kr(25)
36641       .channels(channels)
36642       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36643   }
36644 }
36645 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,c_gt_2)36646 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_gt_2) {
36647   for (uint32_t channels = 3; channels < 4; channels++) {
36648     DWConvMicrokernelTester()
36649       .cr(2)
36650       .kr(25)
36651       .channels(channels)
36652       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36653   }
36654 }
36655 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,c_gt_2_with_qmin)36656 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_gt_2_with_qmin) {
36657   for (uint32_t channels = 3; channels < 4; channels++) {
36658     DWConvMicrokernelTester()
36659       .cr(2)
36660       .kr(25)
36661       .channels(channels)
36662       .qmin(128)
36663       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36664   }
36665 }
36666 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,c_gt_2_with_qmax)36667 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_gt_2_with_qmax) {
36668   for (uint32_t channels = 3; channels < 4; channels++) {
36669     DWConvMicrokernelTester()
36670       .cr(2)
36671       .kr(25)
36672       .channels(channels)
36673       .qmax(128)
36674       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36675   }
36676 }
36677 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,multipixel)36678 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel) {
36679   for (size_t channels = 1; channels <= 10; channels += 1) {
36680     DWConvMicrokernelTester()
36681       .cr(2)
36682       .kr(25)
36683       .channels(channels)
36684       .width(3)
36685       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36686   }
36687 }
36688 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,multipixel_with_step)36689 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_step) {
36690   for (size_t channels = 1; channels <= 10; channels += 1) {
36691     for (size_t step = 2; step <= 25; step++) {
36692       DWConvMicrokernelTester()
36693         .cr(2)
36694         .kr(25)
36695         .channels(channels)
36696         .width(3)
36697         .step(step)
36698         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36699     }
36700   }
36701 }
36702 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,multipixel_with_output_stride)36703 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_output_stride) {
36704   for (size_t channels = 1; channels <= 10; channels += 1) {
36705     DWConvMicrokernelTester()
36706       .cr(2)
36707       .kr(25)
36708       .channels(2)
36709       .width(5)
36710       .output_stride(13)
36711       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36712   }
36713 }
36714 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,multipixel_with_qmin)36715 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_qmin) {
36716   for (size_t channels = 1; channels <= 10; channels += 1) {
36717     DWConvMicrokernelTester()
36718       .cr(2)
36719       .kr(25)
36720       .channels(channels)
36721       .width(3)
36722       .qmin(128)
36723       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36724   }
36725 }
36726 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,multipixel_with_qmax)36727 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_qmax) {
36728   for (size_t channels = 1; channels <= 10; channels += 1) {
36729     DWConvMicrokernelTester()
36730       .cr(2)
36731       .kr(25)
36732       .channels(channels)
36733       .width(3)
36734       .qmax(128)
36735       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36736   }
36737 }
36738 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,input_offset)36739 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, input_offset) {
36740   for (uint32_t channels = 4; channels < 32; channels += 6) {
36741     DWConvMicrokernelTester()
36742       .cr(2)
36743       .kr(25)
36744       .channels(channels)
36745       .input_offset(80)
36746       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36747   }
36748 }
36749 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR,zero)36750 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, zero) {
36751   for (uint32_t mz = 0; mz < 25; mz++) {
36752     for (uint32_t channels = 4; channels < 32; channels += 6) {
36753       DWConvMicrokernelTester()
36754         .cr(2)
36755         .kr(25)
36756         .channels(channels)
36757         .input_offset(80)
36758         .zero_index(mz)
36759         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
36760     }
36761   }
36762 }
36763 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,c_eq_2)36764 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_eq_2) {
36765   DWConvMicrokernelTester()
36766     .cr(2)
36767     .kr(25)
36768     .channels(2)
36769     .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36770 }
36771 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,c_div_2)36772 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_div_2) {
36773   for (uint32_t channels = 4; channels < 32; channels += 6) {
36774     DWConvMicrokernelTester()
36775       .cr(2)
36776       .kr(25)
36777       .channels(channels)
36778       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36779   }
36780 }
36781 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,c_div_2_with_qmin)36782 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_div_2_with_qmin) {
36783   for (uint32_t channels = 4; channels < 32; channels += 6) {
36784     DWConvMicrokernelTester()
36785       .cr(2)
36786       .kr(25)
36787       .channels(channels)
36788       .qmin(128)
36789       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36790   }
36791 }
36792 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,c_div_2_with_qmax)36793 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_div_2_with_qmax) {
36794   for (uint32_t channels = 4; channels < 32; channels += 6) {
36795     DWConvMicrokernelTester()
36796       .cr(2)
36797       .kr(25)
36798       .channels(channels)
36799       .qmax(128)
36800       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36801   }
36802 }
36803 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,c_lt_2)36804 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_lt_2) {
36805   for (uint32_t channels = 1; channels < 2; channels++) {
36806     DWConvMicrokernelTester()
36807       .cr(2)
36808       .kr(25)
36809       .channels(channels)
36810       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36811   }
36812 }
36813 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,c_gt_2)36814 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_gt_2) {
36815   for (uint32_t channels = 3; channels < 4; channels++) {
36816     DWConvMicrokernelTester()
36817       .cr(2)
36818       .kr(25)
36819       .channels(channels)
36820       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36821   }
36822 }
36823 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,c_gt_2_with_qmin)36824 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_gt_2_with_qmin) {
36825   for (uint32_t channels = 3; channels < 4; channels++) {
36826     DWConvMicrokernelTester()
36827       .cr(2)
36828       .kr(25)
36829       .channels(channels)
36830       .qmin(128)
36831       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36832   }
36833 }
36834 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,c_gt_2_with_qmax)36835 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_gt_2_with_qmax) {
36836   for (uint32_t channels = 3; channels < 4; channels++) {
36837     DWConvMicrokernelTester()
36838       .cr(2)
36839       .kr(25)
36840       .channels(channels)
36841       .qmax(128)
36842       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36843   }
36844 }
36845 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,multipixel)36846 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel) {
36847   for (size_t channels = 1; channels <= 10; channels += 1) {
36848     DWConvMicrokernelTester()
36849       .cr(2)
36850       .kr(25)
36851       .channels(channels)
36852       .width(3)
36853       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36854   }
36855 }
36856 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,multipixel_with_step)36857 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_step) {
36858   for (size_t channels = 1; channels <= 10; channels += 1) {
36859     for (size_t step = 2; step <= 25; step++) {
36860       DWConvMicrokernelTester()
36861         .cr(2)
36862         .kr(25)
36863         .channels(channels)
36864         .width(3)
36865         .step(step)
36866         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36867     }
36868   }
36869 }
36870 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,multipixel_with_output_stride)36871 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_output_stride) {
36872   for (size_t channels = 1; channels <= 10; channels += 1) {
36873     DWConvMicrokernelTester()
36874       .cr(2)
36875       .kr(25)
36876       .channels(2)
36877       .width(5)
36878       .output_stride(13)
36879       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36880   }
36881 }
36882 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,multipixel_with_qmin)36883 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_qmin) {
36884   for (size_t channels = 1; channels <= 10; channels += 1) {
36885     DWConvMicrokernelTester()
36886       .cr(2)
36887       .kr(25)
36888       .channels(channels)
36889       .width(3)
36890       .qmin(128)
36891       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36892   }
36893 }
36894 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,multipixel_with_qmax)36895 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_qmax) {
36896   for (size_t channels = 1; channels <= 10; channels += 1) {
36897     DWConvMicrokernelTester()
36898       .cr(2)
36899       .kr(25)
36900       .channels(channels)
36901       .width(3)
36902       .qmax(128)
36903       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36904   }
36905 }
36906 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,input_offset)36907 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, input_offset) {
36908   for (uint32_t channels = 4; channels < 32; channels += 6) {
36909     DWConvMicrokernelTester()
36910       .cr(2)
36911       .kr(25)
36912       .channels(channels)
36913       .input_offset(80)
36914       .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36915   }
36916 }
36917 
TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2,zero)36918 TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, zero) {
36919   for (uint32_t mz = 0; mz < 25; mz++) {
36920     for (uint32_t channels = 4; channels < 32; channels += 6) {
36921       DWConvMicrokernelTester()
36922         .cr(2)
36923         .kr(25)
36924         .channels(channels)
36925         .input_offset(80)
36926         .zero_index(mz)
36927         .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
36928     }
36929   }
36930 }