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 }