blob: e2e05d71dbe23de42318a87083754ee771e63843 [file] [log] [blame]
Marat Dukhan1c587112020-04-08 20:04:28 -07001// 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
Marat Dukhand18cec32020-05-18 01:29:29 -070023#if XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
Marat Dukhande06f492020-04-09 00:19:31 -070024 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070025 TEST_REQUIRES_ARM_NEON_FMA;
26 DWConvMicrokernelTester()
27 .cr(4)
28 .kr(9)
29 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031 }
32
Marat Dukhande06f492020-04-09 00:19:31 -070033 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070034 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070040 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070041 }
42 }
43
Marat Dukhande06f492020-04-09 00:19:31 -070044 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070045 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070052 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070053 }
54 }
55
Marat Dukhande06f492020-04-09 00:19:31 -070056 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070057 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070064 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070065 }
66 }
67
Marat Dukhande06f492020-04-09 00:19:31 -070068 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070069 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070075 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070076 }
77 }
78
Marat Dukhande06f492020-04-09 00:19:31 -070079 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070080 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070086 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070087 }
88 }
89
Marat Dukhande06f492020-04-09 00:19:31 -070090 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070091 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070098 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070099 }
100 }
101
Marat Dukhande06f492020-04-09 00:19:31 -0700102 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700103 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700110 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700111 }
112 }
113
Marat Dukhande06f492020-04-09 00:19:31 -0700114 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700115 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700122 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700123 }
124 }
125
Marat Dukhande06f492020-04-09 00:19:31 -0700126 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700127 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700136 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700137 }
138 }
139 }
140
Marat Dukhande06f492020-04-09 00:19:31 -0700141 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700142 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700150 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700151 }
152 }
153
Marat Dukhande06f492020-04-09 00:19:31 -0700154 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700155 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700163 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700164 }
165 }
166
Marat Dukhande06f492020-04-09 00:19:31 -0700167 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700168 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700176 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700177 }
178 }
Frank Barchardd5360722020-05-17 16:10:36 -0700179
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700188 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -0700189 }
190 }
191
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700202 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -0700203 }
204 }
205 }
Marat Dukhand18cec32020-05-18 01:29:29 -0700206#endif // XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
Marat Dukhan1c587112020-04-08 20:04:28 -0700207
208
209#if XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
Marat Dukhande06f492020-04-09 00:19:31 -0700210 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700211 TEST_REQUIRES_ARM_NEON_FMA;
212 DWConvMicrokernelTester()
213 .cr(4)
214 .kr(9)
215 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700216 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700217 }
218
Marat Dukhande06f492020-04-09 00:19:31 -0700219 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700220 TEST_REQUIRES_ARM_NEON_FMA;
221 DWConvMicrokernelTester()
222 .cr(4)
223 .kr(9)
224 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700225 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700226 }
227
Marat Dukhande06f492020-04-09 00:19:31 -0700228 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700229 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700235 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700236 }
237 }
238
Marat Dukhande06f492020-04-09 00:19:31 -0700239 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700240 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700247 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700248 }
249 }
250
Marat Dukhande06f492020-04-09 00:19:31 -0700251 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700252 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700259 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700260 }
261 }
262
Marat Dukhande06f492020-04-09 00:19:31 -0700263 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700264 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700270 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700271 }
272 }
273
Marat Dukhande06f492020-04-09 00:19:31 -0700274 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700275 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700281 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700282 }
283 }
284
Marat Dukhande06f492020-04-09 00:19:31 -0700285 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700286 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700293 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700294 }
295 }
296
Marat Dukhande06f492020-04-09 00:19:31 -0700297 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700298 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700305 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700306 }
307 }
308
Marat Dukhande06f492020-04-09 00:19:31 -0700309 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700310 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700317 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700318 }
319 }
320
Marat Dukhande06f492020-04-09 00:19:31 -0700321 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700322 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700331 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700332 }
333 }
334 }
335
Marat Dukhande06f492020-04-09 00:19:31 -0700336 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700337 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700345 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700346 }
347 }
348
Marat Dukhande06f492020-04-09 00:19:31 -0700349 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700350 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700358 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700359 }
360 }
361
Marat Dukhande06f492020-04-09 00:19:31 -0700362 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700363 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700371 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -0700372 }
373 }
Frank Barchardd5360722020-05-17 16:10:36 -0700374
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700383 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -0700384 }
385 }
386
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700397 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -0700398 }
399 }
400 }
Marat Dukhan1c587112020-04-08 20:04:28 -0700401#endif // XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
402
403
404#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700405 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_eq_4) {
406 TEST_REQUIRES_ARM_NEON_FMA;
407 DWConvMicrokernelTester()
408 .cr(4)
409 .kr(25)
410 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700411 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700412 }
413
414 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_div_4) {
415 TEST_REQUIRES_ARM_NEON_FMA;
416 for (uint32_t channels = 8; channels < 64; channels += 12) {
417 DWConvMicrokernelTester()
418 .cr(4)
419 .kr(25)
420 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700421 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700422 }
423 }
424
425 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_div_4_with_qmin) {
426 TEST_REQUIRES_ARM_NEON_FMA;
427 for (uint32_t channels = 8; channels < 64; channels += 12) {
428 DWConvMicrokernelTester()
429 .cr(4)
430 .kr(25)
431 .channels(channels)
432 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700433 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700434 }
435 }
436
437 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_div_4_with_qmax) {
438 TEST_REQUIRES_ARM_NEON_FMA;
439 for (uint32_t channels = 8; channels < 64; channels += 12) {
440 DWConvMicrokernelTester()
441 .cr(4)
442 .kr(25)
443 .channels(channels)
444 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700445 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700446 }
447 }
448
449 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_lt_4) {
450 TEST_REQUIRES_ARM_NEON_FMA;
451 for (uint32_t channels = 1; channels < 4; channels++) {
452 DWConvMicrokernelTester()
453 .cr(4)
454 .kr(25)
455 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700456 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700457 }
458 }
459
460 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_gt_4) {
461 TEST_REQUIRES_ARM_NEON_FMA;
462 for (uint32_t channels = 5; channels < 8; channels++) {
463 DWConvMicrokernelTester()
464 .cr(4)
465 .kr(25)
466 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700467 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700468 }
469 }
470
471 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_gt_4_with_qmin) {
472 TEST_REQUIRES_ARM_NEON_FMA;
473 for (uint32_t channels = 5; channels < 8; channels++) {
474 DWConvMicrokernelTester()
475 .cr(4)
476 .kr(25)
477 .channels(channels)
478 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700479 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700480 }
481 }
482
483 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_gt_4_with_qmax) {
484 TEST_REQUIRES_ARM_NEON_FMA;
485 for (uint32_t channels = 5; channels < 8; channels++) {
486 DWConvMicrokernelTester()
487 .cr(4)
488 .kr(25)
489 .channels(channels)
490 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700491 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700492 }
493 }
494
495 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel) {
496 TEST_REQUIRES_ARM_NEON_FMA;
497 for (size_t channels = 1; channels <= 20; channels += 3) {
498 DWConvMicrokernelTester()
499 .cr(4)
500 .kr(25)
501 .channels(channels)
502 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700503 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700504 }
505 }
506
507 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel_with_step) {
508 TEST_REQUIRES_ARM_NEON_FMA;
509 for (size_t channels = 1; channels <= 20; channels += 3) {
510 for (size_t step = 2; step <= 25; step++) {
511 DWConvMicrokernelTester()
512 .cr(4)
513 .kr(25)
514 .channels(channels)
515 .width(3)
516 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700517 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700518 }
519 }
520 }
521
522 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel_with_output_stride) {
523 TEST_REQUIRES_ARM_NEON_FMA;
524 for (size_t channels = 1; channels <= 20; channels += 3) {
525 DWConvMicrokernelTester()
526 .cr(4)
527 .kr(25)
528 .channels(4)
529 .width(5)
530 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700531 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700532 }
533 }
534
535 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel_with_qmin) {
536 TEST_REQUIRES_ARM_NEON_FMA;
537 for (size_t channels = 1; channels <= 20; channels += 3) {
538 DWConvMicrokernelTester()
539 .cr(4)
540 .kr(25)
541 .channels(channels)
542 .width(3)
543 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700544 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700545 }
546 }
547
548 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel_with_qmax) {
549 TEST_REQUIRES_ARM_NEON_FMA;
550 for (size_t channels = 1; channels <= 20; channels += 3) {
551 DWConvMicrokernelTester()
552 .cr(4)
553 .kr(25)
554 .channels(channels)
555 .width(3)
556 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700557 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700558 }
559 }
Frank Barchardd5360722020-05-17 16:10:36 -0700560
561 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, input_offset) {
562 TEST_REQUIRES_ARM_NEON_FMA;
563 for (uint32_t channels = 8; channels < 64; channels += 12) {
564 DWConvMicrokernelTester()
565 .cr(4)
566 .kr(25)
567 .channels(channels)
568 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700569 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -0700570 }
571 }
572
573 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, zero) {
574 TEST_REQUIRES_ARM_NEON_FMA;
575 for (uint32_t mz = 0; mz < 25; mz++) {
576 for (uint32_t channels = 8; channels < 64; channels += 12) {
577 DWConvMicrokernelTester()
578 .cr(4)
579 .kr(25)
580 .channels(channels)
581 .input_offset(112)
582 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700583 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -0700584 }
585 }
586 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700587#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
588
589
590#if XNN_ARCH_ARM || XNN_ARCH_ARM64
591 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_eq_4) {
592 TEST_REQUIRES_ARM_NEON_FMA;
593 DWConvMicrokernelTester()
594 .cr(4)
595 .kr(25)
596 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700597 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700598 }
599
600 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_div_4) {
601 TEST_REQUIRES_ARM_NEON_FMA;
602 for (uint32_t channels = 8; channels < 64; channels += 12) {
603 DWConvMicrokernelTester()
604 .cr(4)
605 .kr(25)
606 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700607 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700608 }
609 }
610
611 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_div_4_with_qmin) {
612 TEST_REQUIRES_ARM_NEON_FMA;
613 for (uint32_t channels = 8; channels < 64; channels += 12) {
614 DWConvMicrokernelTester()
615 .cr(4)
616 .kr(25)
617 .channels(channels)
618 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700619 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700620 }
621 }
622
623 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_div_4_with_qmax) {
624 TEST_REQUIRES_ARM_NEON_FMA;
625 for (uint32_t channels = 8; channels < 64; channels += 12) {
626 DWConvMicrokernelTester()
627 .cr(4)
628 .kr(25)
629 .channels(channels)
630 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700631 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700632 }
633 }
634
635 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_lt_4) {
636 TEST_REQUIRES_ARM_NEON_FMA;
637 for (uint32_t channels = 1; channels < 4; channels++) {
638 DWConvMicrokernelTester()
639 .cr(4)
640 .kr(25)
641 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700642 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700643 }
644 }
645
646 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_gt_4) {
647 TEST_REQUIRES_ARM_NEON_FMA;
648 for (uint32_t channels = 5; channels < 8; channels++) {
649 DWConvMicrokernelTester()
650 .cr(4)
651 .kr(25)
652 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700653 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700654 }
655 }
656
657 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_gt_4_with_qmin) {
658 TEST_REQUIRES_ARM_NEON_FMA;
659 for (uint32_t channels = 5; channels < 8; channels++) {
660 DWConvMicrokernelTester()
661 .cr(4)
662 .kr(25)
663 .channels(channels)
664 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700665 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700666 }
667 }
668
669 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_gt_4_with_qmax) {
670 TEST_REQUIRES_ARM_NEON_FMA;
671 for (uint32_t channels = 5; channels < 8; channels++) {
672 DWConvMicrokernelTester()
673 .cr(4)
674 .kr(25)
675 .channels(channels)
676 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700677 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700678 }
679 }
680
681 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel) {
682 TEST_REQUIRES_ARM_NEON_FMA;
683 for (size_t channels = 1; channels <= 20; channels += 3) {
684 DWConvMicrokernelTester()
685 .cr(4)
686 .kr(25)
687 .channels(channels)
688 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700689 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700690 }
691 }
692
693 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel_with_step) {
694 TEST_REQUIRES_ARM_NEON_FMA;
695 for (size_t channels = 1; channels <= 20; channels += 3) {
696 for (size_t step = 2; step <= 25; step++) {
697 DWConvMicrokernelTester()
698 .cr(4)
699 .kr(25)
700 .channels(channels)
701 .width(3)
702 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700703 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700704 }
705 }
706 }
707
708 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel_with_output_stride) {
709 TEST_REQUIRES_ARM_NEON_FMA;
710 for (size_t channels = 1; channels <= 20; channels += 3) {
711 DWConvMicrokernelTester()
712 .cr(4)
713 .kr(25)
714 .channels(4)
715 .width(5)
716 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700717 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700718 }
719 }
720
721 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel_with_qmin) {
722 TEST_REQUIRES_ARM_NEON_FMA;
723 for (size_t channels = 1; channels <= 20; channels += 3) {
724 DWConvMicrokernelTester()
725 .cr(4)
726 .kr(25)
727 .channels(channels)
728 .width(3)
729 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700730 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700731 }
732 }
733
734 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel_with_qmax) {
735 TEST_REQUIRES_ARM_NEON_FMA;
736 for (size_t channels = 1; channels <= 20; channels += 3) {
737 DWConvMicrokernelTester()
738 .cr(4)
739 .kr(25)
740 .channels(channels)
741 .width(3)
742 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700743 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700744 }
745 }
Frank Barchardd5360722020-05-17 16:10:36 -0700746
747 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, input_offset) {
748 TEST_REQUIRES_ARM_NEON_FMA;
749 for (uint32_t channels = 8; channels < 64; channels += 12) {
750 DWConvMicrokernelTester()
751 .cr(4)
752 .kr(25)
753 .channels(channels)
754 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700755 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -0700756 }
757 }
758
759 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, zero) {
760 TEST_REQUIRES_ARM_NEON_FMA;
761 for (uint32_t mz = 0; mz < 25; mz++) {
762 for (uint32_t channels = 8; channels < 64; channels += 12) {
763 DWConvMicrokernelTester()
764 .cr(4)
765 .kr(25)
766 .channels(channels)
767 .input_offset(112)
768 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700769 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -0700770 }
771 }
772 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700773#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
774
775
776#if XNN_ARCH_ARM || XNN_ARCH_ARM64
777 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_eq_8) {
778 TEST_REQUIRES_ARM_NEON_FMA;
779 DWConvMicrokernelTester()
780 .cr(8)
781 .kr(25)
782 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700783 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700784 }
785
786 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_div_8) {
787 TEST_REQUIRES_ARM_NEON_FMA;
788 for (uint32_t channels = 16; channels < 128; channels += 24) {
789 DWConvMicrokernelTester()
790 .cr(8)
791 .kr(25)
792 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700793 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700794 }
795 }
796
797 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_div_8_with_qmin) {
798 TEST_REQUIRES_ARM_NEON_FMA;
799 for (uint32_t channels = 16; channels < 128; channels += 24) {
800 DWConvMicrokernelTester()
801 .cr(8)
802 .kr(25)
803 .channels(channels)
804 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700805 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700806 }
807 }
808
809 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_div_8_with_qmax) {
810 TEST_REQUIRES_ARM_NEON_FMA;
811 for (uint32_t channels = 16; channels < 128; channels += 24) {
812 DWConvMicrokernelTester()
813 .cr(8)
814 .kr(25)
815 .channels(channels)
816 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700817 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700818 }
819 }
820
821 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_lt_8) {
822 TEST_REQUIRES_ARM_NEON_FMA;
823 for (uint32_t channels = 1; channels < 8; channels++) {
824 DWConvMicrokernelTester()
825 .cr(8)
826 .kr(25)
827 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700828 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700829 }
830 }
831
832 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_gt_8) {
833 TEST_REQUIRES_ARM_NEON_FMA;
834 for (uint32_t channels = 9; channels < 16; channels++) {
835 DWConvMicrokernelTester()
836 .cr(8)
837 .kr(25)
838 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700839 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700840 }
841 }
842
843 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_gt_8_with_qmin) {
844 TEST_REQUIRES_ARM_NEON_FMA;
845 for (uint32_t channels = 9; channels < 16; channels++) {
846 DWConvMicrokernelTester()
847 .cr(8)
848 .kr(25)
849 .channels(channels)
850 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700851 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700852 }
853 }
854
855 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_gt_8_with_qmax) {
856 TEST_REQUIRES_ARM_NEON_FMA;
857 for (uint32_t channels = 9; channels < 16; channels++) {
858 DWConvMicrokernelTester()
859 .cr(8)
860 .kr(25)
861 .channels(channels)
862 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700863 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700864 }
865 }
866
867 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel) {
868 TEST_REQUIRES_ARM_NEON_FMA;
869 for (size_t channels = 1; channels <= 40; channels += 7) {
870 DWConvMicrokernelTester()
871 .cr(8)
872 .kr(25)
873 .channels(channels)
874 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700875 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700876 }
877 }
878
879 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel_with_step) {
880 TEST_REQUIRES_ARM_NEON_FMA;
881 for (size_t channels = 1; channels <= 40; channels += 7) {
882 for (size_t step = 2; step <= 25; step++) {
883 DWConvMicrokernelTester()
884 .cr(8)
885 .kr(25)
886 .channels(channels)
887 .width(3)
888 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700889 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700890 }
891 }
892 }
893
894 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel_with_output_stride) {
895 TEST_REQUIRES_ARM_NEON_FMA;
896 for (size_t channels = 1; channels <= 40; channels += 7) {
897 DWConvMicrokernelTester()
898 .cr(8)
899 .kr(25)
900 .channels(8)
901 .width(5)
902 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700903 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700904 }
905 }
906
907 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel_with_qmin) {
908 TEST_REQUIRES_ARM_NEON_FMA;
909 for (size_t channels = 1; channels <= 40; channels += 7) {
910 DWConvMicrokernelTester()
911 .cr(8)
912 .kr(25)
913 .channels(channels)
914 .width(3)
915 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700916 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700917 }
918 }
919
920 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel_with_qmax) {
921 TEST_REQUIRES_ARM_NEON_FMA;
922 for (size_t channels = 1; channels <= 40; channels += 7) {
923 DWConvMicrokernelTester()
924 .cr(8)
925 .kr(25)
926 .channels(channels)
927 .width(3)
928 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700929 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700930 }
931 }
Frank Barchardd5360722020-05-17 16:10:36 -0700932
933 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, input_offset) {
934 TEST_REQUIRES_ARM_NEON_FMA;
935 for (uint32_t channels = 16; channels < 128; channels += 24) {
936 DWConvMicrokernelTester()
937 .cr(8)
938 .kr(25)
939 .channels(channels)
940 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700941 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -0700942 }
943 }
944
945 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, zero) {
946 TEST_REQUIRES_ARM_NEON_FMA;
947 for (uint32_t mz = 0; mz < 25; mz++) {
948 for (uint32_t channels = 16; channels < 128; channels += 24) {
949 DWConvMicrokernelTester()
950 .cr(8)
951 .kr(25)
952 .channels(channels)
953 .input_offset(176)
954 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700955 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -0700956 }
957 }
958 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700959#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
960
961
962#if XNN_ARCH_ARM || XNN_ARCH_ARM64
963 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_eq_8) {
964 TEST_REQUIRES_ARM_NEON_FMA;
965 DWConvMicrokernelTester()
966 .cr(8)
967 .kr(25)
968 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700969 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700970 }
971
972 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_div_8) {
973 TEST_REQUIRES_ARM_NEON_FMA;
974 for (uint32_t channels = 16; channels < 128; channels += 24) {
975 DWConvMicrokernelTester()
976 .cr(8)
977 .kr(25)
978 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700979 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700980 }
981 }
982
983 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_div_8_with_qmin) {
984 TEST_REQUIRES_ARM_NEON_FMA;
985 for (uint32_t channels = 16; channels < 128; channels += 24) {
986 DWConvMicrokernelTester()
987 .cr(8)
988 .kr(25)
989 .channels(channels)
990 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -0700991 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700992 }
993 }
994
995 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_div_8_with_qmax) {
996 TEST_REQUIRES_ARM_NEON_FMA;
997 for (uint32_t channels = 16; channels < 128; channels += 24) {
998 DWConvMicrokernelTester()
999 .cr(8)
1000 .kr(25)
1001 .channels(channels)
1002 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001003 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001004 }
1005 }
1006
1007 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_lt_8) {
1008 TEST_REQUIRES_ARM_NEON_FMA;
1009 for (uint32_t channels = 1; channels < 8; channels++) {
1010 DWConvMicrokernelTester()
1011 .cr(8)
1012 .kr(25)
1013 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001014 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001015 }
1016 }
1017
1018 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_gt_8) {
1019 TEST_REQUIRES_ARM_NEON_FMA;
1020 for (uint32_t channels = 9; channels < 16; channels++) {
1021 DWConvMicrokernelTester()
1022 .cr(8)
1023 .kr(25)
1024 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001025 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001026 }
1027 }
1028
1029 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_gt_8_with_qmin) {
1030 TEST_REQUIRES_ARM_NEON_FMA;
1031 for (uint32_t channels = 9; channels < 16; channels++) {
1032 DWConvMicrokernelTester()
1033 .cr(8)
1034 .kr(25)
1035 .channels(channels)
1036 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001037 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001038 }
1039 }
1040
1041 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_gt_8_with_qmax) {
1042 TEST_REQUIRES_ARM_NEON_FMA;
1043 for (uint32_t channels = 9; channels < 16; channels++) {
1044 DWConvMicrokernelTester()
1045 .cr(8)
1046 .kr(25)
1047 .channels(channels)
1048 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001049 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001050 }
1051 }
1052
1053 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel) {
1054 TEST_REQUIRES_ARM_NEON_FMA;
1055 for (size_t channels = 1; channels <= 40; channels += 7) {
1056 DWConvMicrokernelTester()
1057 .cr(8)
1058 .kr(25)
1059 .channels(channels)
1060 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001061 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001062 }
1063 }
1064
1065 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel_with_step) {
1066 TEST_REQUIRES_ARM_NEON_FMA;
1067 for (size_t channels = 1; channels <= 40; channels += 7) {
1068 for (size_t step = 2; step <= 25; step++) {
1069 DWConvMicrokernelTester()
1070 .cr(8)
1071 .kr(25)
1072 .channels(channels)
1073 .width(3)
1074 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001075 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001076 }
1077 }
1078 }
1079
1080 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel_with_output_stride) {
1081 TEST_REQUIRES_ARM_NEON_FMA;
1082 for (size_t channels = 1; channels <= 40; channels += 7) {
1083 DWConvMicrokernelTester()
1084 .cr(8)
1085 .kr(25)
1086 .channels(8)
1087 .width(5)
1088 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001089 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001090 }
1091 }
1092
1093 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel_with_qmin) {
1094 TEST_REQUIRES_ARM_NEON_FMA;
1095 for (size_t channels = 1; channels <= 40; channels += 7) {
1096 DWConvMicrokernelTester()
1097 .cr(8)
1098 .kr(25)
1099 .channels(channels)
1100 .width(3)
1101 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001102 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001103 }
1104 }
1105
1106 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel_with_qmax) {
1107 TEST_REQUIRES_ARM_NEON_FMA;
1108 for (size_t channels = 1; channels <= 40; channels += 7) {
1109 DWConvMicrokernelTester()
1110 .cr(8)
1111 .kr(25)
1112 .channels(channels)
1113 .width(3)
1114 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001115 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001116 }
1117 }
Frank Barchardd5360722020-05-17 16:10:36 -07001118
1119 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, input_offset) {
1120 TEST_REQUIRES_ARM_NEON_FMA;
1121 for (uint32_t channels = 16; channels < 128; channels += 24) {
1122 DWConvMicrokernelTester()
1123 .cr(8)
1124 .kr(25)
1125 .channels(channels)
1126 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001127 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07001128 }
1129 }
1130
1131 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, zero) {
1132 TEST_REQUIRES_ARM_NEON_FMA;
1133 for (uint32_t mz = 0; mz < 25; mz++) {
1134 for (uint32_t channels = 16; channels < 128; channels += 24) {
1135 DWConvMicrokernelTester()
1136 .cr(8)
1137 .kr(25)
1138 .channels(channels)
1139 .input_offset(176)
1140 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001141 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07001142 }
1143 }
1144 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001145#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1146
1147
1148#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Frank Barchardc9f9d672021-10-18 12:51:59 -07001149 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_eq_16) {
1150 TEST_REQUIRES_ARM_NEON_FMA;
1151 DWConvMicrokernelTester()
1152 .cr(16)
1153 .kr(25)
1154 .channels(16)
1155 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1156 }
1157
1158 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_div_16) {
1159 TEST_REQUIRES_ARM_NEON_FMA;
1160 for (uint32_t channels = 32; channels < 256; channels += 48) {
1161 DWConvMicrokernelTester()
1162 .cr(16)
1163 .kr(25)
1164 .channels(channels)
1165 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1166 }
1167 }
1168
1169 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_div_16_with_qmin) {
1170 TEST_REQUIRES_ARM_NEON_FMA;
1171 for (uint32_t channels = 32; channels < 256; channels += 48) {
1172 DWConvMicrokernelTester()
1173 .cr(16)
1174 .kr(25)
1175 .channels(channels)
1176 .qmin(128)
1177 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1178 }
1179 }
1180
1181 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_div_16_with_qmax) {
1182 TEST_REQUIRES_ARM_NEON_FMA;
1183 for (uint32_t channels = 32; channels < 256; channels += 48) {
1184 DWConvMicrokernelTester()
1185 .cr(16)
1186 .kr(25)
1187 .channels(channels)
1188 .qmax(128)
1189 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1190 }
1191 }
1192
1193 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_lt_16) {
1194 TEST_REQUIRES_ARM_NEON_FMA;
1195 for (uint32_t channels = 1; channels < 16; channels++) {
1196 DWConvMicrokernelTester()
1197 .cr(16)
1198 .kr(25)
1199 .channels(channels)
1200 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1201 }
1202 }
1203
1204 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_gt_16) {
1205 TEST_REQUIRES_ARM_NEON_FMA;
1206 for (uint32_t channels = 17; channels < 32; channels++) {
1207 DWConvMicrokernelTester()
1208 .cr(16)
1209 .kr(25)
1210 .channels(channels)
1211 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1212 }
1213 }
1214
1215 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_gt_16_with_qmin) {
1216 TEST_REQUIRES_ARM_NEON_FMA;
1217 for (uint32_t channels = 17; channels < 32; channels++) {
1218 DWConvMicrokernelTester()
1219 .cr(16)
1220 .kr(25)
1221 .channels(channels)
1222 .qmin(128)
1223 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1224 }
1225 }
1226
1227 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, c_gt_16_with_qmax) {
1228 TEST_REQUIRES_ARM_NEON_FMA;
1229 for (uint32_t channels = 17; channels < 32; channels++) {
1230 DWConvMicrokernelTester()
1231 .cr(16)
1232 .kr(25)
1233 .channels(channels)
1234 .qmax(128)
1235 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1236 }
1237 }
1238
1239 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, multipixel) {
1240 TEST_REQUIRES_ARM_NEON_FMA;
1241 for (size_t channels = 1; channels <= 80; channels += 15) {
1242 DWConvMicrokernelTester()
1243 .cr(16)
1244 .kr(25)
1245 .channels(channels)
1246 .width(3)
1247 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1248 }
1249 }
1250
1251 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, multipixel_with_step) {
1252 TEST_REQUIRES_ARM_NEON_FMA;
1253 for (size_t channels = 1; channels <= 80; channels += 15) {
1254 for (size_t step = 2; step <= 25; step++) {
1255 DWConvMicrokernelTester()
1256 .cr(16)
1257 .kr(25)
1258 .channels(channels)
1259 .width(3)
1260 .step(step)
1261 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1262 }
1263 }
1264 }
1265
1266 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, multipixel_with_output_stride) {
1267 TEST_REQUIRES_ARM_NEON_FMA;
1268 for (size_t channels = 1; channels <= 80; channels += 15) {
1269 DWConvMicrokernelTester()
1270 .cr(16)
1271 .kr(25)
1272 .channels(16)
1273 .width(5)
1274 .output_stride(83)
1275 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1276 }
1277 }
1278
1279 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, multipixel_with_qmin) {
1280 TEST_REQUIRES_ARM_NEON_FMA;
1281 for (size_t channels = 1; channels <= 80; channels += 15) {
1282 DWConvMicrokernelTester()
1283 .cr(16)
1284 .kr(25)
1285 .channels(channels)
1286 .width(3)
1287 .qmin(128)
1288 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1289 }
1290 }
1291
1292 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, multipixel_with_qmax) {
1293 TEST_REQUIRES_ARM_NEON_FMA;
1294 for (size_t channels = 1; channels <= 80; channels += 15) {
1295 DWConvMicrokernelTester()
1296 .cr(16)
1297 .kr(25)
1298 .channels(channels)
1299 .width(3)
1300 .qmax(128)
1301 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1302 }
1303 }
1304
1305 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, input_offset) {
1306 TEST_REQUIRES_ARM_NEON_FMA;
1307 for (uint32_t channels = 32; channels < 256; channels += 48) {
1308 DWConvMicrokernelTester()
1309 .cr(16)
1310 .kr(25)
1311 .channels(channels)
1312 .input_offset(304)
1313 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, xnn_init_f32_minmax_scalar_params);
1314 }
1315 }
1316
1317 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA, zero) {
1318 TEST_REQUIRES_ARM_NEON_FMA;
1319 for (uint32_t mz = 0; mz < 25; mz++) {
1320 for (uint32_t channels = 32; channels < 256; channels += 48) {
1321 DWConvMicrokernelTester()
1322 .cr(16)
1323 .kr(25)
1324 .channels(channels)
1325 .input_offset(304)
1326 .zero_index(mz)
1327 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma, 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
1335 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_eq_16) {
1336 TEST_REQUIRES_ARM_NEON_FMA;
1337 DWConvMicrokernelTester()
1338 .cr(16)
1339 .kr(25)
1340 .channels(16)
1341 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1342 }
1343
1344 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_div_16) {
1345 TEST_REQUIRES_ARM_NEON_FMA;
1346 for (uint32_t channels = 32; channels < 256; channels += 48) {
1347 DWConvMicrokernelTester()
1348 .cr(16)
1349 .kr(25)
1350 .channels(channels)
1351 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1352 }
1353 }
1354
1355 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_div_16_with_qmin) {
1356 TEST_REQUIRES_ARM_NEON_FMA;
1357 for (uint32_t channels = 32; channels < 256; channels += 48) {
1358 DWConvMicrokernelTester()
1359 .cr(16)
1360 .kr(25)
1361 .channels(channels)
1362 .qmin(128)
1363 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1364 }
1365 }
1366
1367 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_div_16_with_qmax) {
1368 TEST_REQUIRES_ARM_NEON_FMA;
1369 for (uint32_t channels = 32; channels < 256; channels += 48) {
1370 DWConvMicrokernelTester()
1371 .cr(16)
1372 .kr(25)
1373 .channels(channels)
1374 .qmax(128)
1375 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1376 }
1377 }
1378
1379 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_lt_16) {
1380 TEST_REQUIRES_ARM_NEON_FMA;
1381 for (uint32_t channels = 1; channels < 16; channels++) {
1382 DWConvMicrokernelTester()
1383 .cr(16)
1384 .kr(25)
1385 .channels(channels)
1386 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1387 }
1388 }
1389
1390 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_gt_16) {
1391 TEST_REQUIRES_ARM_NEON_FMA;
1392 for (uint32_t channels = 17; channels < 32; channels++) {
1393 DWConvMicrokernelTester()
1394 .cr(16)
1395 .kr(25)
1396 .channels(channels)
1397 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1398 }
1399 }
1400
1401 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_gt_16_with_qmin) {
1402 TEST_REQUIRES_ARM_NEON_FMA;
1403 for (uint32_t channels = 17; channels < 32; channels++) {
1404 DWConvMicrokernelTester()
1405 .cr(16)
1406 .kr(25)
1407 .channels(channels)
1408 .qmin(128)
1409 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1410 }
1411 }
1412
1413 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, c_gt_16_with_qmax) {
1414 TEST_REQUIRES_ARM_NEON_FMA;
1415 for (uint32_t channels = 17; channels < 32; channels++) {
1416 DWConvMicrokernelTester()
1417 .cr(16)
1418 .kr(25)
1419 .channels(channels)
1420 .qmax(128)
1421 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1422 }
1423 }
1424
1425 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, multipixel) {
1426 TEST_REQUIRES_ARM_NEON_FMA;
1427 for (size_t channels = 1; channels <= 80; channels += 15) {
1428 DWConvMicrokernelTester()
1429 .cr(16)
1430 .kr(25)
1431 .channels(channels)
1432 .width(3)
1433 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1434 }
1435 }
1436
1437 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, multipixel_with_step) {
1438 TEST_REQUIRES_ARM_NEON_FMA;
1439 for (size_t channels = 1; channels <= 80; channels += 15) {
1440 for (size_t step = 2; step <= 25; step++) {
1441 DWConvMicrokernelTester()
1442 .cr(16)
1443 .kr(25)
1444 .channels(channels)
1445 .width(3)
1446 .step(step)
1447 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1448 }
1449 }
1450 }
1451
1452 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, multipixel_with_output_stride) {
1453 TEST_REQUIRES_ARM_NEON_FMA;
1454 for (size_t channels = 1; channels <= 80; channels += 15) {
1455 DWConvMicrokernelTester()
1456 .cr(16)
1457 .kr(25)
1458 .channels(16)
1459 .width(5)
1460 .output_stride(83)
1461 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1462 }
1463 }
1464
1465 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, multipixel_with_qmin) {
1466 TEST_REQUIRES_ARM_NEON_FMA;
1467 for (size_t channels = 1; channels <= 80; channels += 15) {
1468 DWConvMicrokernelTester()
1469 .cr(16)
1470 .kr(25)
1471 .channels(channels)
1472 .width(3)
1473 .qmin(128)
1474 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1475 }
1476 }
1477
1478 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, multipixel_with_qmax) {
1479 TEST_REQUIRES_ARM_NEON_FMA;
1480 for (size_t channels = 1; channels <= 80; channels += 15) {
1481 DWConvMicrokernelTester()
1482 .cr(16)
1483 .kr(25)
1484 .channels(channels)
1485 .width(3)
1486 .qmax(128)
1487 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1488 }
1489 }
1490
1491 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, input_offset) {
1492 TEST_REQUIRES_ARM_NEON_FMA;
1493 for (uint32_t channels = 32; channels < 256; channels += 48) {
1494 DWConvMicrokernelTester()
1495 .cr(16)
1496 .kr(25)
1497 .channels(channels)
1498 .input_offset(304)
1499 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
1500 }
1501 }
1502
1503 TEST(F32_DWCONV_MINMAX_UP16X25__NEONFMA_ACC2, zero) {
1504 TEST_REQUIRES_ARM_NEON_FMA;
1505 for (uint32_t mz = 0; mz < 25; mz++) {
1506 for (uint32_t channels = 32; channels < 256; channels += 48) {
1507 DWConvMicrokernelTester()
1508 .cr(16)
1509 .kr(25)
1510 .channels(channels)
1511 .input_offset(304)
1512 .zero_index(mz)
1513 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neonfma_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
Marat Dukhande06f492020-04-09 00:19:31 -07001521 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001522 TEST_REQUIRES_ARM_NEON_FMA;
1523 DWConvMicrokernelTester()
1524 .cr(4)
1525 .kr(9)
1526 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001527 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001528 }
1529
Marat Dukhande06f492020-04-09 00:19:31 -07001530 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001531 TEST_REQUIRES_ARM_NEON_FMA;
1532 for (uint32_t channels = 8; channels < 64; channels += 12) {
1533 DWConvMicrokernelTester()
1534 .cr(4)
1535 .kr(9)
1536 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001537 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001538 }
1539 }
1540
Marat Dukhande06f492020-04-09 00:19:31 -07001541 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001542 TEST_REQUIRES_ARM_NEON_FMA;
1543 for (uint32_t channels = 8; channels < 64; channels += 12) {
1544 DWConvMicrokernelTester()
1545 .cr(4)
1546 .kr(9)
1547 .channels(channels)
1548 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001549 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001550 }
1551 }
1552
Marat Dukhande06f492020-04-09 00:19:31 -07001553 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001554 TEST_REQUIRES_ARM_NEON_FMA;
1555 for (uint32_t channels = 8; channels < 64; channels += 12) {
1556 DWConvMicrokernelTester()
1557 .cr(4)
1558 .kr(9)
1559 .channels(channels)
1560 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001561 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001562 }
1563 }
1564
Marat Dukhande06f492020-04-09 00:19:31 -07001565 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001566 TEST_REQUIRES_ARM_NEON_FMA;
1567 for (uint32_t channels = 1; channels < 4; channels++) {
1568 DWConvMicrokernelTester()
1569 .cr(4)
1570 .kr(9)
1571 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001572 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001573 }
1574 }
1575
Marat Dukhande06f492020-04-09 00:19:31 -07001576 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001577 TEST_REQUIRES_ARM_NEON_FMA;
1578 for (uint32_t channels = 5; channels < 8; channels++) {
1579 DWConvMicrokernelTester()
1580 .cr(4)
1581 .kr(9)
1582 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001583 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001584 }
1585 }
1586
Marat Dukhande06f492020-04-09 00:19:31 -07001587 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001588 TEST_REQUIRES_ARM_NEON_FMA;
1589 for (uint32_t channels = 5; channels < 8; channels++) {
1590 DWConvMicrokernelTester()
1591 .cr(4)
1592 .kr(9)
1593 .channels(channels)
1594 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001595 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001596 }
1597 }
1598
Marat Dukhande06f492020-04-09 00:19:31 -07001599 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001600 TEST_REQUIRES_ARM_NEON_FMA;
1601 for (uint32_t channels = 5; channels < 8; channels++) {
1602 DWConvMicrokernelTester()
1603 .cr(4)
1604 .kr(9)
1605 .channels(channels)
1606 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001607 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001608 }
1609 }
1610
Marat Dukhande06f492020-04-09 00:19:31 -07001611 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001612 TEST_REQUIRES_ARM_NEON_FMA;
1613 for (size_t channels = 1; channels <= 20; channels += 3) {
1614 DWConvMicrokernelTester()
1615 .cr(4)
1616 .kr(9)
1617 .channels(channels)
1618 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001619 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001620 }
1621 }
1622
Marat Dukhande06f492020-04-09 00:19:31 -07001623 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001624 TEST_REQUIRES_ARM_NEON_FMA;
1625 for (size_t channels = 1; channels <= 20; channels += 3) {
1626 for (size_t step = 2; step <= 9; step++) {
1627 DWConvMicrokernelTester()
1628 .cr(4)
1629 .kr(9)
1630 .channels(channels)
1631 .width(3)
1632 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001633 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001634 }
1635 }
1636 }
1637
Marat Dukhande06f492020-04-09 00:19:31 -07001638 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001639 TEST_REQUIRES_ARM_NEON_FMA;
1640 for (size_t channels = 1; channels <= 20; channels += 3) {
1641 DWConvMicrokernelTester()
1642 .cr(4)
1643 .kr(9)
1644 .channels(4)
1645 .width(5)
1646 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001647 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001648 }
1649 }
1650
Marat Dukhande06f492020-04-09 00:19:31 -07001651 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001652 TEST_REQUIRES_ARM_NEON_FMA;
1653 for (size_t channels = 1; channels <= 20; channels += 3) {
1654 DWConvMicrokernelTester()
1655 .cr(4)
1656 .kr(9)
1657 .channels(channels)
1658 .width(3)
1659 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001660 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001661 }
1662 }
1663
Marat Dukhande06f492020-04-09 00:19:31 -07001664 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001665 TEST_REQUIRES_ARM_NEON_FMA;
1666 for (size_t channels = 1; channels <= 20; channels += 3) {
1667 DWConvMicrokernelTester()
1668 .cr(4)
1669 .kr(9)
1670 .channels(channels)
1671 .width(3)
1672 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001673 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001674 }
1675 }
Frank Barchardd5360722020-05-17 16:10:36 -07001676
1677 TEST(F32_DWCONV_MINMAX_UP4X9__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(9)
1683 .channels(channels)
1684 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001685 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07001686 }
1687 }
1688
1689 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, zero) {
1690 TEST_REQUIRES_ARM_NEON_FMA;
1691 for (uint32_t mz = 0; mz < 9; mz++) {
1692 for (uint32_t channels = 8; channels < 64; channels += 12) {
1693 DWConvMicrokernelTester()
1694 .cr(4)
1695 .kr(9)
1696 .channels(channels)
1697 .input_offset(112)
1698 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001699 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07001700 }
1701 }
1702 }
Marat Dukhan1c587112020-04-08 20:04:28 -07001703#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1704
1705
1706#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07001707 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001708 TEST_REQUIRES_ARM_NEON_FMA;
1709 DWConvMicrokernelTester()
1710 .cr(4)
1711 .kr(9)
1712 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001713 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001714 }
1715
Marat Dukhande06f492020-04-09 00:19:31 -07001716 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001717 TEST_REQUIRES_ARM_NEON_FMA;
1718 for (uint32_t channels = 8; channels < 64; channels += 12) {
1719 DWConvMicrokernelTester()
1720 .cr(4)
1721 .kr(9)
1722 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001723 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001724 }
1725 }
1726
Marat Dukhande06f492020-04-09 00:19:31 -07001727 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001728 TEST_REQUIRES_ARM_NEON_FMA;
1729 for (uint32_t channels = 8; channels < 64; channels += 12) {
1730 DWConvMicrokernelTester()
1731 .cr(4)
1732 .kr(9)
1733 .channels(channels)
1734 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001735 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001736 }
1737 }
1738
Marat Dukhande06f492020-04-09 00:19:31 -07001739 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001740 TEST_REQUIRES_ARM_NEON_FMA;
1741 for (uint32_t channels = 8; channels < 64; channels += 12) {
1742 DWConvMicrokernelTester()
1743 .cr(4)
1744 .kr(9)
1745 .channels(channels)
1746 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001747 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001748 }
1749 }
1750
Marat Dukhande06f492020-04-09 00:19:31 -07001751 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001752 TEST_REQUIRES_ARM_NEON_FMA;
1753 for (uint32_t channels = 1; channels < 4; channels++) {
1754 DWConvMicrokernelTester()
1755 .cr(4)
1756 .kr(9)
1757 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001758 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001759 }
1760 }
1761
Marat Dukhande06f492020-04-09 00:19:31 -07001762 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001763 TEST_REQUIRES_ARM_NEON_FMA;
1764 for (uint32_t channels = 5; channels < 8; channels++) {
1765 DWConvMicrokernelTester()
1766 .cr(4)
1767 .kr(9)
1768 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001769 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001770 }
1771 }
1772
Marat Dukhande06f492020-04-09 00:19:31 -07001773 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001774 TEST_REQUIRES_ARM_NEON_FMA;
1775 for (uint32_t channels = 5; channels < 8; channels++) {
1776 DWConvMicrokernelTester()
1777 .cr(4)
1778 .kr(9)
1779 .channels(channels)
1780 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001781 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001782 }
1783 }
1784
Marat Dukhande06f492020-04-09 00:19:31 -07001785 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001786 TEST_REQUIRES_ARM_NEON_FMA;
1787 for (uint32_t channels = 5; channels < 8; channels++) {
1788 DWConvMicrokernelTester()
1789 .cr(4)
1790 .kr(9)
1791 .channels(channels)
1792 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001793 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001794 }
1795 }
1796
Marat Dukhande06f492020-04-09 00:19:31 -07001797 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001798 TEST_REQUIRES_ARM_NEON_FMA;
1799 for (size_t channels = 1; channels <= 20; channels += 3) {
1800 DWConvMicrokernelTester()
1801 .cr(4)
1802 .kr(9)
1803 .channels(channels)
1804 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001805 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001806 }
1807 }
1808
Marat Dukhande06f492020-04-09 00:19:31 -07001809 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001810 TEST_REQUIRES_ARM_NEON_FMA;
1811 for (size_t channels = 1; channels <= 20; channels += 3) {
1812 for (size_t step = 2; step <= 9; step++) {
1813 DWConvMicrokernelTester()
1814 .cr(4)
1815 .kr(9)
1816 .channels(channels)
1817 .width(3)
1818 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001819 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001820 }
1821 }
1822 }
1823
Marat Dukhande06f492020-04-09 00:19:31 -07001824 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001825 TEST_REQUIRES_ARM_NEON_FMA;
1826 for (size_t channels = 1; channels <= 20; channels += 3) {
1827 DWConvMicrokernelTester()
1828 .cr(4)
1829 .kr(9)
1830 .channels(4)
1831 .width(5)
1832 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001833 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001834 }
1835 }
1836
Marat Dukhande06f492020-04-09 00:19:31 -07001837 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001838 TEST_REQUIRES_ARM_NEON_FMA;
1839 for (size_t channels = 1; channels <= 20; channels += 3) {
1840 DWConvMicrokernelTester()
1841 .cr(4)
1842 .kr(9)
1843 .channels(channels)
1844 .width(3)
1845 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001846 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001847 }
1848 }
1849
Marat Dukhande06f492020-04-09 00:19:31 -07001850 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001851 TEST_REQUIRES_ARM_NEON_FMA;
1852 for (size_t channels = 1; channels <= 20; channels += 3) {
1853 DWConvMicrokernelTester()
1854 .cr(4)
1855 .kr(9)
1856 .channels(channels)
1857 .width(3)
1858 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001859 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001860 }
1861 }
Frank Barchardd5360722020-05-17 16:10:36 -07001862
1863 TEST(F32_DWCONV_MINMAX_UP4X9__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(9)
1869 .channels(channels)
1870 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001871 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07001872 }
1873 }
1874
1875 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, zero) {
1876 TEST_REQUIRES_ARM_NEON_FMA;
1877 for (uint32_t mz = 0; mz < 9; mz++) {
1878 for (uint32_t channels = 8; channels < 64; channels += 12) {
1879 DWConvMicrokernelTester()
1880 .cr(4)
1881 .kr(9)
1882 .channels(channels)
1883 .input_offset(112)
1884 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001885 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07001886 }
1887 }
1888 }
Marat Dukhan1c587112020-04-08 20:04:28 -07001889#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1890
1891
1892#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07001893 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001894 TEST_REQUIRES_ARM_NEON_FMA;
1895 DWConvMicrokernelTester()
1896 .cr(8)
1897 .kr(9)
1898 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001899 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001900 }
1901
Marat Dukhande06f492020-04-09 00:19:31 -07001902 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001903 TEST_REQUIRES_ARM_NEON_FMA;
1904 for (uint32_t channels = 16; channels < 128; channels += 24) {
1905 DWConvMicrokernelTester()
1906 .cr(8)
1907 .kr(9)
1908 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001909 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001910 }
1911 }
1912
Marat Dukhande06f492020-04-09 00:19:31 -07001913 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001914 TEST_REQUIRES_ARM_NEON_FMA;
1915 for (uint32_t channels = 16; channels < 128; channels += 24) {
1916 DWConvMicrokernelTester()
1917 .cr(8)
1918 .kr(9)
1919 .channels(channels)
1920 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001921 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001922 }
1923 }
1924
Marat Dukhande06f492020-04-09 00:19:31 -07001925 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001926 TEST_REQUIRES_ARM_NEON_FMA;
1927 for (uint32_t channels = 16; channels < 128; channels += 24) {
1928 DWConvMicrokernelTester()
1929 .cr(8)
1930 .kr(9)
1931 .channels(channels)
1932 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001933 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001934 }
1935 }
1936
Marat Dukhande06f492020-04-09 00:19:31 -07001937 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001938 TEST_REQUIRES_ARM_NEON_FMA;
1939 for (uint32_t channels = 1; channels < 8; channels++) {
1940 DWConvMicrokernelTester()
1941 .cr(8)
1942 .kr(9)
1943 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001944 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001945 }
1946 }
1947
Marat Dukhande06f492020-04-09 00:19:31 -07001948 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001949 TEST_REQUIRES_ARM_NEON_FMA;
1950 for (uint32_t channels = 9; channels < 16; channels++) {
1951 DWConvMicrokernelTester()
1952 .cr(8)
1953 .kr(9)
1954 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001955 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001956 }
1957 }
1958
Marat Dukhande06f492020-04-09 00:19:31 -07001959 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001960 TEST_REQUIRES_ARM_NEON_FMA;
1961 for (uint32_t channels = 9; channels < 16; channels++) {
1962 DWConvMicrokernelTester()
1963 .cr(8)
1964 .kr(9)
1965 .channels(channels)
1966 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001967 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001968 }
1969 }
1970
Marat Dukhande06f492020-04-09 00:19:31 -07001971 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001972 TEST_REQUIRES_ARM_NEON_FMA;
1973 for (uint32_t channels = 9; channels < 16; channels++) {
1974 DWConvMicrokernelTester()
1975 .cr(8)
1976 .kr(9)
1977 .channels(channels)
1978 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001979 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001980 }
1981 }
1982
Marat Dukhande06f492020-04-09 00:19:31 -07001983 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001984 TEST_REQUIRES_ARM_NEON_FMA;
1985 for (size_t channels = 1; channels <= 40; channels += 7) {
1986 DWConvMicrokernelTester()
1987 .cr(8)
1988 .kr(9)
1989 .channels(channels)
1990 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07001991 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07001992 }
1993 }
1994
Marat Dukhande06f492020-04-09 00:19:31 -07001995 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001996 TEST_REQUIRES_ARM_NEON_FMA;
1997 for (size_t channels = 1; channels <= 40; channels += 7) {
1998 for (size_t step = 2; step <= 9; step++) {
1999 DWConvMicrokernelTester()
2000 .cr(8)
2001 .kr(9)
2002 .channels(channels)
2003 .width(3)
2004 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002005 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002006 }
2007 }
2008 }
2009
Marat Dukhande06f492020-04-09 00:19:31 -07002010 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002011 TEST_REQUIRES_ARM_NEON_FMA;
2012 for (size_t channels = 1; channels <= 40; channels += 7) {
2013 DWConvMicrokernelTester()
2014 .cr(8)
2015 .kr(9)
2016 .channels(8)
2017 .width(5)
2018 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002019 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002020 }
2021 }
2022
Marat Dukhande06f492020-04-09 00:19:31 -07002023 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002024 TEST_REQUIRES_ARM_NEON_FMA;
2025 for (size_t channels = 1; channels <= 40; channels += 7) {
2026 DWConvMicrokernelTester()
2027 .cr(8)
2028 .kr(9)
2029 .channels(channels)
2030 .width(3)
2031 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002032 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002033 }
2034 }
2035
Marat Dukhande06f492020-04-09 00:19:31 -07002036 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002037 TEST_REQUIRES_ARM_NEON_FMA;
2038 for (size_t channels = 1; channels <= 40; channels += 7) {
2039 DWConvMicrokernelTester()
2040 .cr(8)
2041 .kr(9)
2042 .channels(channels)
2043 .width(3)
2044 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002045 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002046 }
2047 }
Frank Barchardd5360722020-05-17 16:10:36 -07002048
2049 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, input_offset) {
2050 TEST_REQUIRES_ARM_NEON_FMA;
2051 for (uint32_t channels = 16; channels < 128; channels += 24) {
2052 DWConvMicrokernelTester()
2053 .cr(8)
2054 .kr(9)
2055 .channels(channels)
2056 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002057 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07002058 }
2059 }
2060
2061 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, zero) {
2062 TEST_REQUIRES_ARM_NEON_FMA;
2063 for (uint32_t mz = 0; mz < 9; mz++) {
2064 for (uint32_t channels = 16; channels < 128; channels += 24) {
2065 DWConvMicrokernelTester()
2066 .cr(8)
2067 .kr(9)
2068 .channels(channels)
2069 .input_offset(176)
2070 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002071 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07002072 }
2073 }
2074 }
Marat Dukhan1c587112020-04-08 20:04:28 -07002075#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
2076
2077
2078#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07002079 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002080 TEST_REQUIRES_ARM_NEON_FMA;
2081 DWConvMicrokernelTester()
2082 .cr(8)
2083 .kr(9)
2084 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002085 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002086 }
2087
Marat Dukhande06f492020-04-09 00:19:31 -07002088 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002089 TEST_REQUIRES_ARM_NEON_FMA;
2090 for (uint32_t channels = 16; channels < 128; channels += 24) {
2091 DWConvMicrokernelTester()
2092 .cr(8)
2093 .kr(9)
2094 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002095 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002096 }
2097 }
2098
Marat Dukhande06f492020-04-09 00:19:31 -07002099 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002100 TEST_REQUIRES_ARM_NEON_FMA;
2101 for (uint32_t channels = 16; channels < 128; channels += 24) {
2102 DWConvMicrokernelTester()
2103 .cr(8)
2104 .kr(9)
2105 .channels(channels)
2106 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002107 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002108 }
2109 }
2110
Marat Dukhande06f492020-04-09 00:19:31 -07002111 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002112 TEST_REQUIRES_ARM_NEON_FMA;
2113 for (uint32_t channels = 16; channels < 128; channels += 24) {
2114 DWConvMicrokernelTester()
2115 .cr(8)
2116 .kr(9)
2117 .channels(channels)
2118 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002119 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002120 }
2121 }
2122
Marat Dukhande06f492020-04-09 00:19:31 -07002123 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002124 TEST_REQUIRES_ARM_NEON_FMA;
2125 for (uint32_t channels = 1; channels < 8; channels++) {
2126 DWConvMicrokernelTester()
2127 .cr(8)
2128 .kr(9)
2129 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002130 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002131 }
2132 }
2133
Marat Dukhande06f492020-04-09 00:19:31 -07002134 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002135 TEST_REQUIRES_ARM_NEON_FMA;
2136 for (uint32_t channels = 9; channels < 16; channels++) {
2137 DWConvMicrokernelTester()
2138 .cr(8)
2139 .kr(9)
2140 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002141 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002142 }
2143 }
2144
Marat Dukhande06f492020-04-09 00:19:31 -07002145 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002146 TEST_REQUIRES_ARM_NEON_FMA;
2147 for (uint32_t channels = 9; channels < 16; channels++) {
2148 DWConvMicrokernelTester()
2149 .cr(8)
2150 .kr(9)
2151 .channels(channels)
2152 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002153 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002154 }
2155 }
2156
Marat Dukhande06f492020-04-09 00:19:31 -07002157 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002158 TEST_REQUIRES_ARM_NEON_FMA;
2159 for (uint32_t channels = 9; channels < 16; channels++) {
2160 DWConvMicrokernelTester()
2161 .cr(8)
2162 .kr(9)
2163 .channels(channels)
2164 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002165 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002166 }
2167 }
2168
Marat Dukhande06f492020-04-09 00:19:31 -07002169 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002170 TEST_REQUIRES_ARM_NEON_FMA;
2171 for (size_t channels = 1; channels <= 40; channels += 7) {
2172 DWConvMicrokernelTester()
2173 .cr(8)
2174 .kr(9)
2175 .channels(channels)
2176 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002177 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002178 }
2179 }
2180
Marat Dukhande06f492020-04-09 00:19:31 -07002181 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002182 TEST_REQUIRES_ARM_NEON_FMA;
2183 for (size_t channels = 1; channels <= 40; channels += 7) {
2184 for (size_t step = 2; step <= 9; step++) {
2185 DWConvMicrokernelTester()
2186 .cr(8)
2187 .kr(9)
2188 .channels(channels)
2189 .width(3)
2190 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002191 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002192 }
2193 }
2194 }
2195
Marat Dukhande06f492020-04-09 00:19:31 -07002196 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002197 TEST_REQUIRES_ARM_NEON_FMA;
2198 for (size_t channels = 1; channels <= 40; channels += 7) {
2199 DWConvMicrokernelTester()
2200 .cr(8)
2201 .kr(9)
2202 .channels(8)
2203 .width(5)
2204 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002205 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002206 }
2207 }
2208
Marat Dukhande06f492020-04-09 00:19:31 -07002209 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002210 TEST_REQUIRES_ARM_NEON_FMA;
2211 for (size_t channels = 1; channels <= 40; channels += 7) {
2212 DWConvMicrokernelTester()
2213 .cr(8)
2214 .kr(9)
2215 .channels(channels)
2216 .width(3)
2217 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002218 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002219 }
2220 }
2221
Marat Dukhande06f492020-04-09 00:19:31 -07002222 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002223 TEST_REQUIRES_ARM_NEON_FMA;
2224 for (size_t channels = 1; channels <= 40; channels += 7) {
2225 DWConvMicrokernelTester()
2226 .cr(8)
2227 .kr(9)
2228 .channels(channels)
2229 .width(3)
2230 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002231 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07002232 }
2233 }
Frank Barchardd5360722020-05-17 16:10:36 -07002234
2235 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, input_offset) {
2236 TEST_REQUIRES_ARM_NEON_FMA;
2237 for (uint32_t channels = 16; channels < 128; channels += 24) {
2238 DWConvMicrokernelTester()
2239 .cr(8)
2240 .kr(9)
2241 .channels(channels)
2242 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002243 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07002244 }
2245 }
2246
2247 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, zero) {
2248 TEST_REQUIRES_ARM_NEON_FMA;
2249 for (uint32_t mz = 0; mz < 9; mz++) {
2250 for (uint32_t channels = 16; channels < 128; channels += 24) {
2251 DWConvMicrokernelTester()
2252 .cr(8)
2253 .kr(9)
2254 .channels(channels)
2255 .input_offset(176)
2256 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07002257 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07002258 }
2259 }
2260 }
Marat Dukhan1c587112020-04-08 20:04:28 -07002261#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
2262
2263
2264#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Frank Barchardc9f9d672021-10-18 12:51:59 -07002265 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_eq_16) {
2266 TEST_REQUIRES_ARM_NEON_FMA;
2267 DWConvMicrokernelTester()
2268 .cr(16)
2269 .kr(9)
2270 .channels(16)
2271 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2272 }
2273
2274 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_div_16) {
2275 TEST_REQUIRES_ARM_NEON_FMA;
2276 for (uint32_t channels = 32; channels < 256; channels += 48) {
2277 DWConvMicrokernelTester()
2278 .cr(16)
2279 .kr(9)
2280 .channels(channels)
2281 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2282 }
2283 }
2284
2285 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_div_16_with_qmin) {
2286 TEST_REQUIRES_ARM_NEON_FMA;
2287 for (uint32_t channels = 32; channels < 256; channels += 48) {
2288 DWConvMicrokernelTester()
2289 .cr(16)
2290 .kr(9)
2291 .channels(channels)
2292 .qmin(128)
2293 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2294 }
2295 }
2296
2297 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_div_16_with_qmax) {
2298 TEST_REQUIRES_ARM_NEON_FMA;
2299 for (uint32_t channels = 32; channels < 256; channels += 48) {
2300 DWConvMicrokernelTester()
2301 .cr(16)
2302 .kr(9)
2303 .channels(channels)
2304 .qmax(128)
2305 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2306 }
2307 }
2308
2309 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_lt_16) {
2310 TEST_REQUIRES_ARM_NEON_FMA;
2311 for (uint32_t channels = 1; channels < 16; channels++) {
2312 DWConvMicrokernelTester()
2313 .cr(16)
2314 .kr(9)
2315 .channels(channels)
2316 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2317 }
2318 }
2319
2320 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_gt_16) {
2321 TEST_REQUIRES_ARM_NEON_FMA;
2322 for (uint32_t channels = 17; channels < 32; channels++) {
2323 DWConvMicrokernelTester()
2324 .cr(16)
2325 .kr(9)
2326 .channels(channels)
2327 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2328 }
2329 }
2330
2331 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_gt_16_with_qmin) {
2332 TEST_REQUIRES_ARM_NEON_FMA;
2333 for (uint32_t channels = 17; channels < 32; channels++) {
2334 DWConvMicrokernelTester()
2335 .cr(16)
2336 .kr(9)
2337 .channels(channels)
2338 .qmin(128)
2339 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2340 }
2341 }
2342
2343 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, c_gt_16_with_qmax) {
2344 TEST_REQUIRES_ARM_NEON_FMA;
2345 for (uint32_t channels = 17; channels < 32; channels++) {
2346 DWConvMicrokernelTester()
2347 .cr(16)
2348 .kr(9)
2349 .channels(channels)
2350 .qmax(128)
2351 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2352 }
2353 }
2354
2355 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, multipixel) {
2356 TEST_REQUIRES_ARM_NEON_FMA;
2357 for (size_t channels = 1; channels <= 80; channels += 15) {
2358 DWConvMicrokernelTester()
2359 .cr(16)
2360 .kr(9)
2361 .channels(channels)
2362 .width(3)
2363 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2364 }
2365 }
2366
2367 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, multipixel_with_step) {
2368 TEST_REQUIRES_ARM_NEON_FMA;
2369 for (size_t channels = 1; channels <= 80; channels += 15) {
2370 for (size_t step = 2; step <= 9; step++) {
2371 DWConvMicrokernelTester()
2372 .cr(16)
2373 .kr(9)
2374 .channels(channels)
2375 .width(3)
2376 .step(step)
2377 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2378 }
2379 }
2380 }
2381
2382 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, multipixel_with_output_stride) {
2383 TEST_REQUIRES_ARM_NEON_FMA;
2384 for (size_t channels = 1; channels <= 80; channels += 15) {
2385 DWConvMicrokernelTester()
2386 .cr(16)
2387 .kr(9)
2388 .channels(16)
2389 .width(5)
2390 .output_stride(83)
2391 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2392 }
2393 }
2394
2395 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, multipixel_with_qmin) {
2396 TEST_REQUIRES_ARM_NEON_FMA;
2397 for (size_t channels = 1; channels <= 80; channels += 15) {
2398 DWConvMicrokernelTester()
2399 .cr(16)
2400 .kr(9)
2401 .channels(channels)
2402 .width(3)
2403 .qmin(128)
2404 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2405 }
2406 }
2407
2408 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, multipixel_with_qmax) {
2409 TEST_REQUIRES_ARM_NEON_FMA;
2410 for (size_t channels = 1; channels <= 80; channels += 15) {
2411 DWConvMicrokernelTester()
2412 .cr(16)
2413 .kr(9)
2414 .channels(channels)
2415 .width(3)
2416 .qmax(128)
2417 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2418 }
2419 }
2420
2421 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, input_offset) {
2422 TEST_REQUIRES_ARM_NEON_FMA;
2423 for (uint32_t channels = 32; channels < 256; channels += 48) {
2424 DWConvMicrokernelTester()
2425 .cr(16)
2426 .kr(9)
2427 .channels(channels)
2428 .input_offset(304)
2429 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma, xnn_init_f32_minmax_scalar_params);
2430 }
2431 }
2432
2433 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA, zero) {
2434 TEST_REQUIRES_ARM_NEON_FMA;
2435 for (uint32_t mz = 0; mz < 9; mz++) {
2436 for (uint32_t channels = 32; channels < 256; channels += 48) {
2437 DWConvMicrokernelTester()
2438 .cr(16)
2439 .kr(9)
2440 .channels(channels)
2441 .input_offset(304)
2442 .zero_index(mz)
2443 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__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
2451 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_eq_16) {
2452 TEST_REQUIRES_ARM_NEON_FMA;
2453 DWConvMicrokernelTester()
2454 .cr(16)
2455 .kr(9)
2456 .channels(16)
2457 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2458 }
2459
2460 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_div_16) {
2461 TEST_REQUIRES_ARM_NEON_FMA;
2462 for (uint32_t channels = 32; channels < 256; channels += 48) {
2463 DWConvMicrokernelTester()
2464 .cr(16)
2465 .kr(9)
2466 .channels(channels)
2467 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2468 }
2469 }
2470
2471 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_div_16_with_qmin) {
2472 TEST_REQUIRES_ARM_NEON_FMA;
2473 for (uint32_t channels = 32; channels < 256; channels += 48) {
2474 DWConvMicrokernelTester()
2475 .cr(16)
2476 .kr(9)
2477 .channels(channels)
2478 .qmin(128)
2479 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2480 }
2481 }
2482
2483 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_div_16_with_qmax) {
2484 TEST_REQUIRES_ARM_NEON_FMA;
2485 for (uint32_t channels = 32; channels < 256; channels += 48) {
2486 DWConvMicrokernelTester()
2487 .cr(16)
2488 .kr(9)
2489 .channels(channels)
2490 .qmax(128)
2491 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2492 }
2493 }
2494
2495 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_lt_16) {
2496 TEST_REQUIRES_ARM_NEON_FMA;
2497 for (uint32_t channels = 1; channels < 16; channels++) {
2498 DWConvMicrokernelTester()
2499 .cr(16)
2500 .kr(9)
2501 .channels(channels)
2502 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2503 }
2504 }
2505
2506 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_gt_16) {
2507 TEST_REQUIRES_ARM_NEON_FMA;
2508 for (uint32_t channels = 17; channels < 32; channels++) {
2509 DWConvMicrokernelTester()
2510 .cr(16)
2511 .kr(9)
2512 .channels(channels)
2513 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2514 }
2515 }
2516
2517 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_gt_16_with_qmin) {
2518 TEST_REQUIRES_ARM_NEON_FMA;
2519 for (uint32_t channels = 17; channels < 32; channels++) {
2520 DWConvMicrokernelTester()
2521 .cr(16)
2522 .kr(9)
2523 .channels(channels)
2524 .qmin(128)
2525 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2526 }
2527 }
2528
2529 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, c_gt_16_with_qmax) {
2530 TEST_REQUIRES_ARM_NEON_FMA;
2531 for (uint32_t channels = 17; channels < 32; channels++) {
2532 DWConvMicrokernelTester()
2533 .cr(16)
2534 .kr(9)
2535 .channels(channels)
2536 .qmax(128)
2537 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2538 }
2539 }
2540
2541 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, multipixel) {
2542 TEST_REQUIRES_ARM_NEON_FMA;
2543 for (size_t channels = 1; channels <= 80; channels += 15) {
2544 DWConvMicrokernelTester()
2545 .cr(16)
2546 .kr(9)
2547 .channels(channels)
2548 .width(3)
2549 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2550 }
2551 }
2552
2553 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, multipixel_with_step) {
2554 TEST_REQUIRES_ARM_NEON_FMA;
2555 for (size_t channels = 1; channels <= 80; channels += 15) {
2556 for (size_t step = 2; step <= 9; step++) {
2557 DWConvMicrokernelTester()
2558 .cr(16)
2559 .kr(9)
2560 .channels(channels)
2561 .width(3)
2562 .step(step)
2563 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2564 }
2565 }
2566 }
2567
2568 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, multipixel_with_output_stride) {
2569 TEST_REQUIRES_ARM_NEON_FMA;
2570 for (size_t channels = 1; channels <= 80; channels += 15) {
2571 DWConvMicrokernelTester()
2572 .cr(16)
2573 .kr(9)
2574 .channels(16)
2575 .width(5)
2576 .output_stride(83)
2577 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2578 }
2579 }
2580
2581 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, multipixel_with_qmin) {
2582 TEST_REQUIRES_ARM_NEON_FMA;
2583 for (size_t channels = 1; channels <= 80; channels += 15) {
2584 DWConvMicrokernelTester()
2585 .cr(16)
2586 .kr(9)
2587 .channels(channels)
2588 .width(3)
2589 .qmin(128)
2590 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2591 }
2592 }
2593
2594 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, multipixel_with_qmax) {
2595 TEST_REQUIRES_ARM_NEON_FMA;
2596 for (size_t channels = 1; channels <= 80; channels += 15) {
2597 DWConvMicrokernelTester()
2598 .cr(16)
2599 .kr(9)
2600 .channels(channels)
2601 .width(3)
2602 .qmax(128)
2603 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2604 }
2605 }
2606
2607 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, input_offset) {
2608 TEST_REQUIRES_ARM_NEON_FMA;
2609 for (uint32_t channels = 32; channels < 256; channels += 48) {
2610 DWConvMicrokernelTester()
2611 .cr(16)
2612 .kr(9)
2613 .channels(channels)
2614 .input_offset(304)
2615 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2616 }
2617 }
2618
2619 TEST(F32_DWCONV_MINMAX_UP16X9__NEONFMA_ACC2, zero) {
2620 TEST_REQUIRES_ARM_NEON_FMA;
2621 for (uint32_t mz = 0; mz < 9; mz++) {
2622 for (uint32_t channels = 32; channels < 256; channels += 48) {
2623 DWConvMicrokernelTester()
2624 .cr(16)
2625 .kr(9)
2626 .channels(channels)
2627 .input_offset(304)
2628 .zero_index(mz)
2629 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__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
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -07002637 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_eq_4) {
2638 TEST_REQUIRES_ARM_NEON_FMA;
2639 DWConvMicrokernelTester()
2640 .cr(4)
2641 .kr(3)
2642 .channels(4)
2643 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2644 }
2645
2646 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_div_4) {
2647 TEST_REQUIRES_ARM_NEON_FMA;
2648 for (uint32_t channels = 8; channels < 64; channels += 12) {
2649 DWConvMicrokernelTester()
2650 .cr(4)
2651 .kr(3)
2652 .channels(channels)
2653 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2654 }
2655 }
2656
2657 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_div_4_with_qmin) {
2658 TEST_REQUIRES_ARM_NEON_FMA;
2659 for (uint32_t channels = 8; channels < 64; channels += 12) {
2660 DWConvMicrokernelTester()
2661 .cr(4)
2662 .kr(3)
2663 .channels(channels)
2664 .qmin(128)
2665 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2666 }
2667 }
2668
2669 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_div_4_with_qmax) {
2670 TEST_REQUIRES_ARM_NEON_FMA;
2671 for (uint32_t channels = 8; channels < 64; channels += 12) {
2672 DWConvMicrokernelTester()
2673 .cr(4)
2674 .kr(3)
2675 .channels(channels)
2676 .qmax(128)
2677 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2678 }
2679 }
2680
2681 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_lt_4) {
2682 TEST_REQUIRES_ARM_NEON_FMA;
2683 for (uint32_t channels = 1; channels < 4; channels++) {
2684 DWConvMicrokernelTester()
2685 .cr(4)
2686 .kr(3)
2687 .channels(channels)
2688 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2689 }
2690 }
2691
2692 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_gt_4) {
2693 TEST_REQUIRES_ARM_NEON_FMA;
2694 for (uint32_t channels = 5; channels < 8; channels++) {
2695 DWConvMicrokernelTester()
2696 .cr(4)
2697 .kr(3)
2698 .channels(channels)
2699 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2700 }
2701 }
2702
2703 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_gt_4_with_qmin) {
2704 TEST_REQUIRES_ARM_NEON_FMA;
2705 for (uint32_t channels = 5; channels < 8; channels++) {
2706 DWConvMicrokernelTester()
2707 .cr(4)
2708 .kr(3)
2709 .channels(channels)
2710 .qmin(128)
2711 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2712 }
2713 }
2714
2715 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, c_gt_4_with_qmax) {
2716 TEST_REQUIRES_ARM_NEON_FMA;
2717 for (uint32_t channels = 5; channels < 8; channels++) {
2718 DWConvMicrokernelTester()
2719 .cr(4)
2720 .kr(3)
2721 .channels(channels)
2722 .qmax(128)
2723 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2724 }
2725 }
2726
2727 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, multipixel) {
2728 TEST_REQUIRES_ARM_NEON_FMA;
2729 for (size_t channels = 1; channels <= 20; channels += 3) {
2730 DWConvMicrokernelTester()
2731 .cr(4)
2732 .kr(3)
2733 .channels(channels)
2734 .width(3)
2735 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2736 }
2737 }
2738
2739 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, multipixel_with_step) {
2740 TEST_REQUIRES_ARM_NEON_FMA;
2741 for (size_t channels = 1; channels <= 20; channels += 3) {
2742 for (size_t step = 2; step <= 3; step++) {
2743 DWConvMicrokernelTester()
2744 .cr(4)
2745 .kr(3)
2746 .channels(channels)
2747 .width(3)
2748 .step(step)
2749 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2750 }
2751 }
2752 }
2753
2754 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, multipixel_with_output_stride) {
2755 TEST_REQUIRES_ARM_NEON_FMA;
2756 for (size_t channels = 1; channels <= 20; channels += 3) {
2757 DWConvMicrokernelTester()
2758 .cr(4)
2759 .kr(3)
2760 .channels(4)
2761 .width(5)
2762 .output_stride(23)
2763 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2764 }
2765 }
2766
2767 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, multipixel_with_qmin) {
2768 TEST_REQUIRES_ARM_NEON_FMA;
2769 for (size_t channels = 1; channels <= 20; channels += 3) {
2770 DWConvMicrokernelTester()
2771 .cr(4)
2772 .kr(3)
2773 .channels(channels)
2774 .width(3)
2775 .qmin(128)
2776 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2777 }
2778 }
2779
2780 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, multipixel_with_qmax) {
2781 TEST_REQUIRES_ARM_NEON_FMA;
2782 for (size_t channels = 1; channels <= 20; channels += 3) {
2783 DWConvMicrokernelTester()
2784 .cr(4)
2785 .kr(3)
2786 .channels(channels)
2787 .width(3)
2788 .qmax(128)
2789 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2790 }
2791 }
2792
2793 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, input_offset) {
2794 TEST_REQUIRES_ARM_NEON_FMA;
2795 for (uint32_t channels = 8; channels < 64; channels += 12) {
2796 DWConvMicrokernelTester()
2797 .cr(4)
2798 .kr(3)
2799 .channels(channels)
2800 .input_offset(112)
2801 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, xnn_init_f32_minmax_scalar_params);
2802 }
2803 }
2804
2805 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA, zero) {
2806 TEST_REQUIRES_ARM_NEON_FMA;
2807 for (uint32_t mz = 0; mz < 3; mz++) {
2808 for (uint32_t channels = 8; channels < 64; channels += 12) {
2809 DWConvMicrokernelTester()
2810 .cr(4)
2811 .kr(3)
2812 .channels(channels)
2813 .input_offset(112)
2814 .zero_index(mz)
2815 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma, 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
2823 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_eq_4) {
2824 TEST_REQUIRES_ARM_NEON_FMA;
2825 DWConvMicrokernelTester()
2826 .cr(4)
2827 .kr(3)
2828 .channels(4)
2829 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2830 }
2831
2832 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_div_4) {
2833 TEST_REQUIRES_ARM_NEON_FMA;
2834 for (uint32_t channels = 8; channels < 64; channels += 12) {
2835 DWConvMicrokernelTester()
2836 .cr(4)
2837 .kr(3)
2838 .channels(channels)
2839 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2840 }
2841 }
2842
2843 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_div_4_with_qmin) {
2844 TEST_REQUIRES_ARM_NEON_FMA;
2845 for (uint32_t channels = 8; channels < 64; channels += 12) {
2846 DWConvMicrokernelTester()
2847 .cr(4)
2848 .kr(3)
2849 .channels(channels)
2850 .qmin(128)
2851 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2852 }
2853 }
2854
2855 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_div_4_with_qmax) {
2856 TEST_REQUIRES_ARM_NEON_FMA;
2857 for (uint32_t channels = 8; channels < 64; channels += 12) {
2858 DWConvMicrokernelTester()
2859 .cr(4)
2860 .kr(3)
2861 .channels(channels)
2862 .qmax(128)
2863 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2864 }
2865 }
2866
2867 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_lt_4) {
2868 TEST_REQUIRES_ARM_NEON_FMA;
2869 for (uint32_t channels = 1; channels < 4; channels++) {
2870 DWConvMicrokernelTester()
2871 .cr(4)
2872 .kr(3)
2873 .channels(channels)
2874 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2875 }
2876 }
2877
2878 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_gt_4) {
2879 TEST_REQUIRES_ARM_NEON_FMA;
2880 for (uint32_t channels = 5; channels < 8; channels++) {
2881 DWConvMicrokernelTester()
2882 .cr(4)
2883 .kr(3)
2884 .channels(channels)
2885 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2886 }
2887 }
2888
2889 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_gt_4_with_qmin) {
2890 TEST_REQUIRES_ARM_NEON_FMA;
2891 for (uint32_t channels = 5; channels < 8; channels++) {
2892 DWConvMicrokernelTester()
2893 .cr(4)
2894 .kr(3)
2895 .channels(channels)
2896 .qmin(128)
2897 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2898 }
2899 }
2900
2901 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, c_gt_4_with_qmax) {
2902 TEST_REQUIRES_ARM_NEON_FMA;
2903 for (uint32_t channels = 5; channels < 8; channels++) {
2904 DWConvMicrokernelTester()
2905 .cr(4)
2906 .kr(3)
2907 .channels(channels)
2908 .qmax(128)
2909 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2910 }
2911 }
2912
2913 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, multipixel) {
2914 TEST_REQUIRES_ARM_NEON_FMA;
2915 for (size_t channels = 1; channels <= 20; channels += 3) {
2916 DWConvMicrokernelTester()
2917 .cr(4)
2918 .kr(3)
2919 .channels(channels)
2920 .width(3)
2921 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2922 }
2923 }
2924
2925 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, multipixel_with_step) {
2926 TEST_REQUIRES_ARM_NEON_FMA;
2927 for (size_t channels = 1; channels <= 20; channels += 3) {
2928 for (size_t step = 2; step <= 3; step++) {
2929 DWConvMicrokernelTester()
2930 .cr(4)
2931 .kr(3)
2932 .channels(channels)
2933 .width(3)
2934 .step(step)
2935 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2936 }
2937 }
2938 }
2939
2940 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, multipixel_with_output_stride) {
2941 TEST_REQUIRES_ARM_NEON_FMA;
2942 for (size_t channels = 1; channels <= 20; channels += 3) {
2943 DWConvMicrokernelTester()
2944 .cr(4)
2945 .kr(3)
2946 .channels(4)
2947 .width(5)
2948 .output_stride(23)
2949 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2950 }
2951 }
2952
2953 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, multipixel_with_qmin) {
2954 TEST_REQUIRES_ARM_NEON_FMA;
2955 for (size_t channels = 1; channels <= 20; channels += 3) {
2956 DWConvMicrokernelTester()
2957 .cr(4)
2958 .kr(3)
2959 .channels(channels)
2960 .width(3)
2961 .qmin(128)
2962 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2963 }
2964 }
2965
2966 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, multipixel_with_qmax) {
2967 TEST_REQUIRES_ARM_NEON_FMA;
2968 for (size_t channels = 1; channels <= 20; channels += 3) {
2969 DWConvMicrokernelTester()
2970 .cr(4)
2971 .kr(3)
2972 .channels(channels)
2973 .width(3)
2974 .qmax(128)
2975 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2976 }
2977 }
2978
2979 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, input_offset) {
2980 TEST_REQUIRES_ARM_NEON_FMA;
2981 for (uint32_t channels = 8; channels < 64; channels += 12) {
2982 DWConvMicrokernelTester()
2983 .cr(4)
2984 .kr(3)
2985 .channels(channels)
2986 .input_offset(112)
2987 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
2988 }
2989 }
2990
2991 TEST(F32_DWCONV_MINMAX_UP4X3__NEONFMA_ACC2, zero) {
2992 TEST_REQUIRES_ARM_NEON_FMA;
2993 for (uint32_t mz = 0; mz < 3; mz++) {
2994 for (uint32_t channels = 8; channels < 64; channels += 12) {
2995 DWConvMicrokernelTester()
2996 .cr(4)
2997 .kr(3)
2998 .channels(channels)
2999 .input_offset(112)
3000 .zero_index(mz)
3001 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neonfma_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
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003009 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_eq_4) {
3010 TEST_REQUIRES_ARM_NEON_FMA;
3011 DWConvMicrokernelTester()
3012 .cr(4)
3013 .kr(4)
3014 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003015 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003016 }
3017
3018 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3024 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003025 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003026 }
3027 }
3028
3029 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3035 .channels(channels)
3036 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003037 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003038 }
3039 }
3040
3041 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3047 .channels(channels)
3048 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003049 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003050 }
3051 }
3052
3053 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3059 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003060 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003061 }
3062 }
3063
3064 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3070 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003071 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003072 }
3073 }
3074
3075 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3081 .channels(channels)
3082 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003083 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003084 }
3085 }
3086
3087 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3093 .channels(channels)
3094 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003095 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003096 }
3097 }
3098
3099 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3105 .channels(channels)
3106 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003107 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003108 }
3109 }
3110
3111 TEST(F32_DWCONV_MINMAX_UP4X4__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 <= 4; step++) {
3115 DWConvMicrokernelTester()
3116 .cr(4)
3117 .kr(4)
3118 .channels(channels)
3119 .width(3)
3120 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003121 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003122 }
3123 }
3124 }
3125
3126 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3132 .channels(4)
3133 .width(5)
3134 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003135 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003136 }
3137 }
3138
3139 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3145 .channels(channels)
3146 .width(3)
3147 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003148 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003149 }
3150 }
3151
3152 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3158 .channels(channels)
3159 .width(3)
3160 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003161 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003162 }
3163 }
Frank Barchardd5360722020-05-17 16:10:36 -07003164
3165 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3171 .channels(channels)
3172 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003173 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07003174 }
3175 }
3176
3177 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, zero) {
3178 TEST_REQUIRES_ARM_NEON_FMA;
3179 for (uint32_t mz = 0; mz < 4; mz++) {
3180 for (uint32_t channels = 8; channels < 64; channels += 12) {
3181 DWConvMicrokernelTester()
3182 .cr(4)
3183 .kr(4)
3184 .channels(channels)
3185 .input_offset(112)
3186 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003187 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07003188 }
3189 }
3190 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003191#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
3192
3193
3194#if XNN_ARCH_ARM || XNN_ARCH_ARM64
3195 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_eq_4) {
3196 TEST_REQUIRES_ARM_NEON_FMA;
3197 DWConvMicrokernelTester()
3198 .cr(4)
3199 .kr(4)
3200 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003201 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003202 }
3203
3204 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3210 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003211 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003212 }
3213 }
3214
3215 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3221 .channels(channels)
3222 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003223 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003224 }
3225 }
3226
3227 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3233 .channels(channels)
3234 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003235 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003236 }
3237 }
3238
3239 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3245 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003246 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003247 }
3248 }
3249
3250 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3256 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003257 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003258 }
3259 }
3260
3261 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3267 .channels(channels)
3268 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003269 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003270 }
3271 }
3272
3273 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3279 .channels(channels)
3280 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003281 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003282 }
3283 }
3284
3285 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3291 .channels(channels)
3292 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003293 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003294 }
3295 }
3296
3297 TEST(F32_DWCONV_MINMAX_UP4X4__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 <= 4; step++) {
3301 DWConvMicrokernelTester()
3302 .cr(4)
3303 .kr(4)
3304 .channels(channels)
3305 .width(3)
3306 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003307 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003308 }
3309 }
3310 }
3311
3312 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3318 .channels(4)
3319 .width(5)
3320 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003321 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003322 }
3323 }
3324
3325 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3331 .channels(channels)
3332 .width(3)
3333 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003334 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003335 }
3336 }
3337
3338 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3344 .channels(channels)
3345 .width(3)
3346 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003347 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003348 }
3349 }
Frank Barchardd5360722020-05-17 16:10:36 -07003350
3351 TEST(F32_DWCONV_MINMAX_UP4X4__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(4)
3357 .channels(channels)
3358 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003359 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07003360 }
3361 }
3362
3363 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, zero) {
3364 TEST_REQUIRES_ARM_NEON_FMA;
3365 for (uint32_t mz = 0; mz < 4; mz++) {
3366 for (uint32_t channels = 8; channels < 64; channels += 12) {
3367 DWConvMicrokernelTester()
3368 .cr(4)
3369 .kr(4)
3370 .channels(channels)
3371 .input_offset(112)
3372 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003373 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07003374 }
3375 }
3376 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003377#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
3378
3379
3380#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -07003381 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_eq_8) {
3382 TEST_REQUIRES_ARM_NEON_FMA;
3383 DWConvMicrokernelTester()
3384 .cr(8)
3385 .kr(3)
3386 .channels(8)
3387 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma, xnn_init_f32_minmax_scalar_params);
3388 }
3389
3390 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_div_8) {
3391 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3398 }
3399 }
3400
3401 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_div_8_with_qmin) {
3402 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3410 }
3411 }
3412
3413 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_div_8_with_qmax) {
3414 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3422 }
3423 }
3424
3425 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_lt_8) {
3426 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3433 }
3434 }
3435
3436 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_gt_8) {
3437 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3444 }
3445 }
3446
3447 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_gt_8_with_qmin) {
3448 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3456 }
3457 }
3458
3459 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, c_gt_8_with_qmax) {
3460 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3468 }
3469 }
3470
3471 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, multipixel) {
3472 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3480 }
3481 }
3482
3483 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, multipixel_with_step) {
3484 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3494 }
3495 }
3496 }
3497
3498 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, multipixel_with_output_stride) {
3499 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3508 }
3509 }
3510
3511 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, multipixel_with_qmin) {
3512 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3521 }
3522 }
3523
3524 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, multipixel_with_qmax) {
3525 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3534 }
3535 }
3536
3537 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, input_offset) {
3538 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, xnn_init_f32_minmax_scalar_params);
3546 }
3547 }
3548
3549 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA, zero) {
3550 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma, 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
3567 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_eq_8) {
3568 TEST_REQUIRES_ARM_NEON_FMA;
3569 DWConvMicrokernelTester()
3570 .cr(8)
3571 .kr(3)
3572 .channels(8)
3573 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3574 }
3575
3576 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_div_8) {
3577 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3584 }
3585 }
3586
3587 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_div_8_with_qmin) {
3588 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3596 }
3597 }
3598
3599 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_div_8_with_qmax) {
3600 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3608 }
3609 }
3610
3611 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_lt_8) {
3612 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3619 }
3620 }
3621
3622 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_gt_8) {
3623 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3630 }
3631 }
3632
3633 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_gt_8_with_qmin) {
3634 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3642 }
3643 }
3644
3645 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, c_gt_8_with_qmax) {
3646 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3654 }
3655 }
3656
3657 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, multipixel) {
3658 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3666 }
3667 }
3668
3669 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, multipixel_with_step) {
3670 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3680 }
3681 }
3682 }
3683
3684 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, multipixel_with_output_stride) {
3685 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3694 }
3695 }
3696
3697 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, multipixel_with_qmin) {
3698 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3707 }
3708 }
3709
3710 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, multipixel_with_qmax) {
3711 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3720 }
3721 }
3722
3723 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, input_offset) {
3724 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
3732 }
3733 }
3734
3735 TEST(F32_DWCONV_MINMAX_UP8X3__NEONFMA_ACC2, zero) {
3736 TEST_REQUIRES_ARM_NEON_FMA;
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__neonfma_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
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003753 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_eq_8) {
3754 TEST_REQUIRES_ARM_NEON_FMA;
3755 DWConvMicrokernelTester()
3756 .cr(8)
3757 .kr(4)
3758 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003759 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003760 }
3761
3762 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3768 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003769 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003770 }
3771 }
3772
3773 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3779 .channels(channels)
3780 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003781 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003782 }
3783 }
3784
3785 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3791 .channels(channels)
3792 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003793 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003794 }
3795 }
3796
3797 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3803 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003804 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003805 }
3806 }
3807
3808 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3814 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003815 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003816 }
3817 }
3818
3819 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3825 .channels(channels)
3826 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003827 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003828 }
3829 }
3830
3831 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3837 .channels(channels)
3838 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003839 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003840 }
3841 }
3842
3843 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3849 .channels(channels)
3850 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003851 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003852 }
3853 }
3854
3855 TEST(F32_DWCONV_MINMAX_UP8X4__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 <= 4; step++) {
3859 DWConvMicrokernelTester()
3860 .cr(8)
3861 .kr(4)
3862 .channels(channels)
3863 .width(3)
3864 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003865 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003866 }
3867 }
3868 }
3869
3870 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3876 .channels(8)
3877 .width(5)
3878 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003879 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003880 }
3881 }
3882
3883 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3889 .channels(channels)
3890 .width(3)
3891 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003892 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003893 }
3894 }
3895
3896 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3902 .channels(channels)
3903 .width(3)
3904 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003905 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003906 }
3907 }
Frank Barchardd5360722020-05-17 16:10:36 -07003908
3909 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3915 .channels(channels)
3916 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003917 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07003918 }
3919 }
3920
3921 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, zero) {
3922 TEST_REQUIRES_ARM_NEON_FMA;
3923 for (uint32_t mz = 0; mz < 4; mz++) {
3924 for (uint32_t channels = 16; channels < 128; channels += 24) {
3925 DWConvMicrokernelTester()
3926 .cr(8)
3927 .kr(4)
3928 .channels(channels)
3929 .input_offset(176)
3930 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003931 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07003932 }
3933 }
3934 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003935#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
3936
3937
3938#if XNN_ARCH_ARM || XNN_ARCH_ARM64
3939 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_eq_8) {
3940 TEST_REQUIRES_ARM_NEON_FMA;
3941 DWConvMicrokernelTester()
3942 .cr(8)
3943 .kr(4)
3944 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003945 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003946 }
3947
3948 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3954 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003955 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003956 }
3957 }
3958
3959 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3965 .channels(channels)
3966 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003967 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003968 }
3969 }
3970
3971 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3977 .channels(channels)
3978 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003979 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003980 }
3981 }
3982
3983 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
3989 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07003990 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003991 }
3992 }
3993
3994 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
4000 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004001 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004002 }
4003 }
4004
4005 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
4011 .channels(channels)
4012 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004013 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004014 }
4015 }
4016
4017 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
4023 .channels(channels)
4024 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004025 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004026 }
4027 }
4028
4029 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
4035 .channels(channels)
4036 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004037 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004038 }
4039 }
4040
4041 TEST(F32_DWCONV_MINMAX_UP8X4__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 <= 4; step++) {
4045 DWConvMicrokernelTester()
4046 .cr(8)
4047 .kr(4)
4048 .channels(channels)
4049 .width(3)
4050 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004051 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004052 }
4053 }
4054 }
4055
4056 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
4062 .channels(8)
4063 .width(5)
4064 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004065 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004066 }
4067 }
4068
4069 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
4075 .channels(channels)
4076 .width(3)
4077 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004078 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004079 }
4080 }
4081
4082 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
4088 .channels(channels)
4089 .width(3)
4090 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004091 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004092 }
4093 }
Frank Barchardd5360722020-05-17 16:10:36 -07004094
4095 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
4101 .channels(channels)
4102 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004103 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07004104 }
4105 }
4106
4107 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, zero) {
4108 TEST_REQUIRES_ARM_NEON_FMA;
4109 for (uint32_t mz = 0; mz < 4; mz++) {
4110 for (uint32_t channels = 16; channels < 128; channels += 24) {
4111 DWConvMicrokernelTester()
4112 .cr(8)
4113 .kr(4)
4114 .channels(channels)
4115 .input_offset(176)
4116 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004117 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07004118 }
4119 }
4120 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004121#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
4122
4123
4124#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -07004125 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_eq_16) {
4126 TEST_REQUIRES_ARM_NEON_FMA;
4127 DWConvMicrokernelTester()
4128 .cr(16)
4129 .kr(3)
4130 .channels(16)
4131 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4132 }
4133
4134 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_div_16) {
4135 TEST_REQUIRES_ARM_NEON_FMA;
4136 for (uint32_t channels = 32; channels < 256; channels += 48) {
4137 DWConvMicrokernelTester()
4138 .cr(16)
4139 .kr(3)
4140 .channels(channels)
4141 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4142 }
4143 }
4144
4145 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_div_16_with_qmin) {
4146 TEST_REQUIRES_ARM_NEON_FMA;
4147 for (uint32_t channels = 32; channels < 256; channels += 48) {
4148 DWConvMicrokernelTester()
4149 .cr(16)
4150 .kr(3)
4151 .channels(channels)
4152 .qmin(128)
4153 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4154 }
4155 }
4156
4157 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_div_16_with_qmax) {
4158 TEST_REQUIRES_ARM_NEON_FMA;
4159 for (uint32_t channels = 32; channels < 256; channels += 48) {
4160 DWConvMicrokernelTester()
4161 .cr(16)
4162 .kr(3)
4163 .channels(channels)
4164 .qmax(128)
4165 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4166 }
4167 }
4168
4169 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_lt_16) {
4170 TEST_REQUIRES_ARM_NEON_FMA;
4171 for (uint32_t channels = 1; channels < 16; channels++) {
4172 DWConvMicrokernelTester()
4173 .cr(16)
4174 .kr(3)
4175 .channels(channels)
4176 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4177 }
4178 }
4179
4180 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_gt_16) {
4181 TEST_REQUIRES_ARM_NEON_FMA;
4182 for (uint32_t channels = 17; channels < 32; channels++) {
4183 DWConvMicrokernelTester()
4184 .cr(16)
4185 .kr(3)
4186 .channels(channels)
4187 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4188 }
4189 }
4190
4191 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_gt_16_with_qmin) {
4192 TEST_REQUIRES_ARM_NEON_FMA;
4193 for (uint32_t channels = 17; channels < 32; channels++) {
4194 DWConvMicrokernelTester()
4195 .cr(16)
4196 .kr(3)
4197 .channels(channels)
4198 .qmin(128)
4199 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4200 }
4201 }
4202
4203 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, c_gt_16_with_qmax) {
4204 TEST_REQUIRES_ARM_NEON_FMA;
4205 for (uint32_t channels = 17; channels < 32; channels++) {
4206 DWConvMicrokernelTester()
4207 .cr(16)
4208 .kr(3)
4209 .channels(channels)
4210 .qmax(128)
4211 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4212 }
4213 }
4214
4215 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, multipixel) {
4216 TEST_REQUIRES_ARM_NEON_FMA;
4217 for (size_t channels = 1; channels <= 80; channels += 15) {
4218 DWConvMicrokernelTester()
4219 .cr(16)
4220 .kr(3)
4221 .channels(channels)
4222 .width(3)
4223 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4224 }
4225 }
4226
4227 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, multipixel_with_step) {
4228 TEST_REQUIRES_ARM_NEON_FMA;
4229 for (size_t channels = 1; channels <= 80; channels += 15) {
4230 for (size_t step = 2; step <= 3; step++) {
4231 DWConvMicrokernelTester()
4232 .cr(16)
4233 .kr(3)
4234 .channels(channels)
4235 .width(3)
4236 .step(step)
4237 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4238 }
4239 }
4240 }
4241
4242 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, multipixel_with_output_stride) {
4243 TEST_REQUIRES_ARM_NEON_FMA;
4244 for (size_t channels = 1; channels <= 80; channels += 15) {
4245 DWConvMicrokernelTester()
4246 .cr(16)
4247 .kr(3)
4248 .channels(16)
4249 .width(5)
4250 .output_stride(83)
4251 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4252 }
4253 }
4254
4255 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, multipixel_with_qmin) {
4256 TEST_REQUIRES_ARM_NEON_FMA;
4257 for (size_t channels = 1; channels <= 80; channels += 15) {
4258 DWConvMicrokernelTester()
4259 .cr(16)
4260 .kr(3)
4261 .channels(channels)
4262 .width(3)
4263 .qmin(128)
4264 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4265 }
4266 }
4267
4268 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, multipixel_with_qmax) {
4269 TEST_REQUIRES_ARM_NEON_FMA;
4270 for (size_t channels = 1; channels <= 80; channels += 15) {
4271 DWConvMicrokernelTester()
4272 .cr(16)
4273 .kr(3)
4274 .channels(channels)
4275 .width(3)
4276 .qmax(128)
4277 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4278 }
4279 }
4280
4281 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, input_offset) {
4282 TEST_REQUIRES_ARM_NEON_FMA;
4283 for (uint32_t channels = 32; channels < 256; channels += 48) {
4284 DWConvMicrokernelTester()
4285 .cr(16)
4286 .kr(3)
4287 .channels(channels)
4288 .input_offset(304)
4289 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, xnn_init_f32_minmax_scalar_params);
4290 }
4291 }
4292
4293 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA, zero) {
4294 TEST_REQUIRES_ARM_NEON_FMA;
4295 for (uint32_t mz = 0; mz < 3; mz++) {
4296 for (uint32_t channels = 32; channels < 256; channels += 48) {
4297 DWConvMicrokernelTester()
4298 .cr(16)
4299 .kr(3)
4300 .channels(channels)
4301 .input_offset(304)
4302 .zero_index(mz)
4303 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma, 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
4311 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_eq_16) {
4312 TEST_REQUIRES_ARM_NEON_FMA;
4313 DWConvMicrokernelTester()
4314 .cr(16)
4315 .kr(3)
4316 .channels(16)
4317 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4318 }
4319
4320 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_div_16) {
4321 TEST_REQUIRES_ARM_NEON_FMA;
4322 for (uint32_t channels = 32; channels < 256; channels += 48) {
4323 DWConvMicrokernelTester()
4324 .cr(16)
4325 .kr(3)
4326 .channels(channels)
4327 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4328 }
4329 }
4330
4331 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_div_16_with_qmin) {
4332 TEST_REQUIRES_ARM_NEON_FMA;
4333 for (uint32_t channels = 32; channels < 256; channels += 48) {
4334 DWConvMicrokernelTester()
4335 .cr(16)
4336 .kr(3)
4337 .channels(channels)
4338 .qmin(128)
4339 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4340 }
4341 }
4342
4343 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_div_16_with_qmax) {
4344 TEST_REQUIRES_ARM_NEON_FMA;
4345 for (uint32_t channels = 32; channels < 256; channels += 48) {
4346 DWConvMicrokernelTester()
4347 .cr(16)
4348 .kr(3)
4349 .channels(channels)
4350 .qmax(128)
4351 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4352 }
4353 }
4354
4355 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_lt_16) {
4356 TEST_REQUIRES_ARM_NEON_FMA;
4357 for (uint32_t channels = 1; channels < 16; channels++) {
4358 DWConvMicrokernelTester()
4359 .cr(16)
4360 .kr(3)
4361 .channels(channels)
4362 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4363 }
4364 }
4365
4366 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_gt_16) {
4367 TEST_REQUIRES_ARM_NEON_FMA;
4368 for (uint32_t channels = 17; channels < 32; channels++) {
4369 DWConvMicrokernelTester()
4370 .cr(16)
4371 .kr(3)
4372 .channels(channels)
4373 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4374 }
4375 }
4376
4377 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_gt_16_with_qmin) {
4378 TEST_REQUIRES_ARM_NEON_FMA;
4379 for (uint32_t channels = 17; channels < 32; channels++) {
4380 DWConvMicrokernelTester()
4381 .cr(16)
4382 .kr(3)
4383 .channels(channels)
4384 .qmin(128)
4385 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4386 }
4387 }
4388
4389 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, c_gt_16_with_qmax) {
4390 TEST_REQUIRES_ARM_NEON_FMA;
4391 for (uint32_t channels = 17; channels < 32; channels++) {
4392 DWConvMicrokernelTester()
4393 .cr(16)
4394 .kr(3)
4395 .channels(channels)
4396 .qmax(128)
4397 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4398 }
4399 }
4400
4401 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, multipixel) {
4402 TEST_REQUIRES_ARM_NEON_FMA;
4403 for (size_t channels = 1; channels <= 80; channels += 15) {
4404 DWConvMicrokernelTester()
4405 .cr(16)
4406 .kr(3)
4407 .channels(channels)
4408 .width(3)
4409 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4410 }
4411 }
4412
4413 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, multipixel_with_step) {
4414 TEST_REQUIRES_ARM_NEON_FMA;
4415 for (size_t channels = 1; channels <= 80; channels += 15) {
4416 for (size_t step = 2; step <= 3; step++) {
4417 DWConvMicrokernelTester()
4418 .cr(16)
4419 .kr(3)
4420 .channels(channels)
4421 .width(3)
4422 .step(step)
4423 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4424 }
4425 }
4426 }
4427
4428 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, multipixel_with_output_stride) {
4429 TEST_REQUIRES_ARM_NEON_FMA;
4430 for (size_t channels = 1; channels <= 80; channels += 15) {
4431 DWConvMicrokernelTester()
4432 .cr(16)
4433 .kr(3)
4434 .channels(16)
4435 .width(5)
4436 .output_stride(83)
4437 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4438 }
4439 }
4440
4441 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, multipixel_with_qmin) {
4442 TEST_REQUIRES_ARM_NEON_FMA;
4443 for (size_t channels = 1; channels <= 80; channels += 15) {
4444 DWConvMicrokernelTester()
4445 .cr(16)
4446 .kr(3)
4447 .channels(channels)
4448 .width(3)
4449 .qmin(128)
4450 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4451 }
4452 }
4453
4454 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, multipixel_with_qmax) {
4455 TEST_REQUIRES_ARM_NEON_FMA;
4456 for (size_t channels = 1; channels <= 80; channels += 15) {
4457 DWConvMicrokernelTester()
4458 .cr(16)
4459 .kr(3)
4460 .channels(channels)
4461 .width(3)
4462 .qmax(128)
4463 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4464 }
4465 }
4466
4467 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, input_offset) {
4468 TEST_REQUIRES_ARM_NEON_FMA;
4469 for (uint32_t channels = 32; channels < 256; channels += 48) {
4470 DWConvMicrokernelTester()
4471 .cr(16)
4472 .kr(3)
4473 .channels(channels)
4474 .input_offset(304)
4475 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4476 }
4477 }
4478
4479 TEST(F32_DWCONV_MINMAX_UP16X3__NEONFMA_ACC2, zero) {
4480 TEST_REQUIRES_ARM_NEON_FMA;
4481 for (uint32_t mz = 0; mz < 3; mz++) {
4482 for (uint32_t channels = 32; channels < 256; channels += 48) {
4483 DWConvMicrokernelTester()
4484 .cr(16)
4485 .kr(3)
4486 .channels(channels)
4487 .input_offset(304)
4488 .zero_index(mz)
4489 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neonfma_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
Frank Barchardc9f9d672021-10-18 12:51:59 -07004497 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_eq_16) {
4498 TEST_REQUIRES_ARM_NEON_FMA;
4499 DWConvMicrokernelTester()
4500 .cr(16)
4501 .kr(4)
4502 .channels(16)
4503 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4504 }
4505
4506 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_div_16) {
4507 TEST_REQUIRES_ARM_NEON_FMA;
4508 for (uint32_t channels = 32; channels < 256; channels += 48) {
4509 DWConvMicrokernelTester()
4510 .cr(16)
4511 .kr(4)
4512 .channels(channels)
4513 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4514 }
4515 }
4516
4517 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_div_16_with_qmin) {
4518 TEST_REQUIRES_ARM_NEON_FMA;
4519 for (uint32_t channels = 32; channels < 256; channels += 48) {
4520 DWConvMicrokernelTester()
4521 .cr(16)
4522 .kr(4)
4523 .channels(channels)
4524 .qmin(128)
4525 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4526 }
4527 }
4528
4529 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_div_16_with_qmax) {
4530 TEST_REQUIRES_ARM_NEON_FMA;
4531 for (uint32_t channels = 32; channels < 256; channels += 48) {
4532 DWConvMicrokernelTester()
4533 .cr(16)
4534 .kr(4)
4535 .channels(channels)
4536 .qmax(128)
4537 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4538 }
4539 }
4540
4541 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_lt_16) {
4542 TEST_REQUIRES_ARM_NEON_FMA;
4543 for (uint32_t channels = 1; channels < 16; channels++) {
4544 DWConvMicrokernelTester()
4545 .cr(16)
4546 .kr(4)
4547 .channels(channels)
4548 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4549 }
4550 }
4551
4552 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_gt_16) {
4553 TEST_REQUIRES_ARM_NEON_FMA;
4554 for (uint32_t channels = 17; channels < 32; channels++) {
4555 DWConvMicrokernelTester()
4556 .cr(16)
4557 .kr(4)
4558 .channels(channels)
4559 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4560 }
4561 }
4562
4563 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_gt_16_with_qmin) {
4564 TEST_REQUIRES_ARM_NEON_FMA;
4565 for (uint32_t channels = 17; channels < 32; channels++) {
4566 DWConvMicrokernelTester()
4567 .cr(16)
4568 .kr(4)
4569 .channels(channels)
4570 .qmin(128)
4571 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4572 }
4573 }
4574
4575 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, c_gt_16_with_qmax) {
4576 TEST_REQUIRES_ARM_NEON_FMA;
4577 for (uint32_t channels = 17; channels < 32; channels++) {
4578 DWConvMicrokernelTester()
4579 .cr(16)
4580 .kr(4)
4581 .channels(channels)
4582 .qmax(128)
4583 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4584 }
4585 }
4586
4587 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, multipixel) {
4588 TEST_REQUIRES_ARM_NEON_FMA;
4589 for (size_t channels = 1; channels <= 80; channels += 15) {
4590 DWConvMicrokernelTester()
4591 .cr(16)
4592 .kr(4)
4593 .channels(channels)
4594 .width(3)
4595 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4596 }
4597 }
4598
4599 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, multipixel_with_step) {
4600 TEST_REQUIRES_ARM_NEON_FMA;
4601 for (size_t channels = 1; channels <= 80; channels += 15) {
4602 for (size_t step = 2; step <= 4; step++) {
4603 DWConvMicrokernelTester()
4604 .cr(16)
4605 .kr(4)
4606 .channels(channels)
4607 .width(3)
4608 .step(step)
4609 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4610 }
4611 }
4612 }
4613
4614 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, multipixel_with_output_stride) {
4615 TEST_REQUIRES_ARM_NEON_FMA;
4616 for (size_t channels = 1; channels <= 80; channels += 15) {
4617 DWConvMicrokernelTester()
4618 .cr(16)
4619 .kr(4)
4620 .channels(16)
4621 .width(5)
4622 .output_stride(83)
4623 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4624 }
4625 }
4626
4627 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, multipixel_with_qmin) {
4628 TEST_REQUIRES_ARM_NEON_FMA;
4629 for (size_t channels = 1; channels <= 80; channels += 15) {
4630 DWConvMicrokernelTester()
4631 .cr(16)
4632 .kr(4)
4633 .channels(channels)
4634 .width(3)
4635 .qmin(128)
4636 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4637 }
4638 }
4639
4640 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, multipixel_with_qmax) {
4641 TEST_REQUIRES_ARM_NEON_FMA;
4642 for (size_t channels = 1; channels <= 80; channels += 15) {
4643 DWConvMicrokernelTester()
4644 .cr(16)
4645 .kr(4)
4646 .channels(channels)
4647 .width(3)
4648 .qmax(128)
4649 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4650 }
4651 }
4652
4653 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, input_offset) {
4654 TEST_REQUIRES_ARM_NEON_FMA;
4655 for (uint32_t channels = 32; channels < 256; channels += 48) {
4656 DWConvMicrokernelTester()
4657 .cr(16)
4658 .kr(4)
4659 .channels(channels)
4660 .input_offset(304)
4661 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma, xnn_init_f32_minmax_scalar_params);
4662 }
4663 }
4664
4665 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA, zero) {
4666 TEST_REQUIRES_ARM_NEON_FMA;
4667 for (uint32_t mz = 0; mz < 4; mz++) {
4668 for (uint32_t channels = 32; channels < 256; channels += 48) {
4669 DWConvMicrokernelTester()
4670 .cr(16)
4671 .kr(4)
4672 .channels(channels)
4673 .input_offset(304)
4674 .zero_index(mz)
4675 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__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
4683 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_eq_16) {
4684 TEST_REQUIRES_ARM_NEON_FMA;
4685 DWConvMicrokernelTester()
4686 .cr(16)
4687 .kr(4)
4688 .channels(16)
4689 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4690 }
4691
4692 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_div_16) {
4693 TEST_REQUIRES_ARM_NEON_FMA;
4694 for (uint32_t channels = 32; channels < 256; channels += 48) {
4695 DWConvMicrokernelTester()
4696 .cr(16)
4697 .kr(4)
4698 .channels(channels)
4699 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4700 }
4701 }
4702
4703 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_div_16_with_qmin) {
4704 TEST_REQUIRES_ARM_NEON_FMA;
4705 for (uint32_t channels = 32; channels < 256; channels += 48) {
4706 DWConvMicrokernelTester()
4707 .cr(16)
4708 .kr(4)
4709 .channels(channels)
4710 .qmin(128)
4711 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4712 }
4713 }
4714
4715 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_div_16_with_qmax) {
4716 TEST_REQUIRES_ARM_NEON_FMA;
4717 for (uint32_t channels = 32; channels < 256; channels += 48) {
4718 DWConvMicrokernelTester()
4719 .cr(16)
4720 .kr(4)
4721 .channels(channels)
4722 .qmax(128)
4723 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4724 }
4725 }
4726
4727 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_lt_16) {
4728 TEST_REQUIRES_ARM_NEON_FMA;
4729 for (uint32_t channels = 1; channels < 16; channels++) {
4730 DWConvMicrokernelTester()
4731 .cr(16)
4732 .kr(4)
4733 .channels(channels)
4734 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4735 }
4736 }
4737
4738 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_gt_16) {
4739 TEST_REQUIRES_ARM_NEON_FMA;
4740 for (uint32_t channels = 17; channels < 32; channels++) {
4741 DWConvMicrokernelTester()
4742 .cr(16)
4743 .kr(4)
4744 .channels(channels)
4745 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4746 }
4747 }
4748
4749 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_gt_16_with_qmin) {
4750 TEST_REQUIRES_ARM_NEON_FMA;
4751 for (uint32_t channels = 17; channels < 32; channels++) {
4752 DWConvMicrokernelTester()
4753 .cr(16)
4754 .kr(4)
4755 .channels(channels)
4756 .qmin(128)
4757 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4758 }
4759 }
4760
4761 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, c_gt_16_with_qmax) {
4762 TEST_REQUIRES_ARM_NEON_FMA;
4763 for (uint32_t channels = 17; channels < 32; channels++) {
4764 DWConvMicrokernelTester()
4765 .cr(16)
4766 .kr(4)
4767 .channels(channels)
4768 .qmax(128)
4769 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4770 }
4771 }
4772
4773 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, multipixel) {
4774 TEST_REQUIRES_ARM_NEON_FMA;
4775 for (size_t channels = 1; channels <= 80; channels += 15) {
4776 DWConvMicrokernelTester()
4777 .cr(16)
4778 .kr(4)
4779 .channels(channels)
4780 .width(3)
4781 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4782 }
4783 }
4784
4785 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, multipixel_with_step) {
4786 TEST_REQUIRES_ARM_NEON_FMA;
4787 for (size_t channels = 1; channels <= 80; channels += 15) {
4788 for (size_t step = 2; step <= 4; step++) {
4789 DWConvMicrokernelTester()
4790 .cr(16)
4791 .kr(4)
4792 .channels(channels)
4793 .width(3)
4794 .step(step)
4795 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4796 }
4797 }
4798 }
4799
4800 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, multipixel_with_output_stride) {
4801 TEST_REQUIRES_ARM_NEON_FMA;
4802 for (size_t channels = 1; channels <= 80; channels += 15) {
4803 DWConvMicrokernelTester()
4804 .cr(16)
4805 .kr(4)
4806 .channels(16)
4807 .width(5)
4808 .output_stride(83)
4809 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4810 }
4811 }
4812
4813 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, multipixel_with_qmin) {
4814 TEST_REQUIRES_ARM_NEON_FMA;
4815 for (size_t channels = 1; channels <= 80; channels += 15) {
4816 DWConvMicrokernelTester()
4817 .cr(16)
4818 .kr(4)
4819 .channels(channels)
4820 .width(3)
4821 .qmin(128)
4822 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4823 }
4824 }
4825
4826 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, multipixel_with_qmax) {
4827 TEST_REQUIRES_ARM_NEON_FMA;
4828 for (size_t channels = 1; channels <= 80; channels += 15) {
4829 DWConvMicrokernelTester()
4830 .cr(16)
4831 .kr(4)
4832 .channels(channels)
4833 .width(3)
4834 .qmax(128)
4835 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4836 }
4837 }
4838
4839 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, input_offset) {
4840 TEST_REQUIRES_ARM_NEON_FMA;
4841 for (uint32_t channels = 32; channels < 256; channels += 48) {
4842 DWConvMicrokernelTester()
4843 .cr(16)
4844 .kr(4)
4845 .channels(channels)
4846 .input_offset(304)
4847 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neonfma_acc2, xnn_init_f32_minmax_scalar_params);
4848 }
4849 }
4850
4851 TEST(F32_DWCONV_MINMAX_UP16X4__NEONFMA_ACC2, zero) {
4852 TEST_REQUIRES_ARM_NEON_FMA;
4853 for (uint32_t mz = 0; mz < 4; mz++) {
4854 for (uint32_t channels = 32; channels < 256; channels += 48) {
4855 DWConvMicrokernelTester()
4856 .cr(16)
4857 .kr(4)
4858 .channels(channels)
4859 .input_offset(304)
4860 .zero_index(mz)
4861 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__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
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004869 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_eq_4) {
4870 TEST_REQUIRES_ARM_NEON;
4871 DWConvMicrokernelTester()
4872 .cr(4)
4873 .kr(25)
4874 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004875 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004876 }
4877
4878 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_div_4) {
4879 TEST_REQUIRES_ARM_NEON;
4880 for (uint32_t channels = 8; channels < 64; channels += 12) {
4881 DWConvMicrokernelTester()
4882 .cr(4)
4883 .kr(25)
4884 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004885 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004886 }
4887 }
4888
4889 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_div_4_with_qmin) {
4890 TEST_REQUIRES_ARM_NEON;
4891 for (uint32_t channels = 8; channels < 64; channels += 12) {
4892 DWConvMicrokernelTester()
4893 .cr(4)
4894 .kr(25)
4895 .channels(channels)
4896 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004897 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004898 }
4899 }
4900
4901 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_div_4_with_qmax) {
4902 TEST_REQUIRES_ARM_NEON;
4903 for (uint32_t channels = 8; channels < 64; channels += 12) {
4904 DWConvMicrokernelTester()
4905 .cr(4)
4906 .kr(25)
4907 .channels(channels)
4908 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004909 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004910 }
4911 }
4912
4913 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_lt_4) {
4914 TEST_REQUIRES_ARM_NEON;
4915 for (uint32_t channels = 1; channels < 4; channels++) {
4916 DWConvMicrokernelTester()
4917 .cr(4)
4918 .kr(25)
4919 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004920 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004921 }
4922 }
4923
4924 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_gt_4) {
4925 TEST_REQUIRES_ARM_NEON;
4926 for (uint32_t channels = 5; channels < 8; channels++) {
4927 DWConvMicrokernelTester()
4928 .cr(4)
4929 .kr(25)
4930 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004931 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004932 }
4933 }
4934
4935 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_gt_4_with_qmin) {
4936 TEST_REQUIRES_ARM_NEON;
4937 for (uint32_t channels = 5; channels < 8; channels++) {
4938 DWConvMicrokernelTester()
4939 .cr(4)
4940 .kr(25)
4941 .channels(channels)
4942 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004943 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004944 }
4945 }
4946
4947 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_gt_4_with_qmax) {
4948 TEST_REQUIRES_ARM_NEON;
4949 for (uint32_t channels = 5; channels < 8; channels++) {
4950 DWConvMicrokernelTester()
4951 .cr(4)
4952 .kr(25)
4953 .channels(channels)
4954 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004955 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004956 }
4957 }
4958
4959 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel) {
4960 TEST_REQUIRES_ARM_NEON;
4961 for (size_t channels = 1; channels <= 20; channels += 3) {
4962 DWConvMicrokernelTester()
4963 .cr(4)
4964 .kr(25)
4965 .channels(channels)
4966 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004967 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004968 }
4969 }
4970
4971 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel_with_step) {
4972 TEST_REQUIRES_ARM_NEON;
4973 for (size_t channels = 1; channels <= 20; channels += 3) {
4974 for (size_t step = 2; step <= 25; step++) {
4975 DWConvMicrokernelTester()
4976 .cr(4)
4977 .kr(25)
4978 .channels(channels)
4979 .width(3)
4980 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004981 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004982 }
4983 }
4984 }
4985
4986 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel_with_output_stride) {
4987 TEST_REQUIRES_ARM_NEON;
4988 for (size_t channels = 1; channels <= 20; channels += 3) {
4989 DWConvMicrokernelTester()
4990 .cr(4)
4991 .kr(25)
4992 .channels(4)
4993 .width(5)
4994 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07004995 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004996 }
4997 }
4998
4999 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel_with_qmin) {
5000 TEST_REQUIRES_ARM_NEON;
5001 for (size_t channels = 1; channels <= 20; channels += 3) {
5002 DWConvMicrokernelTester()
5003 .cr(4)
5004 .kr(25)
5005 .channels(channels)
5006 .width(3)
5007 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005008 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005009 }
5010 }
5011
5012 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel_with_qmax) {
5013 TEST_REQUIRES_ARM_NEON;
5014 for (size_t channels = 1; channels <= 20; channels += 3) {
5015 DWConvMicrokernelTester()
5016 .cr(4)
5017 .kr(25)
5018 .channels(channels)
5019 .width(3)
5020 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005021 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005022 }
5023 }
Frank Barchardd5360722020-05-17 16:10:36 -07005024
5025 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, input_offset) {
5026 TEST_REQUIRES_ARM_NEON;
5027 for (uint32_t channels = 8; channels < 64; channels += 12) {
5028 DWConvMicrokernelTester()
5029 .cr(4)
5030 .kr(25)
5031 .channels(channels)
5032 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005033 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07005034 }
5035 }
5036
5037 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, zero) {
5038 TEST_REQUIRES_ARM_NEON;
5039 for (uint32_t mz = 0; mz < 25; mz++) {
5040 for (uint32_t channels = 8; channels < 64; channels += 12) {
5041 DWConvMicrokernelTester()
5042 .cr(4)
5043 .kr(25)
5044 .channels(channels)
5045 .input_offset(112)
5046 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005047 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07005048 }
5049 }
5050 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005051#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
5052
5053
5054#if XNN_ARCH_ARM || XNN_ARCH_ARM64
5055 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_eq_4) {
5056 TEST_REQUIRES_ARM_NEON;
5057 DWConvMicrokernelTester()
5058 .cr(4)
5059 .kr(25)
5060 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005061 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005062 }
5063
5064 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_div_4) {
5065 TEST_REQUIRES_ARM_NEON;
5066 for (uint32_t channels = 8; channels < 64; channels += 12) {
5067 DWConvMicrokernelTester()
5068 .cr(4)
5069 .kr(25)
5070 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005071 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005072 }
5073 }
5074
5075 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_div_4_with_qmin) {
5076 TEST_REQUIRES_ARM_NEON;
5077 for (uint32_t channels = 8; channels < 64; channels += 12) {
5078 DWConvMicrokernelTester()
5079 .cr(4)
5080 .kr(25)
5081 .channels(channels)
5082 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005083 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005084 }
5085 }
5086
5087 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_div_4_with_qmax) {
5088 TEST_REQUIRES_ARM_NEON;
5089 for (uint32_t channels = 8; channels < 64; channels += 12) {
5090 DWConvMicrokernelTester()
5091 .cr(4)
5092 .kr(25)
5093 .channels(channels)
5094 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005095 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005096 }
5097 }
5098
5099 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_lt_4) {
5100 TEST_REQUIRES_ARM_NEON;
5101 for (uint32_t channels = 1; channels < 4; channels++) {
5102 DWConvMicrokernelTester()
5103 .cr(4)
5104 .kr(25)
5105 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005106 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005107 }
5108 }
5109
5110 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_gt_4) {
5111 TEST_REQUIRES_ARM_NEON;
5112 for (uint32_t channels = 5; channels < 8; channels++) {
5113 DWConvMicrokernelTester()
5114 .cr(4)
5115 .kr(25)
5116 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005117 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005118 }
5119 }
5120
5121 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_gt_4_with_qmin) {
5122 TEST_REQUIRES_ARM_NEON;
5123 for (uint32_t channels = 5; channels < 8; channels++) {
5124 DWConvMicrokernelTester()
5125 .cr(4)
5126 .kr(25)
5127 .channels(channels)
5128 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005129 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005130 }
5131 }
5132
5133 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_gt_4_with_qmax) {
5134 TEST_REQUIRES_ARM_NEON;
5135 for (uint32_t channels = 5; channels < 8; channels++) {
5136 DWConvMicrokernelTester()
5137 .cr(4)
5138 .kr(25)
5139 .channels(channels)
5140 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005141 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005142 }
5143 }
5144
5145 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel) {
5146 TEST_REQUIRES_ARM_NEON;
5147 for (size_t channels = 1; channels <= 20; channels += 3) {
5148 DWConvMicrokernelTester()
5149 .cr(4)
5150 .kr(25)
5151 .channels(channels)
5152 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005153 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005154 }
5155 }
5156
5157 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel_with_step) {
5158 TEST_REQUIRES_ARM_NEON;
5159 for (size_t channels = 1; channels <= 20; channels += 3) {
5160 for (size_t step = 2; step <= 25; step++) {
5161 DWConvMicrokernelTester()
5162 .cr(4)
5163 .kr(25)
5164 .channels(channels)
5165 .width(3)
5166 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005167 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005168 }
5169 }
5170 }
5171
5172 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel_with_output_stride) {
5173 TEST_REQUIRES_ARM_NEON;
5174 for (size_t channels = 1; channels <= 20; channels += 3) {
5175 DWConvMicrokernelTester()
5176 .cr(4)
5177 .kr(25)
5178 .channels(4)
5179 .width(5)
5180 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005181 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005182 }
5183 }
5184
5185 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel_with_qmin) {
5186 TEST_REQUIRES_ARM_NEON;
5187 for (size_t channels = 1; channels <= 20; channels += 3) {
5188 DWConvMicrokernelTester()
5189 .cr(4)
5190 .kr(25)
5191 .channels(channels)
5192 .width(3)
5193 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005194 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005195 }
5196 }
5197
5198 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel_with_qmax) {
5199 TEST_REQUIRES_ARM_NEON;
5200 for (size_t channels = 1; channels <= 20; channels += 3) {
5201 DWConvMicrokernelTester()
5202 .cr(4)
5203 .kr(25)
5204 .channels(channels)
5205 .width(3)
5206 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005207 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005208 }
5209 }
Frank Barchardd5360722020-05-17 16:10:36 -07005210
5211 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, input_offset) {
5212 TEST_REQUIRES_ARM_NEON;
5213 for (uint32_t channels = 8; channels < 64; channels += 12) {
5214 DWConvMicrokernelTester()
5215 .cr(4)
5216 .kr(25)
5217 .channels(channels)
5218 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005219 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07005220 }
5221 }
5222
5223 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, zero) {
5224 TEST_REQUIRES_ARM_NEON;
5225 for (uint32_t mz = 0; mz < 25; mz++) {
5226 for (uint32_t channels = 8; channels < 64; channels += 12) {
5227 DWConvMicrokernelTester()
5228 .cr(4)
5229 .kr(25)
5230 .channels(channels)
5231 .input_offset(112)
5232 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005233 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07005234 }
5235 }
5236 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005237#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
5238
5239
5240#if XNN_ARCH_ARM || XNN_ARCH_ARM64
5241 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_eq_8) {
5242 TEST_REQUIRES_ARM_NEON;
5243 DWConvMicrokernelTester()
5244 .cr(8)
5245 .kr(25)
5246 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005247 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005248 }
5249
5250 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_div_8) {
5251 TEST_REQUIRES_ARM_NEON;
5252 for (uint32_t channels = 16; channels < 128; channels += 24) {
5253 DWConvMicrokernelTester()
5254 .cr(8)
5255 .kr(25)
5256 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005257 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005258 }
5259 }
5260
5261 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_div_8_with_qmin) {
5262 TEST_REQUIRES_ARM_NEON;
5263 for (uint32_t channels = 16; channels < 128; channels += 24) {
5264 DWConvMicrokernelTester()
5265 .cr(8)
5266 .kr(25)
5267 .channels(channels)
5268 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005269 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005270 }
5271 }
5272
5273 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_div_8_with_qmax) {
5274 TEST_REQUIRES_ARM_NEON;
5275 for (uint32_t channels = 16; channels < 128; channels += 24) {
5276 DWConvMicrokernelTester()
5277 .cr(8)
5278 .kr(25)
5279 .channels(channels)
5280 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005281 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005282 }
5283 }
5284
5285 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_lt_8) {
5286 TEST_REQUIRES_ARM_NEON;
5287 for (uint32_t channels = 1; channels < 8; channels++) {
5288 DWConvMicrokernelTester()
5289 .cr(8)
5290 .kr(25)
5291 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005292 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005293 }
5294 }
5295
5296 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_gt_8) {
5297 TEST_REQUIRES_ARM_NEON;
5298 for (uint32_t channels = 9; channels < 16; channels++) {
5299 DWConvMicrokernelTester()
5300 .cr(8)
5301 .kr(25)
5302 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005303 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005304 }
5305 }
5306
5307 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_gt_8_with_qmin) {
5308 TEST_REQUIRES_ARM_NEON;
5309 for (uint32_t channels = 9; channels < 16; channels++) {
5310 DWConvMicrokernelTester()
5311 .cr(8)
5312 .kr(25)
5313 .channels(channels)
5314 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005315 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005316 }
5317 }
5318
5319 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_gt_8_with_qmax) {
5320 TEST_REQUIRES_ARM_NEON;
5321 for (uint32_t channels = 9; channels < 16; channels++) {
5322 DWConvMicrokernelTester()
5323 .cr(8)
5324 .kr(25)
5325 .channels(channels)
5326 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005327 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005328 }
5329 }
5330
5331 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel) {
5332 TEST_REQUIRES_ARM_NEON;
5333 for (size_t channels = 1; channels <= 40; channels += 7) {
5334 DWConvMicrokernelTester()
5335 .cr(8)
5336 .kr(25)
5337 .channels(channels)
5338 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005339 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005340 }
5341 }
5342
5343 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel_with_step) {
5344 TEST_REQUIRES_ARM_NEON;
5345 for (size_t channels = 1; channels <= 40; channels += 7) {
5346 for (size_t step = 2; step <= 25; step++) {
5347 DWConvMicrokernelTester()
5348 .cr(8)
5349 .kr(25)
5350 .channels(channels)
5351 .width(3)
5352 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005353 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005354 }
5355 }
5356 }
5357
5358 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel_with_output_stride) {
5359 TEST_REQUIRES_ARM_NEON;
5360 for (size_t channels = 1; channels <= 40; channels += 7) {
5361 DWConvMicrokernelTester()
5362 .cr(8)
5363 .kr(25)
5364 .channels(8)
5365 .width(5)
5366 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005367 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005368 }
5369 }
5370
5371 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel_with_qmin) {
5372 TEST_REQUIRES_ARM_NEON;
5373 for (size_t channels = 1; channels <= 40; channels += 7) {
5374 DWConvMicrokernelTester()
5375 .cr(8)
5376 .kr(25)
5377 .channels(channels)
5378 .width(3)
5379 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005380 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005381 }
5382 }
5383
5384 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel_with_qmax) {
5385 TEST_REQUIRES_ARM_NEON;
5386 for (size_t channels = 1; channels <= 40; channels += 7) {
5387 DWConvMicrokernelTester()
5388 .cr(8)
5389 .kr(25)
5390 .channels(channels)
5391 .width(3)
5392 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005393 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005394 }
5395 }
Frank Barchardd5360722020-05-17 16:10:36 -07005396
5397 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, input_offset) {
5398 TEST_REQUIRES_ARM_NEON;
5399 for (uint32_t channels = 16; channels < 128; channels += 24) {
5400 DWConvMicrokernelTester()
5401 .cr(8)
5402 .kr(25)
5403 .channels(channels)
5404 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005405 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07005406 }
5407 }
5408
5409 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, zero) {
5410 TEST_REQUIRES_ARM_NEON;
5411 for (uint32_t mz = 0; mz < 25; mz++) {
5412 for (uint32_t channels = 16; channels < 128; channels += 24) {
5413 DWConvMicrokernelTester()
5414 .cr(8)
5415 .kr(25)
5416 .channels(channels)
5417 .input_offset(176)
5418 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005419 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07005420 }
5421 }
5422 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005423#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
5424
5425
5426#if XNN_ARCH_ARM || XNN_ARCH_ARM64
5427 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_eq_8) {
5428 TEST_REQUIRES_ARM_NEON;
5429 DWConvMicrokernelTester()
5430 .cr(8)
5431 .kr(25)
5432 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005433 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005434 }
5435
5436 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_div_8) {
5437 TEST_REQUIRES_ARM_NEON;
5438 for (uint32_t channels = 16; channels < 128; channels += 24) {
5439 DWConvMicrokernelTester()
5440 .cr(8)
5441 .kr(25)
5442 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005443 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005444 }
5445 }
5446
5447 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_div_8_with_qmin) {
5448 TEST_REQUIRES_ARM_NEON;
5449 for (uint32_t channels = 16; channels < 128; channels += 24) {
5450 DWConvMicrokernelTester()
5451 .cr(8)
5452 .kr(25)
5453 .channels(channels)
5454 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005455 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005456 }
5457 }
5458
5459 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_div_8_with_qmax) {
5460 TEST_REQUIRES_ARM_NEON;
5461 for (uint32_t channels = 16; channels < 128; channels += 24) {
5462 DWConvMicrokernelTester()
5463 .cr(8)
5464 .kr(25)
5465 .channels(channels)
5466 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005467 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005468 }
5469 }
5470
5471 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_lt_8) {
5472 TEST_REQUIRES_ARM_NEON;
5473 for (uint32_t channels = 1; channels < 8; channels++) {
5474 DWConvMicrokernelTester()
5475 .cr(8)
5476 .kr(25)
5477 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005478 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005479 }
5480 }
5481
5482 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_gt_8) {
5483 TEST_REQUIRES_ARM_NEON;
5484 for (uint32_t channels = 9; channels < 16; channels++) {
5485 DWConvMicrokernelTester()
5486 .cr(8)
5487 .kr(25)
5488 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005489 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005490 }
5491 }
5492
5493 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_gt_8_with_qmin) {
5494 TEST_REQUIRES_ARM_NEON;
5495 for (uint32_t channels = 9; channels < 16; channels++) {
5496 DWConvMicrokernelTester()
5497 .cr(8)
5498 .kr(25)
5499 .channels(channels)
5500 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005501 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005502 }
5503 }
5504
5505 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_gt_8_with_qmax) {
5506 TEST_REQUIRES_ARM_NEON;
5507 for (uint32_t channels = 9; channels < 16; channels++) {
5508 DWConvMicrokernelTester()
5509 .cr(8)
5510 .kr(25)
5511 .channels(channels)
5512 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005513 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005514 }
5515 }
5516
5517 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel) {
5518 TEST_REQUIRES_ARM_NEON;
5519 for (size_t channels = 1; channels <= 40; channels += 7) {
5520 DWConvMicrokernelTester()
5521 .cr(8)
5522 .kr(25)
5523 .channels(channels)
5524 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005525 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005526 }
5527 }
5528
5529 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel_with_step) {
5530 TEST_REQUIRES_ARM_NEON;
5531 for (size_t channels = 1; channels <= 40; channels += 7) {
5532 for (size_t step = 2; step <= 25; step++) {
5533 DWConvMicrokernelTester()
5534 .cr(8)
5535 .kr(25)
5536 .channels(channels)
5537 .width(3)
5538 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005539 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005540 }
5541 }
5542 }
5543
5544 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel_with_output_stride) {
5545 TEST_REQUIRES_ARM_NEON;
5546 for (size_t channels = 1; channels <= 40; channels += 7) {
5547 DWConvMicrokernelTester()
5548 .cr(8)
5549 .kr(25)
5550 .channels(8)
5551 .width(5)
5552 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005553 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005554 }
5555 }
5556
5557 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel_with_qmin) {
5558 TEST_REQUIRES_ARM_NEON;
5559 for (size_t channels = 1; channels <= 40; channels += 7) {
5560 DWConvMicrokernelTester()
5561 .cr(8)
5562 .kr(25)
5563 .channels(channels)
5564 .width(3)
5565 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005566 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005567 }
5568 }
5569
5570 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel_with_qmax) {
5571 TEST_REQUIRES_ARM_NEON;
5572 for (size_t channels = 1; channels <= 40; channels += 7) {
5573 DWConvMicrokernelTester()
5574 .cr(8)
5575 .kr(25)
5576 .channels(channels)
5577 .width(3)
5578 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005579 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005580 }
5581 }
Frank Barchardd5360722020-05-17 16:10:36 -07005582
5583 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, input_offset) {
5584 TEST_REQUIRES_ARM_NEON;
5585 for (uint32_t channels = 16; channels < 128; channels += 24) {
5586 DWConvMicrokernelTester()
5587 .cr(8)
5588 .kr(25)
5589 .channels(channels)
5590 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005591 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07005592 }
5593 }
5594
5595 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, zero) {
5596 TEST_REQUIRES_ARM_NEON;
5597 for (uint32_t mz = 0; mz < 25; mz++) {
5598 for (uint32_t channels = 16; channels < 128; channels += 24) {
5599 DWConvMicrokernelTester()
5600 .cr(8)
5601 .kr(25)
5602 .channels(channels)
5603 .input_offset(176)
5604 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005605 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07005606 }
5607 }
5608 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07005609#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
5610
5611
5612#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Frank Barchardc9f9d672021-10-18 12:51:59 -07005613 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_eq_16) {
5614 TEST_REQUIRES_ARM_NEON;
5615 DWConvMicrokernelTester()
5616 .cr(16)
5617 .kr(25)
5618 .channels(16)
5619 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5620 }
5621
5622 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_div_16) {
5623 TEST_REQUIRES_ARM_NEON;
5624 for (uint32_t channels = 32; channels < 256; channels += 48) {
5625 DWConvMicrokernelTester()
5626 .cr(16)
5627 .kr(25)
5628 .channels(channels)
5629 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5630 }
5631 }
5632
5633 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_div_16_with_qmin) {
5634 TEST_REQUIRES_ARM_NEON;
5635 for (uint32_t channels = 32; channels < 256; channels += 48) {
5636 DWConvMicrokernelTester()
5637 .cr(16)
5638 .kr(25)
5639 .channels(channels)
5640 .qmin(128)
5641 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5642 }
5643 }
5644
5645 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_div_16_with_qmax) {
5646 TEST_REQUIRES_ARM_NEON;
5647 for (uint32_t channels = 32; channels < 256; channels += 48) {
5648 DWConvMicrokernelTester()
5649 .cr(16)
5650 .kr(25)
5651 .channels(channels)
5652 .qmax(128)
5653 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5654 }
5655 }
5656
5657 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_lt_16) {
5658 TEST_REQUIRES_ARM_NEON;
5659 for (uint32_t channels = 1; channels < 16; channels++) {
5660 DWConvMicrokernelTester()
5661 .cr(16)
5662 .kr(25)
5663 .channels(channels)
5664 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5665 }
5666 }
5667
5668 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_gt_16) {
5669 TEST_REQUIRES_ARM_NEON;
5670 for (uint32_t channels = 17; channels < 32; channels++) {
5671 DWConvMicrokernelTester()
5672 .cr(16)
5673 .kr(25)
5674 .channels(channels)
5675 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5676 }
5677 }
5678
5679 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_gt_16_with_qmin) {
5680 TEST_REQUIRES_ARM_NEON;
5681 for (uint32_t channels = 17; channels < 32; channels++) {
5682 DWConvMicrokernelTester()
5683 .cr(16)
5684 .kr(25)
5685 .channels(channels)
5686 .qmin(128)
5687 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5688 }
5689 }
5690
5691 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, c_gt_16_with_qmax) {
5692 TEST_REQUIRES_ARM_NEON;
5693 for (uint32_t channels = 17; channels < 32; channels++) {
5694 DWConvMicrokernelTester()
5695 .cr(16)
5696 .kr(25)
5697 .channels(channels)
5698 .qmax(128)
5699 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5700 }
5701 }
5702
5703 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, multipixel) {
5704 TEST_REQUIRES_ARM_NEON;
5705 for (size_t channels = 1; channels <= 80; channels += 15) {
5706 DWConvMicrokernelTester()
5707 .cr(16)
5708 .kr(25)
5709 .channels(channels)
5710 .width(3)
5711 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5712 }
5713 }
5714
5715 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, multipixel_with_step) {
5716 TEST_REQUIRES_ARM_NEON;
5717 for (size_t channels = 1; channels <= 80; channels += 15) {
5718 for (size_t step = 2; step <= 25; step++) {
5719 DWConvMicrokernelTester()
5720 .cr(16)
5721 .kr(25)
5722 .channels(channels)
5723 .width(3)
5724 .step(step)
5725 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5726 }
5727 }
5728 }
5729
5730 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, multipixel_with_output_stride) {
5731 TEST_REQUIRES_ARM_NEON;
5732 for (size_t channels = 1; channels <= 80; channels += 15) {
5733 DWConvMicrokernelTester()
5734 .cr(16)
5735 .kr(25)
5736 .channels(16)
5737 .width(5)
5738 .output_stride(83)
5739 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5740 }
5741 }
5742
5743 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, multipixel_with_qmin) {
5744 TEST_REQUIRES_ARM_NEON;
5745 for (size_t channels = 1; channels <= 80; channels += 15) {
5746 DWConvMicrokernelTester()
5747 .cr(16)
5748 .kr(25)
5749 .channels(channels)
5750 .width(3)
5751 .qmin(128)
5752 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5753 }
5754 }
5755
5756 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, multipixel_with_qmax) {
5757 TEST_REQUIRES_ARM_NEON;
5758 for (size_t channels = 1; channels <= 80; channels += 15) {
5759 DWConvMicrokernelTester()
5760 .cr(16)
5761 .kr(25)
5762 .channels(channels)
5763 .width(3)
5764 .qmax(128)
5765 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5766 }
5767 }
5768
5769 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, input_offset) {
5770 TEST_REQUIRES_ARM_NEON;
5771 for (uint32_t channels = 32; channels < 256; channels += 48) {
5772 DWConvMicrokernelTester()
5773 .cr(16)
5774 .kr(25)
5775 .channels(channels)
5776 .input_offset(304)
5777 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon, xnn_init_f32_minmax_scalar_params);
5778 }
5779 }
5780
5781 TEST(F32_DWCONV_MINMAX_UP16X25__NEON, zero) {
5782 TEST_REQUIRES_ARM_NEON;
5783 for (uint32_t mz = 0; mz < 25; mz++) {
5784 for (uint32_t channels = 32; channels < 256; channels += 48) {
5785 DWConvMicrokernelTester()
5786 .cr(16)
5787 .kr(25)
5788 .channels(channels)
5789 .input_offset(304)
5790 .zero_index(mz)
5791 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__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
5799 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_eq_16) {
5800 TEST_REQUIRES_ARM_NEON;
5801 DWConvMicrokernelTester()
5802 .cr(16)
5803 .kr(25)
5804 .channels(16)
5805 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5806 }
5807
5808 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_div_16) {
5809 TEST_REQUIRES_ARM_NEON;
5810 for (uint32_t channels = 32; channels < 256; channels += 48) {
5811 DWConvMicrokernelTester()
5812 .cr(16)
5813 .kr(25)
5814 .channels(channels)
5815 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5816 }
5817 }
5818
5819 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_div_16_with_qmin) {
5820 TEST_REQUIRES_ARM_NEON;
5821 for (uint32_t channels = 32; channels < 256; channels += 48) {
5822 DWConvMicrokernelTester()
5823 .cr(16)
5824 .kr(25)
5825 .channels(channels)
5826 .qmin(128)
5827 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5828 }
5829 }
5830
5831 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_div_16_with_qmax) {
5832 TEST_REQUIRES_ARM_NEON;
5833 for (uint32_t channels = 32; channels < 256; channels += 48) {
5834 DWConvMicrokernelTester()
5835 .cr(16)
5836 .kr(25)
5837 .channels(channels)
5838 .qmax(128)
5839 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5840 }
5841 }
5842
5843 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_lt_16) {
5844 TEST_REQUIRES_ARM_NEON;
5845 for (uint32_t channels = 1; channels < 16; channels++) {
5846 DWConvMicrokernelTester()
5847 .cr(16)
5848 .kr(25)
5849 .channels(channels)
5850 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5851 }
5852 }
5853
5854 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_gt_16) {
5855 TEST_REQUIRES_ARM_NEON;
5856 for (uint32_t channels = 17; channels < 32; channels++) {
5857 DWConvMicrokernelTester()
5858 .cr(16)
5859 .kr(25)
5860 .channels(channels)
5861 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5862 }
5863 }
5864
5865 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_gt_16_with_qmin) {
5866 TEST_REQUIRES_ARM_NEON;
5867 for (uint32_t channels = 17; channels < 32; channels++) {
5868 DWConvMicrokernelTester()
5869 .cr(16)
5870 .kr(25)
5871 .channels(channels)
5872 .qmin(128)
5873 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5874 }
5875 }
5876
5877 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, c_gt_16_with_qmax) {
5878 TEST_REQUIRES_ARM_NEON;
5879 for (uint32_t channels = 17; channels < 32; channels++) {
5880 DWConvMicrokernelTester()
5881 .cr(16)
5882 .kr(25)
5883 .channels(channels)
5884 .qmax(128)
5885 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5886 }
5887 }
5888
5889 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, multipixel) {
5890 TEST_REQUIRES_ARM_NEON;
5891 for (size_t channels = 1; channels <= 80; channels += 15) {
5892 DWConvMicrokernelTester()
5893 .cr(16)
5894 .kr(25)
5895 .channels(channels)
5896 .width(3)
5897 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5898 }
5899 }
5900
5901 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, multipixel_with_step) {
5902 TEST_REQUIRES_ARM_NEON;
5903 for (size_t channels = 1; channels <= 80; channels += 15) {
5904 for (size_t step = 2; step <= 25; step++) {
5905 DWConvMicrokernelTester()
5906 .cr(16)
5907 .kr(25)
5908 .channels(channels)
5909 .width(3)
5910 .step(step)
5911 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5912 }
5913 }
5914 }
5915
5916 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, multipixel_with_output_stride) {
5917 TEST_REQUIRES_ARM_NEON;
5918 for (size_t channels = 1; channels <= 80; channels += 15) {
5919 DWConvMicrokernelTester()
5920 .cr(16)
5921 .kr(25)
5922 .channels(16)
5923 .width(5)
5924 .output_stride(83)
5925 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5926 }
5927 }
5928
5929 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, multipixel_with_qmin) {
5930 TEST_REQUIRES_ARM_NEON;
5931 for (size_t channels = 1; channels <= 80; channels += 15) {
5932 DWConvMicrokernelTester()
5933 .cr(16)
5934 .kr(25)
5935 .channels(channels)
5936 .width(3)
5937 .qmin(128)
5938 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5939 }
5940 }
5941
5942 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, multipixel_with_qmax) {
5943 TEST_REQUIRES_ARM_NEON;
5944 for (size_t channels = 1; channels <= 80; channels += 15) {
5945 DWConvMicrokernelTester()
5946 .cr(16)
5947 .kr(25)
5948 .channels(channels)
5949 .width(3)
5950 .qmax(128)
5951 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5952 }
5953 }
5954
5955 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, input_offset) {
5956 TEST_REQUIRES_ARM_NEON;
5957 for (uint32_t channels = 32; channels < 256; channels += 48) {
5958 DWConvMicrokernelTester()
5959 .cr(16)
5960 .kr(25)
5961 .channels(channels)
5962 .input_offset(304)
5963 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__neon_acc2, xnn_init_f32_minmax_scalar_params);
5964 }
5965 }
5966
5967 TEST(F32_DWCONV_MINMAX_UP16X25__NEON_ACC2, zero) {
5968 TEST_REQUIRES_ARM_NEON;
5969 for (uint32_t mz = 0; mz < 25; mz++) {
5970 for (uint32_t channels = 32; channels < 256; channels += 48) {
5971 DWConvMicrokernelTester()
5972 .cr(16)
5973 .kr(25)
5974 .channels(channels)
5975 .input_offset(304)
5976 .zero_index(mz)
5977 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__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
Marat Dukhande06f492020-04-09 00:19:31 -07005985 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005986 TEST_REQUIRES_ARM_NEON;
5987 DWConvMicrokernelTester()
5988 .cr(4)
5989 .kr(9)
5990 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07005991 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07005992 }
5993
Marat Dukhande06f492020-04-09 00:19:31 -07005994 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005995 TEST_REQUIRES_ARM_NEON;
5996 for (uint32_t channels = 8; channels < 64; channels += 12) {
5997 DWConvMicrokernelTester()
5998 .cr(4)
5999 .kr(9)
6000 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006001 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006002 }
6003 }
6004
Marat Dukhande06f492020-04-09 00:19:31 -07006005 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006006 TEST_REQUIRES_ARM_NEON;
6007 for (uint32_t channels = 8; channels < 64; channels += 12) {
6008 DWConvMicrokernelTester()
6009 .cr(4)
6010 .kr(9)
6011 .channels(channels)
6012 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006013 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006014 }
6015 }
6016
Marat Dukhande06f492020-04-09 00:19:31 -07006017 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006018 TEST_REQUIRES_ARM_NEON;
6019 for (uint32_t channels = 8; channels < 64; channels += 12) {
6020 DWConvMicrokernelTester()
6021 .cr(4)
6022 .kr(9)
6023 .channels(channels)
6024 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006025 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006026 }
6027 }
6028
Marat Dukhande06f492020-04-09 00:19:31 -07006029 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006030 TEST_REQUIRES_ARM_NEON;
6031 for (uint32_t channels = 1; channels < 4; channels++) {
6032 DWConvMicrokernelTester()
6033 .cr(4)
6034 .kr(9)
6035 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006036 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006037 }
6038 }
6039
Marat Dukhande06f492020-04-09 00:19:31 -07006040 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006041 TEST_REQUIRES_ARM_NEON;
6042 for (uint32_t channels = 5; channels < 8; channels++) {
6043 DWConvMicrokernelTester()
6044 .cr(4)
6045 .kr(9)
6046 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006047 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006048 }
6049 }
6050
Marat Dukhande06f492020-04-09 00:19:31 -07006051 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006052 TEST_REQUIRES_ARM_NEON;
6053 for (uint32_t channels = 5; channels < 8; channels++) {
6054 DWConvMicrokernelTester()
6055 .cr(4)
6056 .kr(9)
6057 .channels(channels)
6058 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006059 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006060 }
6061 }
6062
Marat Dukhande06f492020-04-09 00:19:31 -07006063 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006064 TEST_REQUIRES_ARM_NEON;
6065 for (uint32_t channels = 5; channels < 8; channels++) {
6066 DWConvMicrokernelTester()
6067 .cr(4)
6068 .kr(9)
6069 .channels(channels)
6070 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006071 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006072 }
6073 }
6074
Marat Dukhande06f492020-04-09 00:19:31 -07006075 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006076 TEST_REQUIRES_ARM_NEON;
6077 for (size_t channels = 1; channels <= 20; channels += 3) {
6078 DWConvMicrokernelTester()
6079 .cr(4)
6080 .kr(9)
6081 .channels(channels)
6082 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006083 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006084 }
6085 }
6086
Marat Dukhande06f492020-04-09 00:19:31 -07006087 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006088 TEST_REQUIRES_ARM_NEON;
6089 for (size_t channels = 1; channels <= 20; channels += 3) {
6090 for (size_t step = 2; step <= 9; step++) {
6091 DWConvMicrokernelTester()
6092 .cr(4)
6093 .kr(9)
6094 .channels(channels)
6095 .width(3)
6096 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006097 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006098 }
6099 }
6100 }
6101
Marat Dukhande06f492020-04-09 00:19:31 -07006102 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006103 TEST_REQUIRES_ARM_NEON;
6104 for (size_t channels = 1; channels <= 20; channels += 3) {
6105 DWConvMicrokernelTester()
6106 .cr(4)
6107 .kr(9)
6108 .channels(4)
6109 .width(5)
6110 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006111 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006112 }
6113 }
6114
Marat Dukhande06f492020-04-09 00:19:31 -07006115 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006116 TEST_REQUIRES_ARM_NEON;
6117 for (size_t channels = 1; channels <= 20; channels += 3) {
6118 DWConvMicrokernelTester()
6119 .cr(4)
6120 .kr(9)
6121 .channels(channels)
6122 .width(3)
6123 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006124 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006125 }
6126 }
6127
Marat Dukhande06f492020-04-09 00:19:31 -07006128 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006129 TEST_REQUIRES_ARM_NEON;
6130 for (size_t channels = 1; channels <= 20; channels += 3) {
6131 DWConvMicrokernelTester()
6132 .cr(4)
6133 .kr(9)
6134 .channels(channels)
6135 .width(3)
6136 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006137 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006138 }
6139 }
Frank Barchardd5360722020-05-17 16:10:36 -07006140
6141 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, input_offset) {
6142 TEST_REQUIRES_ARM_NEON;
6143 for (uint32_t channels = 8; channels < 64; channels += 12) {
6144 DWConvMicrokernelTester()
6145 .cr(4)
6146 .kr(9)
6147 .channels(channels)
6148 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006149 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07006150 }
6151 }
6152
6153 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, zero) {
6154 TEST_REQUIRES_ARM_NEON;
6155 for (uint32_t mz = 0; mz < 9; mz++) {
6156 for (uint32_t channels = 8; channels < 64; channels += 12) {
6157 DWConvMicrokernelTester()
6158 .cr(4)
6159 .kr(9)
6160 .channels(channels)
6161 .input_offset(112)
6162 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006163 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07006164 }
6165 }
6166 }
Marat Dukhan1c587112020-04-08 20:04:28 -07006167#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
6168
6169
6170#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07006171 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006172 TEST_REQUIRES_ARM_NEON;
6173 DWConvMicrokernelTester()
6174 .cr(4)
6175 .kr(9)
6176 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006177 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006178 }
6179
Marat Dukhande06f492020-04-09 00:19:31 -07006180 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006181 TEST_REQUIRES_ARM_NEON;
6182 for (uint32_t channels = 8; channels < 64; channels += 12) {
6183 DWConvMicrokernelTester()
6184 .cr(4)
6185 .kr(9)
6186 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006187 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006188 }
6189 }
6190
Marat Dukhande06f492020-04-09 00:19:31 -07006191 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006192 TEST_REQUIRES_ARM_NEON;
6193 for (uint32_t channels = 8; channels < 64; channels += 12) {
6194 DWConvMicrokernelTester()
6195 .cr(4)
6196 .kr(9)
6197 .channels(channels)
6198 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006199 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006200 }
6201 }
6202
Marat Dukhande06f492020-04-09 00:19:31 -07006203 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006204 TEST_REQUIRES_ARM_NEON;
6205 for (uint32_t channels = 8; channels < 64; channels += 12) {
6206 DWConvMicrokernelTester()
6207 .cr(4)
6208 .kr(9)
6209 .channels(channels)
6210 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006211 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006212 }
6213 }
6214
Marat Dukhande06f492020-04-09 00:19:31 -07006215 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006216 TEST_REQUIRES_ARM_NEON;
6217 for (uint32_t channels = 1; channels < 4; channels++) {
6218 DWConvMicrokernelTester()
6219 .cr(4)
6220 .kr(9)
6221 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006222 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006223 }
6224 }
6225
Marat Dukhande06f492020-04-09 00:19:31 -07006226 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006227 TEST_REQUIRES_ARM_NEON;
6228 for (uint32_t channels = 5; channels < 8; channels++) {
6229 DWConvMicrokernelTester()
6230 .cr(4)
6231 .kr(9)
6232 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006233 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006234 }
6235 }
6236
Marat Dukhande06f492020-04-09 00:19:31 -07006237 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006238 TEST_REQUIRES_ARM_NEON;
6239 for (uint32_t channels = 5; channels < 8; channels++) {
6240 DWConvMicrokernelTester()
6241 .cr(4)
6242 .kr(9)
6243 .channels(channels)
6244 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006245 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006246 }
6247 }
6248
Marat Dukhande06f492020-04-09 00:19:31 -07006249 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006250 TEST_REQUIRES_ARM_NEON;
6251 for (uint32_t channels = 5; channels < 8; channels++) {
6252 DWConvMicrokernelTester()
6253 .cr(4)
6254 .kr(9)
6255 .channels(channels)
6256 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006257 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006258 }
6259 }
6260
Marat Dukhande06f492020-04-09 00:19:31 -07006261 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006262 TEST_REQUIRES_ARM_NEON;
6263 for (size_t channels = 1; channels <= 20; channels += 3) {
6264 DWConvMicrokernelTester()
6265 .cr(4)
6266 .kr(9)
6267 .channels(channels)
6268 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006269 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006270 }
6271 }
6272
Marat Dukhande06f492020-04-09 00:19:31 -07006273 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006274 TEST_REQUIRES_ARM_NEON;
6275 for (size_t channels = 1; channels <= 20; channels += 3) {
6276 for (size_t step = 2; step <= 9; step++) {
6277 DWConvMicrokernelTester()
6278 .cr(4)
6279 .kr(9)
6280 .channels(channels)
6281 .width(3)
6282 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006283 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006284 }
6285 }
6286 }
6287
Marat Dukhande06f492020-04-09 00:19:31 -07006288 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006289 TEST_REQUIRES_ARM_NEON;
6290 for (size_t channels = 1; channels <= 20; channels += 3) {
6291 DWConvMicrokernelTester()
6292 .cr(4)
6293 .kr(9)
6294 .channels(4)
6295 .width(5)
6296 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006297 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006298 }
6299 }
6300
Marat Dukhande06f492020-04-09 00:19:31 -07006301 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006302 TEST_REQUIRES_ARM_NEON;
6303 for (size_t channels = 1; channels <= 20; channels += 3) {
6304 DWConvMicrokernelTester()
6305 .cr(4)
6306 .kr(9)
6307 .channels(channels)
6308 .width(3)
6309 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006310 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006311 }
6312 }
6313
Marat Dukhande06f492020-04-09 00:19:31 -07006314 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006315 TEST_REQUIRES_ARM_NEON;
6316 for (size_t channels = 1; channels <= 20; channels += 3) {
6317 DWConvMicrokernelTester()
6318 .cr(4)
6319 .kr(9)
6320 .channels(channels)
6321 .width(3)
6322 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006323 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006324 }
6325 }
Frank Barchardd5360722020-05-17 16:10:36 -07006326
6327 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, input_offset) {
6328 TEST_REQUIRES_ARM_NEON;
6329 for (uint32_t channels = 8; channels < 64; channels += 12) {
6330 DWConvMicrokernelTester()
6331 .cr(4)
6332 .kr(9)
6333 .channels(channels)
6334 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006335 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07006336 }
6337 }
6338
6339 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, zero) {
6340 TEST_REQUIRES_ARM_NEON;
6341 for (uint32_t mz = 0; mz < 9; mz++) {
6342 for (uint32_t channels = 8; channels < 64; channels += 12) {
6343 DWConvMicrokernelTester()
6344 .cr(4)
6345 .kr(9)
6346 .channels(channels)
6347 .input_offset(112)
6348 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006349 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07006350 }
6351 }
6352 }
Marat Dukhan1c587112020-04-08 20:04:28 -07006353#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
6354
6355
6356#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07006357 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006358 TEST_REQUIRES_ARM_NEON;
6359 DWConvMicrokernelTester()
6360 .cr(8)
6361 .kr(9)
6362 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006363 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006364 }
6365
Marat Dukhande06f492020-04-09 00:19:31 -07006366 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006367 TEST_REQUIRES_ARM_NEON;
6368 for (uint32_t channels = 16; channels < 128; channels += 24) {
6369 DWConvMicrokernelTester()
6370 .cr(8)
6371 .kr(9)
6372 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006373 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006374 }
6375 }
6376
Marat Dukhande06f492020-04-09 00:19:31 -07006377 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006378 TEST_REQUIRES_ARM_NEON;
6379 for (uint32_t channels = 16; channels < 128; channels += 24) {
6380 DWConvMicrokernelTester()
6381 .cr(8)
6382 .kr(9)
6383 .channels(channels)
6384 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006385 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006386 }
6387 }
6388
Marat Dukhande06f492020-04-09 00:19:31 -07006389 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006390 TEST_REQUIRES_ARM_NEON;
6391 for (uint32_t channels = 16; channels < 128; channels += 24) {
6392 DWConvMicrokernelTester()
6393 .cr(8)
6394 .kr(9)
6395 .channels(channels)
6396 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006397 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006398 }
6399 }
6400
Marat Dukhande06f492020-04-09 00:19:31 -07006401 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006402 TEST_REQUIRES_ARM_NEON;
6403 for (uint32_t channels = 1; channels < 8; channels++) {
6404 DWConvMicrokernelTester()
6405 .cr(8)
6406 .kr(9)
6407 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006408 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006409 }
6410 }
6411
Marat Dukhande06f492020-04-09 00:19:31 -07006412 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006413 TEST_REQUIRES_ARM_NEON;
6414 for (uint32_t channels = 9; channels < 16; channels++) {
6415 DWConvMicrokernelTester()
6416 .cr(8)
6417 .kr(9)
6418 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006419 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006420 }
6421 }
6422
Marat Dukhande06f492020-04-09 00:19:31 -07006423 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006424 TEST_REQUIRES_ARM_NEON;
6425 for (uint32_t channels = 9; channels < 16; channels++) {
6426 DWConvMicrokernelTester()
6427 .cr(8)
6428 .kr(9)
6429 .channels(channels)
6430 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006431 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006432 }
6433 }
6434
Marat Dukhande06f492020-04-09 00:19:31 -07006435 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006436 TEST_REQUIRES_ARM_NEON;
6437 for (uint32_t channels = 9; channels < 16; channels++) {
6438 DWConvMicrokernelTester()
6439 .cr(8)
6440 .kr(9)
6441 .channels(channels)
6442 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006443 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006444 }
6445 }
6446
Marat Dukhande06f492020-04-09 00:19:31 -07006447 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006448 TEST_REQUIRES_ARM_NEON;
6449 for (size_t channels = 1; channels <= 40; channels += 7) {
6450 DWConvMicrokernelTester()
6451 .cr(8)
6452 .kr(9)
6453 .channels(channels)
6454 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006455 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006456 }
6457 }
6458
Marat Dukhande06f492020-04-09 00:19:31 -07006459 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006460 TEST_REQUIRES_ARM_NEON;
6461 for (size_t channels = 1; channels <= 40; channels += 7) {
6462 for (size_t step = 2; step <= 9; step++) {
6463 DWConvMicrokernelTester()
6464 .cr(8)
6465 .kr(9)
6466 .channels(channels)
6467 .width(3)
6468 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006469 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006470 }
6471 }
6472 }
6473
Marat Dukhande06f492020-04-09 00:19:31 -07006474 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006475 TEST_REQUIRES_ARM_NEON;
6476 for (size_t channels = 1; channels <= 40; channels += 7) {
6477 DWConvMicrokernelTester()
6478 .cr(8)
6479 .kr(9)
6480 .channels(8)
6481 .width(5)
6482 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006483 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006484 }
6485 }
6486
Marat Dukhande06f492020-04-09 00:19:31 -07006487 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006488 TEST_REQUIRES_ARM_NEON;
6489 for (size_t channels = 1; channels <= 40; channels += 7) {
6490 DWConvMicrokernelTester()
6491 .cr(8)
6492 .kr(9)
6493 .channels(channels)
6494 .width(3)
6495 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006496 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006497 }
6498 }
6499
Marat Dukhande06f492020-04-09 00:19:31 -07006500 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006501 TEST_REQUIRES_ARM_NEON;
6502 for (size_t channels = 1; channels <= 40; channels += 7) {
6503 DWConvMicrokernelTester()
6504 .cr(8)
6505 .kr(9)
6506 .channels(channels)
6507 .width(3)
6508 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006509 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006510 }
6511 }
Frank Barchardd5360722020-05-17 16:10:36 -07006512
6513 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, input_offset) {
6514 TEST_REQUIRES_ARM_NEON;
6515 for (uint32_t channels = 16; channels < 128; channels += 24) {
6516 DWConvMicrokernelTester()
6517 .cr(8)
6518 .kr(9)
6519 .channels(channels)
6520 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006521 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07006522 }
6523 }
6524
6525 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, zero) {
6526 TEST_REQUIRES_ARM_NEON;
6527 for (uint32_t mz = 0; mz < 9; mz++) {
6528 for (uint32_t channels = 16; channels < 128; channels += 24) {
6529 DWConvMicrokernelTester()
6530 .cr(8)
6531 .kr(9)
6532 .channels(channels)
6533 .input_offset(176)
6534 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006535 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07006536 }
6537 }
6538 }
Marat Dukhan1c587112020-04-08 20:04:28 -07006539#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
6540
6541
6542#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07006543 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006544 TEST_REQUIRES_ARM_NEON;
6545 DWConvMicrokernelTester()
6546 .cr(8)
6547 .kr(9)
6548 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006549 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006550 }
6551
Marat Dukhande06f492020-04-09 00:19:31 -07006552 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006553 TEST_REQUIRES_ARM_NEON;
6554 for (uint32_t channels = 16; channels < 128; channels += 24) {
6555 DWConvMicrokernelTester()
6556 .cr(8)
6557 .kr(9)
6558 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006559 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006560 }
6561 }
6562
Marat Dukhande06f492020-04-09 00:19:31 -07006563 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006564 TEST_REQUIRES_ARM_NEON;
6565 for (uint32_t channels = 16; channels < 128; channels += 24) {
6566 DWConvMicrokernelTester()
6567 .cr(8)
6568 .kr(9)
6569 .channels(channels)
6570 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006571 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006572 }
6573 }
6574
Marat Dukhande06f492020-04-09 00:19:31 -07006575 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006576 TEST_REQUIRES_ARM_NEON;
6577 for (uint32_t channels = 16; channels < 128; channels += 24) {
6578 DWConvMicrokernelTester()
6579 .cr(8)
6580 .kr(9)
6581 .channels(channels)
6582 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006583 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006584 }
6585 }
6586
Marat Dukhande06f492020-04-09 00:19:31 -07006587 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006588 TEST_REQUIRES_ARM_NEON;
6589 for (uint32_t channels = 1; channels < 8; channels++) {
6590 DWConvMicrokernelTester()
6591 .cr(8)
6592 .kr(9)
6593 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006594 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006595 }
6596 }
6597
Marat Dukhande06f492020-04-09 00:19:31 -07006598 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006599 TEST_REQUIRES_ARM_NEON;
6600 for (uint32_t channels = 9; channels < 16; channels++) {
6601 DWConvMicrokernelTester()
6602 .cr(8)
6603 .kr(9)
6604 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006605 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006606 }
6607 }
6608
Marat Dukhande06f492020-04-09 00:19:31 -07006609 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006610 TEST_REQUIRES_ARM_NEON;
6611 for (uint32_t channels = 9; channels < 16; channels++) {
6612 DWConvMicrokernelTester()
6613 .cr(8)
6614 .kr(9)
6615 .channels(channels)
6616 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006617 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006618 }
6619 }
6620
Marat Dukhande06f492020-04-09 00:19:31 -07006621 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006622 TEST_REQUIRES_ARM_NEON;
6623 for (uint32_t channels = 9; channels < 16; channels++) {
6624 DWConvMicrokernelTester()
6625 .cr(8)
6626 .kr(9)
6627 .channels(channels)
6628 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006629 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006630 }
6631 }
6632
Marat Dukhande06f492020-04-09 00:19:31 -07006633 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006634 TEST_REQUIRES_ARM_NEON;
6635 for (size_t channels = 1; channels <= 40; channels += 7) {
6636 DWConvMicrokernelTester()
6637 .cr(8)
6638 .kr(9)
6639 .channels(channels)
6640 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006641 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006642 }
6643 }
6644
Marat Dukhande06f492020-04-09 00:19:31 -07006645 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006646 TEST_REQUIRES_ARM_NEON;
6647 for (size_t channels = 1; channels <= 40; channels += 7) {
6648 for (size_t step = 2; step <= 9; step++) {
6649 DWConvMicrokernelTester()
6650 .cr(8)
6651 .kr(9)
6652 .channels(channels)
6653 .width(3)
6654 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006655 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006656 }
6657 }
6658 }
6659
Marat Dukhande06f492020-04-09 00:19:31 -07006660 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006661 TEST_REQUIRES_ARM_NEON;
6662 for (size_t channels = 1; channels <= 40; channels += 7) {
6663 DWConvMicrokernelTester()
6664 .cr(8)
6665 .kr(9)
6666 .channels(8)
6667 .width(5)
6668 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006669 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006670 }
6671 }
6672
Marat Dukhande06f492020-04-09 00:19:31 -07006673 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006674 TEST_REQUIRES_ARM_NEON;
6675 for (size_t channels = 1; channels <= 40; channels += 7) {
6676 DWConvMicrokernelTester()
6677 .cr(8)
6678 .kr(9)
6679 .channels(channels)
6680 .width(3)
6681 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006682 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006683 }
6684 }
6685
Marat Dukhande06f492020-04-09 00:19:31 -07006686 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006687 TEST_REQUIRES_ARM_NEON;
6688 for (size_t channels = 1; channels <= 40; channels += 7) {
6689 DWConvMicrokernelTester()
6690 .cr(8)
6691 .kr(9)
6692 .channels(channels)
6693 .width(3)
6694 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006695 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07006696 }
6697 }
Frank Barchardd5360722020-05-17 16:10:36 -07006698
6699 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, input_offset) {
6700 TEST_REQUIRES_ARM_NEON;
6701 for (uint32_t channels = 16; channels < 128; channels += 24) {
6702 DWConvMicrokernelTester()
6703 .cr(8)
6704 .kr(9)
6705 .channels(channels)
6706 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006707 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07006708 }
6709 }
6710
6711 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, zero) {
6712 TEST_REQUIRES_ARM_NEON;
6713 for (uint32_t mz = 0; mz < 9; mz++) {
6714 for (uint32_t channels = 16; channels < 128; channels += 24) {
6715 DWConvMicrokernelTester()
6716 .cr(8)
6717 .kr(9)
6718 .channels(channels)
6719 .input_offset(176)
6720 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07006721 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07006722 }
6723 }
6724 }
Marat Dukhan1c587112020-04-08 20:04:28 -07006725#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
6726
6727
Marat Dukhanf5425ea2020-04-24 01:46:00 -07006728#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Frank Barchardc9f9d672021-10-18 12:51:59 -07006729 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_eq_16) {
6730 TEST_REQUIRES_ARM_NEON;
6731 DWConvMicrokernelTester()
6732 .cr(16)
6733 .kr(9)
6734 .channels(16)
6735 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6736 }
6737
6738 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_div_16) {
6739 TEST_REQUIRES_ARM_NEON;
6740 for (uint32_t channels = 32; channels < 256; channels += 48) {
6741 DWConvMicrokernelTester()
6742 .cr(16)
6743 .kr(9)
6744 .channels(channels)
6745 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6746 }
6747 }
6748
6749 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_div_16_with_qmin) {
6750 TEST_REQUIRES_ARM_NEON;
6751 for (uint32_t channels = 32; channels < 256; channels += 48) {
6752 DWConvMicrokernelTester()
6753 .cr(16)
6754 .kr(9)
6755 .channels(channels)
6756 .qmin(128)
6757 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6758 }
6759 }
6760
6761 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_div_16_with_qmax) {
6762 TEST_REQUIRES_ARM_NEON;
6763 for (uint32_t channels = 32; channels < 256; channels += 48) {
6764 DWConvMicrokernelTester()
6765 .cr(16)
6766 .kr(9)
6767 .channels(channels)
6768 .qmax(128)
6769 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6770 }
6771 }
6772
6773 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_lt_16) {
6774 TEST_REQUIRES_ARM_NEON;
6775 for (uint32_t channels = 1; channels < 16; channels++) {
6776 DWConvMicrokernelTester()
6777 .cr(16)
6778 .kr(9)
6779 .channels(channels)
6780 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6781 }
6782 }
6783
6784 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_gt_16) {
6785 TEST_REQUIRES_ARM_NEON;
6786 for (uint32_t channels = 17; channels < 32; channels++) {
6787 DWConvMicrokernelTester()
6788 .cr(16)
6789 .kr(9)
6790 .channels(channels)
6791 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6792 }
6793 }
6794
6795 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_gt_16_with_qmin) {
6796 TEST_REQUIRES_ARM_NEON;
6797 for (uint32_t channels = 17; channels < 32; channels++) {
6798 DWConvMicrokernelTester()
6799 .cr(16)
6800 .kr(9)
6801 .channels(channels)
6802 .qmin(128)
6803 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6804 }
6805 }
6806
6807 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, c_gt_16_with_qmax) {
6808 TEST_REQUIRES_ARM_NEON;
6809 for (uint32_t channels = 17; channels < 32; channels++) {
6810 DWConvMicrokernelTester()
6811 .cr(16)
6812 .kr(9)
6813 .channels(channels)
6814 .qmax(128)
6815 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6816 }
6817 }
6818
6819 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, multipixel) {
6820 TEST_REQUIRES_ARM_NEON;
6821 for (size_t channels = 1; channels <= 80; channels += 15) {
6822 DWConvMicrokernelTester()
6823 .cr(16)
6824 .kr(9)
6825 .channels(channels)
6826 .width(3)
6827 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6828 }
6829 }
6830
6831 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, multipixel_with_step) {
6832 TEST_REQUIRES_ARM_NEON;
6833 for (size_t channels = 1; channels <= 80; channels += 15) {
6834 for (size_t step = 2; step <= 9; step++) {
6835 DWConvMicrokernelTester()
6836 .cr(16)
6837 .kr(9)
6838 .channels(channels)
6839 .width(3)
6840 .step(step)
6841 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6842 }
6843 }
6844 }
6845
6846 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, multipixel_with_output_stride) {
6847 TEST_REQUIRES_ARM_NEON;
6848 for (size_t channels = 1; channels <= 80; channels += 15) {
6849 DWConvMicrokernelTester()
6850 .cr(16)
6851 .kr(9)
6852 .channels(16)
6853 .width(5)
6854 .output_stride(83)
6855 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6856 }
6857 }
6858
6859 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, multipixel_with_qmin) {
6860 TEST_REQUIRES_ARM_NEON;
6861 for (size_t channels = 1; channels <= 80; channels += 15) {
6862 DWConvMicrokernelTester()
6863 .cr(16)
6864 .kr(9)
6865 .channels(channels)
6866 .width(3)
6867 .qmin(128)
6868 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6869 }
6870 }
6871
6872 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, multipixel_with_qmax) {
6873 TEST_REQUIRES_ARM_NEON;
6874 for (size_t channels = 1; channels <= 80; channels += 15) {
6875 DWConvMicrokernelTester()
6876 .cr(16)
6877 .kr(9)
6878 .channels(channels)
6879 .width(3)
6880 .qmax(128)
6881 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6882 }
6883 }
6884
6885 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, input_offset) {
6886 TEST_REQUIRES_ARM_NEON;
6887 for (uint32_t channels = 32; channels < 256; channels += 48) {
6888 DWConvMicrokernelTester()
6889 .cr(16)
6890 .kr(9)
6891 .channels(channels)
6892 .input_offset(304)
6893 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, xnn_init_f32_minmax_scalar_params);
6894 }
6895 }
6896
6897 TEST(F32_DWCONV_MINMAX_UP16X9__NEON, zero) {
6898 TEST_REQUIRES_ARM_NEON;
6899 for (uint32_t mz = 0; mz < 9; mz++) {
6900 for (uint32_t channels = 32; channels < 256; channels += 48) {
6901 DWConvMicrokernelTester()
6902 .cr(16)
6903 .kr(9)
6904 .channels(channels)
6905 .input_offset(304)
6906 .zero_index(mz)
6907 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon, 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
6915 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_eq_16) {
6916 TEST_REQUIRES_ARM_NEON;
6917 DWConvMicrokernelTester()
6918 .cr(16)
6919 .kr(9)
6920 .channels(16)
6921 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
6922 }
6923
6924 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_div_16) {
6925 TEST_REQUIRES_ARM_NEON;
6926 for (uint32_t channels = 32; channels < 256; channels += 48) {
6927 DWConvMicrokernelTester()
6928 .cr(16)
6929 .kr(9)
6930 .channels(channels)
6931 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
6932 }
6933 }
6934
6935 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_div_16_with_qmin) {
6936 TEST_REQUIRES_ARM_NEON;
6937 for (uint32_t channels = 32; channels < 256; channels += 48) {
6938 DWConvMicrokernelTester()
6939 .cr(16)
6940 .kr(9)
6941 .channels(channels)
6942 .qmin(128)
6943 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
6944 }
6945 }
6946
6947 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_div_16_with_qmax) {
6948 TEST_REQUIRES_ARM_NEON;
6949 for (uint32_t channels = 32; channels < 256; channels += 48) {
6950 DWConvMicrokernelTester()
6951 .cr(16)
6952 .kr(9)
6953 .channels(channels)
6954 .qmax(128)
6955 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
6956 }
6957 }
6958
6959 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_lt_16) {
6960 TEST_REQUIRES_ARM_NEON;
6961 for (uint32_t channels = 1; channels < 16; channels++) {
6962 DWConvMicrokernelTester()
6963 .cr(16)
6964 .kr(9)
6965 .channels(channels)
6966 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
6967 }
6968 }
6969
6970 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_gt_16) {
6971 TEST_REQUIRES_ARM_NEON;
6972 for (uint32_t channels = 17; channels < 32; channels++) {
6973 DWConvMicrokernelTester()
6974 .cr(16)
6975 .kr(9)
6976 .channels(channels)
6977 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
6978 }
6979 }
6980
6981 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_gt_16_with_qmin) {
6982 TEST_REQUIRES_ARM_NEON;
6983 for (uint32_t channels = 17; channels < 32; channels++) {
6984 DWConvMicrokernelTester()
6985 .cr(16)
6986 .kr(9)
6987 .channels(channels)
6988 .qmin(128)
6989 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
6990 }
6991 }
6992
6993 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, c_gt_16_with_qmax) {
6994 TEST_REQUIRES_ARM_NEON;
6995 for (uint32_t channels = 17; channels < 32; channels++) {
6996 DWConvMicrokernelTester()
6997 .cr(16)
6998 .kr(9)
6999 .channels(channels)
7000 .qmax(128)
7001 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
7002 }
7003 }
7004
7005 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, multipixel) {
7006 TEST_REQUIRES_ARM_NEON;
7007 for (size_t channels = 1; channels <= 80; channels += 15) {
7008 DWConvMicrokernelTester()
7009 .cr(16)
7010 .kr(9)
7011 .channels(channels)
7012 .width(3)
7013 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
7014 }
7015 }
7016
7017 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, multipixel_with_step) {
7018 TEST_REQUIRES_ARM_NEON;
7019 for (size_t channels = 1; channels <= 80; channels += 15) {
7020 for (size_t step = 2; step <= 9; step++) {
7021 DWConvMicrokernelTester()
7022 .cr(16)
7023 .kr(9)
7024 .channels(channels)
7025 .width(3)
7026 .step(step)
7027 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
7028 }
7029 }
7030 }
7031
7032 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, multipixel_with_output_stride) {
7033 TEST_REQUIRES_ARM_NEON;
7034 for (size_t channels = 1; channels <= 80; channels += 15) {
7035 DWConvMicrokernelTester()
7036 .cr(16)
7037 .kr(9)
7038 .channels(16)
7039 .width(5)
7040 .output_stride(83)
7041 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
7042 }
7043 }
7044
7045 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, multipixel_with_qmin) {
7046 TEST_REQUIRES_ARM_NEON;
7047 for (size_t channels = 1; channels <= 80; channels += 15) {
7048 DWConvMicrokernelTester()
7049 .cr(16)
7050 .kr(9)
7051 .channels(channels)
7052 .width(3)
7053 .qmin(128)
7054 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
7055 }
7056 }
7057
7058 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, multipixel_with_qmax) {
7059 TEST_REQUIRES_ARM_NEON;
7060 for (size_t channels = 1; channels <= 80; channels += 15) {
7061 DWConvMicrokernelTester()
7062 .cr(16)
7063 .kr(9)
7064 .channels(channels)
7065 .width(3)
7066 .qmax(128)
7067 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
7068 }
7069 }
7070
7071 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, input_offset) {
7072 TEST_REQUIRES_ARM_NEON;
7073 for (uint32_t channels = 32; channels < 256; channels += 48) {
7074 DWConvMicrokernelTester()
7075 .cr(16)
7076 .kr(9)
7077 .channels(channels)
7078 .input_offset(304)
7079 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_acc2, xnn_init_f32_minmax_scalar_params);
7080 }
7081 }
7082
7083 TEST(F32_DWCONV_MINMAX_UP16X9__NEON_ACC2, zero) {
7084 TEST_REQUIRES_ARM_NEON;
7085 for (uint32_t mz = 0; mz < 9; mz++) {
7086 for (uint32_t channels = 32; channels < 256; channels += 48) {
7087 DWConvMicrokernelTester()
7088 .cr(16)
7089 .kr(9)
7090 .channels(channels)
7091 .input_offset(304)
7092 .zero_index(mz)
7093 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__neon_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
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -07007101 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_eq_4) {
7102 TEST_REQUIRES_ARM_NEON;
7103 DWConvMicrokernelTester()
7104 .cr(4)
7105 .kr(3)
7106 .channels(4)
7107 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7108 }
7109
7110 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_div_4) {
7111 TEST_REQUIRES_ARM_NEON;
7112 for (uint32_t channels = 8; channels < 64; channels += 12) {
7113 DWConvMicrokernelTester()
7114 .cr(4)
7115 .kr(3)
7116 .channels(channels)
7117 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7118 }
7119 }
7120
7121 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_div_4_with_qmin) {
7122 TEST_REQUIRES_ARM_NEON;
7123 for (uint32_t channels = 8; channels < 64; channels += 12) {
7124 DWConvMicrokernelTester()
7125 .cr(4)
7126 .kr(3)
7127 .channels(channels)
7128 .qmin(128)
7129 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7130 }
7131 }
7132
7133 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_div_4_with_qmax) {
7134 TEST_REQUIRES_ARM_NEON;
7135 for (uint32_t channels = 8; channels < 64; channels += 12) {
7136 DWConvMicrokernelTester()
7137 .cr(4)
7138 .kr(3)
7139 .channels(channels)
7140 .qmax(128)
7141 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7142 }
7143 }
7144
7145 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_lt_4) {
7146 TEST_REQUIRES_ARM_NEON;
7147 for (uint32_t channels = 1; channels < 4; channels++) {
7148 DWConvMicrokernelTester()
7149 .cr(4)
7150 .kr(3)
7151 .channels(channels)
7152 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7153 }
7154 }
7155
7156 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_gt_4) {
7157 TEST_REQUIRES_ARM_NEON;
7158 for (uint32_t channels = 5; channels < 8; channels++) {
7159 DWConvMicrokernelTester()
7160 .cr(4)
7161 .kr(3)
7162 .channels(channels)
7163 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7164 }
7165 }
7166
7167 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_gt_4_with_qmin) {
7168 TEST_REQUIRES_ARM_NEON;
7169 for (uint32_t channels = 5; channels < 8; channels++) {
7170 DWConvMicrokernelTester()
7171 .cr(4)
7172 .kr(3)
7173 .channels(channels)
7174 .qmin(128)
7175 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7176 }
7177 }
7178
7179 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, c_gt_4_with_qmax) {
7180 TEST_REQUIRES_ARM_NEON;
7181 for (uint32_t channels = 5; channels < 8; channels++) {
7182 DWConvMicrokernelTester()
7183 .cr(4)
7184 .kr(3)
7185 .channels(channels)
7186 .qmax(128)
7187 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7188 }
7189 }
7190
7191 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, multipixel) {
7192 TEST_REQUIRES_ARM_NEON;
7193 for (size_t channels = 1; channels <= 20; channels += 3) {
7194 DWConvMicrokernelTester()
7195 .cr(4)
7196 .kr(3)
7197 .channels(channels)
7198 .width(3)
7199 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7200 }
7201 }
7202
7203 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, multipixel_with_step) {
7204 TEST_REQUIRES_ARM_NEON;
7205 for (size_t channels = 1; channels <= 20; channels += 3) {
7206 for (size_t step = 2; step <= 3; step++) {
7207 DWConvMicrokernelTester()
7208 .cr(4)
7209 .kr(3)
7210 .channels(channels)
7211 .width(3)
7212 .step(step)
7213 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7214 }
7215 }
7216 }
7217
7218 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, multipixel_with_output_stride) {
7219 TEST_REQUIRES_ARM_NEON;
7220 for (size_t channels = 1; channels <= 20; channels += 3) {
7221 DWConvMicrokernelTester()
7222 .cr(4)
7223 .kr(3)
7224 .channels(4)
7225 .width(5)
7226 .output_stride(23)
7227 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7228 }
7229 }
7230
7231 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, multipixel_with_qmin) {
7232 TEST_REQUIRES_ARM_NEON;
7233 for (size_t channels = 1; channels <= 20; channels += 3) {
7234 DWConvMicrokernelTester()
7235 .cr(4)
7236 .kr(3)
7237 .channels(channels)
7238 .width(3)
7239 .qmin(128)
7240 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7241 }
7242 }
7243
7244 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, multipixel_with_qmax) {
7245 TEST_REQUIRES_ARM_NEON;
7246 for (size_t channels = 1; channels <= 20; channels += 3) {
7247 DWConvMicrokernelTester()
7248 .cr(4)
7249 .kr(3)
7250 .channels(channels)
7251 .width(3)
7252 .qmax(128)
7253 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7254 }
7255 }
7256
7257 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, input_offset) {
7258 TEST_REQUIRES_ARM_NEON;
7259 for (uint32_t channels = 8; channels < 64; channels += 12) {
7260 DWConvMicrokernelTester()
7261 .cr(4)
7262 .kr(3)
7263 .channels(channels)
7264 .input_offset(112)
7265 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon, xnn_init_f32_minmax_scalar_params);
7266 }
7267 }
7268
7269 TEST(F32_DWCONV_MINMAX_UP4X3__NEON, zero) {
7270 TEST_REQUIRES_ARM_NEON;
7271 for (uint32_t mz = 0; mz < 3; mz++) {
7272 for (uint32_t channels = 8; channels < 64; channels += 12) {
7273 DWConvMicrokernelTester()
7274 .cr(4)
7275 .kr(3)
7276 .channels(channels)
7277 .input_offset(112)
7278 .zero_index(mz)
7279 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__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
7287 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_eq_4) {
7288 TEST_REQUIRES_ARM_NEON;
7289 DWConvMicrokernelTester()
7290 .cr(4)
7291 .kr(3)
7292 .channels(4)
7293 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7294 }
7295
7296 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_div_4) {
7297 TEST_REQUIRES_ARM_NEON;
7298 for (uint32_t channels = 8; channels < 64; channels += 12) {
7299 DWConvMicrokernelTester()
7300 .cr(4)
7301 .kr(3)
7302 .channels(channels)
7303 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7304 }
7305 }
7306
7307 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_div_4_with_qmin) {
7308 TEST_REQUIRES_ARM_NEON;
7309 for (uint32_t channels = 8; channels < 64; channels += 12) {
7310 DWConvMicrokernelTester()
7311 .cr(4)
7312 .kr(3)
7313 .channels(channels)
7314 .qmin(128)
7315 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7316 }
7317 }
7318
7319 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_div_4_with_qmax) {
7320 TEST_REQUIRES_ARM_NEON;
7321 for (uint32_t channels = 8; channels < 64; channels += 12) {
7322 DWConvMicrokernelTester()
7323 .cr(4)
7324 .kr(3)
7325 .channels(channels)
7326 .qmax(128)
7327 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7328 }
7329 }
7330
7331 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_lt_4) {
7332 TEST_REQUIRES_ARM_NEON;
7333 for (uint32_t channels = 1; channels < 4; channels++) {
7334 DWConvMicrokernelTester()
7335 .cr(4)
7336 .kr(3)
7337 .channels(channels)
7338 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7339 }
7340 }
7341
7342 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_gt_4) {
7343 TEST_REQUIRES_ARM_NEON;
7344 for (uint32_t channels = 5; channels < 8; channels++) {
7345 DWConvMicrokernelTester()
7346 .cr(4)
7347 .kr(3)
7348 .channels(channels)
7349 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7350 }
7351 }
7352
7353 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_gt_4_with_qmin) {
7354 TEST_REQUIRES_ARM_NEON;
7355 for (uint32_t channels = 5; channels < 8; channels++) {
7356 DWConvMicrokernelTester()
7357 .cr(4)
7358 .kr(3)
7359 .channels(channels)
7360 .qmin(128)
7361 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7362 }
7363 }
7364
7365 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, c_gt_4_with_qmax) {
7366 TEST_REQUIRES_ARM_NEON;
7367 for (uint32_t channels = 5; channels < 8; channels++) {
7368 DWConvMicrokernelTester()
7369 .cr(4)
7370 .kr(3)
7371 .channels(channels)
7372 .qmax(128)
7373 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7374 }
7375 }
7376
7377 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, multipixel) {
7378 TEST_REQUIRES_ARM_NEON;
7379 for (size_t channels = 1; channels <= 20; channels += 3) {
7380 DWConvMicrokernelTester()
7381 .cr(4)
7382 .kr(3)
7383 .channels(channels)
7384 .width(3)
7385 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7386 }
7387 }
7388
7389 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, multipixel_with_step) {
7390 TEST_REQUIRES_ARM_NEON;
7391 for (size_t channels = 1; channels <= 20; channels += 3) {
7392 for (size_t step = 2; step <= 3; step++) {
7393 DWConvMicrokernelTester()
7394 .cr(4)
7395 .kr(3)
7396 .channels(channels)
7397 .width(3)
7398 .step(step)
7399 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7400 }
7401 }
7402 }
7403
7404 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, multipixel_with_output_stride) {
7405 TEST_REQUIRES_ARM_NEON;
7406 for (size_t channels = 1; channels <= 20; channels += 3) {
7407 DWConvMicrokernelTester()
7408 .cr(4)
7409 .kr(3)
7410 .channels(4)
7411 .width(5)
7412 .output_stride(23)
7413 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7414 }
7415 }
7416
7417 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, multipixel_with_qmin) {
7418 TEST_REQUIRES_ARM_NEON;
7419 for (size_t channels = 1; channels <= 20; channels += 3) {
7420 DWConvMicrokernelTester()
7421 .cr(4)
7422 .kr(3)
7423 .channels(channels)
7424 .width(3)
7425 .qmin(128)
7426 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7427 }
7428 }
7429
7430 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, multipixel_with_qmax) {
7431 TEST_REQUIRES_ARM_NEON;
7432 for (size_t channels = 1; channels <= 20; channels += 3) {
7433 DWConvMicrokernelTester()
7434 .cr(4)
7435 .kr(3)
7436 .channels(channels)
7437 .width(3)
7438 .qmax(128)
7439 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7440 }
7441 }
7442
7443 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, input_offset) {
7444 TEST_REQUIRES_ARM_NEON;
7445 for (uint32_t channels = 8; channels < 64; channels += 12) {
7446 DWConvMicrokernelTester()
7447 .cr(4)
7448 .kr(3)
7449 .channels(channels)
7450 .input_offset(112)
7451 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
7452 }
7453 }
7454
7455 TEST(F32_DWCONV_MINMAX_UP4X3__NEON_ACC2, zero) {
7456 TEST_REQUIRES_ARM_NEON;
7457 for (uint32_t mz = 0; mz < 3; mz++) {
7458 for (uint32_t channels = 8; channels < 64; channels += 12) {
7459 DWConvMicrokernelTester()
7460 .cr(4)
7461 .kr(3)
7462 .channels(channels)
7463 .input_offset(112)
7464 .zero_index(mz)
7465 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__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
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007473 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_eq_4) {
7474 TEST_REQUIRES_ARM_NEON;
7475 DWConvMicrokernelTester()
7476 .cr(4)
7477 .kr(4)
7478 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007479 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007480 }
7481
7482 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_div_4) {
7483 TEST_REQUIRES_ARM_NEON;
7484 for (uint32_t channels = 8; channels < 64; channels += 12) {
7485 DWConvMicrokernelTester()
7486 .cr(4)
7487 .kr(4)
7488 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007489 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007490 }
7491 }
7492
7493 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_div_4_with_qmin) {
7494 TEST_REQUIRES_ARM_NEON;
7495 for (uint32_t channels = 8; channels < 64; channels += 12) {
7496 DWConvMicrokernelTester()
7497 .cr(4)
7498 .kr(4)
7499 .channels(channels)
7500 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007501 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007502 }
7503 }
7504
7505 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_div_4_with_qmax) {
7506 TEST_REQUIRES_ARM_NEON;
7507 for (uint32_t channels = 8; channels < 64; channels += 12) {
7508 DWConvMicrokernelTester()
7509 .cr(4)
7510 .kr(4)
7511 .channels(channels)
7512 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007513 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007514 }
7515 }
7516
7517 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_lt_4) {
7518 TEST_REQUIRES_ARM_NEON;
7519 for (uint32_t channels = 1; channels < 4; channels++) {
7520 DWConvMicrokernelTester()
7521 .cr(4)
7522 .kr(4)
7523 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007524 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007525 }
7526 }
7527
7528 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_gt_4) {
7529 TEST_REQUIRES_ARM_NEON;
7530 for (uint32_t channels = 5; channels < 8; channels++) {
7531 DWConvMicrokernelTester()
7532 .cr(4)
7533 .kr(4)
7534 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007535 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007536 }
7537 }
7538
7539 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_gt_4_with_qmin) {
7540 TEST_REQUIRES_ARM_NEON;
7541 for (uint32_t channels = 5; channels < 8; channels++) {
7542 DWConvMicrokernelTester()
7543 .cr(4)
7544 .kr(4)
7545 .channels(channels)
7546 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007547 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007548 }
7549 }
7550
7551 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_gt_4_with_qmax) {
7552 TEST_REQUIRES_ARM_NEON;
7553 for (uint32_t channels = 5; channels < 8; channels++) {
7554 DWConvMicrokernelTester()
7555 .cr(4)
7556 .kr(4)
7557 .channels(channels)
7558 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007559 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007560 }
7561 }
7562
7563 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel) {
7564 TEST_REQUIRES_ARM_NEON;
7565 for (size_t channels = 1; channels <= 20; channels += 3) {
7566 DWConvMicrokernelTester()
7567 .cr(4)
7568 .kr(4)
7569 .channels(channels)
7570 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007571 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007572 }
7573 }
7574
7575 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel_with_step) {
7576 TEST_REQUIRES_ARM_NEON;
7577 for (size_t channels = 1; channels <= 20; channels += 3) {
7578 for (size_t step = 2; step <= 4; step++) {
7579 DWConvMicrokernelTester()
7580 .cr(4)
7581 .kr(4)
7582 .channels(channels)
7583 .width(3)
7584 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007585 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007586 }
7587 }
7588 }
7589
7590 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel_with_output_stride) {
7591 TEST_REQUIRES_ARM_NEON;
7592 for (size_t channels = 1; channels <= 20; channels += 3) {
7593 DWConvMicrokernelTester()
7594 .cr(4)
7595 .kr(4)
7596 .channels(4)
7597 .width(5)
7598 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007599 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007600 }
7601 }
7602
7603 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel_with_qmin) {
7604 TEST_REQUIRES_ARM_NEON;
7605 for (size_t channels = 1; channels <= 20; channels += 3) {
7606 DWConvMicrokernelTester()
7607 .cr(4)
7608 .kr(4)
7609 .channels(channels)
7610 .width(3)
7611 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007612 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007613 }
7614 }
7615
7616 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel_with_qmax) {
7617 TEST_REQUIRES_ARM_NEON;
7618 for (size_t channels = 1; channels <= 20; channels += 3) {
7619 DWConvMicrokernelTester()
7620 .cr(4)
7621 .kr(4)
7622 .channels(channels)
7623 .width(3)
7624 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007625 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007626 }
7627 }
Frank Barchardd5360722020-05-17 16:10:36 -07007628
7629 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, input_offset) {
7630 TEST_REQUIRES_ARM_NEON;
7631 for (uint32_t channels = 8; channels < 64; channels += 12) {
7632 DWConvMicrokernelTester()
7633 .cr(4)
7634 .kr(4)
7635 .channels(channels)
7636 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007637 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07007638 }
7639 }
7640
7641 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, zero) {
7642 TEST_REQUIRES_ARM_NEON;
7643 for (uint32_t mz = 0; mz < 4; mz++) {
7644 for (uint32_t channels = 8; channels < 64; channels += 12) {
7645 DWConvMicrokernelTester()
7646 .cr(4)
7647 .kr(4)
7648 .channels(channels)
7649 .input_offset(112)
7650 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007651 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07007652 }
7653 }
7654 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007655#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
7656
7657
7658#if XNN_ARCH_ARM || XNN_ARCH_ARM64
7659 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_eq_4) {
7660 TEST_REQUIRES_ARM_NEON;
7661 DWConvMicrokernelTester()
7662 .cr(4)
7663 .kr(4)
7664 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007665 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007666 }
7667
7668 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_div_4) {
7669 TEST_REQUIRES_ARM_NEON;
7670 for (uint32_t channels = 8; channels < 64; channels += 12) {
7671 DWConvMicrokernelTester()
7672 .cr(4)
7673 .kr(4)
7674 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007675 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007676 }
7677 }
7678
7679 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_div_4_with_qmin) {
7680 TEST_REQUIRES_ARM_NEON;
7681 for (uint32_t channels = 8; channels < 64; channels += 12) {
7682 DWConvMicrokernelTester()
7683 .cr(4)
7684 .kr(4)
7685 .channels(channels)
7686 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007687 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007688 }
7689 }
7690
7691 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_div_4_with_qmax) {
7692 TEST_REQUIRES_ARM_NEON;
7693 for (uint32_t channels = 8; channels < 64; channels += 12) {
7694 DWConvMicrokernelTester()
7695 .cr(4)
7696 .kr(4)
7697 .channels(channels)
7698 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007699 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007700 }
7701 }
7702
7703 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_lt_4) {
7704 TEST_REQUIRES_ARM_NEON;
7705 for (uint32_t channels = 1; channels < 4; channels++) {
7706 DWConvMicrokernelTester()
7707 .cr(4)
7708 .kr(4)
7709 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007710 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007711 }
7712 }
7713
7714 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_gt_4) {
7715 TEST_REQUIRES_ARM_NEON;
7716 for (uint32_t channels = 5; channels < 8; channels++) {
7717 DWConvMicrokernelTester()
7718 .cr(4)
7719 .kr(4)
7720 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007721 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007722 }
7723 }
7724
7725 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_gt_4_with_qmin) {
7726 TEST_REQUIRES_ARM_NEON;
7727 for (uint32_t channels = 5; channels < 8; channels++) {
7728 DWConvMicrokernelTester()
7729 .cr(4)
7730 .kr(4)
7731 .channels(channels)
7732 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007733 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007734 }
7735 }
7736
7737 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_gt_4_with_qmax) {
7738 TEST_REQUIRES_ARM_NEON;
7739 for (uint32_t channels = 5; channels < 8; channels++) {
7740 DWConvMicrokernelTester()
7741 .cr(4)
7742 .kr(4)
7743 .channels(channels)
7744 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007745 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007746 }
7747 }
7748
7749 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel) {
7750 TEST_REQUIRES_ARM_NEON;
7751 for (size_t channels = 1; channels <= 20; channels += 3) {
7752 DWConvMicrokernelTester()
7753 .cr(4)
7754 .kr(4)
7755 .channels(channels)
7756 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007757 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007758 }
7759 }
7760
7761 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel_with_step) {
7762 TEST_REQUIRES_ARM_NEON;
7763 for (size_t channels = 1; channels <= 20; channels += 3) {
7764 for (size_t step = 2; step <= 4; step++) {
7765 DWConvMicrokernelTester()
7766 .cr(4)
7767 .kr(4)
7768 .channels(channels)
7769 .width(3)
7770 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007771 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007772 }
7773 }
7774 }
7775
7776 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel_with_output_stride) {
7777 TEST_REQUIRES_ARM_NEON;
7778 for (size_t channels = 1; channels <= 20; channels += 3) {
7779 DWConvMicrokernelTester()
7780 .cr(4)
7781 .kr(4)
7782 .channels(4)
7783 .width(5)
7784 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007785 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007786 }
7787 }
7788
7789 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel_with_qmin) {
7790 TEST_REQUIRES_ARM_NEON;
7791 for (size_t channels = 1; channels <= 20; channels += 3) {
7792 DWConvMicrokernelTester()
7793 .cr(4)
7794 .kr(4)
7795 .channels(channels)
7796 .width(3)
7797 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007798 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007799 }
7800 }
7801
7802 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel_with_qmax) {
7803 TEST_REQUIRES_ARM_NEON;
7804 for (size_t channels = 1; channels <= 20; channels += 3) {
7805 DWConvMicrokernelTester()
7806 .cr(4)
7807 .kr(4)
7808 .channels(channels)
7809 .width(3)
7810 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007811 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007812 }
7813 }
Frank Barchardd5360722020-05-17 16:10:36 -07007814
7815 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, input_offset) {
7816 TEST_REQUIRES_ARM_NEON;
7817 for (uint32_t channels = 8; channels < 64; channels += 12) {
7818 DWConvMicrokernelTester()
7819 .cr(4)
7820 .kr(4)
7821 .channels(channels)
7822 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007823 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07007824 }
7825 }
7826
7827 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, zero) {
7828 TEST_REQUIRES_ARM_NEON;
7829 for (uint32_t mz = 0; mz < 4; mz++) {
7830 for (uint32_t channels = 8; channels < 64; channels += 12) {
7831 DWConvMicrokernelTester()
7832 .cr(4)
7833 .kr(4)
7834 .channels(channels)
7835 .input_offset(112)
7836 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07007837 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07007838 }
7839 }
7840 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07007841#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
7842
7843
7844#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -07007845 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_eq_8) {
7846 TEST_REQUIRES_ARM_NEON;
7847 DWConvMicrokernelTester()
7848 .cr(8)
7849 .kr(3)
7850 .channels(8)
7851 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7852 }
7853
7854 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_div_8) {
7855 TEST_REQUIRES_ARM_NEON;
7856 for (uint32_t channels = 16; channels < 128; channels += 24) {
7857 DWConvMicrokernelTester()
7858 .cr(8)
7859 .kr(3)
7860 .channels(channels)
7861 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7862 }
7863 }
7864
7865 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_div_8_with_qmin) {
7866 TEST_REQUIRES_ARM_NEON;
7867 for (uint32_t channels = 16; channels < 128; channels += 24) {
7868 DWConvMicrokernelTester()
7869 .cr(8)
7870 .kr(3)
7871 .channels(channels)
7872 .qmin(128)
7873 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7874 }
7875 }
7876
7877 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_div_8_with_qmax) {
7878 TEST_REQUIRES_ARM_NEON;
7879 for (uint32_t channels = 16; channels < 128; channels += 24) {
7880 DWConvMicrokernelTester()
7881 .cr(8)
7882 .kr(3)
7883 .channels(channels)
7884 .qmax(128)
7885 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7886 }
7887 }
7888
7889 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_lt_8) {
7890 TEST_REQUIRES_ARM_NEON;
7891 for (uint32_t channels = 1; channels < 8; channels++) {
7892 DWConvMicrokernelTester()
7893 .cr(8)
7894 .kr(3)
7895 .channels(channels)
7896 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7897 }
7898 }
7899
7900 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_gt_8) {
7901 TEST_REQUIRES_ARM_NEON;
7902 for (uint32_t channels = 9; channels < 16; channels++) {
7903 DWConvMicrokernelTester()
7904 .cr(8)
7905 .kr(3)
7906 .channels(channels)
7907 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7908 }
7909 }
7910
7911 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_gt_8_with_qmin) {
7912 TEST_REQUIRES_ARM_NEON;
7913 for (uint32_t channels = 9; channels < 16; channels++) {
7914 DWConvMicrokernelTester()
7915 .cr(8)
7916 .kr(3)
7917 .channels(channels)
7918 .qmin(128)
7919 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7920 }
7921 }
7922
7923 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, c_gt_8_with_qmax) {
7924 TEST_REQUIRES_ARM_NEON;
7925 for (uint32_t channels = 9; channels < 16; channels++) {
7926 DWConvMicrokernelTester()
7927 .cr(8)
7928 .kr(3)
7929 .channels(channels)
7930 .qmax(128)
7931 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7932 }
7933 }
7934
7935 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, multipixel) {
7936 TEST_REQUIRES_ARM_NEON;
7937 for (size_t channels = 1; channels <= 40; channels += 7) {
7938 DWConvMicrokernelTester()
7939 .cr(8)
7940 .kr(3)
7941 .channels(channels)
7942 .width(3)
7943 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7944 }
7945 }
7946
7947 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, multipixel_with_step) {
7948 TEST_REQUIRES_ARM_NEON;
7949 for (size_t channels = 1; channels <= 40; channels += 7) {
7950 for (size_t step = 2; step <= 3; step++) {
7951 DWConvMicrokernelTester()
7952 .cr(8)
7953 .kr(3)
7954 .channels(channels)
7955 .width(3)
7956 .step(step)
7957 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7958 }
7959 }
7960 }
7961
7962 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, multipixel_with_output_stride) {
7963 TEST_REQUIRES_ARM_NEON;
7964 for (size_t channels = 1; channels <= 40; channels += 7) {
7965 DWConvMicrokernelTester()
7966 .cr(8)
7967 .kr(3)
7968 .channels(8)
7969 .width(5)
7970 .output_stride(43)
7971 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7972 }
7973 }
7974
7975 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, multipixel_with_qmin) {
7976 TEST_REQUIRES_ARM_NEON;
7977 for (size_t channels = 1; channels <= 40; channels += 7) {
7978 DWConvMicrokernelTester()
7979 .cr(8)
7980 .kr(3)
7981 .channels(channels)
7982 .width(3)
7983 .qmin(128)
7984 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7985 }
7986 }
7987
7988 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, multipixel_with_qmax) {
7989 TEST_REQUIRES_ARM_NEON;
7990 for (size_t channels = 1; channels <= 40; channels += 7) {
7991 DWConvMicrokernelTester()
7992 .cr(8)
7993 .kr(3)
7994 .channels(channels)
7995 .width(3)
7996 .qmax(128)
7997 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
7998 }
7999 }
8000
8001 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, input_offset) {
8002 TEST_REQUIRES_ARM_NEON;
8003 for (uint32_t channels = 16; channels < 128; channels += 24) {
8004 DWConvMicrokernelTester()
8005 .cr(8)
8006 .kr(3)
8007 .channels(channels)
8008 .input_offset(176)
8009 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon, xnn_init_f32_minmax_scalar_params);
8010 }
8011 }
8012
8013 TEST(F32_DWCONV_MINMAX_UP8X3__NEON, zero) {
8014 TEST_REQUIRES_ARM_NEON;
8015 for (uint32_t mz = 0; mz < 3; mz++) {
8016 for (uint32_t channels = 16; channels < 128; channels += 24) {
8017 DWConvMicrokernelTester()
8018 .cr(8)
8019 .kr(3)
8020 .channels(channels)
8021 .input_offset(176)
8022 .zero_index(mz)
8023 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__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
8031 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_eq_8) {
8032 TEST_REQUIRES_ARM_NEON;
8033 DWConvMicrokernelTester()
8034 .cr(8)
8035 .kr(3)
8036 .channels(8)
8037 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8038 }
8039
8040 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_div_8) {
8041 TEST_REQUIRES_ARM_NEON;
8042 for (uint32_t channels = 16; channels < 128; channels += 24) {
8043 DWConvMicrokernelTester()
8044 .cr(8)
8045 .kr(3)
8046 .channels(channels)
8047 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8048 }
8049 }
8050
8051 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_div_8_with_qmin) {
8052 TEST_REQUIRES_ARM_NEON;
8053 for (uint32_t channels = 16; channels < 128; channels += 24) {
8054 DWConvMicrokernelTester()
8055 .cr(8)
8056 .kr(3)
8057 .channels(channels)
8058 .qmin(128)
8059 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8060 }
8061 }
8062
8063 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_div_8_with_qmax) {
8064 TEST_REQUIRES_ARM_NEON;
8065 for (uint32_t channels = 16; channels < 128; channels += 24) {
8066 DWConvMicrokernelTester()
8067 .cr(8)
8068 .kr(3)
8069 .channels(channels)
8070 .qmax(128)
8071 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8072 }
8073 }
8074
8075 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_lt_8) {
8076 TEST_REQUIRES_ARM_NEON;
8077 for (uint32_t channels = 1; channels < 8; channels++) {
8078 DWConvMicrokernelTester()
8079 .cr(8)
8080 .kr(3)
8081 .channels(channels)
8082 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8083 }
8084 }
8085
8086 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_gt_8) {
8087 TEST_REQUIRES_ARM_NEON;
8088 for (uint32_t channels = 9; channels < 16; channels++) {
8089 DWConvMicrokernelTester()
8090 .cr(8)
8091 .kr(3)
8092 .channels(channels)
8093 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8094 }
8095 }
8096
8097 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_gt_8_with_qmin) {
8098 TEST_REQUIRES_ARM_NEON;
8099 for (uint32_t channels = 9; channels < 16; channels++) {
8100 DWConvMicrokernelTester()
8101 .cr(8)
8102 .kr(3)
8103 .channels(channels)
8104 .qmin(128)
8105 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8106 }
8107 }
8108
8109 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, c_gt_8_with_qmax) {
8110 TEST_REQUIRES_ARM_NEON;
8111 for (uint32_t channels = 9; channels < 16; channels++) {
8112 DWConvMicrokernelTester()
8113 .cr(8)
8114 .kr(3)
8115 .channels(channels)
8116 .qmax(128)
8117 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8118 }
8119 }
8120
8121 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, multipixel) {
8122 TEST_REQUIRES_ARM_NEON;
8123 for (size_t channels = 1; channels <= 40; channels += 7) {
8124 DWConvMicrokernelTester()
8125 .cr(8)
8126 .kr(3)
8127 .channels(channels)
8128 .width(3)
8129 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8130 }
8131 }
8132
8133 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, multipixel_with_step) {
8134 TEST_REQUIRES_ARM_NEON;
8135 for (size_t channels = 1; channels <= 40; channels += 7) {
8136 for (size_t step = 2; step <= 3; step++) {
8137 DWConvMicrokernelTester()
8138 .cr(8)
8139 .kr(3)
8140 .channels(channels)
8141 .width(3)
8142 .step(step)
8143 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8144 }
8145 }
8146 }
8147
8148 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, multipixel_with_output_stride) {
8149 TEST_REQUIRES_ARM_NEON;
8150 for (size_t channels = 1; channels <= 40; channels += 7) {
8151 DWConvMicrokernelTester()
8152 .cr(8)
8153 .kr(3)
8154 .channels(8)
8155 .width(5)
8156 .output_stride(43)
8157 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8158 }
8159 }
8160
8161 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, multipixel_with_qmin) {
8162 TEST_REQUIRES_ARM_NEON;
8163 for (size_t channels = 1; channels <= 40; channels += 7) {
8164 DWConvMicrokernelTester()
8165 .cr(8)
8166 .kr(3)
8167 .channels(channels)
8168 .width(3)
8169 .qmin(128)
8170 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8171 }
8172 }
8173
8174 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, multipixel_with_qmax) {
8175 TEST_REQUIRES_ARM_NEON;
8176 for (size_t channels = 1; channels <= 40; channels += 7) {
8177 DWConvMicrokernelTester()
8178 .cr(8)
8179 .kr(3)
8180 .channels(channels)
8181 .width(3)
8182 .qmax(128)
8183 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8184 }
8185 }
8186
8187 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, input_offset) {
8188 TEST_REQUIRES_ARM_NEON;
8189 for (uint32_t channels = 16; channels < 128; channels += 24) {
8190 DWConvMicrokernelTester()
8191 .cr(8)
8192 .kr(3)
8193 .channels(channels)
8194 .input_offset(176)
8195 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8196 }
8197 }
8198
8199 TEST(F32_DWCONV_MINMAX_UP8X3__NEON_ACC2, zero) {
8200 TEST_REQUIRES_ARM_NEON;
8201 for (uint32_t mz = 0; mz < 3; mz++) {
8202 for (uint32_t channels = 16; channels < 128; channels += 24) {
8203 DWConvMicrokernelTester()
8204 .cr(8)
8205 .kr(3)
8206 .channels(channels)
8207 .input_offset(176)
8208 .zero_index(mz)
8209 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__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
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008217 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_eq_8) {
8218 TEST_REQUIRES_ARM_NEON;
8219 DWConvMicrokernelTester()
8220 .cr(8)
8221 .kr(4)
8222 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008223 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008224 }
8225
8226 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_div_8) {
8227 TEST_REQUIRES_ARM_NEON;
8228 for (uint32_t channels = 16; channels < 128; channels += 24) {
8229 DWConvMicrokernelTester()
8230 .cr(8)
8231 .kr(4)
8232 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008233 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008234 }
8235 }
8236
8237 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_div_8_with_qmin) {
8238 TEST_REQUIRES_ARM_NEON;
8239 for (uint32_t channels = 16; channels < 128; channels += 24) {
8240 DWConvMicrokernelTester()
8241 .cr(8)
8242 .kr(4)
8243 .channels(channels)
8244 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008245 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008246 }
8247 }
8248
8249 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_div_8_with_qmax) {
8250 TEST_REQUIRES_ARM_NEON;
8251 for (uint32_t channels = 16; channels < 128; channels += 24) {
8252 DWConvMicrokernelTester()
8253 .cr(8)
8254 .kr(4)
8255 .channels(channels)
8256 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008257 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008258 }
8259 }
8260
8261 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_lt_8) {
8262 TEST_REQUIRES_ARM_NEON;
8263 for (uint32_t channels = 1; channels < 8; channels++) {
8264 DWConvMicrokernelTester()
8265 .cr(8)
8266 .kr(4)
8267 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008268 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008269 }
8270 }
8271
8272 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_gt_8) {
8273 TEST_REQUIRES_ARM_NEON;
8274 for (uint32_t channels = 9; channels < 16; channels++) {
8275 DWConvMicrokernelTester()
8276 .cr(8)
8277 .kr(4)
8278 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008279 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008280 }
8281 }
8282
8283 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_gt_8_with_qmin) {
8284 TEST_REQUIRES_ARM_NEON;
8285 for (uint32_t channels = 9; channels < 16; channels++) {
8286 DWConvMicrokernelTester()
8287 .cr(8)
8288 .kr(4)
8289 .channels(channels)
8290 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008291 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008292 }
8293 }
8294
8295 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_gt_8_with_qmax) {
8296 TEST_REQUIRES_ARM_NEON;
8297 for (uint32_t channels = 9; channels < 16; channels++) {
8298 DWConvMicrokernelTester()
8299 .cr(8)
8300 .kr(4)
8301 .channels(channels)
8302 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008303 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008304 }
8305 }
8306
8307 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel) {
8308 TEST_REQUIRES_ARM_NEON;
8309 for (size_t channels = 1; channels <= 40; channels += 7) {
8310 DWConvMicrokernelTester()
8311 .cr(8)
8312 .kr(4)
8313 .channels(channels)
8314 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008315 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008316 }
8317 }
8318
8319 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel_with_step) {
8320 TEST_REQUIRES_ARM_NEON;
8321 for (size_t channels = 1; channels <= 40; channels += 7) {
8322 for (size_t step = 2; step <= 4; step++) {
8323 DWConvMicrokernelTester()
8324 .cr(8)
8325 .kr(4)
8326 .channels(channels)
8327 .width(3)
8328 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008329 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008330 }
8331 }
8332 }
8333
8334 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel_with_output_stride) {
8335 TEST_REQUIRES_ARM_NEON;
8336 for (size_t channels = 1; channels <= 40; channels += 7) {
8337 DWConvMicrokernelTester()
8338 .cr(8)
8339 .kr(4)
8340 .channels(8)
8341 .width(5)
8342 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008343 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008344 }
8345 }
8346
8347 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel_with_qmin) {
8348 TEST_REQUIRES_ARM_NEON;
8349 for (size_t channels = 1; channels <= 40; channels += 7) {
8350 DWConvMicrokernelTester()
8351 .cr(8)
8352 .kr(4)
8353 .channels(channels)
8354 .width(3)
8355 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008356 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008357 }
8358 }
8359
8360 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel_with_qmax) {
8361 TEST_REQUIRES_ARM_NEON;
8362 for (size_t channels = 1; channels <= 40; channels += 7) {
8363 DWConvMicrokernelTester()
8364 .cr(8)
8365 .kr(4)
8366 .channels(channels)
8367 .width(3)
8368 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008369 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008370 }
8371 }
Frank Barchardd5360722020-05-17 16:10:36 -07008372
8373 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, input_offset) {
8374 TEST_REQUIRES_ARM_NEON;
8375 for (uint32_t channels = 16; channels < 128; channels += 24) {
8376 DWConvMicrokernelTester()
8377 .cr(8)
8378 .kr(4)
8379 .channels(channels)
8380 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008381 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07008382 }
8383 }
8384
8385 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, zero) {
8386 TEST_REQUIRES_ARM_NEON;
8387 for (uint32_t mz = 0; mz < 4; mz++) {
8388 for (uint32_t channels = 16; channels < 128; channels += 24) {
8389 DWConvMicrokernelTester()
8390 .cr(8)
8391 .kr(4)
8392 .channels(channels)
8393 .input_offset(176)
8394 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008395 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07008396 }
8397 }
8398 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008399#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
8400
8401
8402#if XNN_ARCH_ARM || XNN_ARCH_ARM64
8403 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_eq_8) {
8404 TEST_REQUIRES_ARM_NEON;
8405 DWConvMicrokernelTester()
8406 .cr(8)
8407 .kr(4)
8408 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008409 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008410 }
8411
8412 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_div_8) {
8413 TEST_REQUIRES_ARM_NEON;
8414 for (uint32_t channels = 16; channels < 128; channels += 24) {
8415 DWConvMicrokernelTester()
8416 .cr(8)
8417 .kr(4)
8418 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008419 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008420 }
8421 }
8422
8423 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_div_8_with_qmin) {
8424 TEST_REQUIRES_ARM_NEON;
8425 for (uint32_t channels = 16; channels < 128; channels += 24) {
8426 DWConvMicrokernelTester()
8427 .cr(8)
8428 .kr(4)
8429 .channels(channels)
8430 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008431 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008432 }
8433 }
8434
8435 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_div_8_with_qmax) {
8436 TEST_REQUIRES_ARM_NEON;
8437 for (uint32_t channels = 16; channels < 128; channels += 24) {
8438 DWConvMicrokernelTester()
8439 .cr(8)
8440 .kr(4)
8441 .channels(channels)
8442 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008443 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008444 }
8445 }
8446
8447 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_lt_8) {
8448 TEST_REQUIRES_ARM_NEON;
8449 for (uint32_t channels = 1; channels < 8; channels++) {
8450 DWConvMicrokernelTester()
8451 .cr(8)
8452 .kr(4)
8453 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008454 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008455 }
8456 }
8457
8458 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_gt_8) {
8459 TEST_REQUIRES_ARM_NEON;
8460 for (uint32_t channels = 9; channels < 16; channels++) {
8461 DWConvMicrokernelTester()
8462 .cr(8)
8463 .kr(4)
8464 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008465 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008466 }
8467 }
8468
8469 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_gt_8_with_qmin) {
8470 TEST_REQUIRES_ARM_NEON;
8471 for (uint32_t channels = 9; channels < 16; channels++) {
8472 DWConvMicrokernelTester()
8473 .cr(8)
8474 .kr(4)
8475 .channels(channels)
8476 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008477 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008478 }
8479 }
8480
8481 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_gt_8_with_qmax) {
8482 TEST_REQUIRES_ARM_NEON;
8483 for (uint32_t channels = 9; channels < 16; channels++) {
8484 DWConvMicrokernelTester()
8485 .cr(8)
8486 .kr(4)
8487 .channels(channels)
8488 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008489 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008490 }
8491 }
8492
8493 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel) {
8494 TEST_REQUIRES_ARM_NEON;
8495 for (size_t channels = 1; channels <= 40; channels += 7) {
8496 DWConvMicrokernelTester()
8497 .cr(8)
8498 .kr(4)
8499 .channels(channels)
8500 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008501 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008502 }
8503 }
8504
8505 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel_with_step) {
8506 TEST_REQUIRES_ARM_NEON;
8507 for (size_t channels = 1; channels <= 40; channels += 7) {
8508 for (size_t step = 2; step <= 4; step++) {
8509 DWConvMicrokernelTester()
8510 .cr(8)
8511 .kr(4)
8512 .channels(channels)
8513 .width(3)
8514 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008515 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008516 }
8517 }
8518 }
8519
8520 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel_with_output_stride) {
8521 TEST_REQUIRES_ARM_NEON;
8522 for (size_t channels = 1; channels <= 40; channels += 7) {
8523 DWConvMicrokernelTester()
8524 .cr(8)
8525 .kr(4)
8526 .channels(8)
8527 .width(5)
8528 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008529 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008530 }
8531 }
8532
8533 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel_with_qmin) {
8534 TEST_REQUIRES_ARM_NEON;
8535 for (size_t channels = 1; channels <= 40; channels += 7) {
8536 DWConvMicrokernelTester()
8537 .cr(8)
8538 .kr(4)
8539 .channels(channels)
8540 .width(3)
8541 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008542 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008543 }
8544 }
8545
8546 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel_with_qmax) {
8547 TEST_REQUIRES_ARM_NEON;
8548 for (size_t channels = 1; channels <= 40; channels += 7) {
8549 DWConvMicrokernelTester()
8550 .cr(8)
8551 .kr(4)
8552 .channels(channels)
8553 .width(3)
8554 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008555 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008556 }
8557 }
Frank Barchardd5360722020-05-17 16:10:36 -07008558
8559 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, input_offset) {
8560 TEST_REQUIRES_ARM_NEON;
8561 for (uint32_t channels = 16; channels < 128; channels += 24) {
8562 DWConvMicrokernelTester()
8563 .cr(8)
8564 .kr(4)
8565 .channels(channels)
8566 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008567 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07008568 }
8569 }
8570
8571 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, zero) {
8572 TEST_REQUIRES_ARM_NEON;
8573 for (uint32_t mz = 0; mz < 4; mz++) {
8574 for (uint32_t channels = 16; channels < 128; channels += 24) {
8575 DWConvMicrokernelTester()
8576 .cr(8)
8577 .kr(4)
8578 .channels(channels)
8579 .input_offset(176)
8580 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07008581 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -07008582 }
8583 }
8584 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07008585#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
8586
8587
Frank Barchardc9f9d672021-10-18 12:51:59 -07008588#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -07008589 TEST(F32_DWCONV_MINMAX_UP16X3__NEON, c_eq_16) {
8590 TEST_REQUIRES_ARM_NEON;
8591 DWConvMicrokernelTester()
8592 .cr(16)
8593 .kr(3)
8594 .channels(16)
8595 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8596 }
8597
8598 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8604 .channels(channels)
8605 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8606 }
8607 }
8608
8609 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8615 .channels(channels)
8616 .qmin(128)
8617 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8618 }
8619 }
8620
8621 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8627 .channels(channels)
8628 .qmax(128)
8629 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8630 }
8631 }
8632
8633 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8639 .channels(channels)
8640 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8641 }
8642 }
8643
8644 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8650 .channels(channels)
8651 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8652 }
8653 }
8654
8655 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8661 .channels(channels)
8662 .qmin(128)
8663 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8664 }
8665 }
8666
8667 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8673 .channels(channels)
8674 .qmax(128)
8675 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8676 }
8677 }
8678
8679 TEST(F32_DWCONV_MINMAX_UP16X3__NEON, multipixel) {
8680 TEST_REQUIRES_ARM_NEON;
8681 for (size_t channels = 1; channels <= 80; channels += 15) {
8682 DWConvMicrokernelTester()
8683 .cr(16)
8684 .kr(3)
8685 .channels(channels)
8686 .width(3)
8687 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8688 }
8689 }
8690
8691 TEST(F32_DWCONV_MINMAX_UP16X3__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 <= 3; step++) {
8695 DWConvMicrokernelTester()
8696 .cr(16)
8697 .kr(3)
8698 .channels(channels)
8699 .width(3)
8700 .step(step)
8701 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8702 }
8703 }
8704 }
8705
8706 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8712 .channels(16)
8713 .width(5)
8714 .output_stride(83)
8715 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8716 }
8717 }
8718
8719 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8725 .channels(channels)
8726 .width(3)
8727 .qmin(128)
8728 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8729 }
8730 }
8731
8732 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8738 .channels(channels)
8739 .width(3)
8740 .qmax(128)
8741 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8742 }
8743 }
8744
8745 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8751 .channels(channels)
8752 .input_offset(304)
8753 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon, xnn_init_f32_minmax_scalar_params);
8754 }
8755 }
8756
8757 TEST(F32_DWCONV_MINMAX_UP16X3__NEON, zero) {
8758 TEST_REQUIRES_ARM_NEON;
8759 for (uint32_t mz = 0; mz < 3; mz++) {
8760 for (uint32_t channels = 32; channels < 256; channels += 48) {
8761 DWConvMicrokernelTester()
8762 .cr(16)
8763 .kr(3)
8764 .channels(channels)
8765 .input_offset(304)
8766 .zero_index(mz)
8767 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__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
8775 TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, c_eq_16) {
8776 TEST_REQUIRES_ARM_NEON;
8777 DWConvMicrokernelTester()
8778 .cr(16)
8779 .kr(3)
8780 .channels(16)
8781 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8782 }
8783
8784 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8790 .channels(channels)
8791 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8792 }
8793 }
8794
8795 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8801 .channels(channels)
8802 .qmin(128)
8803 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8804 }
8805 }
8806
8807 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8813 .channels(channels)
8814 .qmax(128)
8815 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8816 }
8817 }
8818
8819 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8825 .channels(channels)
8826 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8827 }
8828 }
8829
8830 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8836 .channels(channels)
8837 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8838 }
8839 }
8840
8841 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8847 .channels(channels)
8848 .qmin(128)
8849 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8850 }
8851 }
8852
8853 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8859 .channels(channels)
8860 .qmax(128)
8861 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8862 }
8863 }
8864
8865 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8871 .channels(channels)
8872 .width(3)
8873 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8874 }
8875 }
8876
8877 TEST(F32_DWCONV_MINMAX_UP16X3__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 <= 3; step++) {
8881 DWConvMicrokernelTester()
8882 .cr(16)
8883 .kr(3)
8884 .channels(channels)
8885 .width(3)
8886 .step(step)
8887 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8888 }
8889 }
8890 }
8891
8892 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8898 .channels(16)
8899 .width(5)
8900 .output_stride(83)
8901 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8902 }
8903 }
8904
8905 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8911 .channels(channels)
8912 .width(3)
8913 .qmin(128)
8914 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8915 }
8916 }
8917
8918 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8924 .channels(channels)
8925 .width(3)
8926 .qmax(128)
8927 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8928 }
8929 }
8930
8931 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
8937 .channels(channels)
8938 .input_offset(304)
8939 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__neon_acc2, xnn_init_f32_minmax_scalar_params);
8940 }
8941 }
8942
8943 TEST(F32_DWCONV_MINMAX_UP16X3__NEON_ACC2, zero) {
8944 TEST_REQUIRES_ARM_NEON;
8945 for (uint32_t mz = 0; mz < 3; mz++) {
8946 for (uint32_t channels = 32; channels < 256; channels += 48) {
8947 DWConvMicrokernelTester()
8948 .cr(16)
8949 .kr(3)
8950 .channels(channels)
8951 .input_offset(304)
8952 .zero_index(mz)
8953 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__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
Frank Barchardc9f9d672021-10-18 12:51:59 -07008961 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_eq_16) {
8962 TEST_REQUIRES_ARM_NEON;
8963 DWConvMicrokernelTester()
8964 .cr(16)
8965 .kr(4)
8966 .channels(16)
8967 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
8968 }
8969
8970 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_div_16) {
8971 TEST_REQUIRES_ARM_NEON;
8972 for (uint32_t channels = 32; channels < 256; channels += 48) {
8973 DWConvMicrokernelTester()
8974 .cr(16)
8975 .kr(4)
8976 .channels(channels)
8977 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
8978 }
8979 }
8980
8981 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_div_16_with_qmin) {
8982 TEST_REQUIRES_ARM_NEON;
8983 for (uint32_t channels = 32; channels < 256; channels += 48) {
8984 DWConvMicrokernelTester()
8985 .cr(16)
8986 .kr(4)
8987 .channels(channels)
8988 .qmin(128)
8989 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
8990 }
8991 }
8992
8993 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_div_16_with_qmax) {
8994 TEST_REQUIRES_ARM_NEON;
8995 for (uint32_t channels = 32; channels < 256; channels += 48) {
8996 DWConvMicrokernelTester()
8997 .cr(16)
8998 .kr(4)
8999 .channels(channels)
9000 .qmax(128)
9001 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
9002 }
9003 }
9004
9005 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_lt_16) {
9006 TEST_REQUIRES_ARM_NEON;
9007 for (uint32_t channels = 1; channels < 16; channels++) {
9008 DWConvMicrokernelTester()
9009 .cr(16)
9010 .kr(4)
9011 .channels(channels)
9012 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
9013 }
9014 }
9015
9016 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_gt_16) {
9017 TEST_REQUIRES_ARM_NEON;
9018 for (uint32_t channels = 17; channels < 32; channels++) {
9019 DWConvMicrokernelTester()
9020 .cr(16)
9021 .kr(4)
9022 .channels(channels)
9023 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
9024 }
9025 }
9026
9027 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_gt_16_with_qmin) {
9028 TEST_REQUIRES_ARM_NEON;
9029 for (uint32_t channels = 17; channels < 32; channels++) {
9030 DWConvMicrokernelTester()
9031 .cr(16)
9032 .kr(4)
9033 .channels(channels)
9034 .qmin(128)
9035 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
9036 }
9037 }
9038
9039 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, c_gt_16_with_qmax) {
9040 TEST_REQUIRES_ARM_NEON;
9041 for (uint32_t channels = 17; channels < 32; channels++) {
9042 DWConvMicrokernelTester()
9043 .cr(16)
9044 .kr(4)
9045 .channels(channels)
9046 .qmax(128)
9047 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
9048 }
9049 }
9050
9051 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, multipixel) {
9052 TEST_REQUIRES_ARM_NEON;
9053 for (size_t channels = 1; channels <= 80; channels += 15) {
9054 DWConvMicrokernelTester()
9055 .cr(16)
9056 .kr(4)
9057 .channels(channels)
9058 .width(3)
9059 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
9060 }
9061 }
9062
9063 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, multipixel_with_step) {
9064 TEST_REQUIRES_ARM_NEON;
9065 for (size_t channels = 1; channels <= 80; channels += 15) {
9066 for (size_t step = 2; step <= 4; step++) {
9067 DWConvMicrokernelTester()
9068 .cr(16)
9069 .kr(4)
9070 .channels(channels)
9071 .width(3)
9072 .step(step)
9073 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
9074 }
9075 }
9076 }
9077
9078 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, multipixel_with_output_stride) {
9079 TEST_REQUIRES_ARM_NEON;
9080 for (size_t channels = 1; channels <= 80; channels += 15) {
9081 DWConvMicrokernelTester()
9082 .cr(16)
9083 .kr(4)
9084 .channels(16)
9085 .width(5)
9086 .output_stride(83)
9087 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
9088 }
9089 }
9090
9091 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, multipixel_with_qmin) {
9092 TEST_REQUIRES_ARM_NEON;
9093 for (size_t channels = 1; channels <= 80; channels += 15) {
9094 DWConvMicrokernelTester()
9095 .cr(16)
9096 .kr(4)
9097 .channels(channels)
9098 .width(3)
9099 .qmin(128)
9100 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
9101 }
9102 }
9103
9104 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, multipixel_with_qmax) {
9105 TEST_REQUIRES_ARM_NEON;
9106 for (size_t channels = 1; channels <= 80; channels += 15) {
9107 DWConvMicrokernelTester()
9108 .cr(16)
9109 .kr(4)
9110 .channels(channels)
9111 .width(3)
9112 .qmax(128)
9113 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
9114 }
9115 }
9116
9117 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, input_offset) {
9118 TEST_REQUIRES_ARM_NEON;
9119 for (uint32_t channels = 32; channels < 256; channels += 48) {
9120 DWConvMicrokernelTester()
9121 .cr(16)
9122 .kr(4)
9123 .channels(channels)
9124 .input_offset(304)
9125 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, xnn_init_f32_minmax_scalar_params);
9126 }
9127 }
9128
9129 TEST(F32_DWCONV_MINMAX_UP16X4__NEON, zero) {
9130 TEST_REQUIRES_ARM_NEON;
9131 for (uint32_t mz = 0; mz < 4; mz++) {
9132 for (uint32_t channels = 32; channels < 256; channels += 48) {
9133 DWConvMicrokernelTester()
9134 .cr(16)
9135 .kr(4)
9136 .channels(channels)
9137 .input_offset(304)
9138 .zero_index(mz)
9139 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon, 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
9147 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_eq_16) {
9148 TEST_REQUIRES_ARM_NEON;
9149 DWConvMicrokernelTester()
9150 .cr(16)
9151 .kr(4)
9152 .channels(16)
9153 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9154 }
9155
9156 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_div_16) {
9157 TEST_REQUIRES_ARM_NEON;
9158 for (uint32_t channels = 32; channels < 256; channels += 48) {
9159 DWConvMicrokernelTester()
9160 .cr(16)
9161 .kr(4)
9162 .channels(channels)
9163 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9164 }
9165 }
9166
9167 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_div_16_with_qmin) {
9168 TEST_REQUIRES_ARM_NEON;
9169 for (uint32_t channels = 32; channels < 256; channels += 48) {
9170 DWConvMicrokernelTester()
9171 .cr(16)
9172 .kr(4)
9173 .channels(channels)
9174 .qmin(128)
9175 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9176 }
9177 }
9178
9179 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_div_16_with_qmax) {
9180 TEST_REQUIRES_ARM_NEON;
9181 for (uint32_t channels = 32; channels < 256; channels += 48) {
9182 DWConvMicrokernelTester()
9183 .cr(16)
9184 .kr(4)
9185 .channels(channels)
9186 .qmax(128)
9187 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9188 }
9189 }
9190
9191 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_lt_16) {
9192 TEST_REQUIRES_ARM_NEON;
9193 for (uint32_t channels = 1; channels < 16; channels++) {
9194 DWConvMicrokernelTester()
9195 .cr(16)
9196 .kr(4)
9197 .channels(channels)
9198 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9199 }
9200 }
9201
9202 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_gt_16) {
9203 TEST_REQUIRES_ARM_NEON;
9204 for (uint32_t channels = 17; channels < 32; channels++) {
9205 DWConvMicrokernelTester()
9206 .cr(16)
9207 .kr(4)
9208 .channels(channels)
9209 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9210 }
9211 }
9212
9213 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_gt_16_with_qmin) {
9214 TEST_REQUIRES_ARM_NEON;
9215 for (uint32_t channels = 17; channels < 32; channels++) {
9216 DWConvMicrokernelTester()
9217 .cr(16)
9218 .kr(4)
9219 .channels(channels)
9220 .qmin(128)
9221 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9222 }
9223 }
9224
9225 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, c_gt_16_with_qmax) {
9226 TEST_REQUIRES_ARM_NEON;
9227 for (uint32_t channels = 17; channels < 32; channels++) {
9228 DWConvMicrokernelTester()
9229 .cr(16)
9230 .kr(4)
9231 .channels(channels)
9232 .qmax(128)
9233 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9234 }
9235 }
9236
9237 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, multipixel) {
9238 TEST_REQUIRES_ARM_NEON;
9239 for (size_t channels = 1; channels <= 80; channels += 15) {
9240 DWConvMicrokernelTester()
9241 .cr(16)
9242 .kr(4)
9243 .channels(channels)
9244 .width(3)
9245 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9246 }
9247 }
9248
9249 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, multipixel_with_step) {
9250 TEST_REQUIRES_ARM_NEON;
9251 for (size_t channels = 1; channels <= 80; channels += 15) {
9252 for (size_t step = 2; step <= 4; step++) {
9253 DWConvMicrokernelTester()
9254 .cr(16)
9255 .kr(4)
9256 .channels(channels)
9257 .width(3)
9258 .step(step)
9259 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9260 }
9261 }
9262 }
9263
9264 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, multipixel_with_output_stride) {
9265 TEST_REQUIRES_ARM_NEON;
9266 for (size_t channels = 1; channels <= 80; channels += 15) {
9267 DWConvMicrokernelTester()
9268 .cr(16)
9269 .kr(4)
9270 .channels(16)
9271 .width(5)
9272 .output_stride(83)
9273 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9274 }
9275 }
9276
9277 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, multipixel_with_qmin) {
9278 TEST_REQUIRES_ARM_NEON;
9279 for (size_t channels = 1; channels <= 80; channels += 15) {
9280 DWConvMicrokernelTester()
9281 .cr(16)
9282 .kr(4)
9283 .channels(channels)
9284 .width(3)
9285 .qmin(128)
9286 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9287 }
9288 }
9289
9290 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, multipixel_with_qmax) {
9291 TEST_REQUIRES_ARM_NEON;
9292 for (size_t channels = 1; channels <= 80; channels += 15) {
9293 DWConvMicrokernelTester()
9294 .cr(16)
9295 .kr(4)
9296 .channels(channels)
9297 .width(3)
9298 .qmax(128)
9299 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9300 }
9301 }
9302
9303 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, input_offset) {
9304 TEST_REQUIRES_ARM_NEON;
9305 for (uint32_t channels = 32; channels < 256; channels += 48) {
9306 DWConvMicrokernelTester()
9307 .cr(16)
9308 .kr(4)
9309 .channels(channels)
9310 .input_offset(304)
9311 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9312 }
9313 }
9314
9315 TEST(F32_DWCONV_MINMAX_UP16X4__NEON_ACC2, zero) {
9316 TEST_REQUIRES_ARM_NEON;
9317 for (uint32_t mz = 0; mz < 4; mz++) {
9318 for (uint32_t channels = 32; channels < 256; channels += 48) {
9319 DWConvMicrokernelTester()
9320 .cr(16)
9321 .kr(4)
9322 .channels(channels)
9323 .input_offset(304)
9324 .zero_index(mz)
9325 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__neon_acc2, xnn_init_f32_minmax_scalar_params);
9326 }
9327 }
9328 }
9329#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
9330
9331
Marat Dukhan1c587112020-04-08 20:04:28 -07009332#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07009333 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009334 TEST_REQUIRES_X86_SSE;
9335 DWConvMicrokernelTester()
9336 .cr(4)
9337 .kr(25)
9338 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009339 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009340 }
9341
Marat Dukhande06f492020-04-09 00:19:31 -07009342 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009343 TEST_REQUIRES_X86_SSE;
9344 for (uint32_t channels = 8; channels < 64; channels += 12) {
9345 DWConvMicrokernelTester()
9346 .cr(4)
9347 .kr(25)
9348 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009349 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009350 }
9351 }
9352
Marat Dukhande06f492020-04-09 00:19:31 -07009353 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009354 TEST_REQUIRES_X86_SSE;
9355 for (uint32_t channels = 8; channels < 64; channels += 12) {
9356 DWConvMicrokernelTester()
9357 .cr(4)
9358 .kr(25)
9359 .channels(channels)
9360 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009361 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009362 }
9363 }
9364
Marat Dukhande06f492020-04-09 00:19:31 -07009365 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009366 TEST_REQUIRES_X86_SSE;
9367 for (uint32_t channels = 8; channels < 64; channels += 12) {
9368 DWConvMicrokernelTester()
9369 .cr(4)
9370 .kr(25)
9371 .channels(channels)
9372 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009373 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009374 }
9375 }
9376
Marat Dukhande06f492020-04-09 00:19:31 -07009377 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009378 TEST_REQUIRES_X86_SSE;
9379 for (uint32_t channels = 1; channels < 4; channels++) {
9380 DWConvMicrokernelTester()
9381 .cr(4)
9382 .kr(25)
9383 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009384 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009385 }
9386 }
9387
Marat Dukhande06f492020-04-09 00:19:31 -07009388 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009389 TEST_REQUIRES_X86_SSE;
9390 for (uint32_t channels = 5; channels < 8; channels++) {
9391 DWConvMicrokernelTester()
9392 .cr(4)
9393 .kr(25)
9394 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009395 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009396 }
9397 }
9398
Marat Dukhande06f492020-04-09 00:19:31 -07009399 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009400 TEST_REQUIRES_X86_SSE;
9401 for (uint32_t channels = 5; channels < 8; channels++) {
9402 DWConvMicrokernelTester()
9403 .cr(4)
9404 .kr(25)
9405 .channels(channels)
9406 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009407 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009408 }
9409 }
9410
Marat Dukhande06f492020-04-09 00:19:31 -07009411 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009412 TEST_REQUIRES_X86_SSE;
9413 for (uint32_t channels = 5; channels < 8; channels++) {
9414 DWConvMicrokernelTester()
9415 .cr(4)
9416 .kr(25)
9417 .channels(channels)
9418 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009419 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009420 }
9421 }
9422
Marat Dukhande06f492020-04-09 00:19:31 -07009423 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009424 TEST_REQUIRES_X86_SSE;
9425 for (size_t channels = 1; channels <= 20; channels += 3) {
9426 DWConvMicrokernelTester()
9427 .cr(4)
9428 .kr(25)
9429 .channels(channels)
9430 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009431 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009432 }
9433 }
9434
Marat Dukhande06f492020-04-09 00:19:31 -07009435 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009436 TEST_REQUIRES_X86_SSE;
9437 for (size_t channels = 1; channels <= 20; channels += 3) {
9438 for (size_t step = 2; step <= 25; step++) {
9439 DWConvMicrokernelTester()
9440 .cr(4)
9441 .kr(25)
9442 .channels(channels)
9443 .width(3)
9444 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009445 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009446 }
9447 }
9448 }
9449
Marat Dukhande06f492020-04-09 00:19:31 -07009450 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009451 TEST_REQUIRES_X86_SSE;
9452 for (size_t channels = 1; channels <= 20; channels += 3) {
9453 DWConvMicrokernelTester()
9454 .cr(4)
9455 .kr(25)
9456 .channels(4)
9457 .width(5)
9458 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009459 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009460 }
9461 }
9462
Marat Dukhande06f492020-04-09 00:19:31 -07009463 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009464 TEST_REQUIRES_X86_SSE;
9465 for (size_t channels = 1; channels <= 20; channels += 3) {
9466 DWConvMicrokernelTester()
9467 .cr(4)
9468 .kr(25)
9469 .channels(channels)
9470 .width(3)
9471 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009472 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009473 }
9474 }
9475
Marat Dukhande06f492020-04-09 00:19:31 -07009476 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009477 TEST_REQUIRES_X86_SSE;
9478 for (size_t channels = 1; channels <= 20; channels += 3) {
9479 DWConvMicrokernelTester()
9480 .cr(4)
9481 .kr(25)
9482 .channels(channels)
9483 .width(3)
9484 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009485 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009486 }
9487 }
Frank Barchardd5360722020-05-17 16:10:36 -07009488
9489 TEST(F32_DWCONV_MINMAX_UP4X25__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(25)
9495 .channels(channels)
9496 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009497 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -07009498 }
9499 }
9500
9501 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, zero) {
9502 TEST_REQUIRES_X86_SSE;
9503 for (uint32_t mz = 0; mz < 25; mz++) {
9504 for (uint32_t channels = 8; channels < 64; channels += 12) {
9505 DWConvMicrokernelTester()
9506 .cr(4)
9507 .kr(25)
9508 .channels(channels)
9509 .input_offset(112)
9510 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009511 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -07009512 }
9513 }
9514 }
Marat Dukhan1c587112020-04-08 20:04:28 -07009515#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
9516
9517
9518#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07009519 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009520 TEST_REQUIRES_X86_SSE;
9521 DWConvMicrokernelTester()
9522 .cr(4)
9523 .kr(25)
9524 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009525 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009526 }
9527
Marat Dukhande06f492020-04-09 00:19:31 -07009528 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009529 TEST_REQUIRES_X86_SSE;
9530 for (uint32_t channels = 8; channels < 64; channels += 12) {
9531 DWConvMicrokernelTester()
9532 .cr(4)
9533 .kr(25)
9534 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009535 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009536 }
9537 }
9538
Marat Dukhande06f492020-04-09 00:19:31 -07009539 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009540 TEST_REQUIRES_X86_SSE;
9541 for (uint32_t channels = 8; channels < 64; channels += 12) {
9542 DWConvMicrokernelTester()
9543 .cr(4)
9544 .kr(25)
9545 .channels(channels)
9546 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009547 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009548 }
9549 }
9550
Marat Dukhande06f492020-04-09 00:19:31 -07009551 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009552 TEST_REQUIRES_X86_SSE;
9553 for (uint32_t channels = 8; channels < 64; channels += 12) {
9554 DWConvMicrokernelTester()
9555 .cr(4)
9556 .kr(25)
9557 .channels(channels)
9558 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009559 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009560 }
9561 }
9562
Marat Dukhande06f492020-04-09 00:19:31 -07009563 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009564 TEST_REQUIRES_X86_SSE;
9565 for (uint32_t channels = 1; channels < 4; channels++) {
9566 DWConvMicrokernelTester()
9567 .cr(4)
9568 .kr(25)
9569 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009570 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009571 }
9572 }
9573
Marat Dukhande06f492020-04-09 00:19:31 -07009574 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009575 TEST_REQUIRES_X86_SSE;
9576 for (uint32_t channels = 5; channels < 8; channels++) {
9577 DWConvMicrokernelTester()
9578 .cr(4)
9579 .kr(25)
9580 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009581 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009582 }
9583 }
9584
Marat Dukhande06f492020-04-09 00:19:31 -07009585 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009586 TEST_REQUIRES_X86_SSE;
9587 for (uint32_t channels = 5; channels < 8; channels++) {
9588 DWConvMicrokernelTester()
9589 .cr(4)
9590 .kr(25)
9591 .channels(channels)
9592 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009593 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009594 }
9595 }
9596
Marat Dukhande06f492020-04-09 00:19:31 -07009597 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009598 TEST_REQUIRES_X86_SSE;
9599 for (uint32_t channels = 5; channels < 8; channels++) {
9600 DWConvMicrokernelTester()
9601 .cr(4)
9602 .kr(25)
9603 .channels(channels)
9604 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009605 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009606 }
9607 }
9608
Marat Dukhande06f492020-04-09 00:19:31 -07009609 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009610 TEST_REQUIRES_X86_SSE;
9611 for (size_t channels = 1; channels <= 20; channels += 3) {
9612 DWConvMicrokernelTester()
9613 .cr(4)
9614 .kr(25)
9615 .channels(channels)
9616 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009617 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009618 }
9619 }
9620
Marat Dukhande06f492020-04-09 00:19:31 -07009621 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009622 TEST_REQUIRES_X86_SSE;
9623 for (size_t channels = 1; channels <= 20; channels += 3) {
9624 for (size_t step = 2; step <= 25; step++) {
9625 DWConvMicrokernelTester()
9626 .cr(4)
9627 .kr(25)
9628 .channels(channels)
9629 .width(3)
9630 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009631 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009632 }
9633 }
9634 }
9635
Marat Dukhande06f492020-04-09 00:19:31 -07009636 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009637 TEST_REQUIRES_X86_SSE;
9638 for (size_t channels = 1; channels <= 20; channels += 3) {
9639 DWConvMicrokernelTester()
9640 .cr(4)
9641 .kr(25)
9642 .channels(4)
9643 .width(5)
9644 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009645 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009646 }
9647 }
9648
Marat Dukhande06f492020-04-09 00:19:31 -07009649 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009650 TEST_REQUIRES_X86_SSE;
9651 for (size_t channels = 1; channels <= 20; channels += 3) {
9652 DWConvMicrokernelTester()
9653 .cr(4)
9654 .kr(25)
9655 .channels(channels)
9656 .width(3)
9657 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009658 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009659 }
9660 }
9661
Marat Dukhande06f492020-04-09 00:19:31 -07009662 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009663 TEST_REQUIRES_X86_SSE;
9664 for (size_t channels = 1; channels <= 20; channels += 3) {
9665 DWConvMicrokernelTester()
9666 .cr(4)
9667 .kr(25)
9668 .channels(channels)
9669 .width(3)
9670 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009671 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009672 }
9673 }
Frank Barchardd5360722020-05-17 16:10:36 -07009674
9675 TEST(F32_DWCONV_MINMAX_UP4X25__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(25)
9681 .channels(channels)
9682 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009683 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -07009684 }
9685 }
9686
9687 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, zero) {
9688 TEST_REQUIRES_X86_SSE;
9689 for (uint32_t mz = 0; mz < 25; mz++) {
9690 for (uint32_t channels = 8; channels < 64; channels += 12) {
9691 DWConvMicrokernelTester()
9692 .cr(4)
9693 .kr(25)
9694 .channels(channels)
9695 .input_offset(112)
9696 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009697 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -07009698 }
9699 }
9700 }
Marat Dukhan1c587112020-04-08 20:04:28 -07009701#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
9702
9703
9704#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07009705 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009706 TEST_REQUIRES_X86_SSE;
9707 DWConvMicrokernelTester()
9708 .cr(8)
9709 .kr(25)
9710 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009711 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009712 }
9713
Marat Dukhande06f492020-04-09 00:19:31 -07009714 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009715 TEST_REQUIRES_X86_SSE;
9716 for (uint32_t channels = 16; channels < 128; channels += 24) {
9717 DWConvMicrokernelTester()
9718 .cr(8)
9719 .kr(25)
9720 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009721 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009722 }
9723 }
9724
Marat Dukhande06f492020-04-09 00:19:31 -07009725 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009726 TEST_REQUIRES_X86_SSE;
9727 for (uint32_t channels = 16; channels < 128; channels += 24) {
9728 DWConvMicrokernelTester()
9729 .cr(8)
9730 .kr(25)
9731 .channels(channels)
9732 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009733 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009734 }
9735 }
9736
Marat Dukhande06f492020-04-09 00:19:31 -07009737 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009738 TEST_REQUIRES_X86_SSE;
9739 for (uint32_t channels = 16; channels < 128; channels += 24) {
9740 DWConvMicrokernelTester()
9741 .cr(8)
9742 .kr(25)
9743 .channels(channels)
9744 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009745 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009746 }
9747 }
9748
Marat Dukhande06f492020-04-09 00:19:31 -07009749 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009750 TEST_REQUIRES_X86_SSE;
9751 for (uint32_t channels = 1; channels < 8; channels++) {
9752 DWConvMicrokernelTester()
9753 .cr(8)
9754 .kr(25)
9755 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009756 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009757 }
9758 }
9759
Marat Dukhande06f492020-04-09 00:19:31 -07009760 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009761 TEST_REQUIRES_X86_SSE;
9762 for (uint32_t channels = 9; channels < 16; channels++) {
9763 DWConvMicrokernelTester()
9764 .cr(8)
9765 .kr(25)
9766 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009767 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009768 }
9769 }
9770
Marat Dukhande06f492020-04-09 00:19:31 -07009771 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009772 TEST_REQUIRES_X86_SSE;
9773 for (uint32_t channels = 9; channels < 16; channels++) {
9774 DWConvMicrokernelTester()
9775 .cr(8)
9776 .kr(25)
9777 .channels(channels)
9778 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009779 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009780 }
9781 }
9782
Marat Dukhande06f492020-04-09 00:19:31 -07009783 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009784 TEST_REQUIRES_X86_SSE;
9785 for (uint32_t channels = 9; channels < 16; channels++) {
9786 DWConvMicrokernelTester()
9787 .cr(8)
9788 .kr(25)
9789 .channels(channels)
9790 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009791 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009792 }
9793 }
9794
Marat Dukhande06f492020-04-09 00:19:31 -07009795 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009796 TEST_REQUIRES_X86_SSE;
9797 for (size_t channels = 1; channels <= 40; channels += 7) {
9798 DWConvMicrokernelTester()
9799 .cr(8)
9800 .kr(25)
9801 .channels(channels)
9802 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009803 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009804 }
9805 }
9806
Marat Dukhande06f492020-04-09 00:19:31 -07009807 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009808 TEST_REQUIRES_X86_SSE;
9809 for (size_t channels = 1; channels <= 40; channels += 7) {
9810 for (size_t step = 2; step <= 25; step++) {
9811 DWConvMicrokernelTester()
9812 .cr(8)
9813 .kr(25)
9814 .channels(channels)
9815 .width(3)
9816 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009817 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009818 }
9819 }
9820 }
9821
Marat Dukhande06f492020-04-09 00:19:31 -07009822 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009823 TEST_REQUIRES_X86_SSE;
9824 for (size_t channels = 1; channels <= 40; channels += 7) {
9825 DWConvMicrokernelTester()
9826 .cr(8)
9827 .kr(25)
9828 .channels(8)
9829 .width(5)
9830 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009831 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009832 }
9833 }
9834
Marat Dukhande06f492020-04-09 00:19:31 -07009835 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009836 TEST_REQUIRES_X86_SSE;
9837 for (size_t channels = 1; channels <= 40; channels += 7) {
9838 DWConvMicrokernelTester()
9839 .cr(8)
9840 .kr(25)
9841 .channels(channels)
9842 .width(3)
9843 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009844 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009845 }
9846 }
9847
Marat Dukhande06f492020-04-09 00:19:31 -07009848 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009849 TEST_REQUIRES_X86_SSE;
9850 for (size_t channels = 1; channels <= 40; channels += 7) {
9851 DWConvMicrokernelTester()
9852 .cr(8)
9853 .kr(25)
9854 .channels(channels)
9855 .width(3)
9856 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009857 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009858 }
9859 }
Frank Barchardd5360722020-05-17 16:10:36 -07009860
9861 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, input_offset) {
9862 TEST_REQUIRES_X86_SSE;
9863 for (uint32_t channels = 16; channels < 128; channels += 24) {
9864 DWConvMicrokernelTester()
9865 .cr(8)
9866 .kr(25)
9867 .channels(channels)
9868 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009869 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -07009870 }
9871 }
9872
9873 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, zero) {
9874 TEST_REQUIRES_X86_SSE;
9875 for (uint32_t mz = 0; mz < 25; mz++) {
9876 for (uint32_t channels = 16; channels < 128; channels += 24) {
9877 DWConvMicrokernelTester()
9878 .cr(8)
9879 .kr(25)
9880 .channels(channels)
9881 .input_offset(176)
9882 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009883 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -07009884 }
9885 }
9886 }
Marat Dukhan1c587112020-04-08 20:04:28 -07009887#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
9888
9889
9890#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07009891 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009892 TEST_REQUIRES_X86_SSE;
9893 DWConvMicrokernelTester()
9894 .cr(8)
9895 .kr(25)
9896 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009897 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009898 }
9899
Marat Dukhande06f492020-04-09 00:19:31 -07009900 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009901 TEST_REQUIRES_X86_SSE;
9902 for (uint32_t channels = 16; channels < 128; channels += 24) {
9903 DWConvMicrokernelTester()
9904 .cr(8)
9905 .kr(25)
9906 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009907 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009908 }
9909 }
9910
Marat Dukhande06f492020-04-09 00:19:31 -07009911 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009912 TEST_REQUIRES_X86_SSE;
9913 for (uint32_t channels = 16; channels < 128; channels += 24) {
9914 DWConvMicrokernelTester()
9915 .cr(8)
9916 .kr(25)
9917 .channels(channels)
9918 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009919 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009920 }
9921 }
9922
Marat Dukhande06f492020-04-09 00:19:31 -07009923 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009924 TEST_REQUIRES_X86_SSE;
9925 for (uint32_t channels = 16; channels < 128; channels += 24) {
9926 DWConvMicrokernelTester()
9927 .cr(8)
9928 .kr(25)
9929 .channels(channels)
9930 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009931 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009932 }
9933 }
9934
Marat Dukhande06f492020-04-09 00:19:31 -07009935 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009936 TEST_REQUIRES_X86_SSE;
9937 for (uint32_t channels = 1; channels < 8; channels++) {
9938 DWConvMicrokernelTester()
9939 .cr(8)
9940 .kr(25)
9941 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009942 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009943 }
9944 }
9945
Marat Dukhande06f492020-04-09 00:19:31 -07009946 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009947 TEST_REQUIRES_X86_SSE;
9948 for (uint32_t channels = 9; channels < 16; channels++) {
9949 DWConvMicrokernelTester()
9950 .cr(8)
9951 .kr(25)
9952 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009953 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009954 }
9955 }
9956
Marat Dukhande06f492020-04-09 00:19:31 -07009957 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009958 TEST_REQUIRES_X86_SSE;
9959 for (uint32_t channels = 9; channels < 16; channels++) {
9960 DWConvMicrokernelTester()
9961 .cr(8)
9962 .kr(25)
9963 .channels(channels)
9964 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009965 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009966 }
9967 }
9968
Marat Dukhande06f492020-04-09 00:19:31 -07009969 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009970 TEST_REQUIRES_X86_SSE;
9971 for (uint32_t channels = 9; channels < 16; channels++) {
9972 DWConvMicrokernelTester()
9973 .cr(8)
9974 .kr(25)
9975 .channels(channels)
9976 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009977 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009978 }
9979 }
9980
Marat Dukhande06f492020-04-09 00:19:31 -07009981 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009982 TEST_REQUIRES_X86_SSE;
9983 for (size_t channels = 1; channels <= 40; channels += 7) {
9984 DWConvMicrokernelTester()
9985 .cr(8)
9986 .kr(25)
9987 .channels(channels)
9988 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -07009989 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -07009990 }
9991 }
9992
Marat Dukhande06f492020-04-09 00:19:31 -07009993 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009994 TEST_REQUIRES_X86_SSE;
9995 for (size_t channels = 1; channels <= 40; channels += 7) {
9996 for (size_t step = 2; step <= 25; step++) {
9997 DWConvMicrokernelTester()
9998 .cr(8)
9999 .kr(25)
10000 .channels(channels)
10001 .width(3)
10002 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010003 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010004 }
10005 }
10006 }
10007
Marat Dukhande06f492020-04-09 00:19:31 -070010008 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010009 TEST_REQUIRES_X86_SSE;
10010 for (size_t channels = 1; channels <= 40; channels += 7) {
10011 DWConvMicrokernelTester()
10012 .cr(8)
10013 .kr(25)
10014 .channels(8)
10015 .width(5)
10016 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010017 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010018 }
10019 }
10020
Marat Dukhande06f492020-04-09 00:19:31 -070010021 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010022 TEST_REQUIRES_X86_SSE;
10023 for (size_t channels = 1; channels <= 40; channels += 7) {
10024 DWConvMicrokernelTester()
10025 .cr(8)
10026 .kr(25)
10027 .channels(channels)
10028 .width(3)
10029 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010030 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010031 }
10032 }
10033
Marat Dukhande06f492020-04-09 00:19:31 -070010034 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010035 TEST_REQUIRES_X86_SSE;
10036 for (size_t channels = 1; channels <= 40; channels += 7) {
10037 DWConvMicrokernelTester()
10038 .cr(8)
10039 .kr(25)
10040 .channels(channels)
10041 .width(3)
10042 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010043 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010044 }
10045 }
Frank Barchardd5360722020-05-17 16:10:36 -070010046
10047 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, input_offset) {
10048 TEST_REQUIRES_X86_SSE;
10049 for (uint32_t channels = 16; channels < 128; channels += 24) {
10050 DWConvMicrokernelTester()
10051 .cr(8)
10052 .kr(25)
10053 .channels(channels)
10054 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010055 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070010056 }
10057 }
10058
10059 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, zero) {
10060 TEST_REQUIRES_X86_SSE;
10061 for (uint32_t mz = 0; mz < 25; mz++) {
10062 for (uint32_t channels = 16; channels < 128; channels += 24) {
10063 DWConvMicrokernelTester()
10064 .cr(8)
10065 .kr(25)
10066 .channels(channels)
10067 .input_offset(176)
10068 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010069 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070010070 }
10071 }
10072 }
Marat Dukhan1c587112020-04-08 20:04:28 -070010073#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
10074
10075
10076#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070010077 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010078 TEST_REQUIRES_X86_SSE;
10079 DWConvMicrokernelTester()
10080 .cr(4)
10081 .kr(9)
10082 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010083 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010084 }
10085
Marat Dukhande06f492020-04-09 00:19:31 -070010086 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010087 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010093 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010094 }
10095 }
10096
Marat Dukhande06f492020-04-09 00:19:31 -070010097 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010098 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010105 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010106 }
10107 }
10108
Marat Dukhande06f492020-04-09 00:19:31 -070010109 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010110 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010117 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010118 }
10119 }
10120
Marat Dukhande06f492020-04-09 00:19:31 -070010121 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010122 TEST_REQUIRES_X86_SSE;
10123 for (uint32_t channels = 1; channels < 4; channels++) {
10124 DWConvMicrokernelTester()
10125 .cr(4)
10126 .kr(9)
10127 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010128 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010129 }
10130 }
10131
Marat Dukhande06f492020-04-09 00:19:31 -070010132 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010133 TEST_REQUIRES_X86_SSE;
10134 for (uint32_t channels = 5; channels < 8; channels++) {
10135 DWConvMicrokernelTester()
10136 .cr(4)
10137 .kr(9)
10138 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010139 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010140 }
10141 }
10142
Marat Dukhande06f492020-04-09 00:19:31 -070010143 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010144 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010151 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010152 }
10153 }
10154
Marat Dukhande06f492020-04-09 00:19:31 -070010155 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010156 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010163 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010164 }
10165 }
10166
Marat Dukhande06f492020-04-09 00:19:31 -070010167 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010168 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010175 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010176 }
10177 }
10178
Marat Dukhande06f492020-04-09 00:19:31 -070010179 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010180 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010189 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010190 }
10191 }
10192 }
10193
Marat Dukhande06f492020-04-09 00:19:31 -070010194 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010195 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010203 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010204 }
10205 }
10206
Marat Dukhande06f492020-04-09 00:19:31 -070010207 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010208 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010216 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010217 }
10218 }
10219
Marat Dukhande06f492020-04-09 00:19:31 -070010220 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010221 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010229 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010230 }
10231 }
Frank Barchardd5360722020-05-17 16:10:36 -070010232
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010241 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070010242 }
10243 }
10244
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010255 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070010256 }
10257 }
10258 }
Marat Dukhan1c587112020-04-08 20:04:28 -070010259#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
10260
10261
10262#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070010263 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010264 TEST_REQUIRES_X86_SSE;
10265 DWConvMicrokernelTester()
10266 .cr(4)
10267 .kr(9)
10268 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010269 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010270 }
10271
Marat Dukhande06f492020-04-09 00:19:31 -070010272 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010273 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010279 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010280 }
10281 }
10282
Marat Dukhande06f492020-04-09 00:19:31 -070010283 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010284 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010291 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010292 }
10293 }
10294
Marat Dukhande06f492020-04-09 00:19:31 -070010295 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010296 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010303 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010304 }
10305 }
10306
Marat Dukhande06f492020-04-09 00:19:31 -070010307 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010308 TEST_REQUIRES_X86_SSE;
10309 for (uint32_t channels = 1; channels < 4; channels++) {
10310 DWConvMicrokernelTester()
10311 .cr(4)
10312 .kr(9)
10313 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010314 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010315 }
10316 }
10317
Marat Dukhande06f492020-04-09 00:19:31 -070010318 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010319 TEST_REQUIRES_X86_SSE;
10320 for (uint32_t channels = 5; channels < 8; channels++) {
10321 DWConvMicrokernelTester()
10322 .cr(4)
10323 .kr(9)
10324 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010325 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010326 }
10327 }
10328
Marat Dukhande06f492020-04-09 00:19:31 -070010329 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010330 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010337 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010338 }
10339 }
10340
Marat Dukhande06f492020-04-09 00:19:31 -070010341 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010342 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010349 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010350 }
10351 }
10352
Marat Dukhande06f492020-04-09 00:19:31 -070010353 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010354 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010361 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010362 }
10363 }
10364
Marat Dukhande06f492020-04-09 00:19:31 -070010365 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010366 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010375 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010376 }
10377 }
10378 }
10379
Marat Dukhande06f492020-04-09 00:19:31 -070010380 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010381 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010389 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010390 }
10391 }
10392
Marat Dukhande06f492020-04-09 00:19:31 -070010393 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010394 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010402 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010403 }
10404 }
10405
Marat Dukhande06f492020-04-09 00:19:31 -070010406 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010407 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010415 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010416 }
10417 }
Frank Barchardd5360722020-05-17 16:10:36 -070010418
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010427 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070010428 }
10429 }
10430
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010441 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070010442 }
10443 }
10444 }
Marat Dukhan1c587112020-04-08 20:04:28 -070010445#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
10446
10447
10448#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070010449 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010450 TEST_REQUIRES_X86_SSE;
10451 DWConvMicrokernelTester()
10452 .cr(8)
10453 .kr(9)
10454 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010455 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010456 }
10457
Marat Dukhande06f492020-04-09 00:19:31 -070010458 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010459 TEST_REQUIRES_X86_SSE;
10460 for (uint32_t channels = 16; channels < 128; channels += 24) {
10461 DWConvMicrokernelTester()
10462 .cr(8)
10463 .kr(9)
10464 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010465 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010466 }
10467 }
10468
Marat Dukhande06f492020-04-09 00:19:31 -070010469 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010470 TEST_REQUIRES_X86_SSE;
10471 for (uint32_t channels = 16; channels < 128; channels += 24) {
10472 DWConvMicrokernelTester()
10473 .cr(8)
10474 .kr(9)
10475 .channels(channels)
10476 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010477 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010478 }
10479 }
10480
Marat Dukhande06f492020-04-09 00:19:31 -070010481 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010482 TEST_REQUIRES_X86_SSE;
10483 for (uint32_t channels = 16; channels < 128; channels += 24) {
10484 DWConvMicrokernelTester()
10485 .cr(8)
10486 .kr(9)
10487 .channels(channels)
10488 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010489 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010490 }
10491 }
10492
Marat Dukhande06f492020-04-09 00:19:31 -070010493 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010494 TEST_REQUIRES_X86_SSE;
10495 for (uint32_t channels = 1; channels < 8; channels++) {
10496 DWConvMicrokernelTester()
10497 .cr(8)
10498 .kr(9)
10499 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010500 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010501 }
10502 }
10503
Marat Dukhande06f492020-04-09 00:19:31 -070010504 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010505 TEST_REQUIRES_X86_SSE;
10506 for (uint32_t channels = 9; channels < 16; channels++) {
10507 DWConvMicrokernelTester()
10508 .cr(8)
10509 .kr(9)
10510 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010511 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010512 }
10513 }
10514
Marat Dukhande06f492020-04-09 00:19:31 -070010515 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010516 TEST_REQUIRES_X86_SSE;
10517 for (uint32_t channels = 9; channels < 16; channels++) {
10518 DWConvMicrokernelTester()
10519 .cr(8)
10520 .kr(9)
10521 .channels(channels)
10522 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010523 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010524 }
10525 }
10526
Marat Dukhande06f492020-04-09 00:19:31 -070010527 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010528 TEST_REQUIRES_X86_SSE;
10529 for (uint32_t channels = 9; channels < 16; channels++) {
10530 DWConvMicrokernelTester()
10531 .cr(8)
10532 .kr(9)
10533 .channels(channels)
10534 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010535 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010536 }
10537 }
10538
Marat Dukhande06f492020-04-09 00:19:31 -070010539 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010540 TEST_REQUIRES_X86_SSE;
10541 for (size_t channels = 1; channels <= 40; channels += 7) {
10542 DWConvMicrokernelTester()
10543 .cr(8)
10544 .kr(9)
10545 .channels(channels)
10546 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010547 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010548 }
10549 }
10550
Marat Dukhande06f492020-04-09 00:19:31 -070010551 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010552 TEST_REQUIRES_X86_SSE;
10553 for (size_t channels = 1; channels <= 40; channels += 7) {
10554 for (size_t step = 2; step <= 9; step++) {
10555 DWConvMicrokernelTester()
10556 .cr(8)
10557 .kr(9)
10558 .channels(channels)
10559 .width(3)
10560 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010561 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010562 }
10563 }
10564 }
10565
Marat Dukhande06f492020-04-09 00:19:31 -070010566 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010567 TEST_REQUIRES_X86_SSE;
10568 for (size_t channels = 1; channels <= 40; channels += 7) {
10569 DWConvMicrokernelTester()
10570 .cr(8)
10571 .kr(9)
10572 .channels(8)
10573 .width(5)
10574 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010575 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010576 }
10577 }
10578
Marat Dukhande06f492020-04-09 00:19:31 -070010579 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010580 TEST_REQUIRES_X86_SSE;
10581 for (size_t channels = 1; channels <= 40; channels += 7) {
10582 DWConvMicrokernelTester()
10583 .cr(8)
10584 .kr(9)
10585 .channels(channels)
10586 .width(3)
10587 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010588 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010589 }
10590 }
10591
Marat Dukhande06f492020-04-09 00:19:31 -070010592 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010593 TEST_REQUIRES_X86_SSE;
10594 for (size_t channels = 1; channels <= 40; channels += 7) {
10595 DWConvMicrokernelTester()
10596 .cr(8)
10597 .kr(9)
10598 .channels(channels)
10599 .width(3)
10600 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010601 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010602 }
10603 }
Frank Barchardd5360722020-05-17 16:10:36 -070010604
10605 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, input_offset) {
10606 TEST_REQUIRES_X86_SSE;
10607 for (uint32_t channels = 16; channels < 128; channels += 24) {
10608 DWConvMicrokernelTester()
10609 .cr(8)
10610 .kr(9)
10611 .channels(channels)
10612 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010613 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070010614 }
10615 }
10616
10617 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, zero) {
10618 TEST_REQUIRES_X86_SSE;
10619 for (uint32_t mz = 0; mz < 9; mz++) {
10620 for (uint32_t channels = 16; channels < 128; channels += 24) {
10621 DWConvMicrokernelTester()
10622 .cr(8)
10623 .kr(9)
10624 .channels(channels)
10625 .input_offset(176)
10626 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010627 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070010628 }
10629 }
10630 }
Marat Dukhan1c587112020-04-08 20:04:28 -070010631#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
10632
10633
10634#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070010635 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010636 TEST_REQUIRES_X86_SSE;
10637 DWConvMicrokernelTester()
10638 .cr(8)
10639 .kr(9)
10640 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010641 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010642 }
10643
Marat Dukhande06f492020-04-09 00:19:31 -070010644 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010645 TEST_REQUIRES_X86_SSE;
10646 for (uint32_t channels = 16; channels < 128; channels += 24) {
10647 DWConvMicrokernelTester()
10648 .cr(8)
10649 .kr(9)
10650 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010651 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010652 }
10653 }
10654
Marat Dukhande06f492020-04-09 00:19:31 -070010655 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010656 TEST_REQUIRES_X86_SSE;
10657 for (uint32_t channels = 16; channels < 128; channels += 24) {
10658 DWConvMicrokernelTester()
10659 .cr(8)
10660 .kr(9)
10661 .channels(channels)
10662 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010663 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010664 }
10665 }
10666
Marat Dukhande06f492020-04-09 00:19:31 -070010667 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010668 TEST_REQUIRES_X86_SSE;
10669 for (uint32_t channels = 16; channels < 128; channels += 24) {
10670 DWConvMicrokernelTester()
10671 .cr(8)
10672 .kr(9)
10673 .channels(channels)
10674 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010675 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010676 }
10677 }
10678
Marat Dukhande06f492020-04-09 00:19:31 -070010679 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010680 TEST_REQUIRES_X86_SSE;
10681 for (uint32_t channels = 1; channels < 8; channels++) {
10682 DWConvMicrokernelTester()
10683 .cr(8)
10684 .kr(9)
10685 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010686 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010687 }
10688 }
10689
Marat Dukhande06f492020-04-09 00:19:31 -070010690 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010691 TEST_REQUIRES_X86_SSE;
10692 for (uint32_t channels = 9; channels < 16; channels++) {
10693 DWConvMicrokernelTester()
10694 .cr(8)
10695 .kr(9)
10696 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010697 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010698 }
10699 }
10700
Marat Dukhande06f492020-04-09 00:19:31 -070010701 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010702 TEST_REQUIRES_X86_SSE;
10703 for (uint32_t channels = 9; channels < 16; channels++) {
10704 DWConvMicrokernelTester()
10705 .cr(8)
10706 .kr(9)
10707 .channels(channels)
10708 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010709 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010710 }
10711 }
10712
Marat Dukhande06f492020-04-09 00:19:31 -070010713 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010714 TEST_REQUIRES_X86_SSE;
10715 for (uint32_t channels = 9; channels < 16; channels++) {
10716 DWConvMicrokernelTester()
10717 .cr(8)
10718 .kr(9)
10719 .channels(channels)
10720 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010721 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010722 }
10723 }
10724
Marat Dukhande06f492020-04-09 00:19:31 -070010725 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010726 TEST_REQUIRES_X86_SSE;
10727 for (size_t channels = 1; channels <= 40; channels += 7) {
10728 DWConvMicrokernelTester()
10729 .cr(8)
10730 .kr(9)
10731 .channels(channels)
10732 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010733 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010734 }
10735 }
10736
Marat Dukhande06f492020-04-09 00:19:31 -070010737 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010738 TEST_REQUIRES_X86_SSE;
10739 for (size_t channels = 1; channels <= 40; channels += 7) {
10740 for (size_t step = 2; step <= 9; step++) {
10741 DWConvMicrokernelTester()
10742 .cr(8)
10743 .kr(9)
10744 .channels(channels)
10745 .width(3)
10746 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010747 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010748 }
10749 }
10750 }
10751
Marat Dukhande06f492020-04-09 00:19:31 -070010752 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010753 TEST_REQUIRES_X86_SSE;
10754 for (size_t channels = 1; channels <= 40; channels += 7) {
10755 DWConvMicrokernelTester()
10756 .cr(8)
10757 .kr(9)
10758 .channels(8)
10759 .width(5)
10760 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010761 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010762 }
10763 }
10764
Marat Dukhande06f492020-04-09 00:19:31 -070010765 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010766 TEST_REQUIRES_X86_SSE;
10767 for (size_t channels = 1; channels <= 40; channels += 7) {
10768 DWConvMicrokernelTester()
10769 .cr(8)
10770 .kr(9)
10771 .channels(channels)
10772 .width(3)
10773 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010774 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010775 }
10776 }
10777
Marat Dukhande06f492020-04-09 00:19:31 -070010778 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010779 TEST_REQUIRES_X86_SSE;
10780 for (size_t channels = 1; channels <= 40; channels += 7) {
10781 DWConvMicrokernelTester()
10782 .cr(8)
10783 .kr(9)
10784 .channels(channels)
10785 .width(3)
10786 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010787 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070010788 }
10789 }
Frank Barchardd5360722020-05-17 16:10:36 -070010790
10791 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, input_offset) {
10792 TEST_REQUIRES_X86_SSE;
10793 for (uint32_t channels = 16; channels < 128; channels += 24) {
10794 DWConvMicrokernelTester()
10795 .cr(8)
10796 .kr(9)
10797 .channels(channels)
10798 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010799 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070010800 }
10801 }
10802
10803 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, zero) {
10804 TEST_REQUIRES_X86_SSE;
10805 for (uint32_t mz = 0; mz < 9; mz++) {
10806 for (uint32_t channels = 16; channels < 128; channels += 24) {
10807 DWConvMicrokernelTester()
10808 .cr(8)
10809 .kr(9)
10810 .channels(channels)
10811 .input_offset(176)
10812 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070010813 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070010814 }
10815 }
10816 }
Marat Dukhan1c587112020-04-08 20:04:28 -070010817#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
10818
10819
10820#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070010821 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_eq_4) {
10822 TEST_REQUIRES_X86_SSE;
10823 DWConvMicrokernelTester()
10824 .cr(4)
10825 .kr(3)
10826 .channels(4)
10827 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10828 }
10829
10830 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_div_4) {
10831 TEST_REQUIRES_X86_SSE;
10832 for (uint32_t channels = 8; channels < 64; channels += 12) {
10833 DWConvMicrokernelTester()
10834 .cr(4)
10835 .kr(3)
10836 .channels(channels)
10837 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10838 }
10839 }
10840
10841 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_div_4_with_qmin) {
10842 TEST_REQUIRES_X86_SSE;
10843 for (uint32_t channels = 8; channels < 64; channels += 12) {
10844 DWConvMicrokernelTester()
10845 .cr(4)
10846 .kr(3)
10847 .channels(channels)
10848 .qmin(128)
10849 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10850 }
10851 }
10852
10853 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_div_4_with_qmax) {
10854 TEST_REQUIRES_X86_SSE;
10855 for (uint32_t channels = 8; channels < 64; channels += 12) {
10856 DWConvMicrokernelTester()
10857 .cr(4)
10858 .kr(3)
10859 .channels(channels)
10860 .qmax(128)
10861 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10862 }
10863 }
10864
10865 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_lt_4) {
10866 TEST_REQUIRES_X86_SSE;
10867 for (uint32_t channels = 1; channels < 4; channels++) {
10868 DWConvMicrokernelTester()
10869 .cr(4)
10870 .kr(3)
10871 .channels(channels)
10872 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10873 }
10874 }
10875
10876 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_gt_4) {
10877 TEST_REQUIRES_X86_SSE;
10878 for (uint32_t channels = 5; channels < 8; channels++) {
10879 DWConvMicrokernelTester()
10880 .cr(4)
10881 .kr(3)
10882 .channels(channels)
10883 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10884 }
10885 }
10886
10887 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_gt_4_with_qmin) {
10888 TEST_REQUIRES_X86_SSE;
10889 for (uint32_t channels = 5; channels < 8; channels++) {
10890 DWConvMicrokernelTester()
10891 .cr(4)
10892 .kr(3)
10893 .channels(channels)
10894 .qmin(128)
10895 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10896 }
10897 }
10898
10899 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, c_gt_4_with_qmax) {
10900 TEST_REQUIRES_X86_SSE;
10901 for (uint32_t channels = 5; channels < 8; channels++) {
10902 DWConvMicrokernelTester()
10903 .cr(4)
10904 .kr(3)
10905 .channels(channels)
10906 .qmax(128)
10907 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10908 }
10909 }
10910
10911 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, multipixel) {
10912 TEST_REQUIRES_X86_SSE;
10913 for (size_t channels = 1; channels <= 20; channels += 3) {
10914 DWConvMicrokernelTester()
10915 .cr(4)
10916 .kr(3)
10917 .channels(channels)
10918 .width(3)
10919 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10920 }
10921 }
10922
10923 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, multipixel_with_step) {
10924 TEST_REQUIRES_X86_SSE;
10925 for (size_t channels = 1; channels <= 20; channels += 3) {
10926 for (size_t step = 2; step <= 3; step++) {
10927 DWConvMicrokernelTester()
10928 .cr(4)
10929 .kr(3)
10930 .channels(channels)
10931 .width(3)
10932 .step(step)
10933 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10934 }
10935 }
10936 }
10937
10938 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, multipixel_with_output_stride) {
10939 TEST_REQUIRES_X86_SSE;
10940 for (size_t channels = 1; channels <= 20; channels += 3) {
10941 DWConvMicrokernelTester()
10942 .cr(4)
10943 .kr(3)
10944 .channels(4)
10945 .width(5)
10946 .output_stride(23)
10947 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10948 }
10949 }
10950
10951 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, multipixel_with_qmin) {
10952 TEST_REQUIRES_X86_SSE;
10953 for (size_t channels = 1; channels <= 20; channels += 3) {
10954 DWConvMicrokernelTester()
10955 .cr(4)
10956 .kr(3)
10957 .channels(channels)
10958 .width(3)
10959 .qmin(128)
10960 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10961 }
10962 }
10963
10964 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, multipixel_with_qmax) {
10965 TEST_REQUIRES_X86_SSE;
10966 for (size_t channels = 1; channels <= 20; channels += 3) {
10967 DWConvMicrokernelTester()
10968 .cr(4)
10969 .kr(3)
10970 .channels(channels)
10971 .width(3)
10972 .qmax(128)
10973 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10974 }
10975 }
10976
10977 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, input_offset) {
10978 TEST_REQUIRES_X86_SSE;
10979 for (uint32_t channels = 8; channels < 64; channels += 12) {
10980 DWConvMicrokernelTester()
10981 .cr(4)
10982 .kr(3)
10983 .channels(channels)
10984 .input_offset(112)
10985 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse, xnn_init_f32_minmax_sse_params);
10986 }
10987 }
10988
10989 TEST(F32_DWCONV_MINMAX_UP4X3__SSE, zero) {
10990 TEST_REQUIRES_X86_SSE;
10991 for (uint32_t mz = 0; mz < 3; mz++) {
10992 for (uint32_t channels = 8; channels < 64; channels += 12) {
10993 DWConvMicrokernelTester()
10994 .cr(4)
10995 .kr(3)
10996 .channels(channels)
10997 .input_offset(112)
10998 .zero_index(mz)
10999 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__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
11007 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_eq_4) {
11008 TEST_REQUIRES_X86_SSE;
11009 DWConvMicrokernelTester()
11010 .cr(4)
11011 .kr(3)
11012 .channels(4)
11013 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11014 }
11015
11016 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_div_4) {
11017 TEST_REQUIRES_X86_SSE;
11018 for (uint32_t channels = 8; channels < 64; channels += 12) {
11019 DWConvMicrokernelTester()
11020 .cr(4)
11021 .kr(3)
11022 .channels(channels)
11023 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11024 }
11025 }
11026
11027 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_div_4_with_qmin) {
11028 TEST_REQUIRES_X86_SSE;
11029 for (uint32_t channels = 8; channels < 64; channels += 12) {
11030 DWConvMicrokernelTester()
11031 .cr(4)
11032 .kr(3)
11033 .channels(channels)
11034 .qmin(128)
11035 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11036 }
11037 }
11038
11039 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_div_4_with_qmax) {
11040 TEST_REQUIRES_X86_SSE;
11041 for (uint32_t channels = 8; channels < 64; channels += 12) {
11042 DWConvMicrokernelTester()
11043 .cr(4)
11044 .kr(3)
11045 .channels(channels)
11046 .qmax(128)
11047 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11048 }
11049 }
11050
11051 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_lt_4) {
11052 TEST_REQUIRES_X86_SSE;
11053 for (uint32_t channels = 1; channels < 4; channels++) {
11054 DWConvMicrokernelTester()
11055 .cr(4)
11056 .kr(3)
11057 .channels(channels)
11058 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11059 }
11060 }
11061
11062 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_gt_4) {
11063 TEST_REQUIRES_X86_SSE;
11064 for (uint32_t channels = 5; channels < 8; channels++) {
11065 DWConvMicrokernelTester()
11066 .cr(4)
11067 .kr(3)
11068 .channels(channels)
11069 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11070 }
11071 }
11072
11073 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_gt_4_with_qmin) {
11074 TEST_REQUIRES_X86_SSE;
11075 for (uint32_t channels = 5; channels < 8; channels++) {
11076 DWConvMicrokernelTester()
11077 .cr(4)
11078 .kr(3)
11079 .channels(channels)
11080 .qmin(128)
11081 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11082 }
11083 }
11084
11085 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, c_gt_4_with_qmax) {
11086 TEST_REQUIRES_X86_SSE;
11087 for (uint32_t channels = 5; channels < 8; channels++) {
11088 DWConvMicrokernelTester()
11089 .cr(4)
11090 .kr(3)
11091 .channels(channels)
11092 .qmax(128)
11093 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11094 }
11095 }
11096
11097 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, multipixel) {
11098 TEST_REQUIRES_X86_SSE;
11099 for (size_t channels = 1; channels <= 20; channels += 3) {
11100 DWConvMicrokernelTester()
11101 .cr(4)
11102 .kr(3)
11103 .channels(channels)
11104 .width(3)
11105 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11106 }
11107 }
11108
11109 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, multipixel_with_step) {
11110 TEST_REQUIRES_X86_SSE;
11111 for (size_t channels = 1; channels <= 20; channels += 3) {
11112 for (size_t step = 2; step <= 3; step++) {
11113 DWConvMicrokernelTester()
11114 .cr(4)
11115 .kr(3)
11116 .channels(channels)
11117 .width(3)
11118 .step(step)
11119 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11120 }
11121 }
11122 }
11123
11124 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, multipixel_with_output_stride) {
11125 TEST_REQUIRES_X86_SSE;
11126 for (size_t channels = 1; channels <= 20; channels += 3) {
11127 DWConvMicrokernelTester()
11128 .cr(4)
11129 .kr(3)
11130 .channels(4)
11131 .width(5)
11132 .output_stride(23)
11133 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11134 }
11135 }
11136
11137 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, multipixel_with_qmin) {
11138 TEST_REQUIRES_X86_SSE;
11139 for (size_t channels = 1; channels <= 20; channels += 3) {
11140 DWConvMicrokernelTester()
11141 .cr(4)
11142 .kr(3)
11143 .channels(channels)
11144 .width(3)
11145 .qmin(128)
11146 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11147 }
11148 }
11149
11150 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, multipixel_with_qmax) {
11151 TEST_REQUIRES_X86_SSE;
11152 for (size_t channels = 1; channels <= 20; channels += 3) {
11153 DWConvMicrokernelTester()
11154 .cr(4)
11155 .kr(3)
11156 .channels(channels)
11157 .width(3)
11158 .qmax(128)
11159 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11160 }
11161 }
11162
11163 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, input_offset) {
11164 TEST_REQUIRES_X86_SSE;
11165 for (uint32_t channels = 8; channels < 64; channels += 12) {
11166 DWConvMicrokernelTester()
11167 .cr(4)
11168 .kr(3)
11169 .channels(channels)
11170 .input_offset(112)
11171 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11172 }
11173 }
11174
11175 TEST(F32_DWCONV_MINMAX_UP4X3__SSE_ACC2, zero) {
11176 TEST_REQUIRES_X86_SSE;
11177 for (uint32_t mz = 0; mz < 3; mz++) {
11178 for (uint32_t channels = 8; channels < 64; channels += 12) {
11179 DWConvMicrokernelTester()
11180 .cr(4)
11181 .kr(3)
11182 .channels(channels)
11183 .input_offset(112)
11184 .zero_index(mz)
11185 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__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
Marat Dukhande06f492020-04-09 00:19:31 -070011193 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011194 TEST_REQUIRES_X86_SSE;
11195 DWConvMicrokernelTester()
11196 .cr(4)
11197 .kr(4)
11198 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011199 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011200 }
11201
Marat Dukhande06f492020-04-09 00:19:31 -070011202 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011203 TEST_REQUIRES_X86_SSE;
11204 for (uint32_t channels = 8; channels < 64; channels += 12) {
11205 DWConvMicrokernelTester()
11206 .cr(4)
11207 .kr(4)
11208 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011209 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011210 }
11211 }
11212
Marat Dukhande06f492020-04-09 00:19:31 -070011213 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011214 TEST_REQUIRES_X86_SSE;
11215 for (uint32_t channels = 8; channels < 64; channels += 12) {
11216 DWConvMicrokernelTester()
11217 .cr(4)
11218 .kr(4)
11219 .channels(channels)
11220 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011221 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011222 }
11223 }
11224
Marat Dukhande06f492020-04-09 00:19:31 -070011225 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011226 TEST_REQUIRES_X86_SSE;
11227 for (uint32_t channels = 8; channels < 64; channels += 12) {
11228 DWConvMicrokernelTester()
11229 .cr(4)
11230 .kr(4)
11231 .channels(channels)
11232 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011233 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011234 }
11235 }
11236
Marat Dukhande06f492020-04-09 00:19:31 -070011237 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011238 TEST_REQUIRES_X86_SSE;
11239 for (uint32_t channels = 1; channels < 4; channels++) {
11240 DWConvMicrokernelTester()
11241 .cr(4)
11242 .kr(4)
11243 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011244 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011245 }
11246 }
11247
Marat Dukhande06f492020-04-09 00:19:31 -070011248 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011249 TEST_REQUIRES_X86_SSE;
11250 for (uint32_t channels = 5; channels < 8; channels++) {
11251 DWConvMicrokernelTester()
11252 .cr(4)
11253 .kr(4)
11254 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011255 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011256 }
11257 }
11258
Marat Dukhande06f492020-04-09 00:19:31 -070011259 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011260 TEST_REQUIRES_X86_SSE;
11261 for (uint32_t channels = 5; channels < 8; channels++) {
11262 DWConvMicrokernelTester()
11263 .cr(4)
11264 .kr(4)
11265 .channels(channels)
11266 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011267 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011268 }
11269 }
11270
Marat Dukhande06f492020-04-09 00:19:31 -070011271 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011272 TEST_REQUIRES_X86_SSE;
11273 for (uint32_t channels = 5; channels < 8; channels++) {
11274 DWConvMicrokernelTester()
11275 .cr(4)
11276 .kr(4)
11277 .channels(channels)
11278 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011279 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011280 }
11281 }
11282
Marat Dukhande06f492020-04-09 00:19:31 -070011283 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011284 TEST_REQUIRES_X86_SSE;
11285 for (size_t channels = 1; channels <= 20; channels += 3) {
11286 DWConvMicrokernelTester()
11287 .cr(4)
11288 .kr(4)
11289 .channels(channels)
11290 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011291 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011292 }
11293 }
11294
Marat Dukhande06f492020-04-09 00:19:31 -070011295 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011296 TEST_REQUIRES_X86_SSE;
11297 for (size_t channels = 1; channels <= 20; channels += 3) {
11298 for (size_t step = 2; step <= 4; step++) {
11299 DWConvMicrokernelTester()
11300 .cr(4)
11301 .kr(4)
11302 .channels(channels)
11303 .width(3)
11304 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011305 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011306 }
11307 }
11308 }
11309
Marat Dukhande06f492020-04-09 00:19:31 -070011310 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011311 TEST_REQUIRES_X86_SSE;
11312 for (size_t channels = 1; channels <= 20; channels += 3) {
11313 DWConvMicrokernelTester()
11314 .cr(4)
11315 .kr(4)
11316 .channels(4)
11317 .width(5)
11318 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011319 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011320 }
11321 }
11322
Marat Dukhande06f492020-04-09 00:19:31 -070011323 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011324 TEST_REQUIRES_X86_SSE;
11325 for (size_t channels = 1; channels <= 20; channels += 3) {
11326 DWConvMicrokernelTester()
11327 .cr(4)
11328 .kr(4)
11329 .channels(channels)
11330 .width(3)
11331 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011332 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011333 }
11334 }
11335
Marat Dukhande06f492020-04-09 00:19:31 -070011336 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011337 TEST_REQUIRES_X86_SSE;
11338 for (size_t channels = 1; channels <= 20; channels += 3) {
11339 DWConvMicrokernelTester()
11340 .cr(4)
11341 .kr(4)
11342 .channels(channels)
11343 .width(3)
11344 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011345 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011346 }
11347 }
Frank Barchardd5360722020-05-17 16:10:36 -070011348
11349 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, input_offset) {
11350 TEST_REQUIRES_X86_SSE;
11351 for (uint32_t channels = 8; channels < 64; channels += 12) {
11352 DWConvMicrokernelTester()
11353 .cr(4)
11354 .kr(4)
11355 .channels(channels)
11356 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011357 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070011358 }
11359 }
11360
11361 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, zero) {
11362 TEST_REQUIRES_X86_SSE;
11363 for (uint32_t mz = 0; mz < 4; mz++) {
11364 for (uint32_t channels = 8; channels < 64; channels += 12) {
11365 DWConvMicrokernelTester()
11366 .cr(4)
11367 .kr(4)
11368 .channels(channels)
11369 .input_offset(112)
11370 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011371 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070011372 }
11373 }
11374 }
Marat Dukhan1c587112020-04-08 20:04:28 -070011375#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
11376
11377
11378#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070011379 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011380 TEST_REQUIRES_X86_SSE;
11381 DWConvMicrokernelTester()
11382 .cr(4)
11383 .kr(4)
11384 .channels(4)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011385 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011386 }
11387
Marat Dukhande06f492020-04-09 00:19:31 -070011388 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011389 TEST_REQUIRES_X86_SSE;
11390 for (uint32_t channels = 8; channels < 64; channels += 12) {
11391 DWConvMicrokernelTester()
11392 .cr(4)
11393 .kr(4)
11394 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011395 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011396 }
11397 }
11398
Marat Dukhande06f492020-04-09 00:19:31 -070011399 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011400 TEST_REQUIRES_X86_SSE;
11401 for (uint32_t channels = 8; channels < 64; channels += 12) {
11402 DWConvMicrokernelTester()
11403 .cr(4)
11404 .kr(4)
11405 .channels(channels)
11406 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011407 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011408 }
11409 }
11410
Marat Dukhande06f492020-04-09 00:19:31 -070011411 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011412 TEST_REQUIRES_X86_SSE;
11413 for (uint32_t channels = 8; channels < 64; channels += 12) {
11414 DWConvMicrokernelTester()
11415 .cr(4)
11416 .kr(4)
11417 .channels(channels)
11418 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011419 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011420 }
11421 }
11422
Marat Dukhande06f492020-04-09 00:19:31 -070011423 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011424 TEST_REQUIRES_X86_SSE;
11425 for (uint32_t channels = 1; channels < 4; channels++) {
11426 DWConvMicrokernelTester()
11427 .cr(4)
11428 .kr(4)
11429 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011430 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011431 }
11432 }
11433
Marat Dukhande06f492020-04-09 00:19:31 -070011434 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011435 TEST_REQUIRES_X86_SSE;
11436 for (uint32_t channels = 5; channels < 8; channels++) {
11437 DWConvMicrokernelTester()
11438 .cr(4)
11439 .kr(4)
11440 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011441 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011442 }
11443 }
11444
Marat Dukhande06f492020-04-09 00:19:31 -070011445 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011446 TEST_REQUIRES_X86_SSE;
11447 for (uint32_t channels = 5; channels < 8; channels++) {
11448 DWConvMicrokernelTester()
11449 .cr(4)
11450 .kr(4)
11451 .channels(channels)
11452 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011453 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011454 }
11455 }
11456
Marat Dukhande06f492020-04-09 00:19:31 -070011457 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011458 TEST_REQUIRES_X86_SSE;
11459 for (uint32_t channels = 5; channels < 8; channels++) {
11460 DWConvMicrokernelTester()
11461 .cr(4)
11462 .kr(4)
11463 .channels(channels)
11464 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011465 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011466 }
11467 }
11468
Marat Dukhande06f492020-04-09 00:19:31 -070011469 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011470 TEST_REQUIRES_X86_SSE;
11471 for (size_t channels = 1; channels <= 20; channels += 3) {
11472 DWConvMicrokernelTester()
11473 .cr(4)
11474 .kr(4)
11475 .channels(channels)
11476 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011477 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011478 }
11479 }
11480
Marat Dukhande06f492020-04-09 00:19:31 -070011481 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011482 TEST_REQUIRES_X86_SSE;
11483 for (size_t channels = 1; channels <= 20; channels += 3) {
11484 for (size_t step = 2; step <= 4; step++) {
11485 DWConvMicrokernelTester()
11486 .cr(4)
11487 .kr(4)
11488 .channels(channels)
11489 .width(3)
11490 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011491 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011492 }
11493 }
11494 }
11495
Marat Dukhande06f492020-04-09 00:19:31 -070011496 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011497 TEST_REQUIRES_X86_SSE;
11498 for (size_t channels = 1; channels <= 20; channels += 3) {
11499 DWConvMicrokernelTester()
11500 .cr(4)
11501 .kr(4)
11502 .channels(4)
11503 .width(5)
11504 .output_stride(23)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011505 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011506 }
11507 }
11508
Marat Dukhande06f492020-04-09 00:19:31 -070011509 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011510 TEST_REQUIRES_X86_SSE;
11511 for (size_t channels = 1; channels <= 20; channels += 3) {
11512 DWConvMicrokernelTester()
11513 .cr(4)
11514 .kr(4)
11515 .channels(channels)
11516 .width(3)
11517 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011518 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011519 }
11520 }
11521
Marat Dukhande06f492020-04-09 00:19:31 -070011522 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011523 TEST_REQUIRES_X86_SSE;
11524 for (size_t channels = 1; channels <= 20; channels += 3) {
11525 DWConvMicrokernelTester()
11526 .cr(4)
11527 .kr(4)
11528 .channels(channels)
11529 .width(3)
11530 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011531 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011532 }
11533 }
Frank Barchardd5360722020-05-17 16:10:36 -070011534
11535 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, input_offset) {
11536 TEST_REQUIRES_X86_SSE;
11537 for (uint32_t channels = 8; channels < 64; channels += 12) {
11538 DWConvMicrokernelTester()
11539 .cr(4)
11540 .kr(4)
11541 .channels(channels)
11542 .input_offset(112)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011543 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070011544 }
11545 }
11546
11547 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, zero) {
11548 TEST_REQUIRES_X86_SSE;
11549 for (uint32_t mz = 0; mz < 4; mz++) {
11550 for (uint32_t channels = 8; channels < 64; channels += 12) {
11551 DWConvMicrokernelTester()
11552 .cr(4)
11553 .kr(4)
11554 .channels(channels)
11555 .input_offset(112)
11556 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011557 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070011558 }
11559 }
11560 }
Marat Dukhan1c587112020-04-08 20:04:28 -070011561#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
11562
11563
11564#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070011565 TEST(F32_DWCONV_MINMAX_UP8X3__SSE, c_eq_8) {
11566 TEST_REQUIRES_X86_SSE;
11567 DWConvMicrokernelTester()
11568 .cr(8)
11569 .kr(3)
11570 .channels(8)
11571 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11572 }
11573
11574 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11580 .channels(channels)
11581 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11582 }
11583 }
11584
11585 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11591 .channels(channels)
11592 .qmin(128)
11593 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11594 }
11595 }
11596
11597 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11603 .channels(channels)
11604 .qmax(128)
11605 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11606 }
11607 }
11608
11609 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11615 .channels(channels)
11616 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11617 }
11618 }
11619
11620 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11626 .channels(channels)
11627 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11628 }
11629 }
11630
11631 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11637 .channels(channels)
11638 .qmin(128)
11639 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11640 }
11641 }
11642
11643 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11649 .channels(channels)
11650 .qmax(128)
11651 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11652 }
11653 }
11654
11655 TEST(F32_DWCONV_MINMAX_UP8X3__SSE, multipixel) {
11656 TEST_REQUIRES_X86_SSE;
11657 for (size_t channels = 1; channels <= 40; channels += 7) {
11658 DWConvMicrokernelTester()
11659 .cr(8)
11660 .kr(3)
11661 .channels(channels)
11662 .width(3)
11663 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11664 }
11665 }
11666
11667 TEST(F32_DWCONV_MINMAX_UP8X3__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 <= 3; step++) {
11671 DWConvMicrokernelTester()
11672 .cr(8)
11673 .kr(3)
11674 .channels(channels)
11675 .width(3)
11676 .step(step)
11677 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11678 }
11679 }
11680 }
11681
11682 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11688 .channels(8)
11689 .width(5)
11690 .output_stride(43)
11691 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11692 }
11693 }
11694
11695 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11701 .channels(channels)
11702 .width(3)
11703 .qmin(128)
11704 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11705 }
11706 }
11707
11708 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11714 .channels(channels)
11715 .width(3)
11716 .qmax(128)
11717 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11718 }
11719 }
11720
11721 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11727 .channels(channels)
11728 .input_offset(176)
11729 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse, xnn_init_f32_minmax_sse_params);
11730 }
11731 }
11732
11733 TEST(F32_DWCONV_MINMAX_UP8X3__SSE, zero) {
11734 TEST_REQUIRES_X86_SSE;
11735 for (uint32_t mz = 0; mz < 3; mz++) {
11736 for (uint32_t channels = 16; channels < 128; channels += 24) {
11737 DWConvMicrokernelTester()
11738 .cr(8)
11739 .kr(3)
11740 .channels(channels)
11741 .input_offset(176)
11742 .zero_index(mz)
11743 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__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
11751 TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, c_eq_8) {
11752 TEST_REQUIRES_X86_SSE;
11753 DWConvMicrokernelTester()
11754 .cr(8)
11755 .kr(3)
11756 .channels(8)
11757 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11758 }
11759
11760 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11766 .channels(channels)
11767 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11768 }
11769 }
11770
11771 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11777 .channels(channels)
11778 .qmin(128)
11779 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11780 }
11781 }
11782
11783 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11789 .channels(channels)
11790 .qmax(128)
11791 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11792 }
11793 }
11794
11795 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11801 .channels(channels)
11802 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11803 }
11804 }
11805
11806 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11812 .channels(channels)
11813 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11814 }
11815 }
11816
11817 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11823 .channels(channels)
11824 .qmin(128)
11825 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11826 }
11827 }
11828
11829 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11835 .channels(channels)
11836 .qmax(128)
11837 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11838 }
11839 }
11840
11841 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11847 .channels(channels)
11848 .width(3)
11849 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11850 }
11851 }
11852
11853 TEST(F32_DWCONV_MINMAX_UP8X3__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 <= 3; step++) {
11857 DWConvMicrokernelTester()
11858 .cr(8)
11859 .kr(3)
11860 .channels(channels)
11861 .width(3)
11862 .step(step)
11863 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11864 }
11865 }
11866 }
11867
11868 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11874 .channels(8)
11875 .width(5)
11876 .output_stride(43)
11877 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11878 }
11879 }
11880
11881 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11887 .channels(channels)
11888 .width(3)
11889 .qmin(128)
11890 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11891 }
11892 }
11893
11894 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11900 .channels(channels)
11901 .width(3)
11902 .qmax(128)
11903 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11904 }
11905 }
11906
11907 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
11913 .channels(channels)
11914 .input_offset(176)
11915 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__sse_acc2, xnn_init_f32_minmax_sse_params);
11916 }
11917 }
11918
11919 TEST(F32_DWCONV_MINMAX_UP8X3__SSE_ACC2, zero) {
11920 TEST_REQUIRES_X86_SSE;
11921 for (uint32_t mz = 0; mz < 3; mz++) {
11922 for (uint32_t channels = 16; channels < 128; channels += 24) {
11923 DWConvMicrokernelTester()
11924 .cr(8)
11925 .kr(3)
11926 .channels(channels)
11927 .input_offset(176)
11928 .zero_index(mz)
11929 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__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
Marat Dukhande06f492020-04-09 00:19:31 -070011937 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011938 TEST_REQUIRES_X86_SSE;
11939 DWConvMicrokernelTester()
11940 .cr(8)
11941 .kr(4)
11942 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011943 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011944 }
11945
Marat Dukhande06f492020-04-09 00:19:31 -070011946 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011947 TEST_REQUIRES_X86_SSE;
11948 for (uint32_t channels = 16; channels < 128; channels += 24) {
11949 DWConvMicrokernelTester()
11950 .cr(8)
11951 .kr(4)
11952 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011953 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011954 }
11955 }
11956
Marat Dukhande06f492020-04-09 00:19:31 -070011957 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011958 TEST_REQUIRES_X86_SSE;
11959 for (uint32_t channels = 16; channels < 128; channels += 24) {
11960 DWConvMicrokernelTester()
11961 .cr(8)
11962 .kr(4)
11963 .channels(channels)
11964 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011965 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011966 }
11967 }
11968
Marat Dukhande06f492020-04-09 00:19:31 -070011969 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011970 TEST_REQUIRES_X86_SSE;
11971 for (uint32_t channels = 16; channels < 128; channels += 24) {
11972 DWConvMicrokernelTester()
11973 .cr(8)
11974 .kr(4)
11975 .channels(channels)
11976 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011977 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011978 }
11979 }
11980
Marat Dukhande06f492020-04-09 00:19:31 -070011981 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011982 TEST_REQUIRES_X86_SSE;
11983 for (uint32_t channels = 1; channels < 8; channels++) {
11984 DWConvMicrokernelTester()
11985 .cr(8)
11986 .kr(4)
11987 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011988 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070011989 }
11990 }
11991
Marat Dukhande06f492020-04-09 00:19:31 -070011992 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011993 TEST_REQUIRES_X86_SSE;
11994 for (uint32_t channels = 9; channels < 16; channels++) {
11995 DWConvMicrokernelTester()
11996 .cr(8)
11997 .kr(4)
11998 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070011999 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012000 }
12001 }
12002
Marat Dukhande06f492020-04-09 00:19:31 -070012003 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012004 TEST_REQUIRES_X86_SSE;
12005 for (uint32_t channels = 9; channels < 16; channels++) {
12006 DWConvMicrokernelTester()
12007 .cr(8)
12008 .kr(4)
12009 .channels(channels)
12010 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012011 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012012 }
12013 }
12014
Marat Dukhande06f492020-04-09 00:19:31 -070012015 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012016 TEST_REQUIRES_X86_SSE;
12017 for (uint32_t channels = 9; channels < 16; channels++) {
12018 DWConvMicrokernelTester()
12019 .cr(8)
12020 .kr(4)
12021 .channels(channels)
12022 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012023 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012024 }
12025 }
12026
Marat Dukhande06f492020-04-09 00:19:31 -070012027 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012028 TEST_REQUIRES_X86_SSE;
12029 for (size_t channels = 1; channels <= 40; channels += 7) {
12030 DWConvMicrokernelTester()
12031 .cr(8)
12032 .kr(4)
12033 .channels(channels)
12034 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012035 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012036 }
12037 }
12038
Marat Dukhande06f492020-04-09 00:19:31 -070012039 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012040 TEST_REQUIRES_X86_SSE;
12041 for (size_t channels = 1; channels <= 40; channels += 7) {
12042 for (size_t step = 2; step <= 4; step++) {
12043 DWConvMicrokernelTester()
12044 .cr(8)
12045 .kr(4)
12046 .channels(channels)
12047 .width(3)
12048 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012049 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012050 }
12051 }
12052 }
12053
Marat Dukhande06f492020-04-09 00:19:31 -070012054 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012055 TEST_REQUIRES_X86_SSE;
12056 for (size_t channels = 1; channels <= 40; channels += 7) {
12057 DWConvMicrokernelTester()
12058 .cr(8)
12059 .kr(4)
12060 .channels(8)
12061 .width(5)
12062 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012063 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012064 }
12065 }
12066
Marat Dukhande06f492020-04-09 00:19:31 -070012067 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012068 TEST_REQUIRES_X86_SSE;
12069 for (size_t channels = 1; channels <= 40; channels += 7) {
12070 DWConvMicrokernelTester()
12071 .cr(8)
12072 .kr(4)
12073 .channels(channels)
12074 .width(3)
12075 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012076 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012077 }
12078 }
12079
Marat Dukhande06f492020-04-09 00:19:31 -070012080 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012081 TEST_REQUIRES_X86_SSE;
12082 for (size_t channels = 1; channels <= 40; channels += 7) {
12083 DWConvMicrokernelTester()
12084 .cr(8)
12085 .kr(4)
12086 .channels(channels)
12087 .width(3)
12088 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012089 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012090 }
12091 }
Frank Barchardd5360722020-05-17 16:10:36 -070012092
12093 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
12099 .channels(channels)
12100 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012101 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070012102 }
12103 }
12104
12105 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, zero) {
12106 TEST_REQUIRES_X86_SSE;
12107 for (uint32_t mz = 0; mz < 4; mz++) {
12108 for (uint32_t channels = 16; channels < 128; channels += 24) {
12109 DWConvMicrokernelTester()
12110 .cr(8)
12111 .kr(4)
12112 .channels(channels)
12113 .input_offset(176)
12114 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012115 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070012116 }
12117 }
12118 }
Marat Dukhan1c587112020-04-08 20:04:28 -070012119#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
12120
12121
12122#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070012123 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012124 TEST_REQUIRES_X86_SSE;
12125 DWConvMicrokernelTester()
12126 .cr(8)
12127 .kr(4)
12128 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012129 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012130 }
12131
Marat Dukhande06f492020-04-09 00:19:31 -070012132 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012133 TEST_REQUIRES_X86_SSE;
12134 for (uint32_t channels = 16; channels < 128; channels += 24) {
12135 DWConvMicrokernelTester()
12136 .cr(8)
12137 .kr(4)
12138 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012139 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012140 }
12141 }
12142
Marat Dukhande06f492020-04-09 00:19:31 -070012143 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012144 TEST_REQUIRES_X86_SSE;
12145 for (uint32_t channels = 16; channels < 128; channels += 24) {
12146 DWConvMicrokernelTester()
12147 .cr(8)
12148 .kr(4)
12149 .channels(channels)
12150 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012151 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012152 }
12153 }
12154
Marat Dukhande06f492020-04-09 00:19:31 -070012155 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012156 TEST_REQUIRES_X86_SSE;
12157 for (uint32_t channels = 16; channels < 128; channels += 24) {
12158 DWConvMicrokernelTester()
12159 .cr(8)
12160 .kr(4)
12161 .channels(channels)
12162 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012163 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012164 }
12165 }
12166
Marat Dukhande06f492020-04-09 00:19:31 -070012167 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012168 TEST_REQUIRES_X86_SSE;
12169 for (uint32_t channels = 1; channels < 8; channels++) {
12170 DWConvMicrokernelTester()
12171 .cr(8)
12172 .kr(4)
12173 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012174 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012175 }
12176 }
12177
Marat Dukhande06f492020-04-09 00:19:31 -070012178 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012179 TEST_REQUIRES_X86_SSE;
12180 for (uint32_t channels = 9; channels < 16; channels++) {
12181 DWConvMicrokernelTester()
12182 .cr(8)
12183 .kr(4)
12184 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012185 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012186 }
12187 }
12188
Marat Dukhande06f492020-04-09 00:19:31 -070012189 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012190 TEST_REQUIRES_X86_SSE;
12191 for (uint32_t channels = 9; channels < 16; channels++) {
12192 DWConvMicrokernelTester()
12193 .cr(8)
12194 .kr(4)
12195 .channels(channels)
12196 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012197 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012198 }
12199 }
12200
Marat Dukhande06f492020-04-09 00:19:31 -070012201 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012202 TEST_REQUIRES_X86_SSE;
12203 for (uint32_t channels = 9; channels < 16; channels++) {
12204 DWConvMicrokernelTester()
12205 .cr(8)
12206 .kr(4)
12207 .channels(channels)
12208 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012209 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012210 }
12211 }
12212
Marat Dukhande06f492020-04-09 00:19:31 -070012213 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012214 TEST_REQUIRES_X86_SSE;
12215 for (size_t channels = 1; channels <= 40; channels += 7) {
12216 DWConvMicrokernelTester()
12217 .cr(8)
12218 .kr(4)
12219 .channels(channels)
12220 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012221 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012222 }
12223 }
12224
Marat Dukhande06f492020-04-09 00:19:31 -070012225 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012226 TEST_REQUIRES_X86_SSE;
12227 for (size_t channels = 1; channels <= 40; channels += 7) {
12228 for (size_t step = 2; step <= 4; step++) {
12229 DWConvMicrokernelTester()
12230 .cr(8)
12231 .kr(4)
12232 .channels(channels)
12233 .width(3)
12234 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012235 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012236 }
12237 }
12238 }
12239
Marat Dukhande06f492020-04-09 00:19:31 -070012240 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012241 TEST_REQUIRES_X86_SSE;
12242 for (size_t channels = 1; channels <= 40; channels += 7) {
12243 DWConvMicrokernelTester()
12244 .cr(8)
12245 .kr(4)
12246 .channels(8)
12247 .width(5)
12248 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012249 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012250 }
12251 }
12252
Marat Dukhande06f492020-04-09 00:19:31 -070012253 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012254 TEST_REQUIRES_X86_SSE;
12255 for (size_t channels = 1; channels <= 40; channels += 7) {
12256 DWConvMicrokernelTester()
12257 .cr(8)
12258 .kr(4)
12259 .channels(channels)
12260 .width(3)
12261 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012262 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012263 }
12264 }
12265
Marat Dukhande06f492020-04-09 00:19:31 -070012266 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012267 TEST_REQUIRES_X86_SSE;
12268 for (size_t channels = 1; channels <= 40; channels += 7) {
12269 DWConvMicrokernelTester()
12270 .cr(8)
12271 .kr(4)
12272 .channels(channels)
12273 .width(3)
12274 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012275 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012276 }
12277 }
Frank Barchardd5360722020-05-17 16:10:36 -070012278
12279 TEST(F32_DWCONV_MINMAX_UP8X4__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(4)
12285 .channels(channels)
12286 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012287 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070012288 }
12289 }
12290
12291 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, zero) {
12292 TEST_REQUIRES_X86_SSE;
12293 for (uint32_t mz = 0; mz < 4; mz++) {
12294 for (uint32_t channels = 16; channels < 128; channels += 24) {
12295 DWConvMicrokernelTester()
12296 .cr(8)
12297 .kr(4)
12298 .channels(channels)
12299 .input_offset(176)
12300 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012301 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2, xnn_init_f32_minmax_sse_params);
Frank Barchardd5360722020-05-17 16:10:36 -070012302 }
12303 }
12304 }
Marat Dukhan1c587112020-04-08 20:04:28 -070012305#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
12306
12307
12308#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070012309 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012310 TEST_REQUIRES_X86_AVX;
12311 DWConvMicrokernelTester()
12312 .cr(8)
12313 .kr(25)
12314 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012315 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012316 }
12317
Marat Dukhande06f492020-04-09 00:19:31 -070012318 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012319 TEST_REQUIRES_X86_AVX;
12320 for (uint32_t channels = 16; channels < 128; channels += 24) {
12321 DWConvMicrokernelTester()
12322 .cr(8)
12323 .kr(25)
12324 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012325 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012326 }
12327 }
12328
Marat Dukhande06f492020-04-09 00:19:31 -070012329 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012330 TEST_REQUIRES_X86_AVX;
12331 for (uint32_t channels = 16; channels < 128; channels += 24) {
12332 DWConvMicrokernelTester()
12333 .cr(8)
12334 .kr(25)
12335 .channels(channels)
12336 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012337 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012338 }
12339 }
12340
Marat Dukhande06f492020-04-09 00:19:31 -070012341 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012342 TEST_REQUIRES_X86_AVX;
12343 for (uint32_t channels = 16; channels < 128; channels += 24) {
12344 DWConvMicrokernelTester()
12345 .cr(8)
12346 .kr(25)
12347 .channels(channels)
12348 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012349 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012350 }
12351 }
12352
Marat Dukhande06f492020-04-09 00:19:31 -070012353 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012354 TEST_REQUIRES_X86_AVX;
12355 for (uint32_t channels = 1; channels < 8; channels++) {
12356 DWConvMicrokernelTester()
12357 .cr(8)
12358 .kr(25)
12359 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012360 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012361 }
12362 }
12363
Marat Dukhande06f492020-04-09 00:19:31 -070012364 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012365 TEST_REQUIRES_X86_AVX;
12366 for (uint32_t channels = 9; channels < 16; channels++) {
12367 DWConvMicrokernelTester()
12368 .cr(8)
12369 .kr(25)
12370 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012371 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012372 }
12373 }
12374
Marat Dukhande06f492020-04-09 00:19:31 -070012375 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012376 TEST_REQUIRES_X86_AVX;
12377 for (uint32_t channels = 9; channels < 16; channels++) {
12378 DWConvMicrokernelTester()
12379 .cr(8)
12380 .kr(25)
12381 .channels(channels)
12382 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012383 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012384 }
12385 }
12386
Marat Dukhande06f492020-04-09 00:19:31 -070012387 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012388 TEST_REQUIRES_X86_AVX;
12389 for (uint32_t channels = 9; channels < 16; channels++) {
12390 DWConvMicrokernelTester()
12391 .cr(8)
12392 .kr(25)
12393 .channels(channels)
12394 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012395 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012396 }
12397 }
12398
Marat Dukhande06f492020-04-09 00:19:31 -070012399 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012400 TEST_REQUIRES_X86_AVX;
12401 for (size_t channels = 1; channels <= 40; channels += 7) {
12402 DWConvMicrokernelTester()
12403 .cr(8)
12404 .kr(25)
12405 .channels(channels)
12406 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012407 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012408 }
12409 }
12410
Marat Dukhande06f492020-04-09 00:19:31 -070012411 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012412 TEST_REQUIRES_X86_AVX;
12413 for (size_t channels = 1; channels <= 40; channels += 7) {
12414 for (size_t step = 2; step <= 25; step++) {
12415 DWConvMicrokernelTester()
12416 .cr(8)
12417 .kr(25)
12418 .channels(channels)
12419 .width(3)
12420 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012421 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012422 }
12423 }
12424 }
12425
Marat Dukhande06f492020-04-09 00:19:31 -070012426 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012427 TEST_REQUIRES_X86_AVX;
12428 for (size_t channels = 1; channels <= 40; channels += 7) {
12429 DWConvMicrokernelTester()
12430 .cr(8)
12431 .kr(25)
12432 .channels(8)
12433 .width(5)
12434 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012435 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012436 }
12437 }
12438
Marat Dukhande06f492020-04-09 00:19:31 -070012439 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012440 TEST_REQUIRES_X86_AVX;
12441 for (size_t channels = 1; channels <= 40; channels += 7) {
12442 DWConvMicrokernelTester()
12443 .cr(8)
12444 .kr(25)
12445 .channels(channels)
12446 .width(3)
12447 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012448 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012449 }
12450 }
12451
Marat Dukhande06f492020-04-09 00:19:31 -070012452 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012453 TEST_REQUIRES_X86_AVX;
12454 for (size_t channels = 1; channels <= 40; channels += 7) {
12455 DWConvMicrokernelTester()
12456 .cr(8)
12457 .kr(25)
12458 .channels(channels)
12459 .width(3)
12460 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012461 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012462 }
12463 }
Frank Barchardd5360722020-05-17 16:10:36 -070012464
12465 TEST(F32_DWCONV_MINMAX_UP8X25__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(25)
12471 .channels(channels)
12472 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012473 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070012474 }
12475 }
12476
12477 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, zero) {
12478 TEST_REQUIRES_X86_AVX;
12479 for (uint32_t mz = 0; mz < 25; mz++) {
12480 for (uint32_t channels = 16; channels < 128; channels += 24) {
12481 DWConvMicrokernelTester()
12482 .cr(8)
12483 .kr(25)
12484 .channels(channels)
12485 .input_offset(176)
12486 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012487 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070012488 }
12489 }
12490 }
Marat Dukhan1c587112020-04-08 20:04:28 -070012491#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
12492
12493
12494#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070012495 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012496 TEST_REQUIRES_X86_AVX;
12497 DWConvMicrokernelTester()
12498 .cr(8)
12499 .kr(25)
12500 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012501 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012502 }
12503
Marat Dukhande06f492020-04-09 00:19:31 -070012504 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012505 TEST_REQUIRES_X86_AVX;
12506 for (uint32_t channels = 16; channels < 128; channels += 24) {
12507 DWConvMicrokernelTester()
12508 .cr(8)
12509 .kr(25)
12510 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012511 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012512 }
12513 }
12514
Marat Dukhande06f492020-04-09 00:19:31 -070012515 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012516 TEST_REQUIRES_X86_AVX;
12517 for (uint32_t channels = 16; channels < 128; channels += 24) {
12518 DWConvMicrokernelTester()
12519 .cr(8)
12520 .kr(25)
12521 .channels(channels)
12522 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012523 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012524 }
12525 }
12526
Marat Dukhande06f492020-04-09 00:19:31 -070012527 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012528 TEST_REQUIRES_X86_AVX;
12529 for (uint32_t channels = 16; channels < 128; channels += 24) {
12530 DWConvMicrokernelTester()
12531 .cr(8)
12532 .kr(25)
12533 .channels(channels)
12534 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012535 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012536 }
12537 }
12538
Marat Dukhande06f492020-04-09 00:19:31 -070012539 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012540 TEST_REQUIRES_X86_AVX;
12541 for (uint32_t channels = 1; channels < 8; channels++) {
12542 DWConvMicrokernelTester()
12543 .cr(8)
12544 .kr(25)
12545 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012546 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012547 }
12548 }
12549
Marat Dukhande06f492020-04-09 00:19:31 -070012550 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012551 TEST_REQUIRES_X86_AVX;
12552 for (uint32_t channels = 9; channels < 16; channels++) {
12553 DWConvMicrokernelTester()
12554 .cr(8)
12555 .kr(25)
12556 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012557 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012558 }
12559 }
12560
Marat Dukhande06f492020-04-09 00:19:31 -070012561 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012562 TEST_REQUIRES_X86_AVX;
12563 for (uint32_t channels = 9; channels < 16; channels++) {
12564 DWConvMicrokernelTester()
12565 .cr(8)
12566 .kr(25)
12567 .channels(channels)
12568 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012569 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012570 }
12571 }
12572
Marat Dukhande06f492020-04-09 00:19:31 -070012573 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012574 TEST_REQUIRES_X86_AVX;
12575 for (uint32_t channels = 9; channels < 16; channels++) {
12576 DWConvMicrokernelTester()
12577 .cr(8)
12578 .kr(25)
12579 .channels(channels)
12580 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012581 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012582 }
12583 }
12584
Marat Dukhande06f492020-04-09 00:19:31 -070012585 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012586 TEST_REQUIRES_X86_AVX;
12587 for (size_t channels = 1; channels <= 40; channels += 7) {
12588 DWConvMicrokernelTester()
12589 .cr(8)
12590 .kr(25)
12591 .channels(channels)
12592 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012593 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012594 }
12595 }
12596
Marat Dukhande06f492020-04-09 00:19:31 -070012597 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012598 TEST_REQUIRES_X86_AVX;
12599 for (size_t channels = 1; channels <= 40; channels += 7) {
12600 for (size_t step = 2; step <= 25; step++) {
12601 DWConvMicrokernelTester()
12602 .cr(8)
12603 .kr(25)
12604 .channels(channels)
12605 .width(3)
12606 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012607 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012608 }
12609 }
12610 }
12611
Marat Dukhande06f492020-04-09 00:19:31 -070012612 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012613 TEST_REQUIRES_X86_AVX;
12614 for (size_t channels = 1; channels <= 40; channels += 7) {
12615 DWConvMicrokernelTester()
12616 .cr(8)
12617 .kr(25)
12618 .channels(8)
12619 .width(5)
12620 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012621 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012622 }
12623 }
12624
Marat Dukhande06f492020-04-09 00:19:31 -070012625 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012626 TEST_REQUIRES_X86_AVX;
12627 for (size_t channels = 1; channels <= 40; channels += 7) {
12628 DWConvMicrokernelTester()
12629 .cr(8)
12630 .kr(25)
12631 .channels(channels)
12632 .width(3)
12633 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012634 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012635 }
12636 }
12637
Marat Dukhande06f492020-04-09 00:19:31 -070012638 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012639 TEST_REQUIRES_X86_AVX;
12640 for (size_t channels = 1; channels <= 40; channels += 7) {
12641 DWConvMicrokernelTester()
12642 .cr(8)
12643 .kr(25)
12644 .channels(channels)
12645 .width(3)
12646 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012647 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012648 }
12649 }
Frank Barchardd5360722020-05-17 16:10:36 -070012650
12651 TEST(F32_DWCONV_MINMAX_UP8X25__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(25)
12657 .channels(channels)
12658 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012659 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070012660 }
12661 }
12662
12663 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, zero) {
12664 TEST_REQUIRES_X86_AVX;
12665 for (uint32_t mz = 0; mz < 25; mz++) {
12666 for (uint32_t channels = 16; channels < 128; channels += 24) {
12667 DWConvMicrokernelTester()
12668 .cr(8)
12669 .kr(25)
12670 .channels(channels)
12671 .input_offset(176)
12672 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012673 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070012674 }
12675 }
12676 }
Marat Dukhan1c587112020-04-08 20:04:28 -070012677#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
12678
12679
12680#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070012681 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012682 TEST_REQUIRES_X86_AVX;
12683 DWConvMicrokernelTester()
12684 .cr(16)
12685 .kr(25)
12686 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012687 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012688 }
12689
Marat Dukhande06f492020-04-09 00:19:31 -070012690 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012691 TEST_REQUIRES_X86_AVX;
12692 for (uint32_t channels = 32; channels < 256; channels += 48) {
12693 DWConvMicrokernelTester()
12694 .cr(16)
12695 .kr(25)
12696 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012697 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012698 }
12699 }
12700
Marat Dukhande06f492020-04-09 00:19:31 -070012701 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012702 TEST_REQUIRES_X86_AVX;
12703 for (uint32_t channels = 32; channels < 256; channels += 48) {
12704 DWConvMicrokernelTester()
12705 .cr(16)
12706 .kr(25)
12707 .channels(channels)
12708 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012709 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012710 }
12711 }
12712
Marat Dukhande06f492020-04-09 00:19:31 -070012713 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012714 TEST_REQUIRES_X86_AVX;
12715 for (uint32_t channels = 32; channels < 256; channels += 48) {
12716 DWConvMicrokernelTester()
12717 .cr(16)
12718 .kr(25)
12719 .channels(channels)
12720 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012721 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012722 }
12723 }
12724
Marat Dukhande06f492020-04-09 00:19:31 -070012725 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012726 TEST_REQUIRES_X86_AVX;
12727 for (uint32_t channels = 1; channels < 16; channels++) {
12728 DWConvMicrokernelTester()
12729 .cr(16)
12730 .kr(25)
12731 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012732 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012733 }
12734 }
12735
Marat Dukhande06f492020-04-09 00:19:31 -070012736 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012737 TEST_REQUIRES_X86_AVX;
12738 for (uint32_t channels = 17; channels < 32; channels++) {
12739 DWConvMicrokernelTester()
12740 .cr(16)
12741 .kr(25)
12742 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012743 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012744 }
12745 }
12746
Marat Dukhande06f492020-04-09 00:19:31 -070012747 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012748 TEST_REQUIRES_X86_AVX;
12749 for (uint32_t channels = 17; channels < 32; channels++) {
12750 DWConvMicrokernelTester()
12751 .cr(16)
12752 .kr(25)
12753 .channels(channels)
12754 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012755 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012756 }
12757 }
12758
Marat Dukhande06f492020-04-09 00:19:31 -070012759 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012760 TEST_REQUIRES_X86_AVX;
12761 for (uint32_t channels = 17; channels < 32; channels++) {
12762 DWConvMicrokernelTester()
12763 .cr(16)
12764 .kr(25)
12765 .channels(channels)
12766 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012767 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012768 }
12769 }
12770
Marat Dukhande06f492020-04-09 00:19:31 -070012771 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012772 TEST_REQUIRES_X86_AVX;
12773 for (size_t channels = 1; channels <= 80; channels += 15) {
12774 DWConvMicrokernelTester()
12775 .cr(16)
12776 .kr(25)
12777 .channels(channels)
12778 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012779 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012780 }
12781 }
12782
Marat Dukhande06f492020-04-09 00:19:31 -070012783 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012784 TEST_REQUIRES_X86_AVX;
12785 for (size_t channels = 1; channels <= 80; channels += 15) {
12786 for (size_t step = 2; step <= 25; step++) {
12787 DWConvMicrokernelTester()
12788 .cr(16)
12789 .kr(25)
12790 .channels(channels)
12791 .width(3)
12792 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012793 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012794 }
12795 }
12796 }
12797
Marat Dukhande06f492020-04-09 00:19:31 -070012798 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012799 TEST_REQUIRES_X86_AVX;
12800 for (size_t channels = 1; channels <= 80; channels += 15) {
12801 DWConvMicrokernelTester()
12802 .cr(16)
12803 .kr(25)
12804 .channels(16)
12805 .width(5)
12806 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012807 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012808 }
12809 }
12810
Marat Dukhande06f492020-04-09 00:19:31 -070012811 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012812 TEST_REQUIRES_X86_AVX;
12813 for (size_t channels = 1; channels <= 80; channels += 15) {
12814 DWConvMicrokernelTester()
12815 .cr(16)
12816 .kr(25)
12817 .channels(channels)
12818 .width(3)
12819 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012820 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012821 }
12822 }
12823
Marat Dukhande06f492020-04-09 00:19:31 -070012824 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012825 TEST_REQUIRES_X86_AVX;
12826 for (size_t channels = 1; channels <= 80; channels += 15) {
12827 DWConvMicrokernelTester()
12828 .cr(16)
12829 .kr(25)
12830 .channels(channels)
12831 .width(3)
12832 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012833 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012834 }
12835 }
Frank Barchardd5360722020-05-17 16:10:36 -070012836
12837 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, input_offset) {
12838 TEST_REQUIRES_X86_AVX;
12839 for (uint32_t channels = 32; channels < 256; channels += 48) {
12840 DWConvMicrokernelTester()
12841 .cr(16)
12842 .kr(25)
12843 .channels(channels)
12844 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012845 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070012846 }
12847 }
12848
12849 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, zero) {
12850 TEST_REQUIRES_X86_AVX;
12851 for (uint32_t mz = 0; mz < 25; mz++) {
12852 for (uint32_t channels = 32; channels < 256; channels += 48) {
12853 DWConvMicrokernelTester()
12854 .cr(16)
12855 .kr(25)
12856 .channels(channels)
12857 .input_offset(304)
12858 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012859 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070012860 }
12861 }
12862 }
Marat Dukhan1c587112020-04-08 20:04:28 -070012863#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
12864
12865
12866#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070012867 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012868 TEST_REQUIRES_X86_AVX;
12869 DWConvMicrokernelTester()
12870 .cr(16)
12871 .kr(25)
12872 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012873 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012874 }
12875
Marat Dukhande06f492020-04-09 00:19:31 -070012876 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012877 TEST_REQUIRES_X86_AVX;
12878 for (uint32_t channels = 32; channels < 256; channels += 48) {
12879 DWConvMicrokernelTester()
12880 .cr(16)
12881 .kr(25)
12882 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012883 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012884 }
12885 }
12886
Marat Dukhande06f492020-04-09 00:19:31 -070012887 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012888 TEST_REQUIRES_X86_AVX;
12889 for (uint32_t channels = 32; channels < 256; channels += 48) {
12890 DWConvMicrokernelTester()
12891 .cr(16)
12892 .kr(25)
12893 .channels(channels)
12894 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012895 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012896 }
12897 }
12898
Marat Dukhande06f492020-04-09 00:19:31 -070012899 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012900 TEST_REQUIRES_X86_AVX;
12901 for (uint32_t channels = 32; channels < 256; channels += 48) {
12902 DWConvMicrokernelTester()
12903 .cr(16)
12904 .kr(25)
12905 .channels(channels)
12906 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012907 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012908 }
12909 }
12910
Marat Dukhande06f492020-04-09 00:19:31 -070012911 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012912 TEST_REQUIRES_X86_AVX;
12913 for (uint32_t channels = 1; channels < 16; channels++) {
12914 DWConvMicrokernelTester()
12915 .cr(16)
12916 .kr(25)
12917 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012918 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012919 }
12920 }
12921
Marat Dukhande06f492020-04-09 00:19:31 -070012922 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012923 TEST_REQUIRES_X86_AVX;
12924 for (uint32_t channels = 17; channels < 32; channels++) {
12925 DWConvMicrokernelTester()
12926 .cr(16)
12927 .kr(25)
12928 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012929 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012930 }
12931 }
12932
Marat Dukhande06f492020-04-09 00:19:31 -070012933 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012934 TEST_REQUIRES_X86_AVX;
12935 for (uint32_t channels = 17; channels < 32; channels++) {
12936 DWConvMicrokernelTester()
12937 .cr(16)
12938 .kr(25)
12939 .channels(channels)
12940 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012941 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012942 }
12943 }
12944
Marat Dukhande06f492020-04-09 00:19:31 -070012945 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012946 TEST_REQUIRES_X86_AVX;
12947 for (uint32_t channels = 17; channels < 32; channels++) {
12948 DWConvMicrokernelTester()
12949 .cr(16)
12950 .kr(25)
12951 .channels(channels)
12952 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012953 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012954 }
12955 }
12956
Marat Dukhande06f492020-04-09 00:19:31 -070012957 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012958 TEST_REQUIRES_X86_AVX;
12959 for (size_t channels = 1; channels <= 80; channels += 15) {
12960 DWConvMicrokernelTester()
12961 .cr(16)
12962 .kr(25)
12963 .channels(channels)
12964 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012965 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012966 }
12967 }
12968
Marat Dukhande06f492020-04-09 00:19:31 -070012969 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012970 TEST_REQUIRES_X86_AVX;
12971 for (size_t channels = 1; channels <= 80; channels += 15) {
12972 for (size_t step = 2; step <= 25; step++) {
12973 DWConvMicrokernelTester()
12974 .cr(16)
12975 .kr(25)
12976 .channels(channels)
12977 .width(3)
12978 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012979 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012980 }
12981 }
12982 }
12983
Marat Dukhande06f492020-04-09 00:19:31 -070012984 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012985 TEST_REQUIRES_X86_AVX;
12986 for (size_t channels = 1; channels <= 80; channels += 15) {
12987 DWConvMicrokernelTester()
12988 .cr(16)
12989 .kr(25)
12990 .channels(16)
12991 .width(5)
12992 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070012993 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070012994 }
12995 }
12996
Marat Dukhande06f492020-04-09 00:19:31 -070012997 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012998 TEST_REQUIRES_X86_AVX;
12999 for (size_t channels = 1; channels <= 80; channels += 15) {
13000 DWConvMicrokernelTester()
13001 .cr(16)
13002 .kr(25)
13003 .channels(channels)
13004 .width(3)
13005 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013006 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013007 }
13008 }
13009
Marat Dukhande06f492020-04-09 00:19:31 -070013010 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013011 TEST_REQUIRES_X86_AVX;
13012 for (size_t channels = 1; channels <= 80; channels += 15) {
13013 DWConvMicrokernelTester()
13014 .cr(16)
13015 .kr(25)
13016 .channels(channels)
13017 .width(3)
13018 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013019 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013020 }
13021 }
Frank Barchardd5360722020-05-17 16:10:36 -070013022
13023 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, input_offset) {
13024 TEST_REQUIRES_X86_AVX;
13025 for (uint32_t channels = 32; channels < 256; channels += 48) {
13026 DWConvMicrokernelTester()
13027 .cr(16)
13028 .kr(25)
13029 .channels(channels)
13030 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013031 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070013032 }
13033 }
13034
13035 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, zero) {
13036 TEST_REQUIRES_X86_AVX;
13037 for (uint32_t mz = 0; mz < 25; mz++) {
13038 for (uint32_t channels = 32; channels < 256; channels += 48) {
13039 DWConvMicrokernelTester()
13040 .cr(16)
13041 .kr(25)
13042 .channels(channels)
13043 .input_offset(304)
13044 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013045 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070013046 }
13047 }
13048 }
Marat Dukhan1c587112020-04-08 20:04:28 -070013049#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
13050
13051
13052#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070013053 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013054 TEST_REQUIRES_X86_AVX;
13055 DWConvMicrokernelTester()
13056 .cr(8)
13057 .kr(9)
13058 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013059 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013060 }
13061
Marat Dukhande06f492020-04-09 00:19:31 -070013062 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013063 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013069 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013070 }
13071 }
13072
Marat Dukhande06f492020-04-09 00:19:31 -070013073 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013074 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013081 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013082 }
13083 }
13084
Marat Dukhande06f492020-04-09 00:19:31 -070013085 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013086 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013093 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013094 }
13095 }
13096
Marat Dukhande06f492020-04-09 00:19:31 -070013097 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013098 TEST_REQUIRES_X86_AVX;
13099 for (uint32_t channels = 1; channels < 8; channels++) {
13100 DWConvMicrokernelTester()
13101 .cr(8)
13102 .kr(9)
13103 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013104 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013105 }
13106 }
13107
Marat Dukhande06f492020-04-09 00:19:31 -070013108 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013109 TEST_REQUIRES_X86_AVX;
13110 for (uint32_t channels = 9; channels < 16; channels++) {
13111 DWConvMicrokernelTester()
13112 .cr(8)
13113 .kr(9)
13114 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013115 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013116 }
13117 }
13118
Marat Dukhande06f492020-04-09 00:19:31 -070013119 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013120 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013127 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013128 }
13129 }
13130
Marat Dukhande06f492020-04-09 00:19:31 -070013131 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013132 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013139 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013140 }
13141 }
13142
Marat Dukhande06f492020-04-09 00:19:31 -070013143 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013144 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013151 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013152 }
13153 }
13154
Marat Dukhande06f492020-04-09 00:19:31 -070013155 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013156 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013165 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013166 }
13167 }
13168 }
13169
Marat Dukhande06f492020-04-09 00:19:31 -070013170 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013171 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013179 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013180 }
13181 }
13182
Marat Dukhande06f492020-04-09 00:19:31 -070013183 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013184 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013192 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013193 }
13194 }
13195
Marat Dukhande06f492020-04-09 00:19:31 -070013196 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013197 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013205 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013206 }
13207 }
Frank Barchardd5360722020-05-17 16:10:36 -070013208
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013217 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070013218 }
13219 }
13220
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013231 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070013232 }
13233 }
13234 }
Marat Dukhan1c587112020-04-08 20:04:28 -070013235#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
13236
13237
13238#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070013239 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013240 TEST_REQUIRES_X86_AVX;
13241 DWConvMicrokernelTester()
13242 .cr(8)
13243 .kr(9)
13244 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013245 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013246 }
13247
Marat Dukhande06f492020-04-09 00:19:31 -070013248 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013249 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013255 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013256 }
13257 }
13258
Marat Dukhande06f492020-04-09 00:19:31 -070013259 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013260 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013267 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013268 }
13269 }
13270
Marat Dukhande06f492020-04-09 00:19:31 -070013271 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013272 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013279 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013280 }
13281 }
13282
Marat Dukhande06f492020-04-09 00:19:31 -070013283 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013284 TEST_REQUIRES_X86_AVX;
13285 for (uint32_t channels = 1; channels < 8; channels++) {
13286 DWConvMicrokernelTester()
13287 .cr(8)
13288 .kr(9)
13289 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013290 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013291 }
13292 }
13293
Marat Dukhande06f492020-04-09 00:19:31 -070013294 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013295 TEST_REQUIRES_X86_AVX;
13296 for (uint32_t channels = 9; channels < 16; channels++) {
13297 DWConvMicrokernelTester()
13298 .cr(8)
13299 .kr(9)
13300 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013301 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013302 }
13303 }
13304
Marat Dukhande06f492020-04-09 00:19:31 -070013305 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013306 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013313 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013314 }
13315 }
13316
Marat Dukhande06f492020-04-09 00:19:31 -070013317 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013318 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013325 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013326 }
13327 }
13328
Marat Dukhande06f492020-04-09 00:19:31 -070013329 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013330 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013337 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013338 }
13339 }
13340
Marat Dukhande06f492020-04-09 00:19:31 -070013341 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013342 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013351 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013352 }
13353 }
13354 }
13355
Marat Dukhande06f492020-04-09 00:19:31 -070013356 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013357 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013365 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013366 }
13367 }
13368
Marat Dukhande06f492020-04-09 00:19:31 -070013369 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013370 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013378 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013379 }
13380 }
13381
Marat Dukhande06f492020-04-09 00:19:31 -070013382 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013383 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013391 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013392 }
13393 }
Frank Barchardd5360722020-05-17 16:10:36 -070013394
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013403 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070013404 }
13405 }
13406
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013417 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070013418 }
13419 }
13420 }
Marat Dukhan1c587112020-04-08 20:04:28 -070013421#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
13422
13423
13424#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070013425 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013426 TEST_REQUIRES_X86_AVX;
13427 DWConvMicrokernelTester()
13428 .cr(16)
13429 .kr(9)
13430 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013431 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013432 }
13433
Marat Dukhande06f492020-04-09 00:19:31 -070013434 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013435 TEST_REQUIRES_X86_AVX;
13436 for (uint32_t channels = 32; channels < 256; channels += 48) {
13437 DWConvMicrokernelTester()
13438 .cr(16)
13439 .kr(9)
13440 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013441 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013442 }
13443 }
13444
Marat Dukhande06f492020-04-09 00:19:31 -070013445 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013446 TEST_REQUIRES_X86_AVX;
13447 for (uint32_t channels = 32; channels < 256; channels += 48) {
13448 DWConvMicrokernelTester()
13449 .cr(16)
13450 .kr(9)
13451 .channels(channels)
13452 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013453 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013454 }
13455 }
13456
Marat Dukhande06f492020-04-09 00:19:31 -070013457 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013458 TEST_REQUIRES_X86_AVX;
13459 for (uint32_t channels = 32; channels < 256; channels += 48) {
13460 DWConvMicrokernelTester()
13461 .cr(16)
13462 .kr(9)
13463 .channels(channels)
13464 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013465 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013466 }
13467 }
13468
Marat Dukhande06f492020-04-09 00:19:31 -070013469 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013470 TEST_REQUIRES_X86_AVX;
13471 for (uint32_t channels = 1; channels < 16; channels++) {
13472 DWConvMicrokernelTester()
13473 .cr(16)
13474 .kr(9)
13475 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013476 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013477 }
13478 }
13479
Marat Dukhande06f492020-04-09 00:19:31 -070013480 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013481 TEST_REQUIRES_X86_AVX;
13482 for (uint32_t channels = 17; channels < 32; channels++) {
13483 DWConvMicrokernelTester()
13484 .cr(16)
13485 .kr(9)
13486 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013487 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013488 }
13489 }
13490
Marat Dukhande06f492020-04-09 00:19:31 -070013491 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013492 TEST_REQUIRES_X86_AVX;
13493 for (uint32_t channels = 17; channels < 32; channels++) {
13494 DWConvMicrokernelTester()
13495 .cr(16)
13496 .kr(9)
13497 .channels(channels)
13498 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013499 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013500 }
13501 }
13502
Marat Dukhande06f492020-04-09 00:19:31 -070013503 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013504 TEST_REQUIRES_X86_AVX;
13505 for (uint32_t channels = 17; channels < 32; channels++) {
13506 DWConvMicrokernelTester()
13507 .cr(16)
13508 .kr(9)
13509 .channels(channels)
13510 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013511 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013512 }
13513 }
13514
Marat Dukhande06f492020-04-09 00:19:31 -070013515 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013516 TEST_REQUIRES_X86_AVX;
13517 for (size_t channels = 1; channels <= 80; channels += 15) {
13518 DWConvMicrokernelTester()
13519 .cr(16)
13520 .kr(9)
13521 .channels(channels)
13522 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013523 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013524 }
13525 }
13526
Marat Dukhande06f492020-04-09 00:19:31 -070013527 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013528 TEST_REQUIRES_X86_AVX;
13529 for (size_t channels = 1; channels <= 80; channels += 15) {
13530 for (size_t step = 2; step <= 9; step++) {
13531 DWConvMicrokernelTester()
13532 .cr(16)
13533 .kr(9)
13534 .channels(channels)
13535 .width(3)
13536 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013537 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013538 }
13539 }
13540 }
13541
Marat Dukhande06f492020-04-09 00:19:31 -070013542 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013543 TEST_REQUIRES_X86_AVX;
13544 for (size_t channels = 1; channels <= 80; channels += 15) {
13545 DWConvMicrokernelTester()
13546 .cr(16)
13547 .kr(9)
13548 .channels(16)
13549 .width(5)
13550 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013551 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013552 }
13553 }
13554
Marat Dukhande06f492020-04-09 00:19:31 -070013555 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013556 TEST_REQUIRES_X86_AVX;
13557 for (size_t channels = 1; channels <= 80; channels += 15) {
13558 DWConvMicrokernelTester()
13559 .cr(16)
13560 .kr(9)
13561 .channels(channels)
13562 .width(3)
13563 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013564 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013565 }
13566 }
13567
Marat Dukhande06f492020-04-09 00:19:31 -070013568 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013569 TEST_REQUIRES_X86_AVX;
13570 for (size_t channels = 1; channels <= 80; channels += 15) {
13571 DWConvMicrokernelTester()
13572 .cr(16)
13573 .kr(9)
13574 .channels(channels)
13575 .width(3)
13576 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013577 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013578 }
13579 }
Frank Barchardd5360722020-05-17 16:10:36 -070013580
13581 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, input_offset) {
13582 TEST_REQUIRES_X86_AVX;
13583 for (uint32_t channels = 32; channels < 256; channels += 48) {
13584 DWConvMicrokernelTester()
13585 .cr(16)
13586 .kr(9)
13587 .channels(channels)
13588 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013589 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070013590 }
13591 }
13592
13593 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, zero) {
13594 TEST_REQUIRES_X86_AVX;
13595 for (uint32_t mz = 0; mz < 9; mz++) {
13596 for (uint32_t channels = 32; channels < 256; channels += 48) {
13597 DWConvMicrokernelTester()
13598 .cr(16)
13599 .kr(9)
13600 .channels(channels)
13601 .input_offset(304)
13602 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013603 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070013604 }
13605 }
13606 }
Marat Dukhan1c587112020-04-08 20:04:28 -070013607#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
13608
13609
13610#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070013611 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013612 TEST_REQUIRES_X86_AVX;
13613 DWConvMicrokernelTester()
13614 .cr(16)
13615 .kr(9)
13616 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013617 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013618 }
13619
Marat Dukhande06f492020-04-09 00:19:31 -070013620 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013621 TEST_REQUIRES_X86_AVX;
13622 for (uint32_t channels = 32; channels < 256; channels += 48) {
13623 DWConvMicrokernelTester()
13624 .cr(16)
13625 .kr(9)
13626 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013627 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013628 }
13629 }
13630
Marat Dukhande06f492020-04-09 00:19:31 -070013631 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013632 TEST_REQUIRES_X86_AVX;
13633 for (uint32_t channels = 32; channels < 256; channels += 48) {
13634 DWConvMicrokernelTester()
13635 .cr(16)
13636 .kr(9)
13637 .channels(channels)
13638 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013639 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013640 }
13641 }
13642
Marat Dukhande06f492020-04-09 00:19:31 -070013643 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013644 TEST_REQUIRES_X86_AVX;
13645 for (uint32_t channels = 32; channels < 256; channels += 48) {
13646 DWConvMicrokernelTester()
13647 .cr(16)
13648 .kr(9)
13649 .channels(channels)
13650 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013651 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013652 }
13653 }
13654
Marat Dukhande06f492020-04-09 00:19:31 -070013655 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013656 TEST_REQUIRES_X86_AVX;
13657 for (uint32_t channels = 1; channels < 16; channels++) {
13658 DWConvMicrokernelTester()
13659 .cr(16)
13660 .kr(9)
13661 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013662 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013663 }
13664 }
13665
Marat Dukhande06f492020-04-09 00:19:31 -070013666 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013667 TEST_REQUIRES_X86_AVX;
13668 for (uint32_t channels = 17; channels < 32; channels++) {
13669 DWConvMicrokernelTester()
13670 .cr(16)
13671 .kr(9)
13672 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013673 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013674 }
13675 }
13676
Marat Dukhande06f492020-04-09 00:19:31 -070013677 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013678 TEST_REQUIRES_X86_AVX;
13679 for (uint32_t channels = 17; channels < 32; channels++) {
13680 DWConvMicrokernelTester()
13681 .cr(16)
13682 .kr(9)
13683 .channels(channels)
13684 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013685 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013686 }
13687 }
13688
Marat Dukhande06f492020-04-09 00:19:31 -070013689 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013690 TEST_REQUIRES_X86_AVX;
13691 for (uint32_t channels = 17; channels < 32; channels++) {
13692 DWConvMicrokernelTester()
13693 .cr(16)
13694 .kr(9)
13695 .channels(channels)
13696 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013697 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013698 }
13699 }
13700
Marat Dukhande06f492020-04-09 00:19:31 -070013701 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013702 TEST_REQUIRES_X86_AVX;
13703 for (size_t channels = 1; channels <= 80; channels += 15) {
13704 DWConvMicrokernelTester()
13705 .cr(16)
13706 .kr(9)
13707 .channels(channels)
13708 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013709 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013710 }
13711 }
13712
Marat Dukhande06f492020-04-09 00:19:31 -070013713 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013714 TEST_REQUIRES_X86_AVX;
13715 for (size_t channels = 1; channels <= 80; channels += 15) {
13716 for (size_t step = 2; step <= 9; step++) {
13717 DWConvMicrokernelTester()
13718 .cr(16)
13719 .kr(9)
13720 .channels(channels)
13721 .width(3)
13722 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013723 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013724 }
13725 }
13726 }
13727
Marat Dukhande06f492020-04-09 00:19:31 -070013728 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013729 TEST_REQUIRES_X86_AVX;
13730 for (size_t channels = 1; channels <= 80; channels += 15) {
13731 DWConvMicrokernelTester()
13732 .cr(16)
13733 .kr(9)
13734 .channels(16)
13735 .width(5)
13736 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013737 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013738 }
13739 }
13740
Marat Dukhande06f492020-04-09 00:19:31 -070013741 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013742 TEST_REQUIRES_X86_AVX;
13743 for (size_t channels = 1; channels <= 80; channels += 15) {
13744 DWConvMicrokernelTester()
13745 .cr(16)
13746 .kr(9)
13747 .channels(channels)
13748 .width(3)
13749 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013750 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013751 }
13752 }
13753
Marat Dukhande06f492020-04-09 00:19:31 -070013754 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013755 TEST_REQUIRES_X86_AVX;
13756 for (size_t channels = 1; channels <= 80; channels += 15) {
13757 DWConvMicrokernelTester()
13758 .cr(16)
13759 .kr(9)
13760 .channels(channels)
13761 .width(3)
13762 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013763 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070013764 }
13765 }
Frank Barchardd5360722020-05-17 16:10:36 -070013766
13767 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, input_offset) {
13768 TEST_REQUIRES_X86_AVX;
13769 for (uint32_t channels = 32; channels < 256; channels += 48) {
13770 DWConvMicrokernelTester()
13771 .cr(16)
13772 .kr(9)
13773 .channels(channels)
13774 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013775 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070013776 }
13777 }
13778
13779 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, zero) {
13780 TEST_REQUIRES_X86_AVX;
13781 for (uint32_t mz = 0; mz < 9; mz++) {
13782 for (uint32_t channels = 32; channels < 256; channels += 48) {
13783 DWConvMicrokernelTester()
13784 .cr(16)
13785 .kr(9)
13786 .channels(channels)
13787 .input_offset(304)
13788 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070013789 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070013790 }
13791 }
13792 }
Marat Dukhan1c587112020-04-08 20:04:28 -070013793#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
13794
13795
13796#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070013797 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_eq_8) {
13798 TEST_REQUIRES_X86_AVX;
13799 DWConvMicrokernelTester()
13800 .cr(8)
13801 .kr(3)
13802 .channels(8)
13803 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13804 }
13805
13806 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_div_8) {
13807 TEST_REQUIRES_X86_AVX;
13808 for (uint32_t channels = 16; channels < 128; channels += 24) {
13809 DWConvMicrokernelTester()
13810 .cr(8)
13811 .kr(3)
13812 .channels(channels)
13813 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13814 }
13815 }
13816
13817 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_div_8_with_qmin) {
13818 TEST_REQUIRES_X86_AVX;
13819 for (uint32_t channels = 16; channels < 128; channels += 24) {
13820 DWConvMicrokernelTester()
13821 .cr(8)
13822 .kr(3)
13823 .channels(channels)
13824 .qmin(128)
13825 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13826 }
13827 }
13828
13829 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_div_8_with_qmax) {
13830 TEST_REQUIRES_X86_AVX;
13831 for (uint32_t channels = 16; channels < 128; channels += 24) {
13832 DWConvMicrokernelTester()
13833 .cr(8)
13834 .kr(3)
13835 .channels(channels)
13836 .qmax(128)
13837 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13838 }
13839 }
13840
13841 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_lt_8) {
13842 TEST_REQUIRES_X86_AVX;
13843 for (uint32_t channels = 1; channels < 8; channels++) {
13844 DWConvMicrokernelTester()
13845 .cr(8)
13846 .kr(3)
13847 .channels(channels)
13848 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13849 }
13850 }
13851
13852 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_gt_8) {
13853 TEST_REQUIRES_X86_AVX;
13854 for (uint32_t channels = 9; channels < 16; channels++) {
13855 DWConvMicrokernelTester()
13856 .cr(8)
13857 .kr(3)
13858 .channels(channels)
13859 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13860 }
13861 }
13862
13863 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_gt_8_with_qmin) {
13864 TEST_REQUIRES_X86_AVX;
13865 for (uint32_t channels = 9; channels < 16; channels++) {
13866 DWConvMicrokernelTester()
13867 .cr(8)
13868 .kr(3)
13869 .channels(channels)
13870 .qmin(128)
13871 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13872 }
13873 }
13874
13875 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, c_gt_8_with_qmax) {
13876 TEST_REQUIRES_X86_AVX;
13877 for (uint32_t channels = 9; channels < 16; channels++) {
13878 DWConvMicrokernelTester()
13879 .cr(8)
13880 .kr(3)
13881 .channels(channels)
13882 .qmax(128)
13883 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13884 }
13885 }
13886
13887 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, multipixel) {
13888 TEST_REQUIRES_X86_AVX;
13889 for (size_t channels = 1; channels <= 40; channels += 7) {
13890 DWConvMicrokernelTester()
13891 .cr(8)
13892 .kr(3)
13893 .channels(channels)
13894 .width(3)
13895 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13896 }
13897 }
13898
13899 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, multipixel_with_step) {
13900 TEST_REQUIRES_X86_AVX;
13901 for (size_t channels = 1; channels <= 40; channels += 7) {
13902 for (size_t step = 2; step <= 3; step++) {
13903 DWConvMicrokernelTester()
13904 .cr(8)
13905 .kr(3)
13906 .channels(channels)
13907 .width(3)
13908 .step(step)
13909 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13910 }
13911 }
13912 }
13913
13914 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, multipixel_with_output_stride) {
13915 TEST_REQUIRES_X86_AVX;
13916 for (size_t channels = 1; channels <= 40; channels += 7) {
13917 DWConvMicrokernelTester()
13918 .cr(8)
13919 .kr(3)
13920 .channels(8)
13921 .width(5)
13922 .output_stride(43)
13923 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13924 }
13925 }
13926
13927 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, multipixel_with_qmin) {
13928 TEST_REQUIRES_X86_AVX;
13929 for (size_t channels = 1; channels <= 40; channels += 7) {
13930 DWConvMicrokernelTester()
13931 .cr(8)
13932 .kr(3)
13933 .channels(channels)
13934 .width(3)
13935 .qmin(128)
13936 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13937 }
13938 }
13939
13940 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, multipixel_with_qmax) {
13941 TEST_REQUIRES_X86_AVX;
13942 for (size_t channels = 1; channels <= 40; channels += 7) {
13943 DWConvMicrokernelTester()
13944 .cr(8)
13945 .kr(3)
13946 .channels(channels)
13947 .width(3)
13948 .qmax(128)
13949 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13950 }
13951 }
13952
13953 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, input_offset) {
13954 TEST_REQUIRES_X86_AVX;
13955 for (uint32_t channels = 16; channels < 128; channels += 24) {
13956 DWConvMicrokernelTester()
13957 .cr(8)
13958 .kr(3)
13959 .channels(channels)
13960 .input_offset(176)
13961 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx, xnn_init_f32_minmax_avx_params);
13962 }
13963 }
13964
13965 TEST(F32_DWCONV_MINMAX_UP8X3__AVX, zero) {
13966 TEST_REQUIRES_X86_AVX;
13967 for (uint32_t mz = 0; mz < 3; mz++) {
13968 for (uint32_t channels = 16; channels < 128; channels += 24) {
13969 DWConvMicrokernelTester()
13970 .cr(8)
13971 .kr(3)
13972 .channels(channels)
13973 .input_offset(176)
13974 .zero_index(mz)
13975 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__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
13983 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_eq_8) {
13984 TEST_REQUIRES_X86_AVX;
13985 DWConvMicrokernelTester()
13986 .cr(8)
13987 .kr(3)
13988 .channels(8)
13989 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
13990 }
13991
13992 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_div_8) {
13993 TEST_REQUIRES_X86_AVX;
13994 for (uint32_t channels = 16; channels < 128; channels += 24) {
13995 DWConvMicrokernelTester()
13996 .cr(8)
13997 .kr(3)
13998 .channels(channels)
13999 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14000 }
14001 }
14002
14003 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_div_8_with_qmin) {
14004 TEST_REQUIRES_X86_AVX;
14005 for (uint32_t channels = 16; channels < 128; channels += 24) {
14006 DWConvMicrokernelTester()
14007 .cr(8)
14008 .kr(3)
14009 .channels(channels)
14010 .qmin(128)
14011 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14012 }
14013 }
14014
14015 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_div_8_with_qmax) {
14016 TEST_REQUIRES_X86_AVX;
14017 for (uint32_t channels = 16; channels < 128; channels += 24) {
14018 DWConvMicrokernelTester()
14019 .cr(8)
14020 .kr(3)
14021 .channels(channels)
14022 .qmax(128)
14023 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14024 }
14025 }
14026
14027 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_lt_8) {
14028 TEST_REQUIRES_X86_AVX;
14029 for (uint32_t channels = 1; channels < 8; channels++) {
14030 DWConvMicrokernelTester()
14031 .cr(8)
14032 .kr(3)
14033 .channels(channels)
14034 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14035 }
14036 }
14037
14038 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_gt_8) {
14039 TEST_REQUIRES_X86_AVX;
14040 for (uint32_t channels = 9; channels < 16; channels++) {
14041 DWConvMicrokernelTester()
14042 .cr(8)
14043 .kr(3)
14044 .channels(channels)
14045 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14046 }
14047 }
14048
14049 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_gt_8_with_qmin) {
14050 TEST_REQUIRES_X86_AVX;
14051 for (uint32_t channels = 9; channels < 16; channels++) {
14052 DWConvMicrokernelTester()
14053 .cr(8)
14054 .kr(3)
14055 .channels(channels)
14056 .qmin(128)
14057 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14058 }
14059 }
14060
14061 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, c_gt_8_with_qmax) {
14062 TEST_REQUIRES_X86_AVX;
14063 for (uint32_t channels = 9; channels < 16; channels++) {
14064 DWConvMicrokernelTester()
14065 .cr(8)
14066 .kr(3)
14067 .channels(channels)
14068 .qmax(128)
14069 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14070 }
14071 }
14072
14073 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, multipixel) {
14074 TEST_REQUIRES_X86_AVX;
14075 for (size_t channels = 1; channels <= 40; channels += 7) {
14076 DWConvMicrokernelTester()
14077 .cr(8)
14078 .kr(3)
14079 .channels(channels)
14080 .width(3)
14081 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14082 }
14083 }
14084
14085 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, multipixel_with_step) {
14086 TEST_REQUIRES_X86_AVX;
14087 for (size_t channels = 1; channels <= 40; channels += 7) {
14088 for (size_t step = 2; step <= 3; step++) {
14089 DWConvMicrokernelTester()
14090 .cr(8)
14091 .kr(3)
14092 .channels(channels)
14093 .width(3)
14094 .step(step)
14095 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14096 }
14097 }
14098 }
14099
14100 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, multipixel_with_output_stride) {
14101 TEST_REQUIRES_X86_AVX;
14102 for (size_t channels = 1; channels <= 40; channels += 7) {
14103 DWConvMicrokernelTester()
14104 .cr(8)
14105 .kr(3)
14106 .channels(8)
14107 .width(5)
14108 .output_stride(43)
14109 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14110 }
14111 }
14112
14113 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, multipixel_with_qmin) {
14114 TEST_REQUIRES_X86_AVX;
14115 for (size_t channels = 1; channels <= 40; channels += 7) {
14116 DWConvMicrokernelTester()
14117 .cr(8)
14118 .kr(3)
14119 .channels(channels)
14120 .width(3)
14121 .qmin(128)
14122 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14123 }
14124 }
14125
14126 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, multipixel_with_qmax) {
14127 TEST_REQUIRES_X86_AVX;
14128 for (size_t channels = 1; channels <= 40; channels += 7) {
14129 DWConvMicrokernelTester()
14130 .cr(8)
14131 .kr(3)
14132 .channels(channels)
14133 .width(3)
14134 .qmax(128)
14135 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14136 }
14137 }
14138
14139 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, input_offset) {
14140 TEST_REQUIRES_X86_AVX;
14141 for (uint32_t channels = 16; channels < 128; channels += 24) {
14142 DWConvMicrokernelTester()
14143 .cr(8)
14144 .kr(3)
14145 .channels(channels)
14146 .input_offset(176)
14147 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14148 }
14149 }
14150
14151 TEST(F32_DWCONV_MINMAX_UP8X3__AVX_ACC2, zero) {
14152 TEST_REQUIRES_X86_AVX;
14153 for (uint32_t mz = 0; mz < 3; mz++) {
14154 for (uint32_t channels = 16; channels < 128; channels += 24) {
14155 DWConvMicrokernelTester()
14156 .cr(8)
14157 .kr(3)
14158 .channels(channels)
14159 .input_offset(176)
14160 .zero_index(mz)
14161 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__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
Marat Dukhande06f492020-04-09 00:19:31 -070014169 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014170 TEST_REQUIRES_X86_AVX;
14171 DWConvMicrokernelTester()
14172 .cr(8)
14173 .kr(4)
14174 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014175 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014176 }
14177
Marat Dukhande06f492020-04-09 00:19:31 -070014178 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014179 TEST_REQUIRES_X86_AVX;
14180 for (uint32_t channels = 16; channels < 128; channels += 24) {
14181 DWConvMicrokernelTester()
14182 .cr(8)
14183 .kr(4)
14184 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014185 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014186 }
14187 }
14188
Marat Dukhande06f492020-04-09 00:19:31 -070014189 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014190 TEST_REQUIRES_X86_AVX;
14191 for (uint32_t channels = 16; channels < 128; channels += 24) {
14192 DWConvMicrokernelTester()
14193 .cr(8)
14194 .kr(4)
14195 .channels(channels)
14196 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014197 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014198 }
14199 }
14200
Marat Dukhande06f492020-04-09 00:19:31 -070014201 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014202 TEST_REQUIRES_X86_AVX;
14203 for (uint32_t channels = 16; channels < 128; channels += 24) {
14204 DWConvMicrokernelTester()
14205 .cr(8)
14206 .kr(4)
14207 .channels(channels)
14208 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014209 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014210 }
14211 }
14212
Marat Dukhande06f492020-04-09 00:19:31 -070014213 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014214 TEST_REQUIRES_X86_AVX;
14215 for (uint32_t channels = 1; channels < 8; channels++) {
14216 DWConvMicrokernelTester()
14217 .cr(8)
14218 .kr(4)
14219 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014220 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014221 }
14222 }
14223
Marat Dukhande06f492020-04-09 00:19:31 -070014224 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014225 TEST_REQUIRES_X86_AVX;
14226 for (uint32_t channels = 9; channels < 16; channels++) {
14227 DWConvMicrokernelTester()
14228 .cr(8)
14229 .kr(4)
14230 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014231 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014232 }
14233 }
14234
Marat Dukhande06f492020-04-09 00:19:31 -070014235 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014236 TEST_REQUIRES_X86_AVX;
14237 for (uint32_t channels = 9; channels < 16; channels++) {
14238 DWConvMicrokernelTester()
14239 .cr(8)
14240 .kr(4)
14241 .channels(channels)
14242 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014243 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014244 }
14245 }
14246
Marat Dukhande06f492020-04-09 00:19:31 -070014247 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014248 TEST_REQUIRES_X86_AVX;
14249 for (uint32_t channels = 9; channels < 16; channels++) {
14250 DWConvMicrokernelTester()
14251 .cr(8)
14252 .kr(4)
14253 .channels(channels)
14254 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014255 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014256 }
14257 }
14258
Marat Dukhande06f492020-04-09 00:19:31 -070014259 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014260 TEST_REQUIRES_X86_AVX;
14261 for (size_t channels = 1; channels <= 40; channels += 7) {
14262 DWConvMicrokernelTester()
14263 .cr(8)
14264 .kr(4)
14265 .channels(channels)
14266 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014267 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014268 }
14269 }
14270
Marat Dukhande06f492020-04-09 00:19:31 -070014271 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014272 TEST_REQUIRES_X86_AVX;
14273 for (size_t channels = 1; channels <= 40; channels += 7) {
14274 for (size_t step = 2; step <= 4; step++) {
14275 DWConvMicrokernelTester()
14276 .cr(8)
14277 .kr(4)
14278 .channels(channels)
14279 .width(3)
14280 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014281 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014282 }
14283 }
14284 }
14285
Marat Dukhande06f492020-04-09 00:19:31 -070014286 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014287 TEST_REQUIRES_X86_AVX;
14288 for (size_t channels = 1; channels <= 40; channels += 7) {
14289 DWConvMicrokernelTester()
14290 .cr(8)
14291 .kr(4)
14292 .channels(8)
14293 .width(5)
14294 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014295 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014296 }
14297 }
14298
Marat Dukhande06f492020-04-09 00:19:31 -070014299 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014300 TEST_REQUIRES_X86_AVX;
14301 for (size_t channels = 1; channels <= 40; channels += 7) {
14302 DWConvMicrokernelTester()
14303 .cr(8)
14304 .kr(4)
14305 .channels(channels)
14306 .width(3)
14307 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014308 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014309 }
14310 }
14311
Marat Dukhande06f492020-04-09 00:19:31 -070014312 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014313 TEST_REQUIRES_X86_AVX;
14314 for (size_t channels = 1; channels <= 40; channels += 7) {
14315 DWConvMicrokernelTester()
14316 .cr(8)
14317 .kr(4)
14318 .channels(channels)
14319 .width(3)
14320 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014321 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014322 }
14323 }
Frank Barchardd5360722020-05-17 16:10:36 -070014324
14325 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, input_offset) {
14326 TEST_REQUIRES_X86_AVX;
14327 for (uint32_t channels = 16; channels < 128; channels += 24) {
14328 DWConvMicrokernelTester()
14329 .cr(8)
14330 .kr(4)
14331 .channels(channels)
14332 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014333 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070014334 }
14335 }
14336
14337 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, zero) {
14338 TEST_REQUIRES_X86_AVX;
14339 for (uint32_t mz = 0; mz < 4; mz++) {
14340 for (uint32_t channels = 16; channels < 128; channels += 24) {
14341 DWConvMicrokernelTester()
14342 .cr(8)
14343 .kr(4)
14344 .channels(channels)
14345 .input_offset(176)
14346 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014347 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070014348 }
14349 }
14350 }
Marat Dukhan1c587112020-04-08 20:04:28 -070014351#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
14352
14353
14354#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070014355 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014356 TEST_REQUIRES_X86_AVX;
14357 DWConvMicrokernelTester()
14358 .cr(8)
14359 .kr(4)
14360 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014361 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014362 }
14363
Marat Dukhande06f492020-04-09 00:19:31 -070014364 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014365 TEST_REQUIRES_X86_AVX;
14366 for (uint32_t channels = 16; channels < 128; channels += 24) {
14367 DWConvMicrokernelTester()
14368 .cr(8)
14369 .kr(4)
14370 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014371 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014372 }
14373 }
14374
Marat Dukhande06f492020-04-09 00:19:31 -070014375 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014376 TEST_REQUIRES_X86_AVX;
14377 for (uint32_t channels = 16; channels < 128; channels += 24) {
14378 DWConvMicrokernelTester()
14379 .cr(8)
14380 .kr(4)
14381 .channels(channels)
14382 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014383 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014384 }
14385 }
14386
Marat Dukhande06f492020-04-09 00:19:31 -070014387 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014388 TEST_REQUIRES_X86_AVX;
14389 for (uint32_t channels = 16; channels < 128; channels += 24) {
14390 DWConvMicrokernelTester()
14391 .cr(8)
14392 .kr(4)
14393 .channels(channels)
14394 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014395 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014396 }
14397 }
14398
Marat Dukhande06f492020-04-09 00:19:31 -070014399 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014400 TEST_REQUIRES_X86_AVX;
14401 for (uint32_t channels = 1; channels < 8; channels++) {
14402 DWConvMicrokernelTester()
14403 .cr(8)
14404 .kr(4)
14405 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014406 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014407 }
14408 }
14409
Marat Dukhande06f492020-04-09 00:19:31 -070014410 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014411 TEST_REQUIRES_X86_AVX;
14412 for (uint32_t channels = 9; channels < 16; channels++) {
14413 DWConvMicrokernelTester()
14414 .cr(8)
14415 .kr(4)
14416 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014417 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014418 }
14419 }
14420
Marat Dukhande06f492020-04-09 00:19:31 -070014421 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014422 TEST_REQUIRES_X86_AVX;
14423 for (uint32_t channels = 9; channels < 16; channels++) {
14424 DWConvMicrokernelTester()
14425 .cr(8)
14426 .kr(4)
14427 .channels(channels)
14428 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014429 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014430 }
14431 }
14432
Marat Dukhande06f492020-04-09 00:19:31 -070014433 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014434 TEST_REQUIRES_X86_AVX;
14435 for (uint32_t channels = 9; channels < 16; channels++) {
14436 DWConvMicrokernelTester()
14437 .cr(8)
14438 .kr(4)
14439 .channels(channels)
14440 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014441 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014442 }
14443 }
14444
Marat Dukhande06f492020-04-09 00:19:31 -070014445 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014446 TEST_REQUIRES_X86_AVX;
14447 for (size_t channels = 1; channels <= 40; channels += 7) {
14448 DWConvMicrokernelTester()
14449 .cr(8)
14450 .kr(4)
14451 .channels(channels)
14452 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014453 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014454 }
14455 }
14456
Marat Dukhande06f492020-04-09 00:19:31 -070014457 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014458 TEST_REQUIRES_X86_AVX;
14459 for (size_t channels = 1; channels <= 40; channels += 7) {
14460 for (size_t step = 2; step <= 4; step++) {
14461 DWConvMicrokernelTester()
14462 .cr(8)
14463 .kr(4)
14464 .channels(channels)
14465 .width(3)
14466 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014467 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014468 }
14469 }
14470 }
14471
Marat Dukhande06f492020-04-09 00:19:31 -070014472 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014473 TEST_REQUIRES_X86_AVX;
14474 for (size_t channels = 1; channels <= 40; channels += 7) {
14475 DWConvMicrokernelTester()
14476 .cr(8)
14477 .kr(4)
14478 .channels(8)
14479 .width(5)
14480 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014481 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014482 }
14483 }
14484
Marat Dukhande06f492020-04-09 00:19:31 -070014485 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014486 TEST_REQUIRES_X86_AVX;
14487 for (size_t channels = 1; channels <= 40; channels += 7) {
14488 DWConvMicrokernelTester()
14489 .cr(8)
14490 .kr(4)
14491 .channels(channels)
14492 .width(3)
14493 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014494 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014495 }
14496 }
14497
Marat Dukhande06f492020-04-09 00:19:31 -070014498 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014499 TEST_REQUIRES_X86_AVX;
14500 for (size_t channels = 1; channels <= 40; channels += 7) {
14501 DWConvMicrokernelTester()
14502 .cr(8)
14503 .kr(4)
14504 .channels(channels)
14505 .width(3)
14506 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014507 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014508 }
14509 }
Frank Barchardd5360722020-05-17 16:10:36 -070014510
14511 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, input_offset) {
14512 TEST_REQUIRES_X86_AVX;
14513 for (uint32_t channels = 16; channels < 128; channels += 24) {
14514 DWConvMicrokernelTester()
14515 .cr(8)
14516 .kr(4)
14517 .channels(channels)
14518 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014519 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070014520 }
14521 }
14522
14523 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, zero) {
14524 TEST_REQUIRES_X86_AVX;
14525 for (uint32_t mz = 0; mz < 4; mz++) {
14526 for (uint32_t channels = 16; channels < 128; channels += 24) {
14527 DWConvMicrokernelTester()
14528 .cr(8)
14529 .kr(4)
14530 .channels(channels)
14531 .input_offset(176)
14532 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014533 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070014534 }
14535 }
14536 }
Marat Dukhan1c587112020-04-08 20:04:28 -070014537#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
14538
14539
14540#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070014541 TEST(F32_DWCONV_MINMAX_UP16X3__AVX, c_eq_16) {
14542 TEST_REQUIRES_X86_AVX;
14543 DWConvMicrokernelTester()
14544 .cr(16)
14545 .kr(3)
14546 .channels(16)
14547 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14548 }
14549
14550 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14556 .channels(channels)
14557 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14558 }
14559 }
14560
14561 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14567 .channels(channels)
14568 .qmin(128)
14569 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14570 }
14571 }
14572
14573 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14579 .channels(channels)
14580 .qmax(128)
14581 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14582 }
14583 }
14584
14585 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14591 .channels(channels)
14592 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14593 }
14594 }
14595
14596 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14602 .channels(channels)
14603 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14604 }
14605 }
14606
14607 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14613 .channels(channels)
14614 .qmin(128)
14615 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14616 }
14617 }
14618
14619 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14625 .channels(channels)
14626 .qmax(128)
14627 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14628 }
14629 }
14630
14631 TEST(F32_DWCONV_MINMAX_UP16X3__AVX, multipixel) {
14632 TEST_REQUIRES_X86_AVX;
14633 for (size_t channels = 1; channels <= 80; channels += 15) {
14634 DWConvMicrokernelTester()
14635 .cr(16)
14636 .kr(3)
14637 .channels(channels)
14638 .width(3)
14639 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14640 }
14641 }
14642
14643 TEST(F32_DWCONV_MINMAX_UP16X3__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 <= 3; step++) {
14647 DWConvMicrokernelTester()
14648 .cr(16)
14649 .kr(3)
14650 .channels(channels)
14651 .width(3)
14652 .step(step)
14653 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14654 }
14655 }
14656 }
14657
14658 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14664 .channels(16)
14665 .width(5)
14666 .output_stride(83)
14667 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14668 }
14669 }
14670
14671 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14677 .channels(channels)
14678 .width(3)
14679 .qmin(128)
14680 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14681 }
14682 }
14683
14684 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14690 .channels(channels)
14691 .width(3)
14692 .qmax(128)
14693 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14694 }
14695 }
14696
14697 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14703 .channels(channels)
14704 .input_offset(304)
14705 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx, xnn_init_f32_minmax_avx_params);
14706 }
14707 }
14708
14709 TEST(F32_DWCONV_MINMAX_UP16X3__AVX, zero) {
14710 TEST_REQUIRES_X86_AVX;
14711 for (uint32_t mz = 0; mz < 3; mz++) {
14712 for (uint32_t channels = 32; channels < 256; channels += 48) {
14713 DWConvMicrokernelTester()
14714 .cr(16)
14715 .kr(3)
14716 .channels(channels)
14717 .input_offset(304)
14718 .zero_index(mz)
14719 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__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
14727 TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, c_eq_16) {
14728 TEST_REQUIRES_X86_AVX;
14729 DWConvMicrokernelTester()
14730 .cr(16)
14731 .kr(3)
14732 .channels(16)
14733 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14734 }
14735
14736 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14742 .channels(channels)
14743 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14744 }
14745 }
14746
14747 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14753 .channels(channels)
14754 .qmin(128)
14755 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14756 }
14757 }
14758
14759 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14765 .channels(channels)
14766 .qmax(128)
14767 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14768 }
14769 }
14770
14771 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14777 .channels(channels)
14778 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14779 }
14780 }
14781
14782 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14788 .channels(channels)
14789 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14790 }
14791 }
14792
14793 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14799 .channels(channels)
14800 .qmin(128)
14801 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14802 }
14803 }
14804
14805 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14811 .channels(channels)
14812 .qmax(128)
14813 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14814 }
14815 }
14816
14817 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14823 .channels(channels)
14824 .width(3)
14825 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14826 }
14827 }
14828
14829 TEST(F32_DWCONV_MINMAX_UP16X3__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 <= 3; step++) {
14833 DWConvMicrokernelTester()
14834 .cr(16)
14835 .kr(3)
14836 .channels(channels)
14837 .width(3)
14838 .step(step)
14839 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14840 }
14841 }
14842 }
14843
14844 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14850 .channels(16)
14851 .width(5)
14852 .output_stride(83)
14853 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14854 }
14855 }
14856
14857 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14863 .channels(channels)
14864 .width(3)
14865 .qmin(128)
14866 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14867 }
14868 }
14869
14870 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14876 .channels(channels)
14877 .width(3)
14878 .qmax(128)
14879 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14880 }
14881 }
14882
14883 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
14889 .channels(channels)
14890 .input_offset(304)
14891 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx_acc2, xnn_init_f32_minmax_avx_params);
14892 }
14893 }
14894
14895 TEST(F32_DWCONV_MINMAX_UP16X3__AVX_ACC2, zero) {
14896 TEST_REQUIRES_X86_AVX;
14897 for (uint32_t mz = 0; mz < 3; mz++) {
14898 for (uint32_t channels = 32; channels < 256; channels += 48) {
14899 DWConvMicrokernelTester()
14900 .cr(16)
14901 .kr(3)
14902 .channels(channels)
14903 .input_offset(304)
14904 .zero_index(mz)
14905 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__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
Marat Dukhande06f492020-04-09 00:19:31 -070014913 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014914 TEST_REQUIRES_X86_AVX;
14915 DWConvMicrokernelTester()
14916 .cr(16)
14917 .kr(4)
14918 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014919 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014920 }
14921
Marat Dukhande06f492020-04-09 00:19:31 -070014922 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014923 TEST_REQUIRES_X86_AVX;
14924 for (uint32_t channels = 32; channels < 256; channels += 48) {
14925 DWConvMicrokernelTester()
14926 .cr(16)
14927 .kr(4)
14928 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014929 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014930 }
14931 }
14932
Marat Dukhande06f492020-04-09 00:19:31 -070014933 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014934 TEST_REQUIRES_X86_AVX;
14935 for (uint32_t channels = 32; channels < 256; channels += 48) {
14936 DWConvMicrokernelTester()
14937 .cr(16)
14938 .kr(4)
14939 .channels(channels)
14940 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014941 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014942 }
14943 }
14944
Marat Dukhande06f492020-04-09 00:19:31 -070014945 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014946 TEST_REQUIRES_X86_AVX;
14947 for (uint32_t channels = 32; channels < 256; channels += 48) {
14948 DWConvMicrokernelTester()
14949 .cr(16)
14950 .kr(4)
14951 .channels(channels)
14952 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014953 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014954 }
14955 }
14956
Marat Dukhande06f492020-04-09 00:19:31 -070014957 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014958 TEST_REQUIRES_X86_AVX;
14959 for (uint32_t channels = 1; channels < 16; channels++) {
14960 DWConvMicrokernelTester()
14961 .cr(16)
14962 .kr(4)
14963 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014964 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014965 }
14966 }
14967
Marat Dukhande06f492020-04-09 00:19:31 -070014968 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014969 TEST_REQUIRES_X86_AVX;
14970 for (uint32_t channels = 17; channels < 32; channels++) {
14971 DWConvMicrokernelTester()
14972 .cr(16)
14973 .kr(4)
14974 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014975 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014976 }
14977 }
14978
Marat Dukhande06f492020-04-09 00:19:31 -070014979 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014980 TEST_REQUIRES_X86_AVX;
14981 for (uint32_t channels = 17; channels < 32; channels++) {
14982 DWConvMicrokernelTester()
14983 .cr(16)
14984 .kr(4)
14985 .channels(channels)
14986 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014987 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070014988 }
14989 }
14990
Marat Dukhande06f492020-04-09 00:19:31 -070014991 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014992 TEST_REQUIRES_X86_AVX;
14993 for (uint32_t channels = 17; channels < 32; channels++) {
14994 DWConvMicrokernelTester()
14995 .cr(16)
14996 .kr(4)
14997 .channels(channels)
14998 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070014999 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015000 }
15001 }
15002
Marat Dukhande06f492020-04-09 00:19:31 -070015003 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015004 TEST_REQUIRES_X86_AVX;
15005 for (size_t channels = 1; channels <= 80; channels += 15) {
15006 DWConvMicrokernelTester()
15007 .cr(16)
15008 .kr(4)
15009 .channels(channels)
15010 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015011 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015012 }
15013 }
15014
Marat Dukhande06f492020-04-09 00:19:31 -070015015 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015016 TEST_REQUIRES_X86_AVX;
15017 for (size_t channels = 1; channels <= 80; channels += 15) {
15018 for (size_t step = 2; step <= 4; step++) {
15019 DWConvMicrokernelTester()
15020 .cr(16)
15021 .kr(4)
15022 .channels(channels)
15023 .width(3)
15024 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015025 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015026 }
15027 }
15028 }
15029
Marat Dukhande06f492020-04-09 00:19:31 -070015030 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015031 TEST_REQUIRES_X86_AVX;
15032 for (size_t channels = 1; channels <= 80; channels += 15) {
15033 DWConvMicrokernelTester()
15034 .cr(16)
15035 .kr(4)
15036 .channels(16)
15037 .width(5)
15038 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015039 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015040 }
15041 }
15042
Marat Dukhande06f492020-04-09 00:19:31 -070015043 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015044 TEST_REQUIRES_X86_AVX;
15045 for (size_t channels = 1; channels <= 80; channels += 15) {
15046 DWConvMicrokernelTester()
15047 .cr(16)
15048 .kr(4)
15049 .channels(channels)
15050 .width(3)
15051 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015052 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015053 }
15054 }
15055
Marat Dukhande06f492020-04-09 00:19:31 -070015056 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015057 TEST_REQUIRES_X86_AVX;
15058 for (size_t channels = 1; channels <= 80; channels += 15) {
15059 DWConvMicrokernelTester()
15060 .cr(16)
15061 .kr(4)
15062 .channels(channels)
15063 .width(3)
15064 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015065 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015066 }
15067 }
Frank Barchardd5360722020-05-17 16:10:36 -070015068
15069 TEST(F32_DWCONV_MINMAX_UP16X4__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(4)
15075 .channels(channels)
15076 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015077 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070015078 }
15079 }
15080
15081 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, zero) {
15082 TEST_REQUIRES_X86_AVX;
15083 for (uint32_t mz = 0; mz < 4; mz++) {
15084 for (uint32_t channels = 32; channels < 256; channels += 48) {
15085 DWConvMicrokernelTester()
15086 .cr(16)
15087 .kr(4)
15088 .channels(channels)
15089 .input_offset(304)
15090 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015091 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070015092 }
15093 }
15094 }
Marat Dukhan1c587112020-04-08 20:04:28 -070015095#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
15096
15097
15098#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070015099 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015100 TEST_REQUIRES_X86_AVX;
15101 DWConvMicrokernelTester()
15102 .cr(16)
15103 .kr(4)
15104 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015105 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015106 }
15107
Marat Dukhande06f492020-04-09 00:19:31 -070015108 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015109 TEST_REQUIRES_X86_AVX;
15110 for (uint32_t channels = 32; channels < 256; channels += 48) {
15111 DWConvMicrokernelTester()
15112 .cr(16)
15113 .kr(4)
15114 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015115 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015116 }
15117 }
15118
Marat Dukhande06f492020-04-09 00:19:31 -070015119 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015120 TEST_REQUIRES_X86_AVX;
15121 for (uint32_t channels = 32; channels < 256; channels += 48) {
15122 DWConvMicrokernelTester()
15123 .cr(16)
15124 .kr(4)
15125 .channels(channels)
15126 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015127 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015128 }
15129 }
15130
Marat Dukhande06f492020-04-09 00:19:31 -070015131 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015132 TEST_REQUIRES_X86_AVX;
15133 for (uint32_t channels = 32; channels < 256; channels += 48) {
15134 DWConvMicrokernelTester()
15135 .cr(16)
15136 .kr(4)
15137 .channels(channels)
15138 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015139 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015140 }
15141 }
15142
Marat Dukhande06f492020-04-09 00:19:31 -070015143 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015144 TEST_REQUIRES_X86_AVX;
15145 for (uint32_t channels = 1; channels < 16; channels++) {
15146 DWConvMicrokernelTester()
15147 .cr(16)
15148 .kr(4)
15149 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015150 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015151 }
15152 }
15153
Marat Dukhande06f492020-04-09 00:19:31 -070015154 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015155 TEST_REQUIRES_X86_AVX;
15156 for (uint32_t channels = 17; channels < 32; channels++) {
15157 DWConvMicrokernelTester()
15158 .cr(16)
15159 .kr(4)
15160 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015161 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015162 }
15163 }
15164
Marat Dukhande06f492020-04-09 00:19:31 -070015165 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015166 TEST_REQUIRES_X86_AVX;
15167 for (uint32_t channels = 17; channels < 32; channels++) {
15168 DWConvMicrokernelTester()
15169 .cr(16)
15170 .kr(4)
15171 .channels(channels)
15172 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015173 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015174 }
15175 }
15176
Marat Dukhande06f492020-04-09 00:19:31 -070015177 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015178 TEST_REQUIRES_X86_AVX;
15179 for (uint32_t channels = 17; channels < 32; channels++) {
15180 DWConvMicrokernelTester()
15181 .cr(16)
15182 .kr(4)
15183 .channels(channels)
15184 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015185 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015186 }
15187 }
15188
Marat Dukhande06f492020-04-09 00:19:31 -070015189 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015190 TEST_REQUIRES_X86_AVX;
15191 for (size_t channels = 1; channels <= 80; channels += 15) {
15192 DWConvMicrokernelTester()
15193 .cr(16)
15194 .kr(4)
15195 .channels(channels)
15196 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015197 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015198 }
15199 }
15200
Marat Dukhande06f492020-04-09 00:19:31 -070015201 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015202 TEST_REQUIRES_X86_AVX;
15203 for (size_t channels = 1; channels <= 80; channels += 15) {
15204 for (size_t step = 2; step <= 4; step++) {
15205 DWConvMicrokernelTester()
15206 .cr(16)
15207 .kr(4)
15208 .channels(channels)
15209 .width(3)
15210 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015211 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015212 }
15213 }
15214 }
15215
Marat Dukhande06f492020-04-09 00:19:31 -070015216 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015217 TEST_REQUIRES_X86_AVX;
15218 for (size_t channels = 1; channels <= 80; channels += 15) {
15219 DWConvMicrokernelTester()
15220 .cr(16)
15221 .kr(4)
15222 .channels(16)
15223 .width(5)
15224 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015225 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015226 }
15227 }
15228
Marat Dukhande06f492020-04-09 00:19:31 -070015229 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015230 TEST_REQUIRES_X86_AVX;
15231 for (size_t channels = 1; channels <= 80; channels += 15) {
15232 DWConvMicrokernelTester()
15233 .cr(16)
15234 .kr(4)
15235 .channels(channels)
15236 .width(3)
15237 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015238 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015239 }
15240 }
15241
Marat Dukhande06f492020-04-09 00:19:31 -070015242 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015243 TEST_REQUIRES_X86_AVX;
15244 for (size_t channels = 1; channels <= 80; channels += 15) {
15245 DWConvMicrokernelTester()
15246 .cr(16)
15247 .kr(4)
15248 .channels(channels)
15249 .width(3)
15250 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015251 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015252 }
15253 }
Frank Barchardd5360722020-05-17 16:10:36 -070015254
15255 TEST(F32_DWCONV_MINMAX_UP16X4__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(4)
15261 .channels(channels)
15262 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015263 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070015264 }
15265 }
15266
15267 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, zero) {
15268 TEST_REQUIRES_X86_AVX;
15269 for (uint32_t mz = 0; mz < 4; mz++) {
15270 for (uint32_t channels = 32; channels < 256; channels += 48) {
15271 DWConvMicrokernelTester()
15272 .cr(16)
15273 .kr(4)
15274 .channels(channels)
15275 .input_offset(304)
15276 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015277 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070015278 }
15279 }
15280 }
Marat Dukhan1c587112020-04-08 20:04:28 -070015281#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
15282
15283
15284#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070015285 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015286 TEST_REQUIRES_X86_FMA3;
15287 DWConvMicrokernelTester()
15288 .cr(8)
15289 .kr(25)
15290 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015291 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015292 }
15293
Marat Dukhande06f492020-04-09 00:19:31 -070015294 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015295 TEST_REQUIRES_X86_FMA3;
15296 for (uint32_t channels = 16; channels < 128; channels += 24) {
15297 DWConvMicrokernelTester()
15298 .cr(8)
15299 .kr(25)
15300 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015301 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015302 }
15303 }
15304
Marat Dukhande06f492020-04-09 00:19:31 -070015305 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015306 TEST_REQUIRES_X86_FMA3;
15307 for (uint32_t channels = 16; channels < 128; channels += 24) {
15308 DWConvMicrokernelTester()
15309 .cr(8)
15310 .kr(25)
15311 .channels(channels)
15312 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015313 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015314 }
15315 }
15316
Marat Dukhande06f492020-04-09 00:19:31 -070015317 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015318 TEST_REQUIRES_X86_FMA3;
15319 for (uint32_t channels = 16; channels < 128; channels += 24) {
15320 DWConvMicrokernelTester()
15321 .cr(8)
15322 .kr(25)
15323 .channels(channels)
15324 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015325 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015326 }
15327 }
15328
Marat Dukhande06f492020-04-09 00:19:31 -070015329 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015330 TEST_REQUIRES_X86_FMA3;
15331 for (uint32_t channels = 1; channels < 8; channels++) {
15332 DWConvMicrokernelTester()
15333 .cr(8)
15334 .kr(25)
15335 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015336 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015337 }
15338 }
15339
Marat Dukhande06f492020-04-09 00:19:31 -070015340 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015341 TEST_REQUIRES_X86_FMA3;
15342 for (uint32_t channels = 9; channels < 16; channels++) {
15343 DWConvMicrokernelTester()
15344 .cr(8)
15345 .kr(25)
15346 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015347 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015348 }
15349 }
15350
Marat Dukhande06f492020-04-09 00:19:31 -070015351 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015352 TEST_REQUIRES_X86_FMA3;
15353 for (uint32_t channels = 9; channels < 16; channels++) {
15354 DWConvMicrokernelTester()
15355 .cr(8)
15356 .kr(25)
15357 .channels(channels)
15358 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015359 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015360 }
15361 }
15362
Marat Dukhande06f492020-04-09 00:19:31 -070015363 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015364 TEST_REQUIRES_X86_FMA3;
15365 for (uint32_t channels = 9; channels < 16; channels++) {
15366 DWConvMicrokernelTester()
15367 .cr(8)
15368 .kr(25)
15369 .channels(channels)
15370 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015371 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015372 }
15373 }
15374
Marat Dukhande06f492020-04-09 00:19:31 -070015375 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015376 TEST_REQUIRES_X86_FMA3;
15377 for (size_t channels = 1; channels <= 40; channels += 7) {
15378 DWConvMicrokernelTester()
15379 .cr(8)
15380 .kr(25)
15381 .channels(channels)
15382 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015383 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015384 }
15385 }
15386
Marat Dukhande06f492020-04-09 00:19:31 -070015387 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015388 TEST_REQUIRES_X86_FMA3;
15389 for (size_t channels = 1; channels <= 40; channels += 7) {
15390 for (size_t step = 2; step <= 25; step++) {
15391 DWConvMicrokernelTester()
15392 .cr(8)
15393 .kr(25)
15394 .channels(channels)
15395 .width(3)
15396 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015397 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015398 }
15399 }
15400 }
15401
Marat Dukhande06f492020-04-09 00:19:31 -070015402 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015403 TEST_REQUIRES_X86_FMA3;
15404 for (size_t channels = 1; channels <= 40; channels += 7) {
15405 DWConvMicrokernelTester()
15406 .cr(8)
15407 .kr(25)
15408 .channels(8)
15409 .width(5)
15410 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015411 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015412 }
15413 }
15414
Marat Dukhande06f492020-04-09 00:19:31 -070015415 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015416 TEST_REQUIRES_X86_FMA3;
15417 for (size_t channels = 1; channels <= 40; channels += 7) {
15418 DWConvMicrokernelTester()
15419 .cr(8)
15420 .kr(25)
15421 .channels(channels)
15422 .width(3)
15423 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015424 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015425 }
15426 }
15427
Marat Dukhande06f492020-04-09 00:19:31 -070015428 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015429 TEST_REQUIRES_X86_FMA3;
15430 for (size_t channels = 1; channels <= 40; channels += 7) {
15431 DWConvMicrokernelTester()
15432 .cr(8)
15433 .kr(25)
15434 .channels(channels)
15435 .width(3)
15436 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015437 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015438 }
15439 }
Frank Barchardd5360722020-05-17 16:10:36 -070015440
15441 TEST(F32_DWCONV_MINMAX_UP8X25__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(25)
15447 .channels(channels)
15448 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015449 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070015450 }
15451 }
15452
15453 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, zero) {
15454 TEST_REQUIRES_X86_FMA3;
15455 for (uint32_t mz = 0; mz < 25; mz++) {
15456 for (uint32_t channels = 16; channels < 128; channels += 24) {
15457 DWConvMicrokernelTester()
15458 .cr(8)
15459 .kr(25)
15460 .channels(channels)
15461 .input_offset(176)
15462 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015463 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070015464 }
15465 }
15466 }
Marat Dukhan1c587112020-04-08 20:04:28 -070015467#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
15468
15469
15470#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070015471 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015472 TEST_REQUIRES_X86_FMA3;
15473 DWConvMicrokernelTester()
15474 .cr(8)
15475 .kr(25)
15476 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015477 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015478 }
15479
Marat Dukhande06f492020-04-09 00:19:31 -070015480 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015481 TEST_REQUIRES_X86_FMA3;
15482 for (uint32_t channels = 16; channels < 128; channels += 24) {
15483 DWConvMicrokernelTester()
15484 .cr(8)
15485 .kr(25)
15486 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015487 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015488 }
15489 }
15490
Marat Dukhande06f492020-04-09 00:19:31 -070015491 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015492 TEST_REQUIRES_X86_FMA3;
15493 for (uint32_t channels = 16; channels < 128; channels += 24) {
15494 DWConvMicrokernelTester()
15495 .cr(8)
15496 .kr(25)
15497 .channels(channels)
15498 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015499 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015500 }
15501 }
15502
Marat Dukhande06f492020-04-09 00:19:31 -070015503 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015504 TEST_REQUIRES_X86_FMA3;
15505 for (uint32_t channels = 16; channels < 128; channels += 24) {
15506 DWConvMicrokernelTester()
15507 .cr(8)
15508 .kr(25)
15509 .channels(channels)
15510 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015511 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015512 }
15513 }
15514
Marat Dukhande06f492020-04-09 00:19:31 -070015515 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015516 TEST_REQUIRES_X86_FMA3;
15517 for (uint32_t channels = 1; channels < 8; channels++) {
15518 DWConvMicrokernelTester()
15519 .cr(8)
15520 .kr(25)
15521 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015522 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015523 }
15524 }
15525
Marat Dukhande06f492020-04-09 00:19:31 -070015526 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015527 TEST_REQUIRES_X86_FMA3;
15528 for (uint32_t channels = 9; channels < 16; channels++) {
15529 DWConvMicrokernelTester()
15530 .cr(8)
15531 .kr(25)
15532 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015533 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015534 }
15535 }
15536
Marat Dukhande06f492020-04-09 00:19:31 -070015537 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015538 TEST_REQUIRES_X86_FMA3;
15539 for (uint32_t channels = 9; channels < 16; channels++) {
15540 DWConvMicrokernelTester()
15541 .cr(8)
15542 .kr(25)
15543 .channels(channels)
15544 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015545 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015546 }
15547 }
15548
Marat Dukhande06f492020-04-09 00:19:31 -070015549 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015550 TEST_REQUIRES_X86_FMA3;
15551 for (uint32_t channels = 9; channels < 16; channels++) {
15552 DWConvMicrokernelTester()
15553 .cr(8)
15554 .kr(25)
15555 .channels(channels)
15556 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015557 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015558 }
15559 }
15560
Marat Dukhande06f492020-04-09 00:19:31 -070015561 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015562 TEST_REQUIRES_X86_FMA3;
15563 for (size_t channels = 1; channels <= 40; channels += 7) {
15564 DWConvMicrokernelTester()
15565 .cr(8)
15566 .kr(25)
15567 .channels(channels)
15568 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015569 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015570 }
15571 }
15572
Marat Dukhande06f492020-04-09 00:19:31 -070015573 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015574 TEST_REQUIRES_X86_FMA3;
15575 for (size_t channels = 1; channels <= 40; channels += 7) {
15576 for (size_t step = 2; step <= 25; step++) {
15577 DWConvMicrokernelTester()
15578 .cr(8)
15579 .kr(25)
15580 .channels(channels)
15581 .width(3)
15582 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015583 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015584 }
15585 }
15586 }
15587
Marat Dukhande06f492020-04-09 00:19:31 -070015588 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015589 TEST_REQUIRES_X86_FMA3;
15590 for (size_t channels = 1; channels <= 40; channels += 7) {
15591 DWConvMicrokernelTester()
15592 .cr(8)
15593 .kr(25)
15594 .channels(8)
15595 .width(5)
15596 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015597 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015598 }
15599 }
15600
Marat Dukhande06f492020-04-09 00:19:31 -070015601 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015602 TEST_REQUIRES_X86_FMA3;
15603 for (size_t channels = 1; channels <= 40; channels += 7) {
15604 DWConvMicrokernelTester()
15605 .cr(8)
15606 .kr(25)
15607 .channels(channels)
15608 .width(3)
15609 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015610 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015611 }
15612 }
15613
Marat Dukhande06f492020-04-09 00:19:31 -070015614 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015615 TEST_REQUIRES_X86_FMA3;
15616 for (size_t channels = 1; channels <= 40; channels += 7) {
15617 DWConvMicrokernelTester()
15618 .cr(8)
15619 .kr(25)
15620 .channels(channels)
15621 .width(3)
15622 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015623 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015624 }
15625 }
Frank Barchardd5360722020-05-17 16:10:36 -070015626
15627 TEST(F32_DWCONV_MINMAX_UP8X25__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(25)
15633 .channels(channels)
15634 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015635 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070015636 }
15637 }
15638
15639 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, zero) {
15640 TEST_REQUIRES_X86_FMA3;
15641 for (uint32_t mz = 0; mz < 25; mz++) {
15642 for (uint32_t channels = 16; channels < 128; channels += 24) {
15643 DWConvMicrokernelTester()
15644 .cr(8)
15645 .kr(25)
15646 .channels(channels)
15647 .input_offset(176)
15648 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015649 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070015650 }
15651 }
15652 }
Marat Dukhan1c587112020-04-08 20:04:28 -070015653#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
15654
15655
15656#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070015657 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015658 TEST_REQUIRES_X86_FMA3;
15659 DWConvMicrokernelTester()
15660 .cr(16)
15661 .kr(25)
15662 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015663 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015664 }
15665
Marat Dukhande06f492020-04-09 00:19:31 -070015666 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015667 TEST_REQUIRES_X86_FMA3;
15668 for (uint32_t channels = 32; channels < 256; channels += 48) {
15669 DWConvMicrokernelTester()
15670 .cr(16)
15671 .kr(25)
15672 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015673 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015674 }
15675 }
15676
Marat Dukhande06f492020-04-09 00:19:31 -070015677 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015678 TEST_REQUIRES_X86_FMA3;
15679 for (uint32_t channels = 32; channels < 256; channels += 48) {
15680 DWConvMicrokernelTester()
15681 .cr(16)
15682 .kr(25)
15683 .channels(channels)
15684 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015685 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015686 }
15687 }
15688
Marat Dukhande06f492020-04-09 00:19:31 -070015689 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015690 TEST_REQUIRES_X86_FMA3;
15691 for (uint32_t channels = 32; channels < 256; channels += 48) {
15692 DWConvMicrokernelTester()
15693 .cr(16)
15694 .kr(25)
15695 .channels(channels)
15696 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015697 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015698 }
15699 }
15700
Marat Dukhande06f492020-04-09 00:19:31 -070015701 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015702 TEST_REQUIRES_X86_FMA3;
15703 for (uint32_t channels = 1; channels < 16; channels++) {
15704 DWConvMicrokernelTester()
15705 .cr(16)
15706 .kr(25)
15707 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015708 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015709 }
15710 }
15711
Marat Dukhande06f492020-04-09 00:19:31 -070015712 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015713 TEST_REQUIRES_X86_FMA3;
15714 for (uint32_t channels = 17; channels < 32; channels++) {
15715 DWConvMicrokernelTester()
15716 .cr(16)
15717 .kr(25)
15718 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015719 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015720 }
15721 }
15722
Marat Dukhande06f492020-04-09 00:19:31 -070015723 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015724 TEST_REQUIRES_X86_FMA3;
15725 for (uint32_t channels = 17; channels < 32; channels++) {
15726 DWConvMicrokernelTester()
15727 .cr(16)
15728 .kr(25)
15729 .channels(channels)
15730 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015731 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015732 }
15733 }
15734
Marat Dukhande06f492020-04-09 00:19:31 -070015735 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015736 TEST_REQUIRES_X86_FMA3;
15737 for (uint32_t channels = 17; channels < 32; channels++) {
15738 DWConvMicrokernelTester()
15739 .cr(16)
15740 .kr(25)
15741 .channels(channels)
15742 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015743 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015744 }
15745 }
15746
Marat Dukhande06f492020-04-09 00:19:31 -070015747 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015748 TEST_REQUIRES_X86_FMA3;
15749 for (size_t channels = 1; channels <= 80; channels += 15) {
15750 DWConvMicrokernelTester()
15751 .cr(16)
15752 .kr(25)
15753 .channels(channels)
15754 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015755 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015756 }
15757 }
15758
Marat Dukhande06f492020-04-09 00:19:31 -070015759 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015760 TEST_REQUIRES_X86_FMA3;
15761 for (size_t channels = 1; channels <= 80; channels += 15) {
15762 for (size_t step = 2; step <= 25; step++) {
15763 DWConvMicrokernelTester()
15764 .cr(16)
15765 .kr(25)
15766 .channels(channels)
15767 .width(3)
15768 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015769 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015770 }
15771 }
15772 }
15773
Marat Dukhande06f492020-04-09 00:19:31 -070015774 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015775 TEST_REQUIRES_X86_FMA3;
15776 for (size_t channels = 1; channels <= 80; channels += 15) {
15777 DWConvMicrokernelTester()
15778 .cr(16)
15779 .kr(25)
15780 .channels(16)
15781 .width(5)
15782 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015783 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015784 }
15785 }
15786
Marat Dukhande06f492020-04-09 00:19:31 -070015787 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015788 TEST_REQUIRES_X86_FMA3;
15789 for (size_t channels = 1; channels <= 80; channels += 15) {
15790 DWConvMicrokernelTester()
15791 .cr(16)
15792 .kr(25)
15793 .channels(channels)
15794 .width(3)
15795 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015796 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015797 }
15798 }
15799
Marat Dukhande06f492020-04-09 00:19:31 -070015800 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015801 TEST_REQUIRES_X86_FMA3;
15802 for (size_t channels = 1; channels <= 80; channels += 15) {
15803 DWConvMicrokernelTester()
15804 .cr(16)
15805 .kr(25)
15806 .channels(channels)
15807 .width(3)
15808 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015809 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015810 }
15811 }
Frank Barchardd5360722020-05-17 16:10:36 -070015812
15813 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, input_offset) {
15814 TEST_REQUIRES_X86_FMA3;
15815 for (uint32_t channels = 32; channels < 256; channels += 48) {
15816 DWConvMicrokernelTester()
15817 .cr(16)
15818 .kr(25)
15819 .channels(channels)
15820 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015821 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070015822 }
15823 }
15824
15825 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, zero) {
15826 TEST_REQUIRES_X86_FMA3;
15827 for (uint32_t mz = 0; mz < 25; mz++) {
15828 for (uint32_t channels = 32; channels < 256; channels += 48) {
15829 DWConvMicrokernelTester()
15830 .cr(16)
15831 .kr(25)
15832 .channels(channels)
15833 .input_offset(304)
15834 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015835 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070015836 }
15837 }
15838 }
Marat Dukhan1c587112020-04-08 20:04:28 -070015839#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
15840
15841
15842#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070015843 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015844 TEST_REQUIRES_X86_FMA3;
15845 DWConvMicrokernelTester()
15846 .cr(16)
15847 .kr(25)
15848 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015849 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015850 }
15851
Marat Dukhande06f492020-04-09 00:19:31 -070015852 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015853 TEST_REQUIRES_X86_FMA3;
15854 for (uint32_t channels = 32; channels < 256; channels += 48) {
15855 DWConvMicrokernelTester()
15856 .cr(16)
15857 .kr(25)
15858 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015859 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015860 }
15861 }
15862
Marat Dukhande06f492020-04-09 00:19:31 -070015863 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015864 TEST_REQUIRES_X86_FMA3;
15865 for (uint32_t channels = 32; channels < 256; channels += 48) {
15866 DWConvMicrokernelTester()
15867 .cr(16)
15868 .kr(25)
15869 .channels(channels)
15870 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015871 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015872 }
15873 }
15874
Marat Dukhande06f492020-04-09 00:19:31 -070015875 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015876 TEST_REQUIRES_X86_FMA3;
15877 for (uint32_t channels = 32; channels < 256; channels += 48) {
15878 DWConvMicrokernelTester()
15879 .cr(16)
15880 .kr(25)
15881 .channels(channels)
15882 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015883 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015884 }
15885 }
15886
Marat Dukhande06f492020-04-09 00:19:31 -070015887 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015888 TEST_REQUIRES_X86_FMA3;
15889 for (uint32_t channels = 1; channels < 16; channels++) {
15890 DWConvMicrokernelTester()
15891 .cr(16)
15892 .kr(25)
15893 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015894 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015895 }
15896 }
15897
Marat Dukhande06f492020-04-09 00:19:31 -070015898 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015899 TEST_REQUIRES_X86_FMA3;
15900 for (uint32_t channels = 17; channels < 32; channels++) {
15901 DWConvMicrokernelTester()
15902 .cr(16)
15903 .kr(25)
15904 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015905 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015906 }
15907 }
15908
Marat Dukhande06f492020-04-09 00:19:31 -070015909 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015910 TEST_REQUIRES_X86_FMA3;
15911 for (uint32_t channels = 17; channels < 32; channels++) {
15912 DWConvMicrokernelTester()
15913 .cr(16)
15914 .kr(25)
15915 .channels(channels)
15916 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015917 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015918 }
15919 }
15920
Marat Dukhande06f492020-04-09 00:19:31 -070015921 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015922 TEST_REQUIRES_X86_FMA3;
15923 for (uint32_t channels = 17; channels < 32; channels++) {
15924 DWConvMicrokernelTester()
15925 .cr(16)
15926 .kr(25)
15927 .channels(channels)
15928 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015929 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015930 }
15931 }
15932
Marat Dukhande06f492020-04-09 00:19:31 -070015933 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015934 TEST_REQUIRES_X86_FMA3;
15935 for (size_t channels = 1; channels <= 80; channels += 15) {
15936 DWConvMicrokernelTester()
15937 .cr(16)
15938 .kr(25)
15939 .channels(channels)
15940 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015941 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015942 }
15943 }
15944
Marat Dukhande06f492020-04-09 00:19:31 -070015945 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015946 TEST_REQUIRES_X86_FMA3;
15947 for (size_t channels = 1; channels <= 80; channels += 15) {
15948 for (size_t step = 2; step <= 25; step++) {
15949 DWConvMicrokernelTester()
15950 .cr(16)
15951 .kr(25)
15952 .channels(channels)
15953 .width(3)
15954 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015955 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015956 }
15957 }
15958 }
15959
Marat Dukhande06f492020-04-09 00:19:31 -070015960 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015961 TEST_REQUIRES_X86_FMA3;
15962 for (size_t channels = 1; channels <= 80; channels += 15) {
15963 DWConvMicrokernelTester()
15964 .cr(16)
15965 .kr(25)
15966 .channels(16)
15967 .width(5)
15968 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015969 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015970 }
15971 }
15972
Marat Dukhande06f492020-04-09 00:19:31 -070015973 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015974 TEST_REQUIRES_X86_FMA3;
15975 for (size_t channels = 1; channels <= 80; channels += 15) {
15976 DWConvMicrokernelTester()
15977 .cr(16)
15978 .kr(25)
15979 .channels(channels)
15980 .width(3)
15981 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015982 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015983 }
15984 }
15985
Marat Dukhande06f492020-04-09 00:19:31 -070015986 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015987 TEST_REQUIRES_X86_FMA3;
15988 for (size_t channels = 1; channels <= 80; channels += 15) {
15989 DWConvMicrokernelTester()
15990 .cr(16)
15991 .kr(25)
15992 .channels(channels)
15993 .width(3)
15994 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070015995 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070015996 }
15997 }
Frank Barchardd5360722020-05-17 16:10:36 -070015998
15999 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, input_offset) {
16000 TEST_REQUIRES_X86_FMA3;
16001 for (uint32_t channels = 32; channels < 256; channels += 48) {
16002 DWConvMicrokernelTester()
16003 .cr(16)
16004 .kr(25)
16005 .channels(channels)
16006 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016007 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070016008 }
16009 }
16010
16011 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, zero) {
16012 TEST_REQUIRES_X86_FMA3;
16013 for (uint32_t mz = 0; mz < 25; mz++) {
16014 for (uint32_t channels = 32; channels < 256; channels += 48) {
16015 DWConvMicrokernelTester()
16016 .cr(16)
16017 .kr(25)
16018 .channels(channels)
16019 .input_offset(304)
16020 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016021 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070016022 }
16023 }
16024 }
Marat Dukhan1c587112020-04-08 20:04:28 -070016025#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
16026
16027
16028#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070016029 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016030 TEST_REQUIRES_X86_FMA3;
16031 DWConvMicrokernelTester()
16032 .cr(8)
16033 .kr(9)
16034 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016035 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016036 }
16037
Marat Dukhande06f492020-04-09 00:19:31 -070016038 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016039 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016045 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016046 }
16047 }
16048
Marat Dukhande06f492020-04-09 00:19:31 -070016049 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016050 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016057 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016058 }
16059 }
16060
Marat Dukhande06f492020-04-09 00:19:31 -070016061 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016062 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016069 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016070 }
16071 }
16072
Marat Dukhande06f492020-04-09 00:19:31 -070016073 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016074 TEST_REQUIRES_X86_FMA3;
16075 for (uint32_t channels = 1; channels < 8; channels++) {
16076 DWConvMicrokernelTester()
16077 .cr(8)
16078 .kr(9)
16079 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016080 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016081 }
16082 }
16083
Marat Dukhande06f492020-04-09 00:19:31 -070016084 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016085 TEST_REQUIRES_X86_FMA3;
16086 for (uint32_t channels = 9; channels < 16; channels++) {
16087 DWConvMicrokernelTester()
16088 .cr(8)
16089 .kr(9)
16090 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016091 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016092 }
16093 }
16094
Marat Dukhande06f492020-04-09 00:19:31 -070016095 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016096 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016103 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016104 }
16105 }
16106
Marat Dukhande06f492020-04-09 00:19:31 -070016107 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016108 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016115 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016116 }
16117 }
16118
Marat Dukhande06f492020-04-09 00:19:31 -070016119 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016120 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016127 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016128 }
16129 }
16130
Marat Dukhande06f492020-04-09 00:19:31 -070016131 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016132 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016141 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016142 }
16143 }
16144 }
16145
Marat Dukhande06f492020-04-09 00:19:31 -070016146 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016147 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016155 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016156 }
16157 }
16158
Marat Dukhande06f492020-04-09 00:19:31 -070016159 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016160 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016168 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016169 }
16170 }
16171
Marat Dukhande06f492020-04-09 00:19:31 -070016172 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016173 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016181 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016182 }
16183 }
Frank Barchardd5360722020-05-17 16:10:36 -070016184
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016193 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070016194 }
16195 }
16196
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016207 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070016208 }
16209 }
16210 }
Marat Dukhan1c587112020-04-08 20:04:28 -070016211#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
16212
16213
16214#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070016215 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016216 TEST_REQUIRES_X86_FMA3;
16217 DWConvMicrokernelTester()
16218 .cr(8)
16219 .kr(9)
16220 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016221 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016222 }
16223
Marat Dukhande06f492020-04-09 00:19:31 -070016224 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016225 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016231 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016232 }
16233 }
16234
Marat Dukhande06f492020-04-09 00:19:31 -070016235 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016236 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016243 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016244 }
16245 }
16246
Marat Dukhande06f492020-04-09 00:19:31 -070016247 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016248 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016255 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016256 }
16257 }
16258
Marat Dukhande06f492020-04-09 00:19:31 -070016259 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016260 TEST_REQUIRES_X86_FMA3;
16261 for (uint32_t channels = 1; channels < 8; channels++) {
16262 DWConvMicrokernelTester()
16263 .cr(8)
16264 .kr(9)
16265 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016266 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016267 }
16268 }
16269
Marat Dukhande06f492020-04-09 00:19:31 -070016270 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016271 TEST_REQUIRES_X86_FMA3;
16272 for (uint32_t channels = 9; channels < 16; channels++) {
16273 DWConvMicrokernelTester()
16274 .cr(8)
16275 .kr(9)
16276 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016277 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016278 }
16279 }
16280
Marat Dukhande06f492020-04-09 00:19:31 -070016281 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016282 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016289 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016290 }
16291 }
16292
Marat Dukhande06f492020-04-09 00:19:31 -070016293 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016294 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016301 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016302 }
16303 }
16304
Marat Dukhande06f492020-04-09 00:19:31 -070016305 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016306 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016313 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016314 }
16315 }
16316
Marat Dukhande06f492020-04-09 00:19:31 -070016317 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016318 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016327 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016328 }
16329 }
16330 }
16331
Marat Dukhande06f492020-04-09 00:19:31 -070016332 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016333 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016341 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016342 }
16343 }
16344
Marat Dukhande06f492020-04-09 00:19:31 -070016345 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016346 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016354 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016355 }
16356 }
16357
Marat Dukhande06f492020-04-09 00:19:31 -070016358 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016359 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016367 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016368 }
16369 }
Frank Barchardd5360722020-05-17 16:10:36 -070016370
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016379 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070016380 }
16381 }
16382
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016393 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070016394 }
16395 }
16396 }
Marat Dukhan1c587112020-04-08 20:04:28 -070016397#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
16398
16399
16400#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070016401 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016402 TEST_REQUIRES_X86_FMA3;
16403 DWConvMicrokernelTester()
16404 .cr(16)
16405 .kr(9)
16406 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016407 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016408 }
16409
Marat Dukhande06f492020-04-09 00:19:31 -070016410 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016411 TEST_REQUIRES_X86_FMA3;
16412 for (uint32_t channels = 32; channels < 256; channels += 48) {
16413 DWConvMicrokernelTester()
16414 .cr(16)
16415 .kr(9)
16416 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016417 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016418 }
16419 }
16420
Marat Dukhande06f492020-04-09 00:19:31 -070016421 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016422 TEST_REQUIRES_X86_FMA3;
16423 for (uint32_t channels = 32; channels < 256; channels += 48) {
16424 DWConvMicrokernelTester()
16425 .cr(16)
16426 .kr(9)
16427 .channels(channels)
16428 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016429 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016430 }
16431 }
16432
Marat Dukhande06f492020-04-09 00:19:31 -070016433 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016434 TEST_REQUIRES_X86_FMA3;
16435 for (uint32_t channels = 32; channels < 256; channels += 48) {
16436 DWConvMicrokernelTester()
16437 .cr(16)
16438 .kr(9)
16439 .channels(channels)
16440 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016441 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016442 }
16443 }
16444
Marat Dukhande06f492020-04-09 00:19:31 -070016445 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016446 TEST_REQUIRES_X86_FMA3;
16447 for (uint32_t channels = 1; channels < 16; channels++) {
16448 DWConvMicrokernelTester()
16449 .cr(16)
16450 .kr(9)
16451 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016452 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016453 }
16454 }
16455
Marat Dukhande06f492020-04-09 00:19:31 -070016456 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016457 TEST_REQUIRES_X86_FMA3;
16458 for (uint32_t channels = 17; channels < 32; channels++) {
16459 DWConvMicrokernelTester()
16460 .cr(16)
16461 .kr(9)
16462 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016463 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016464 }
16465 }
16466
Marat Dukhande06f492020-04-09 00:19:31 -070016467 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016468 TEST_REQUIRES_X86_FMA3;
16469 for (uint32_t channels = 17; channels < 32; channels++) {
16470 DWConvMicrokernelTester()
16471 .cr(16)
16472 .kr(9)
16473 .channels(channels)
16474 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016475 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016476 }
16477 }
16478
Marat Dukhande06f492020-04-09 00:19:31 -070016479 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016480 TEST_REQUIRES_X86_FMA3;
16481 for (uint32_t channels = 17; channels < 32; channels++) {
16482 DWConvMicrokernelTester()
16483 .cr(16)
16484 .kr(9)
16485 .channels(channels)
16486 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016487 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016488 }
16489 }
16490
Marat Dukhande06f492020-04-09 00:19:31 -070016491 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016492 TEST_REQUIRES_X86_FMA3;
16493 for (size_t channels = 1; channels <= 80; channels += 15) {
16494 DWConvMicrokernelTester()
16495 .cr(16)
16496 .kr(9)
16497 .channels(channels)
16498 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016499 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016500 }
16501 }
16502
Marat Dukhande06f492020-04-09 00:19:31 -070016503 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016504 TEST_REQUIRES_X86_FMA3;
16505 for (size_t channels = 1; channels <= 80; channels += 15) {
16506 for (size_t step = 2; step <= 9; step++) {
16507 DWConvMicrokernelTester()
16508 .cr(16)
16509 .kr(9)
16510 .channels(channels)
16511 .width(3)
16512 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016513 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016514 }
16515 }
16516 }
16517
Marat Dukhande06f492020-04-09 00:19:31 -070016518 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016519 TEST_REQUIRES_X86_FMA3;
16520 for (size_t channels = 1; channels <= 80; channels += 15) {
16521 DWConvMicrokernelTester()
16522 .cr(16)
16523 .kr(9)
16524 .channels(16)
16525 .width(5)
16526 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016527 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016528 }
16529 }
16530
Marat Dukhande06f492020-04-09 00:19:31 -070016531 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016532 TEST_REQUIRES_X86_FMA3;
16533 for (size_t channels = 1; channels <= 80; channels += 15) {
16534 DWConvMicrokernelTester()
16535 .cr(16)
16536 .kr(9)
16537 .channels(channels)
16538 .width(3)
16539 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016540 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016541 }
16542 }
16543
Marat Dukhande06f492020-04-09 00:19:31 -070016544 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016545 TEST_REQUIRES_X86_FMA3;
16546 for (size_t channels = 1; channels <= 80; channels += 15) {
16547 DWConvMicrokernelTester()
16548 .cr(16)
16549 .kr(9)
16550 .channels(channels)
16551 .width(3)
16552 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016553 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016554 }
16555 }
Frank Barchardd5360722020-05-17 16:10:36 -070016556
16557 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, input_offset) {
16558 TEST_REQUIRES_X86_FMA3;
16559 for (uint32_t channels = 32; channels < 256; channels += 48) {
16560 DWConvMicrokernelTester()
16561 .cr(16)
16562 .kr(9)
16563 .channels(channels)
16564 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016565 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070016566 }
16567 }
16568
16569 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, zero) {
16570 TEST_REQUIRES_X86_FMA3;
16571 for (uint32_t mz = 0; mz < 9; mz++) {
16572 for (uint32_t channels = 32; channels < 256; channels += 48) {
16573 DWConvMicrokernelTester()
16574 .cr(16)
16575 .kr(9)
16576 .channels(channels)
16577 .input_offset(304)
16578 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016579 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070016580 }
16581 }
16582 }
Marat Dukhan1c587112020-04-08 20:04:28 -070016583#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
16584
16585
16586#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070016587 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016588 TEST_REQUIRES_X86_FMA3;
16589 DWConvMicrokernelTester()
16590 .cr(16)
16591 .kr(9)
16592 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016593 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016594 }
16595
Marat Dukhande06f492020-04-09 00:19:31 -070016596 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016597 TEST_REQUIRES_X86_FMA3;
16598 for (uint32_t channels = 32; channels < 256; channels += 48) {
16599 DWConvMicrokernelTester()
16600 .cr(16)
16601 .kr(9)
16602 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016603 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016604 }
16605 }
16606
Marat Dukhande06f492020-04-09 00:19:31 -070016607 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016608 TEST_REQUIRES_X86_FMA3;
16609 for (uint32_t channels = 32; channels < 256; channels += 48) {
16610 DWConvMicrokernelTester()
16611 .cr(16)
16612 .kr(9)
16613 .channels(channels)
16614 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016615 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016616 }
16617 }
16618
Marat Dukhande06f492020-04-09 00:19:31 -070016619 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016620 TEST_REQUIRES_X86_FMA3;
16621 for (uint32_t channels = 32; channels < 256; channels += 48) {
16622 DWConvMicrokernelTester()
16623 .cr(16)
16624 .kr(9)
16625 .channels(channels)
16626 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016627 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016628 }
16629 }
16630
Marat Dukhande06f492020-04-09 00:19:31 -070016631 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016632 TEST_REQUIRES_X86_FMA3;
16633 for (uint32_t channels = 1; channels < 16; channels++) {
16634 DWConvMicrokernelTester()
16635 .cr(16)
16636 .kr(9)
16637 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016638 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016639 }
16640 }
16641
Marat Dukhande06f492020-04-09 00:19:31 -070016642 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016643 TEST_REQUIRES_X86_FMA3;
16644 for (uint32_t channels = 17; channels < 32; channels++) {
16645 DWConvMicrokernelTester()
16646 .cr(16)
16647 .kr(9)
16648 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016649 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016650 }
16651 }
16652
Marat Dukhande06f492020-04-09 00:19:31 -070016653 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016654 TEST_REQUIRES_X86_FMA3;
16655 for (uint32_t channels = 17; channels < 32; channels++) {
16656 DWConvMicrokernelTester()
16657 .cr(16)
16658 .kr(9)
16659 .channels(channels)
16660 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016661 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016662 }
16663 }
16664
Marat Dukhande06f492020-04-09 00:19:31 -070016665 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016666 TEST_REQUIRES_X86_FMA3;
16667 for (uint32_t channels = 17; channels < 32; channels++) {
16668 DWConvMicrokernelTester()
16669 .cr(16)
16670 .kr(9)
16671 .channels(channels)
16672 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016673 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016674 }
16675 }
16676
Marat Dukhande06f492020-04-09 00:19:31 -070016677 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016678 TEST_REQUIRES_X86_FMA3;
16679 for (size_t channels = 1; channels <= 80; channels += 15) {
16680 DWConvMicrokernelTester()
16681 .cr(16)
16682 .kr(9)
16683 .channels(channels)
16684 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016685 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016686 }
16687 }
16688
Marat Dukhande06f492020-04-09 00:19:31 -070016689 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016690 TEST_REQUIRES_X86_FMA3;
16691 for (size_t channels = 1; channels <= 80; channels += 15) {
16692 for (size_t step = 2; step <= 9; step++) {
16693 DWConvMicrokernelTester()
16694 .cr(16)
16695 .kr(9)
16696 .channels(channels)
16697 .width(3)
16698 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016699 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016700 }
16701 }
16702 }
16703
Marat Dukhande06f492020-04-09 00:19:31 -070016704 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016705 TEST_REQUIRES_X86_FMA3;
16706 for (size_t channels = 1; channels <= 80; channels += 15) {
16707 DWConvMicrokernelTester()
16708 .cr(16)
16709 .kr(9)
16710 .channels(16)
16711 .width(5)
16712 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016713 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016714 }
16715 }
16716
Marat Dukhande06f492020-04-09 00:19:31 -070016717 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016718 TEST_REQUIRES_X86_FMA3;
16719 for (size_t channels = 1; channels <= 80; channels += 15) {
16720 DWConvMicrokernelTester()
16721 .cr(16)
16722 .kr(9)
16723 .channels(channels)
16724 .width(3)
16725 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016726 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016727 }
16728 }
16729
Marat Dukhande06f492020-04-09 00:19:31 -070016730 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070016731 TEST_REQUIRES_X86_FMA3;
16732 for (size_t channels = 1; channels <= 80; channels += 15) {
16733 DWConvMicrokernelTester()
16734 .cr(16)
16735 .kr(9)
16736 .channels(channels)
16737 .width(3)
16738 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016739 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070016740 }
16741 }
Frank Barchardd5360722020-05-17 16:10:36 -070016742
16743 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, input_offset) {
16744 TEST_REQUIRES_X86_FMA3;
16745 for (uint32_t channels = 32; channels < 256; channels += 48) {
16746 DWConvMicrokernelTester()
16747 .cr(16)
16748 .kr(9)
16749 .channels(channels)
16750 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016751 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070016752 }
16753 }
16754
16755 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, zero) {
16756 TEST_REQUIRES_X86_FMA3;
16757 for (uint32_t mz = 0; mz < 9; mz++) {
16758 for (uint32_t channels = 32; channels < 256; channels += 48) {
16759 DWConvMicrokernelTester()
16760 .cr(16)
16761 .kr(9)
16762 .channels(channels)
16763 .input_offset(304)
16764 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070016765 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070016766 }
16767 }
16768 }
Marat Dukhan1c587112020-04-08 20:04:28 -070016769#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
16770
16771
16772#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070016773 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_eq_8) {
16774 TEST_REQUIRES_X86_FMA3;
16775 DWConvMicrokernelTester()
16776 .cr(8)
16777 .kr(3)
16778 .channels(8)
16779 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16780 }
16781
16782 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_div_8) {
16783 TEST_REQUIRES_X86_FMA3;
16784 for (uint32_t channels = 16; channels < 128; channels += 24) {
16785 DWConvMicrokernelTester()
16786 .cr(8)
16787 .kr(3)
16788 .channels(channels)
16789 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16790 }
16791 }
16792
16793 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_div_8_with_qmin) {
16794 TEST_REQUIRES_X86_FMA3;
16795 for (uint32_t channels = 16; channels < 128; channels += 24) {
16796 DWConvMicrokernelTester()
16797 .cr(8)
16798 .kr(3)
16799 .channels(channels)
16800 .qmin(128)
16801 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16802 }
16803 }
16804
16805 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_div_8_with_qmax) {
16806 TEST_REQUIRES_X86_FMA3;
16807 for (uint32_t channels = 16; channels < 128; channels += 24) {
16808 DWConvMicrokernelTester()
16809 .cr(8)
16810 .kr(3)
16811 .channels(channels)
16812 .qmax(128)
16813 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16814 }
16815 }
16816
16817 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_lt_8) {
16818 TEST_REQUIRES_X86_FMA3;
16819 for (uint32_t channels = 1; channels < 8; channels++) {
16820 DWConvMicrokernelTester()
16821 .cr(8)
16822 .kr(3)
16823 .channels(channels)
16824 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16825 }
16826 }
16827
16828 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_gt_8) {
16829 TEST_REQUIRES_X86_FMA3;
16830 for (uint32_t channels = 9; channels < 16; channels++) {
16831 DWConvMicrokernelTester()
16832 .cr(8)
16833 .kr(3)
16834 .channels(channels)
16835 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16836 }
16837 }
16838
16839 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_gt_8_with_qmin) {
16840 TEST_REQUIRES_X86_FMA3;
16841 for (uint32_t channels = 9; channels < 16; channels++) {
16842 DWConvMicrokernelTester()
16843 .cr(8)
16844 .kr(3)
16845 .channels(channels)
16846 .qmin(128)
16847 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16848 }
16849 }
16850
16851 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, c_gt_8_with_qmax) {
16852 TEST_REQUIRES_X86_FMA3;
16853 for (uint32_t channels = 9; channels < 16; channels++) {
16854 DWConvMicrokernelTester()
16855 .cr(8)
16856 .kr(3)
16857 .channels(channels)
16858 .qmax(128)
16859 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16860 }
16861 }
16862
16863 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, multipixel) {
16864 TEST_REQUIRES_X86_FMA3;
16865 for (size_t channels = 1; channels <= 40; channels += 7) {
16866 DWConvMicrokernelTester()
16867 .cr(8)
16868 .kr(3)
16869 .channels(channels)
16870 .width(3)
16871 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16872 }
16873 }
16874
16875 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, multipixel_with_step) {
16876 TEST_REQUIRES_X86_FMA3;
16877 for (size_t channels = 1; channels <= 40; channels += 7) {
16878 for (size_t step = 2; step <= 3; step++) {
16879 DWConvMicrokernelTester()
16880 .cr(8)
16881 .kr(3)
16882 .channels(channels)
16883 .width(3)
16884 .step(step)
16885 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16886 }
16887 }
16888 }
16889
16890 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, multipixel_with_output_stride) {
16891 TEST_REQUIRES_X86_FMA3;
16892 for (size_t channels = 1; channels <= 40; channels += 7) {
16893 DWConvMicrokernelTester()
16894 .cr(8)
16895 .kr(3)
16896 .channels(8)
16897 .width(5)
16898 .output_stride(43)
16899 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16900 }
16901 }
16902
16903 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, multipixel_with_qmin) {
16904 TEST_REQUIRES_X86_FMA3;
16905 for (size_t channels = 1; channels <= 40; channels += 7) {
16906 DWConvMicrokernelTester()
16907 .cr(8)
16908 .kr(3)
16909 .channels(channels)
16910 .width(3)
16911 .qmin(128)
16912 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16913 }
16914 }
16915
16916 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, multipixel_with_qmax) {
16917 TEST_REQUIRES_X86_FMA3;
16918 for (size_t channels = 1; channels <= 40; channels += 7) {
16919 DWConvMicrokernelTester()
16920 .cr(8)
16921 .kr(3)
16922 .channels(channels)
16923 .width(3)
16924 .qmax(128)
16925 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16926 }
16927 }
16928
16929 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, input_offset) {
16930 TEST_REQUIRES_X86_FMA3;
16931 for (uint32_t channels = 16; channels < 128; channels += 24) {
16932 DWConvMicrokernelTester()
16933 .cr(8)
16934 .kr(3)
16935 .channels(channels)
16936 .input_offset(176)
16937 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3, xnn_init_f32_minmax_avx_params);
16938 }
16939 }
16940
16941 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3, zero) {
16942 TEST_REQUIRES_X86_FMA3;
16943 for (uint32_t mz = 0; mz < 3; mz++) {
16944 for (uint32_t channels = 16; channels < 128; channels += 24) {
16945 DWConvMicrokernelTester()
16946 .cr(8)
16947 .kr(3)
16948 .channels(channels)
16949 .input_offset(176)
16950 .zero_index(mz)
16951 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__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
16959 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_eq_8) {
16960 TEST_REQUIRES_X86_FMA3;
16961 DWConvMicrokernelTester()
16962 .cr(8)
16963 .kr(3)
16964 .channels(8)
16965 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
16966 }
16967
16968 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_div_8) {
16969 TEST_REQUIRES_X86_FMA3;
16970 for (uint32_t channels = 16; channels < 128; channels += 24) {
16971 DWConvMicrokernelTester()
16972 .cr(8)
16973 .kr(3)
16974 .channels(channels)
16975 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
16976 }
16977 }
16978
16979 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_div_8_with_qmin) {
16980 TEST_REQUIRES_X86_FMA3;
16981 for (uint32_t channels = 16; channels < 128; channels += 24) {
16982 DWConvMicrokernelTester()
16983 .cr(8)
16984 .kr(3)
16985 .channels(channels)
16986 .qmin(128)
16987 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
16988 }
16989 }
16990
16991 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_div_8_with_qmax) {
16992 TEST_REQUIRES_X86_FMA3;
16993 for (uint32_t channels = 16; channels < 128; channels += 24) {
16994 DWConvMicrokernelTester()
16995 .cr(8)
16996 .kr(3)
16997 .channels(channels)
16998 .qmax(128)
16999 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17000 }
17001 }
17002
17003 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_lt_8) {
17004 TEST_REQUIRES_X86_FMA3;
17005 for (uint32_t channels = 1; channels < 8; channels++) {
17006 DWConvMicrokernelTester()
17007 .cr(8)
17008 .kr(3)
17009 .channels(channels)
17010 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17011 }
17012 }
17013
17014 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_gt_8) {
17015 TEST_REQUIRES_X86_FMA3;
17016 for (uint32_t channels = 9; channels < 16; channels++) {
17017 DWConvMicrokernelTester()
17018 .cr(8)
17019 .kr(3)
17020 .channels(channels)
17021 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17022 }
17023 }
17024
17025 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_gt_8_with_qmin) {
17026 TEST_REQUIRES_X86_FMA3;
17027 for (uint32_t channels = 9; channels < 16; channels++) {
17028 DWConvMicrokernelTester()
17029 .cr(8)
17030 .kr(3)
17031 .channels(channels)
17032 .qmin(128)
17033 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17034 }
17035 }
17036
17037 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, c_gt_8_with_qmax) {
17038 TEST_REQUIRES_X86_FMA3;
17039 for (uint32_t channels = 9; channels < 16; channels++) {
17040 DWConvMicrokernelTester()
17041 .cr(8)
17042 .kr(3)
17043 .channels(channels)
17044 .qmax(128)
17045 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17046 }
17047 }
17048
17049 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, multipixel) {
17050 TEST_REQUIRES_X86_FMA3;
17051 for (size_t channels = 1; channels <= 40; channels += 7) {
17052 DWConvMicrokernelTester()
17053 .cr(8)
17054 .kr(3)
17055 .channels(channels)
17056 .width(3)
17057 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17058 }
17059 }
17060
17061 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, multipixel_with_step) {
17062 TEST_REQUIRES_X86_FMA3;
17063 for (size_t channels = 1; channels <= 40; channels += 7) {
17064 for (size_t step = 2; step <= 3; step++) {
17065 DWConvMicrokernelTester()
17066 .cr(8)
17067 .kr(3)
17068 .channels(channels)
17069 .width(3)
17070 .step(step)
17071 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17072 }
17073 }
17074 }
17075
17076 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, multipixel_with_output_stride) {
17077 TEST_REQUIRES_X86_FMA3;
17078 for (size_t channels = 1; channels <= 40; channels += 7) {
17079 DWConvMicrokernelTester()
17080 .cr(8)
17081 .kr(3)
17082 .channels(8)
17083 .width(5)
17084 .output_stride(43)
17085 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17086 }
17087 }
17088
17089 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, multipixel_with_qmin) {
17090 TEST_REQUIRES_X86_FMA3;
17091 for (size_t channels = 1; channels <= 40; channels += 7) {
17092 DWConvMicrokernelTester()
17093 .cr(8)
17094 .kr(3)
17095 .channels(channels)
17096 .width(3)
17097 .qmin(128)
17098 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17099 }
17100 }
17101
17102 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, multipixel_with_qmax) {
17103 TEST_REQUIRES_X86_FMA3;
17104 for (size_t channels = 1; channels <= 40; channels += 7) {
17105 DWConvMicrokernelTester()
17106 .cr(8)
17107 .kr(3)
17108 .channels(channels)
17109 .width(3)
17110 .qmax(128)
17111 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17112 }
17113 }
17114
17115 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, input_offset) {
17116 TEST_REQUIRES_X86_FMA3;
17117 for (uint32_t channels = 16; channels < 128; channels += 24) {
17118 DWConvMicrokernelTester()
17119 .cr(8)
17120 .kr(3)
17121 .channels(channels)
17122 .input_offset(176)
17123 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17124 }
17125 }
17126
17127 TEST(F32_DWCONV_MINMAX_UP8X3__FMA3_ACC2, zero) {
17128 TEST_REQUIRES_X86_FMA3;
17129 for (uint32_t mz = 0; mz < 3; mz++) {
17130 for (uint32_t channels = 16; channels < 128; channels += 24) {
17131 DWConvMicrokernelTester()
17132 .cr(8)
17133 .kr(3)
17134 .channels(channels)
17135 .input_offset(176)
17136 .zero_index(mz)
17137 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__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
Marat Dukhande06f492020-04-09 00:19:31 -070017145 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017146 TEST_REQUIRES_X86_FMA3;
17147 DWConvMicrokernelTester()
17148 .cr(8)
17149 .kr(4)
17150 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017151 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017152 }
17153
Marat Dukhande06f492020-04-09 00:19:31 -070017154 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017155 TEST_REQUIRES_X86_FMA3;
17156 for (uint32_t channels = 16; channels < 128; channels += 24) {
17157 DWConvMicrokernelTester()
17158 .cr(8)
17159 .kr(4)
17160 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017161 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017162 }
17163 }
17164
Marat Dukhande06f492020-04-09 00:19:31 -070017165 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017166 TEST_REQUIRES_X86_FMA3;
17167 for (uint32_t channels = 16; channels < 128; channels += 24) {
17168 DWConvMicrokernelTester()
17169 .cr(8)
17170 .kr(4)
17171 .channels(channels)
17172 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017173 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017174 }
17175 }
17176
Marat Dukhande06f492020-04-09 00:19:31 -070017177 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017178 TEST_REQUIRES_X86_FMA3;
17179 for (uint32_t channels = 16; channels < 128; channels += 24) {
17180 DWConvMicrokernelTester()
17181 .cr(8)
17182 .kr(4)
17183 .channels(channels)
17184 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017185 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017186 }
17187 }
17188
Marat Dukhande06f492020-04-09 00:19:31 -070017189 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017190 TEST_REQUIRES_X86_FMA3;
17191 for (uint32_t channels = 1; channels < 8; channels++) {
17192 DWConvMicrokernelTester()
17193 .cr(8)
17194 .kr(4)
17195 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017196 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017197 }
17198 }
17199
Marat Dukhande06f492020-04-09 00:19:31 -070017200 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017201 TEST_REQUIRES_X86_FMA3;
17202 for (uint32_t channels = 9; channels < 16; channels++) {
17203 DWConvMicrokernelTester()
17204 .cr(8)
17205 .kr(4)
17206 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017207 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017208 }
17209 }
17210
Marat Dukhande06f492020-04-09 00:19:31 -070017211 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017212 TEST_REQUIRES_X86_FMA3;
17213 for (uint32_t channels = 9; channels < 16; channels++) {
17214 DWConvMicrokernelTester()
17215 .cr(8)
17216 .kr(4)
17217 .channels(channels)
17218 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017219 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017220 }
17221 }
17222
Marat Dukhande06f492020-04-09 00:19:31 -070017223 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017224 TEST_REQUIRES_X86_FMA3;
17225 for (uint32_t channels = 9; channels < 16; channels++) {
17226 DWConvMicrokernelTester()
17227 .cr(8)
17228 .kr(4)
17229 .channels(channels)
17230 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017231 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017232 }
17233 }
17234
Marat Dukhande06f492020-04-09 00:19:31 -070017235 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017236 TEST_REQUIRES_X86_FMA3;
17237 for (size_t channels = 1; channels <= 40; channels += 7) {
17238 DWConvMicrokernelTester()
17239 .cr(8)
17240 .kr(4)
17241 .channels(channels)
17242 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017243 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017244 }
17245 }
17246
Marat Dukhande06f492020-04-09 00:19:31 -070017247 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017248 TEST_REQUIRES_X86_FMA3;
17249 for (size_t channels = 1; channels <= 40; channels += 7) {
17250 for (size_t step = 2; step <= 4; step++) {
17251 DWConvMicrokernelTester()
17252 .cr(8)
17253 .kr(4)
17254 .channels(channels)
17255 .width(3)
17256 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017257 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017258 }
17259 }
17260 }
17261
Marat Dukhande06f492020-04-09 00:19:31 -070017262 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017263 TEST_REQUIRES_X86_FMA3;
17264 for (size_t channels = 1; channels <= 40; channels += 7) {
17265 DWConvMicrokernelTester()
17266 .cr(8)
17267 .kr(4)
17268 .channels(8)
17269 .width(5)
17270 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017271 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017272 }
17273 }
17274
Marat Dukhande06f492020-04-09 00:19:31 -070017275 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017276 TEST_REQUIRES_X86_FMA3;
17277 for (size_t channels = 1; channels <= 40; channels += 7) {
17278 DWConvMicrokernelTester()
17279 .cr(8)
17280 .kr(4)
17281 .channels(channels)
17282 .width(3)
17283 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017284 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017285 }
17286 }
17287
Marat Dukhande06f492020-04-09 00:19:31 -070017288 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017289 TEST_REQUIRES_X86_FMA3;
17290 for (size_t channels = 1; channels <= 40; channels += 7) {
17291 DWConvMicrokernelTester()
17292 .cr(8)
17293 .kr(4)
17294 .channels(channels)
17295 .width(3)
17296 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017297 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017298 }
17299 }
Frank Barchardd5360722020-05-17 16:10:36 -070017300
17301 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, input_offset) {
17302 TEST_REQUIRES_X86_FMA3;
17303 for (uint32_t channels = 16; channels < 128; channels += 24) {
17304 DWConvMicrokernelTester()
17305 .cr(8)
17306 .kr(4)
17307 .channels(channels)
17308 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017309 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070017310 }
17311 }
17312
17313 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, zero) {
17314 TEST_REQUIRES_X86_FMA3;
17315 for (uint32_t mz = 0; mz < 4; mz++) {
17316 for (uint32_t channels = 16; channels < 128; channels += 24) {
17317 DWConvMicrokernelTester()
17318 .cr(8)
17319 .kr(4)
17320 .channels(channels)
17321 .input_offset(176)
17322 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017323 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070017324 }
17325 }
17326 }
Marat Dukhan1c587112020-04-08 20:04:28 -070017327#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
17328
17329
17330#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070017331 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017332 TEST_REQUIRES_X86_FMA3;
17333 DWConvMicrokernelTester()
17334 .cr(8)
17335 .kr(4)
17336 .channels(8)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017337 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017338 }
17339
Marat Dukhande06f492020-04-09 00:19:31 -070017340 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017341 TEST_REQUIRES_X86_FMA3;
17342 for (uint32_t channels = 16; channels < 128; channels += 24) {
17343 DWConvMicrokernelTester()
17344 .cr(8)
17345 .kr(4)
17346 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017347 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017348 }
17349 }
17350
Marat Dukhande06f492020-04-09 00:19:31 -070017351 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017352 TEST_REQUIRES_X86_FMA3;
17353 for (uint32_t channels = 16; channels < 128; channels += 24) {
17354 DWConvMicrokernelTester()
17355 .cr(8)
17356 .kr(4)
17357 .channels(channels)
17358 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017359 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017360 }
17361 }
17362
Marat Dukhande06f492020-04-09 00:19:31 -070017363 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017364 TEST_REQUIRES_X86_FMA3;
17365 for (uint32_t channels = 16; channels < 128; channels += 24) {
17366 DWConvMicrokernelTester()
17367 .cr(8)
17368 .kr(4)
17369 .channels(channels)
17370 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017371 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017372 }
17373 }
17374
Marat Dukhande06f492020-04-09 00:19:31 -070017375 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017376 TEST_REQUIRES_X86_FMA3;
17377 for (uint32_t channels = 1; channels < 8; channels++) {
17378 DWConvMicrokernelTester()
17379 .cr(8)
17380 .kr(4)
17381 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017382 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017383 }
17384 }
17385
Marat Dukhande06f492020-04-09 00:19:31 -070017386 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017387 TEST_REQUIRES_X86_FMA3;
17388 for (uint32_t channels = 9; channels < 16; channels++) {
17389 DWConvMicrokernelTester()
17390 .cr(8)
17391 .kr(4)
17392 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017393 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017394 }
17395 }
17396
Marat Dukhande06f492020-04-09 00:19:31 -070017397 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017398 TEST_REQUIRES_X86_FMA3;
17399 for (uint32_t channels = 9; channels < 16; channels++) {
17400 DWConvMicrokernelTester()
17401 .cr(8)
17402 .kr(4)
17403 .channels(channels)
17404 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017405 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017406 }
17407 }
17408
Marat Dukhande06f492020-04-09 00:19:31 -070017409 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017410 TEST_REQUIRES_X86_FMA3;
17411 for (uint32_t channels = 9; channels < 16; channels++) {
17412 DWConvMicrokernelTester()
17413 .cr(8)
17414 .kr(4)
17415 .channels(channels)
17416 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017417 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017418 }
17419 }
17420
Marat Dukhande06f492020-04-09 00:19:31 -070017421 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017422 TEST_REQUIRES_X86_FMA3;
17423 for (size_t channels = 1; channels <= 40; channels += 7) {
17424 DWConvMicrokernelTester()
17425 .cr(8)
17426 .kr(4)
17427 .channels(channels)
17428 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017429 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017430 }
17431 }
17432
Marat Dukhande06f492020-04-09 00:19:31 -070017433 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017434 TEST_REQUIRES_X86_FMA3;
17435 for (size_t channels = 1; channels <= 40; channels += 7) {
17436 for (size_t step = 2; step <= 4; step++) {
17437 DWConvMicrokernelTester()
17438 .cr(8)
17439 .kr(4)
17440 .channels(channels)
17441 .width(3)
17442 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017443 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017444 }
17445 }
17446 }
17447
Marat Dukhande06f492020-04-09 00:19:31 -070017448 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017449 TEST_REQUIRES_X86_FMA3;
17450 for (size_t channels = 1; channels <= 40; channels += 7) {
17451 DWConvMicrokernelTester()
17452 .cr(8)
17453 .kr(4)
17454 .channels(8)
17455 .width(5)
17456 .output_stride(43)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017457 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017458 }
17459 }
17460
Marat Dukhande06f492020-04-09 00:19:31 -070017461 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017462 TEST_REQUIRES_X86_FMA3;
17463 for (size_t channels = 1; channels <= 40; channels += 7) {
17464 DWConvMicrokernelTester()
17465 .cr(8)
17466 .kr(4)
17467 .channels(channels)
17468 .width(3)
17469 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017470 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017471 }
17472 }
17473
Marat Dukhande06f492020-04-09 00:19:31 -070017474 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017475 TEST_REQUIRES_X86_FMA3;
17476 for (size_t channels = 1; channels <= 40; channels += 7) {
17477 DWConvMicrokernelTester()
17478 .cr(8)
17479 .kr(4)
17480 .channels(channels)
17481 .width(3)
17482 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017483 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017484 }
17485 }
Frank Barchardd5360722020-05-17 16:10:36 -070017486
17487 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, input_offset) {
17488 TEST_REQUIRES_X86_FMA3;
17489 for (uint32_t channels = 16; channels < 128; channels += 24) {
17490 DWConvMicrokernelTester()
17491 .cr(8)
17492 .kr(4)
17493 .channels(channels)
17494 .input_offset(176)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017495 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070017496 }
17497 }
17498
17499 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, zero) {
17500 TEST_REQUIRES_X86_FMA3;
17501 for (uint32_t mz = 0; mz < 4; mz++) {
17502 for (uint32_t channels = 16; channels < 128; channels += 24) {
17503 DWConvMicrokernelTester()
17504 .cr(8)
17505 .kr(4)
17506 .channels(channels)
17507 .input_offset(176)
17508 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017509 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070017510 }
17511 }
17512 }
Marat Dukhan1c587112020-04-08 20:04:28 -070017513#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
17514
17515
17516#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070017517 TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, c_eq_16) {
17518 TEST_REQUIRES_X86_FMA3;
17519 DWConvMicrokernelTester()
17520 .cr(16)
17521 .kr(3)
17522 .channels(16)
17523 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17524 }
17525
17526 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17532 .channels(channels)
17533 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17534 }
17535 }
17536
17537 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17543 .channels(channels)
17544 .qmin(128)
17545 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17546 }
17547 }
17548
17549 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17555 .channels(channels)
17556 .qmax(128)
17557 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17558 }
17559 }
17560
17561 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17567 .channels(channels)
17568 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17569 }
17570 }
17571
17572 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17578 .channels(channels)
17579 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17580 }
17581 }
17582
17583 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17589 .channels(channels)
17590 .qmin(128)
17591 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17592 }
17593 }
17594
17595 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17601 .channels(channels)
17602 .qmax(128)
17603 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17604 }
17605 }
17606
17607 TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, multipixel) {
17608 TEST_REQUIRES_X86_FMA3;
17609 for (size_t channels = 1; channels <= 80; channels += 15) {
17610 DWConvMicrokernelTester()
17611 .cr(16)
17612 .kr(3)
17613 .channels(channels)
17614 .width(3)
17615 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17616 }
17617 }
17618
17619 TEST(F32_DWCONV_MINMAX_UP16X3__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 <= 3; step++) {
17623 DWConvMicrokernelTester()
17624 .cr(16)
17625 .kr(3)
17626 .channels(channels)
17627 .width(3)
17628 .step(step)
17629 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17630 }
17631 }
17632 }
17633
17634 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17640 .channels(16)
17641 .width(5)
17642 .output_stride(83)
17643 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17644 }
17645 }
17646
17647 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17653 .channels(channels)
17654 .width(3)
17655 .qmin(128)
17656 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17657 }
17658 }
17659
17660 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17666 .channels(channels)
17667 .width(3)
17668 .qmax(128)
17669 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17670 }
17671 }
17672
17673 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17679 .channels(channels)
17680 .input_offset(304)
17681 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3, xnn_init_f32_minmax_avx_params);
17682 }
17683 }
17684
17685 TEST(F32_DWCONV_MINMAX_UP16X3__FMA3, zero) {
17686 TEST_REQUIRES_X86_FMA3;
17687 for (uint32_t mz = 0; mz < 3; mz++) {
17688 for (uint32_t channels = 32; channels < 256; channels += 48) {
17689 DWConvMicrokernelTester()
17690 .cr(16)
17691 .kr(3)
17692 .channels(channels)
17693 .input_offset(304)
17694 .zero_index(mz)
17695 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__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
17703 TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, c_eq_16) {
17704 TEST_REQUIRES_X86_FMA3;
17705 DWConvMicrokernelTester()
17706 .cr(16)
17707 .kr(3)
17708 .channels(16)
17709 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17710 }
17711
17712 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17718 .channels(channels)
17719 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17720 }
17721 }
17722
17723 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17729 .channels(channels)
17730 .qmin(128)
17731 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17732 }
17733 }
17734
17735 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17741 .channels(channels)
17742 .qmax(128)
17743 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17744 }
17745 }
17746
17747 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17753 .channels(channels)
17754 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17755 }
17756 }
17757
17758 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17764 .channels(channels)
17765 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17766 }
17767 }
17768
17769 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17775 .channels(channels)
17776 .qmin(128)
17777 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17778 }
17779 }
17780
17781 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17787 .channels(channels)
17788 .qmax(128)
17789 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17790 }
17791 }
17792
17793 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17799 .channels(channels)
17800 .width(3)
17801 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17802 }
17803 }
17804
17805 TEST(F32_DWCONV_MINMAX_UP16X3__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 <= 3; step++) {
17809 DWConvMicrokernelTester()
17810 .cr(16)
17811 .kr(3)
17812 .channels(channels)
17813 .width(3)
17814 .step(step)
17815 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17816 }
17817 }
17818 }
17819
17820 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17826 .channels(16)
17827 .width(5)
17828 .output_stride(83)
17829 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17830 }
17831 }
17832
17833 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17839 .channels(channels)
17840 .width(3)
17841 .qmin(128)
17842 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17843 }
17844 }
17845
17846 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17852 .channels(channels)
17853 .width(3)
17854 .qmax(128)
17855 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17856 }
17857 }
17858
17859 TEST(F32_DWCONV_MINMAX_UP16X3__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(3)
17865 .channels(channels)
17866 .input_offset(304)
17867 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__fma3_acc2, xnn_init_f32_minmax_avx_params);
17868 }
17869 }
17870
17871 TEST(F32_DWCONV_MINMAX_UP16X3__FMA3_ACC2, zero) {
17872 TEST_REQUIRES_X86_FMA3;
17873 for (uint32_t mz = 0; mz < 3; mz++) {
17874 for (uint32_t channels = 32; channels < 256; channels += 48) {
17875 DWConvMicrokernelTester()
17876 .cr(16)
17877 .kr(3)
17878 .channels(channels)
17879 .input_offset(304)
17880 .zero_index(mz)
17881 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__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
Marat Dukhande06f492020-04-09 00:19:31 -070017889 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017890 TEST_REQUIRES_X86_FMA3;
17891 DWConvMicrokernelTester()
17892 .cr(16)
17893 .kr(4)
17894 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017895 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017896 }
17897
Marat Dukhande06f492020-04-09 00:19:31 -070017898 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017899 TEST_REQUIRES_X86_FMA3;
17900 for (uint32_t channels = 32; channels < 256; channels += 48) {
17901 DWConvMicrokernelTester()
17902 .cr(16)
17903 .kr(4)
17904 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017905 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017906 }
17907 }
17908
Marat Dukhande06f492020-04-09 00:19:31 -070017909 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017910 TEST_REQUIRES_X86_FMA3;
17911 for (uint32_t channels = 32; channels < 256; channels += 48) {
17912 DWConvMicrokernelTester()
17913 .cr(16)
17914 .kr(4)
17915 .channels(channels)
17916 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017917 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017918 }
17919 }
17920
Marat Dukhande06f492020-04-09 00:19:31 -070017921 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017922 TEST_REQUIRES_X86_FMA3;
17923 for (uint32_t channels = 32; channels < 256; channels += 48) {
17924 DWConvMicrokernelTester()
17925 .cr(16)
17926 .kr(4)
17927 .channels(channels)
17928 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017929 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017930 }
17931 }
17932
Marat Dukhande06f492020-04-09 00:19:31 -070017933 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017934 TEST_REQUIRES_X86_FMA3;
17935 for (uint32_t channels = 1; channels < 16; channels++) {
17936 DWConvMicrokernelTester()
17937 .cr(16)
17938 .kr(4)
17939 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017940 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017941 }
17942 }
17943
Marat Dukhande06f492020-04-09 00:19:31 -070017944 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017945 TEST_REQUIRES_X86_FMA3;
17946 for (uint32_t channels = 17; channels < 32; channels++) {
17947 DWConvMicrokernelTester()
17948 .cr(16)
17949 .kr(4)
17950 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017951 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017952 }
17953 }
17954
Marat Dukhande06f492020-04-09 00:19:31 -070017955 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017956 TEST_REQUIRES_X86_FMA3;
17957 for (uint32_t channels = 17; channels < 32; channels++) {
17958 DWConvMicrokernelTester()
17959 .cr(16)
17960 .kr(4)
17961 .channels(channels)
17962 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017963 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017964 }
17965 }
17966
Marat Dukhande06f492020-04-09 00:19:31 -070017967 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017968 TEST_REQUIRES_X86_FMA3;
17969 for (uint32_t channels = 17; channels < 32; channels++) {
17970 DWConvMicrokernelTester()
17971 .cr(16)
17972 .kr(4)
17973 .channels(channels)
17974 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017975 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017976 }
17977 }
17978
Marat Dukhande06f492020-04-09 00:19:31 -070017979 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017980 TEST_REQUIRES_X86_FMA3;
17981 for (size_t channels = 1; channels <= 80; channels += 15) {
17982 DWConvMicrokernelTester()
17983 .cr(16)
17984 .kr(4)
17985 .channels(channels)
17986 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070017987 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070017988 }
17989 }
17990
Marat Dukhande06f492020-04-09 00:19:31 -070017991 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070017992 TEST_REQUIRES_X86_FMA3;
17993 for (size_t channels = 1; channels <= 80; channels += 15) {
17994 for (size_t step = 2; step <= 4; step++) {
17995 DWConvMicrokernelTester()
17996 .cr(16)
17997 .kr(4)
17998 .channels(channels)
17999 .width(3)
18000 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018001 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018002 }
18003 }
18004 }
18005
Marat Dukhande06f492020-04-09 00:19:31 -070018006 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018007 TEST_REQUIRES_X86_FMA3;
18008 for (size_t channels = 1; channels <= 80; channels += 15) {
18009 DWConvMicrokernelTester()
18010 .cr(16)
18011 .kr(4)
18012 .channels(16)
18013 .width(5)
18014 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018015 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018016 }
18017 }
18018
Marat Dukhande06f492020-04-09 00:19:31 -070018019 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018020 TEST_REQUIRES_X86_FMA3;
18021 for (size_t channels = 1; channels <= 80; channels += 15) {
18022 DWConvMicrokernelTester()
18023 .cr(16)
18024 .kr(4)
18025 .channels(channels)
18026 .width(3)
18027 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018028 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018029 }
18030 }
18031
Marat Dukhande06f492020-04-09 00:19:31 -070018032 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018033 TEST_REQUIRES_X86_FMA3;
18034 for (size_t channels = 1; channels <= 80; channels += 15) {
18035 DWConvMicrokernelTester()
18036 .cr(16)
18037 .kr(4)
18038 .channels(channels)
18039 .width(3)
18040 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018041 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018042 }
18043 }
Frank Barchardd5360722020-05-17 16:10:36 -070018044
18045 TEST(F32_DWCONV_MINMAX_UP16X4__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(4)
18051 .channels(channels)
18052 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018053 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070018054 }
18055 }
18056
18057 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, zero) {
18058 TEST_REQUIRES_X86_FMA3;
18059 for (uint32_t mz = 0; mz < 4; mz++) {
18060 for (uint32_t channels = 32; channels < 256; channels += 48) {
18061 DWConvMicrokernelTester()
18062 .cr(16)
18063 .kr(4)
18064 .channels(channels)
18065 .input_offset(304)
18066 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018067 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070018068 }
18069 }
18070 }
Marat Dukhan1c587112020-04-08 20:04:28 -070018071#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
18072
18073
18074#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070018075 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018076 TEST_REQUIRES_X86_FMA3;
18077 DWConvMicrokernelTester()
18078 .cr(16)
18079 .kr(4)
18080 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018081 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018082 }
18083
Marat Dukhande06f492020-04-09 00:19:31 -070018084 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018085 TEST_REQUIRES_X86_FMA3;
18086 for (uint32_t channels = 32; channels < 256; channels += 48) {
18087 DWConvMicrokernelTester()
18088 .cr(16)
18089 .kr(4)
18090 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018091 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018092 }
18093 }
18094
Marat Dukhande06f492020-04-09 00:19:31 -070018095 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018096 TEST_REQUIRES_X86_FMA3;
18097 for (uint32_t channels = 32; channels < 256; channels += 48) {
18098 DWConvMicrokernelTester()
18099 .cr(16)
18100 .kr(4)
18101 .channels(channels)
18102 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018103 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018104 }
18105 }
18106
Marat Dukhande06f492020-04-09 00:19:31 -070018107 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018108 TEST_REQUIRES_X86_FMA3;
18109 for (uint32_t channels = 32; channels < 256; channels += 48) {
18110 DWConvMicrokernelTester()
18111 .cr(16)
18112 .kr(4)
18113 .channels(channels)
18114 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018115 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018116 }
18117 }
18118
Marat Dukhande06f492020-04-09 00:19:31 -070018119 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018120 TEST_REQUIRES_X86_FMA3;
18121 for (uint32_t channels = 1; channels < 16; channels++) {
18122 DWConvMicrokernelTester()
18123 .cr(16)
18124 .kr(4)
18125 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018126 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018127 }
18128 }
18129
Marat Dukhande06f492020-04-09 00:19:31 -070018130 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018131 TEST_REQUIRES_X86_FMA3;
18132 for (uint32_t channels = 17; channels < 32; channels++) {
18133 DWConvMicrokernelTester()
18134 .cr(16)
18135 .kr(4)
18136 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018137 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018138 }
18139 }
18140
Marat Dukhande06f492020-04-09 00:19:31 -070018141 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018142 TEST_REQUIRES_X86_FMA3;
18143 for (uint32_t channels = 17; channels < 32; channels++) {
18144 DWConvMicrokernelTester()
18145 .cr(16)
18146 .kr(4)
18147 .channels(channels)
18148 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018149 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018150 }
18151 }
18152
Marat Dukhande06f492020-04-09 00:19:31 -070018153 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018154 TEST_REQUIRES_X86_FMA3;
18155 for (uint32_t channels = 17; channels < 32; channels++) {
18156 DWConvMicrokernelTester()
18157 .cr(16)
18158 .kr(4)
18159 .channels(channels)
18160 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018161 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018162 }
18163 }
18164
Marat Dukhande06f492020-04-09 00:19:31 -070018165 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018166 TEST_REQUIRES_X86_FMA3;
18167 for (size_t channels = 1; channels <= 80; channels += 15) {
18168 DWConvMicrokernelTester()
18169 .cr(16)
18170 .kr(4)
18171 .channels(channels)
18172 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018173 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018174 }
18175 }
18176
Marat Dukhande06f492020-04-09 00:19:31 -070018177 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018178 TEST_REQUIRES_X86_FMA3;
18179 for (size_t channels = 1; channels <= 80; channels += 15) {
18180 for (size_t step = 2; step <= 4; step++) {
18181 DWConvMicrokernelTester()
18182 .cr(16)
18183 .kr(4)
18184 .channels(channels)
18185 .width(3)
18186 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018187 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018188 }
18189 }
18190 }
18191
Marat Dukhande06f492020-04-09 00:19:31 -070018192 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018193 TEST_REQUIRES_X86_FMA3;
18194 for (size_t channels = 1; channels <= 80; channels += 15) {
18195 DWConvMicrokernelTester()
18196 .cr(16)
18197 .kr(4)
18198 .channels(16)
18199 .width(5)
18200 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018201 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018202 }
18203 }
18204
Marat Dukhande06f492020-04-09 00:19:31 -070018205 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018206 TEST_REQUIRES_X86_FMA3;
18207 for (size_t channels = 1; channels <= 80; channels += 15) {
18208 DWConvMicrokernelTester()
18209 .cr(16)
18210 .kr(4)
18211 .channels(channels)
18212 .width(3)
18213 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018214 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018215 }
18216 }
18217
Marat Dukhande06f492020-04-09 00:19:31 -070018218 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018219 TEST_REQUIRES_X86_FMA3;
18220 for (size_t channels = 1; channels <= 80; channels += 15) {
18221 DWConvMicrokernelTester()
18222 .cr(16)
18223 .kr(4)
18224 .channels(channels)
18225 .width(3)
18226 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018227 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018228 }
18229 }
Frank Barchardd5360722020-05-17 16:10:36 -070018230
18231 TEST(F32_DWCONV_MINMAX_UP16X4__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(4)
18237 .channels(channels)
18238 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018239 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070018240 }
18241 }
18242
18243 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, zero) {
18244 TEST_REQUIRES_X86_FMA3;
18245 for (uint32_t mz = 0; mz < 4; mz++) {
18246 for (uint32_t channels = 32; channels < 256; channels += 48) {
18247 DWConvMicrokernelTester()
18248 .cr(16)
18249 .kr(4)
18250 .channels(channels)
18251 .input_offset(304)
18252 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018253 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2, xnn_init_f32_minmax_avx_params);
Frank Barchardd5360722020-05-17 16:10:36 -070018254 }
18255 }
18256 }
Marat Dukhan1c587112020-04-08 20:04:28 -070018257#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
18258
18259
18260#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070018261 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018262 TEST_REQUIRES_X86_AVX512F;
18263 DWConvMicrokernelTester()
18264 .cr(16)
18265 .kr(25)
18266 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018267 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018268 }
18269
Marat Dukhande06f492020-04-09 00:19:31 -070018270 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018271 TEST_REQUIRES_X86_AVX512F;
18272 for (uint32_t channels = 32; channels < 256; channels += 48) {
18273 DWConvMicrokernelTester()
18274 .cr(16)
18275 .kr(25)
18276 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018277 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018278 }
18279 }
18280
Marat Dukhande06f492020-04-09 00:19:31 -070018281 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018282 TEST_REQUIRES_X86_AVX512F;
18283 for (uint32_t channels = 32; channels < 256; channels += 48) {
18284 DWConvMicrokernelTester()
18285 .cr(16)
18286 .kr(25)
18287 .channels(channels)
18288 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018289 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018290 }
18291 }
18292
Marat Dukhande06f492020-04-09 00:19:31 -070018293 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018294 TEST_REQUIRES_X86_AVX512F;
18295 for (uint32_t channels = 32; channels < 256; channels += 48) {
18296 DWConvMicrokernelTester()
18297 .cr(16)
18298 .kr(25)
18299 .channels(channels)
18300 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018301 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018302 }
18303 }
18304
Marat Dukhande06f492020-04-09 00:19:31 -070018305 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018306 TEST_REQUIRES_X86_AVX512F;
18307 for (uint32_t channels = 1; channels < 16; channels++) {
18308 DWConvMicrokernelTester()
18309 .cr(16)
18310 .kr(25)
18311 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018312 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018313 }
18314 }
18315
Marat Dukhande06f492020-04-09 00:19:31 -070018316 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018317 TEST_REQUIRES_X86_AVX512F;
18318 for (uint32_t channels = 17; channels < 32; channels++) {
18319 DWConvMicrokernelTester()
18320 .cr(16)
18321 .kr(25)
18322 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018323 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018324 }
18325 }
18326
Marat Dukhande06f492020-04-09 00:19:31 -070018327 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018328 TEST_REQUIRES_X86_AVX512F;
18329 for (uint32_t channels = 17; channels < 32; channels++) {
18330 DWConvMicrokernelTester()
18331 .cr(16)
18332 .kr(25)
18333 .channels(channels)
18334 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018335 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018336 }
18337 }
18338
Marat Dukhande06f492020-04-09 00:19:31 -070018339 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018340 TEST_REQUIRES_X86_AVX512F;
18341 for (uint32_t channels = 17; channels < 32; channels++) {
18342 DWConvMicrokernelTester()
18343 .cr(16)
18344 .kr(25)
18345 .channels(channels)
18346 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018347 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018348 }
18349 }
18350
Marat Dukhande06f492020-04-09 00:19:31 -070018351 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018352 TEST_REQUIRES_X86_AVX512F;
18353 for (size_t channels = 1; channels <= 80; channels += 15) {
18354 DWConvMicrokernelTester()
18355 .cr(16)
18356 .kr(25)
18357 .channels(channels)
18358 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018359 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018360 }
18361 }
18362
Marat Dukhande06f492020-04-09 00:19:31 -070018363 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018364 TEST_REQUIRES_X86_AVX512F;
18365 for (size_t channels = 1; channels <= 80; channels += 15) {
18366 for (size_t step = 2; step <= 25; step++) {
18367 DWConvMicrokernelTester()
18368 .cr(16)
18369 .kr(25)
18370 .channels(channels)
18371 .width(3)
18372 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018373 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018374 }
18375 }
18376 }
18377
Marat Dukhande06f492020-04-09 00:19:31 -070018378 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018379 TEST_REQUIRES_X86_AVX512F;
18380 for (size_t channels = 1; channels <= 80; channels += 15) {
18381 DWConvMicrokernelTester()
18382 .cr(16)
18383 .kr(25)
18384 .channels(16)
18385 .width(5)
18386 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018387 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018388 }
18389 }
18390
Marat Dukhande06f492020-04-09 00:19:31 -070018391 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018392 TEST_REQUIRES_X86_AVX512F;
18393 for (size_t channels = 1; channels <= 80; channels += 15) {
18394 DWConvMicrokernelTester()
18395 .cr(16)
18396 .kr(25)
18397 .channels(channels)
18398 .width(3)
18399 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018400 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018401 }
18402 }
18403
Marat Dukhande06f492020-04-09 00:19:31 -070018404 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018405 TEST_REQUIRES_X86_AVX512F;
18406 for (size_t channels = 1; channels <= 80; channels += 15) {
18407 DWConvMicrokernelTester()
18408 .cr(16)
18409 .kr(25)
18410 .channels(channels)
18411 .width(3)
18412 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018413 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018414 }
18415 }
Frank Barchardd5360722020-05-17 16:10:36 -070018416
18417 TEST(F32_DWCONV_MINMAX_UP16X25__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(25)
18423 .channels(channels)
18424 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018425 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070018426 }
18427 }
18428
18429 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, zero) {
18430 TEST_REQUIRES_X86_AVX512F;
18431 for (uint32_t mz = 0; mz < 25; mz++) {
18432 for (uint32_t channels = 32; channels < 256; channels += 48) {
18433 DWConvMicrokernelTester()
18434 .cr(16)
18435 .kr(25)
18436 .channels(channels)
18437 .input_offset(304)
18438 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018439 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070018440 }
18441 }
18442 }
Marat Dukhan1c587112020-04-08 20:04:28 -070018443#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
18444
18445
18446#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070018447 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018448 TEST_REQUIRES_X86_AVX512F;
18449 DWConvMicrokernelTester()
18450 .cr(16)
18451 .kr(25)
18452 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018453 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018454 }
18455
Marat Dukhande06f492020-04-09 00:19:31 -070018456 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018457 TEST_REQUIRES_X86_AVX512F;
18458 for (uint32_t channels = 32; channels < 256; channels += 48) {
18459 DWConvMicrokernelTester()
18460 .cr(16)
18461 .kr(25)
18462 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018463 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018464 }
18465 }
18466
Marat Dukhande06f492020-04-09 00:19:31 -070018467 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018468 TEST_REQUIRES_X86_AVX512F;
18469 for (uint32_t channels = 32; channels < 256; channels += 48) {
18470 DWConvMicrokernelTester()
18471 .cr(16)
18472 .kr(25)
18473 .channels(channels)
18474 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018475 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018476 }
18477 }
18478
Marat Dukhande06f492020-04-09 00:19:31 -070018479 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018480 TEST_REQUIRES_X86_AVX512F;
18481 for (uint32_t channels = 32; channels < 256; channels += 48) {
18482 DWConvMicrokernelTester()
18483 .cr(16)
18484 .kr(25)
18485 .channels(channels)
18486 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018487 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018488 }
18489 }
18490
Marat Dukhande06f492020-04-09 00:19:31 -070018491 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018492 TEST_REQUIRES_X86_AVX512F;
18493 for (uint32_t channels = 1; channels < 16; channels++) {
18494 DWConvMicrokernelTester()
18495 .cr(16)
18496 .kr(25)
18497 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018498 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018499 }
18500 }
18501
Marat Dukhande06f492020-04-09 00:19:31 -070018502 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018503 TEST_REQUIRES_X86_AVX512F;
18504 for (uint32_t channels = 17; channels < 32; channels++) {
18505 DWConvMicrokernelTester()
18506 .cr(16)
18507 .kr(25)
18508 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018509 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018510 }
18511 }
18512
Marat Dukhande06f492020-04-09 00:19:31 -070018513 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018514 TEST_REQUIRES_X86_AVX512F;
18515 for (uint32_t channels = 17; channels < 32; channels++) {
18516 DWConvMicrokernelTester()
18517 .cr(16)
18518 .kr(25)
18519 .channels(channels)
18520 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018521 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018522 }
18523 }
18524
Marat Dukhande06f492020-04-09 00:19:31 -070018525 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018526 TEST_REQUIRES_X86_AVX512F;
18527 for (uint32_t channels = 17; channels < 32; channels++) {
18528 DWConvMicrokernelTester()
18529 .cr(16)
18530 .kr(25)
18531 .channels(channels)
18532 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018533 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018534 }
18535 }
18536
Marat Dukhande06f492020-04-09 00:19:31 -070018537 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018538 TEST_REQUIRES_X86_AVX512F;
18539 for (size_t channels = 1; channels <= 80; channels += 15) {
18540 DWConvMicrokernelTester()
18541 .cr(16)
18542 .kr(25)
18543 .channels(channels)
18544 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018545 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018546 }
18547 }
18548
Marat Dukhande06f492020-04-09 00:19:31 -070018549 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018550 TEST_REQUIRES_X86_AVX512F;
18551 for (size_t channels = 1; channels <= 80; channels += 15) {
18552 for (size_t step = 2; step <= 25; step++) {
18553 DWConvMicrokernelTester()
18554 .cr(16)
18555 .kr(25)
18556 .channels(channels)
18557 .width(3)
18558 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018559 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018560 }
18561 }
18562 }
18563
Marat Dukhande06f492020-04-09 00:19:31 -070018564 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018565 TEST_REQUIRES_X86_AVX512F;
18566 for (size_t channels = 1; channels <= 80; channels += 15) {
18567 DWConvMicrokernelTester()
18568 .cr(16)
18569 .kr(25)
18570 .channels(16)
18571 .width(5)
18572 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018573 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018574 }
18575 }
18576
Marat Dukhande06f492020-04-09 00:19:31 -070018577 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018578 TEST_REQUIRES_X86_AVX512F;
18579 for (size_t channels = 1; channels <= 80; channels += 15) {
18580 DWConvMicrokernelTester()
18581 .cr(16)
18582 .kr(25)
18583 .channels(channels)
18584 .width(3)
18585 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018586 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018587 }
18588 }
18589
Marat Dukhande06f492020-04-09 00:19:31 -070018590 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018591 TEST_REQUIRES_X86_AVX512F;
18592 for (size_t channels = 1; channels <= 80; channels += 15) {
18593 DWConvMicrokernelTester()
18594 .cr(16)
18595 .kr(25)
18596 .channels(channels)
18597 .width(3)
18598 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018599 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018600 }
18601 }
Frank Barchardd5360722020-05-17 16:10:36 -070018602
18603 TEST(F32_DWCONV_MINMAX_UP16X25__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(25)
18609 .channels(channels)
18610 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018611 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070018612 }
18613 }
18614
18615 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, zero) {
18616 TEST_REQUIRES_X86_AVX512F;
18617 for (uint32_t mz = 0; mz < 25; mz++) {
18618 for (uint32_t channels = 32; channels < 256; channels += 48) {
18619 DWConvMicrokernelTester()
18620 .cr(16)
18621 .kr(25)
18622 .channels(channels)
18623 .input_offset(304)
18624 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018625 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070018626 }
18627 }
18628 }
Marat Dukhan1c587112020-04-08 20:04:28 -070018629#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
18630
18631
18632#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070018633 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018634 TEST_REQUIRES_X86_AVX512F;
18635 DWConvMicrokernelTester()
18636 .cr(32)
18637 .kr(25)
18638 .channels(32)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018639 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018640 }
18641
Marat Dukhande06f492020-04-09 00:19:31 -070018642 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018643 TEST_REQUIRES_X86_AVX512F;
18644 for (uint32_t channels = 64; channels < 512; channels += 96) {
18645 DWConvMicrokernelTester()
18646 .cr(32)
18647 .kr(25)
18648 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018649 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018650 }
18651 }
18652
Marat Dukhande06f492020-04-09 00:19:31 -070018653 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018654 TEST_REQUIRES_X86_AVX512F;
18655 for (uint32_t channels = 64; channels < 512; channels += 96) {
18656 DWConvMicrokernelTester()
18657 .cr(32)
18658 .kr(25)
18659 .channels(channels)
18660 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018661 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018662 }
18663 }
18664
Marat Dukhande06f492020-04-09 00:19:31 -070018665 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018666 TEST_REQUIRES_X86_AVX512F;
18667 for (uint32_t channels = 64; channels < 512; channels += 96) {
18668 DWConvMicrokernelTester()
18669 .cr(32)
18670 .kr(25)
18671 .channels(channels)
18672 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018673 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018674 }
18675 }
18676
Marat Dukhande06f492020-04-09 00:19:31 -070018677 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018678 TEST_REQUIRES_X86_AVX512F;
18679 for (uint32_t channels = 1; channels < 32; channels++) {
18680 DWConvMicrokernelTester()
18681 .cr(32)
18682 .kr(25)
18683 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018684 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018685 }
18686 }
18687
Marat Dukhande06f492020-04-09 00:19:31 -070018688 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018689 TEST_REQUIRES_X86_AVX512F;
18690 for (uint32_t channels = 33; channels < 64; channels++) {
18691 DWConvMicrokernelTester()
18692 .cr(32)
18693 .kr(25)
18694 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018695 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018696 }
18697 }
18698
Marat Dukhande06f492020-04-09 00:19:31 -070018699 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018700 TEST_REQUIRES_X86_AVX512F;
18701 for (uint32_t channels = 33; channels < 64; channels++) {
18702 DWConvMicrokernelTester()
18703 .cr(32)
18704 .kr(25)
18705 .channels(channels)
18706 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018707 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018708 }
18709 }
18710
Marat Dukhande06f492020-04-09 00:19:31 -070018711 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018712 TEST_REQUIRES_X86_AVX512F;
18713 for (uint32_t channels = 33; channels < 64; channels++) {
18714 DWConvMicrokernelTester()
18715 .cr(32)
18716 .kr(25)
18717 .channels(channels)
18718 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018719 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018720 }
18721 }
18722
Marat Dukhande06f492020-04-09 00:19:31 -070018723 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018724 TEST_REQUIRES_X86_AVX512F;
18725 for (size_t channels = 1; channels <= 160; channels += 31) {
18726 DWConvMicrokernelTester()
18727 .cr(32)
18728 .kr(25)
18729 .channels(channels)
18730 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018731 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018732 }
18733 }
18734
Marat Dukhande06f492020-04-09 00:19:31 -070018735 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018736 TEST_REQUIRES_X86_AVX512F;
18737 for (size_t channels = 1; channels <= 160; channels += 31) {
18738 for (size_t step = 2; step <= 25; step++) {
18739 DWConvMicrokernelTester()
18740 .cr(32)
18741 .kr(25)
18742 .channels(channels)
18743 .width(3)
18744 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018745 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018746 }
18747 }
18748 }
18749
Marat Dukhande06f492020-04-09 00:19:31 -070018750 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018751 TEST_REQUIRES_X86_AVX512F;
18752 for (size_t channels = 1; channels <= 160; channels += 31) {
18753 DWConvMicrokernelTester()
18754 .cr(32)
18755 .kr(25)
18756 .channels(32)
18757 .width(5)
18758 .output_stride(163)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018759 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018760 }
18761 }
18762
Marat Dukhande06f492020-04-09 00:19:31 -070018763 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018764 TEST_REQUIRES_X86_AVX512F;
18765 for (size_t channels = 1; channels <= 160; channels += 31) {
18766 DWConvMicrokernelTester()
18767 .cr(32)
18768 .kr(25)
18769 .channels(channels)
18770 .width(3)
18771 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018772 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018773 }
18774 }
18775
Marat Dukhande06f492020-04-09 00:19:31 -070018776 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018777 TEST_REQUIRES_X86_AVX512F;
18778 for (size_t channels = 1; channels <= 160; channels += 31) {
18779 DWConvMicrokernelTester()
18780 .cr(32)
18781 .kr(25)
18782 .channels(channels)
18783 .width(3)
18784 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018785 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018786 }
18787 }
Frank Barchardd5360722020-05-17 16:10:36 -070018788
18789 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, input_offset) {
18790 TEST_REQUIRES_X86_AVX512F;
18791 for (uint32_t channels = 64; channels < 512; channels += 96) {
18792 DWConvMicrokernelTester()
18793 .cr(32)
18794 .kr(25)
18795 .channels(channels)
18796 .input_offset(592)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018797 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070018798 }
18799 }
18800
18801 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, zero) {
18802 TEST_REQUIRES_X86_AVX512F;
18803 for (uint32_t mz = 0; mz < 25; mz++) {
18804 for (uint32_t channels = 64; channels < 512; channels += 96) {
18805 DWConvMicrokernelTester()
18806 .cr(32)
18807 .kr(25)
18808 .channels(channels)
18809 .input_offset(592)
18810 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018811 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070018812 }
18813 }
18814 }
Marat Dukhan1c587112020-04-08 20:04:28 -070018815#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
18816
18817
18818#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070018819 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018820 TEST_REQUIRES_X86_AVX512F;
18821 DWConvMicrokernelTester()
18822 .cr(32)
18823 .kr(25)
18824 .channels(32)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018825 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018826 }
18827
Marat Dukhande06f492020-04-09 00:19:31 -070018828 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018829 TEST_REQUIRES_X86_AVX512F;
18830 for (uint32_t channels = 64; channels < 512; channels += 96) {
18831 DWConvMicrokernelTester()
18832 .cr(32)
18833 .kr(25)
18834 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018835 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018836 }
18837 }
18838
Marat Dukhande06f492020-04-09 00:19:31 -070018839 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018840 TEST_REQUIRES_X86_AVX512F;
18841 for (uint32_t channels = 64; channels < 512; channels += 96) {
18842 DWConvMicrokernelTester()
18843 .cr(32)
18844 .kr(25)
18845 .channels(channels)
18846 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018847 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018848 }
18849 }
18850
Marat Dukhande06f492020-04-09 00:19:31 -070018851 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018852 TEST_REQUIRES_X86_AVX512F;
18853 for (uint32_t channels = 64; channels < 512; channels += 96) {
18854 DWConvMicrokernelTester()
18855 .cr(32)
18856 .kr(25)
18857 .channels(channels)
18858 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018859 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018860 }
18861 }
18862
Marat Dukhande06f492020-04-09 00:19:31 -070018863 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018864 TEST_REQUIRES_X86_AVX512F;
18865 for (uint32_t channels = 1; channels < 32; channels++) {
18866 DWConvMicrokernelTester()
18867 .cr(32)
18868 .kr(25)
18869 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018870 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018871 }
18872 }
18873
Marat Dukhande06f492020-04-09 00:19:31 -070018874 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018875 TEST_REQUIRES_X86_AVX512F;
18876 for (uint32_t channels = 33; channels < 64; channels++) {
18877 DWConvMicrokernelTester()
18878 .cr(32)
18879 .kr(25)
18880 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018881 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018882 }
18883 }
18884
Marat Dukhande06f492020-04-09 00:19:31 -070018885 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018886 TEST_REQUIRES_X86_AVX512F;
18887 for (uint32_t channels = 33; channels < 64; channels++) {
18888 DWConvMicrokernelTester()
18889 .cr(32)
18890 .kr(25)
18891 .channels(channels)
18892 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018893 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018894 }
18895 }
18896
Marat Dukhande06f492020-04-09 00:19:31 -070018897 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018898 TEST_REQUIRES_X86_AVX512F;
18899 for (uint32_t channels = 33; channels < 64; channels++) {
18900 DWConvMicrokernelTester()
18901 .cr(32)
18902 .kr(25)
18903 .channels(channels)
18904 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018905 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018906 }
18907 }
18908
Marat Dukhande06f492020-04-09 00:19:31 -070018909 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018910 TEST_REQUIRES_X86_AVX512F;
18911 for (size_t channels = 1; channels <= 160; channels += 31) {
18912 DWConvMicrokernelTester()
18913 .cr(32)
18914 .kr(25)
18915 .channels(channels)
18916 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018917 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018918 }
18919 }
18920
Marat Dukhande06f492020-04-09 00:19:31 -070018921 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018922 TEST_REQUIRES_X86_AVX512F;
18923 for (size_t channels = 1; channels <= 160; channels += 31) {
18924 for (size_t step = 2; step <= 25; step++) {
18925 DWConvMicrokernelTester()
18926 .cr(32)
18927 .kr(25)
18928 .channels(channels)
18929 .width(3)
18930 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018931 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018932 }
18933 }
18934 }
18935
Marat Dukhande06f492020-04-09 00:19:31 -070018936 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018937 TEST_REQUIRES_X86_AVX512F;
18938 for (size_t channels = 1; channels <= 160; channels += 31) {
18939 DWConvMicrokernelTester()
18940 .cr(32)
18941 .kr(25)
18942 .channels(32)
18943 .width(5)
18944 .output_stride(163)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018945 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018946 }
18947 }
18948
Marat Dukhande06f492020-04-09 00:19:31 -070018949 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018950 TEST_REQUIRES_X86_AVX512F;
18951 for (size_t channels = 1; channels <= 160; channels += 31) {
18952 DWConvMicrokernelTester()
18953 .cr(32)
18954 .kr(25)
18955 .channels(channels)
18956 .width(3)
18957 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018958 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018959 }
18960 }
18961
Marat Dukhande06f492020-04-09 00:19:31 -070018962 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070018963 TEST_REQUIRES_X86_AVX512F;
18964 for (size_t channels = 1; channels <= 160; channels += 31) {
18965 DWConvMicrokernelTester()
18966 .cr(32)
18967 .kr(25)
18968 .channels(channels)
18969 .width(3)
18970 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018971 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070018972 }
18973 }
Frank Barchardd5360722020-05-17 16:10:36 -070018974
18975 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, input_offset) {
18976 TEST_REQUIRES_X86_AVX512F;
18977 for (uint32_t channels = 64; channels < 512; channels += 96) {
18978 DWConvMicrokernelTester()
18979 .cr(32)
18980 .kr(25)
18981 .channels(channels)
18982 .input_offset(592)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018983 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070018984 }
18985 }
18986
18987 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, zero) {
18988 TEST_REQUIRES_X86_AVX512F;
18989 for (uint32_t mz = 0; mz < 25; mz++) {
18990 for (uint32_t channels = 64; channels < 512; channels += 96) {
18991 DWConvMicrokernelTester()
18992 .cr(32)
18993 .kr(25)
18994 .channels(channels)
18995 .input_offset(592)
18996 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070018997 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070018998 }
18999 }
19000 }
Marat Dukhan1c587112020-04-08 20:04:28 -070019001#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
19002
19003
19004#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070019005 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019006 TEST_REQUIRES_X86_AVX512F;
19007 DWConvMicrokernelTester()
19008 .cr(16)
19009 .kr(9)
19010 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019011 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019012 }
19013
Marat Dukhande06f492020-04-09 00:19:31 -070019014 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019015 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019021 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019022 }
19023 }
19024
Marat Dukhande06f492020-04-09 00:19:31 -070019025 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019026 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019033 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019034 }
19035 }
19036
Marat Dukhande06f492020-04-09 00:19:31 -070019037 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019038 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019045 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019046 }
19047 }
19048
Marat Dukhande06f492020-04-09 00:19:31 -070019049 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019050 TEST_REQUIRES_X86_AVX512F;
19051 for (uint32_t channels = 1; channels < 16; channels++) {
19052 DWConvMicrokernelTester()
19053 .cr(16)
19054 .kr(9)
19055 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019056 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019057 }
19058 }
19059
Marat Dukhande06f492020-04-09 00:19:31 -070019060 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019061 TEST_REQUIRES_X86_AVX512F;
19062 for (uint32_t channels = 17; channels < 32; channels++) {
19063 DWConvMicrokernelTester()
19064 .cr(16)
19065 .kr(9)
19066 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019067 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019068 }
19069 }
19070
Marat Dukhande06f492020-04-09 00:19:31 -070019071 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019072 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019079 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019080 }
19081 }
19082
Marat Dukhande06f492020-04-09 00:19:31 -070019083 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019084 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019091 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019092 }
19093 }
19094
Marat Dukhande06f492020-04-09 00:19:31 -070019095 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019096 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019103 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019104 }
19105 }
19106
Marat Dukhande06f492020-04-09 00:19:31 -070019107 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019108 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019117 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019118 }
19119 }
19120 }
19121
Marat Dukhande06f492020-04-09 00:19:31 -070019122 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019123 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019131 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019132 }
19133 }
19134
Marat Dukhande06f492020-04-09 00:19:31 -070019135 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019136 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019144 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019145 }
19146 }
19147
Marat Dukhande06f492020-04-09 00:19:31 -070019148 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019149 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019157 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019158 }
19159 }
Frank Barchardd5360722020-05-17 16:10:36 -070019160
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019169 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070019170 }
19171 }
19172
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019183 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070019184 }
19185 }
19186 }
Marat Dukhan1c587112020-04-08 20:04:28 -070019187#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
19188
19189
19190#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070019191 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019192 TEST_REQUIRES_X86_AVX512F;
19193 DWConvMicrokernelTester()
19194 .cr(16)
19195 .kr(9)
19196 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019197 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019198 }
19199
Marat Dukhande06f492020-04-09 00:19:31 -070019200 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019201 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019207 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019208 }
19209 }
19210
Marat Dukhande06f492020-04-09 00:19:31 -070019211 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019212 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019219 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019220 }
19221 }
19222
Marat Dukhande06f492020-04-09 00:19:31 -070019223 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019224 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019231 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019232 }
19233 }
19234
Marat Dukhande06f492020-04-09 00:19:31 -070019235 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019236 TEST_REQUIRES_X86_AVX512F;
19237 for (uint32_t channels = 1; channels < 16; channels++) {
19238 DWConvMicrokernelTester()
19239 .cr(16)
19240 .kr(9)
19241 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019242 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019243 }
19244 }
19245
Marat Dukhande06f492020-04-09 00:19:31 -070019246 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019247 TEST_REQUIRES_X86_AVX512F;
19248 for (uint32_t channels = 17; channels < 32; channels++) {
19249 DWConvMicrokernelTester()
19250 .cr(16)
19251 .kr(9)
19252 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019253 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019254 }
19255 }
19256
Marat Dukhande06f492020-04-09 00:19:31 -070019257 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019258 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019265 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019266 }
19267 }
19268
Marat Dukhande06f492020-04-09 00:19:31 -070019269 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019270 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019277 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019278 }
19279 }
19280
Marat Dukhande06f492020-04-09 00:19:31 -070019281 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019282 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019289 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019290 }
19291 }
19292
Marat Dukhande06f492020-04-09 00:19:31 -070019293 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019294 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019303 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019304 }
19305 }
19306 }
19307
Marat Dukhande06f492020-04-09 00:19:31 -070019308 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019309 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019317 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019318 }
19319 }
19320
Marat Dukhande06f492020-04-09 00:19:31 -070019321 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019322 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019330 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019331 }
19332 }
19333
Marat Dukhande06f492020-04-09 00:19:31 -070019334 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019335 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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019343 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019344 }
19345 }
Frank Barchardd5360722020-05-17 16:10:36 -070019346
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019355 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070019356 }
19357 }
19358
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)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019369 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070019370 }
19371 }
19372 }
Marat Dukhan1c587112020-04-08 20:04:28 -070019373#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
19374
19375
19376#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070019377 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019378 TEST_REQUIRES_X86_AVX512F;
19379 DWConvMicrokernelTester()
19380 .cr(32)
19381 .kr(9)
19382 .channels(32)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019383 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019384 }
19385
Marat Dukhande06f492020-04-09 00:19:31 -070019386 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019387 TEST_REQUIRES_X86_AVX512F;
19388 for (uint32_t channels = 64; channels < 512; channels += 96) {
19389 DWConvMicrokernelTester()
19390 .cr(32)
19391 .kr(9)
19392 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019393 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019394 }
19395 }
19396
Marat Dukhande06f492020-04-09 00:19:31 -070019397 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019398 TEST_REQUIRES_X86_AVX512F;
19399 for (uint32_t channels = 64; channels < 512; channels += 96) {
19400 DWConvMicrokernelTester()
19401 .cr(32)
19402 .kr(9)
19403 .channels(channels)
19404 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019405 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019406 }
19407 }
19408
Marat Dukhande06f492020-04-09 00:19:31 -070019409 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019410 TEST_REQUIRES_X86_AVX512F;
19411 for (uint32_t channels = 64; channels < 512; channels += 96) {
19412 DWConvMicrokernelTester()
19413 .cr(32)
19414 .kr(9)
19415 .channels(channels)
19416 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019417 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019418 }
19419 }
19420
Marat Dukhande06f492020-04-09 00:19:31 -070019421 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019422 TEST_REQUIRES_X86_AVX512F;
19423 for (uint32_t channels = 1; channels < 32; channels++) {
19424 DWConvMicrokernelTester()
19425 .cr(32)
19426 .kr(9)
19427 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019428 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019429 }
19430 }
19431
Marat Dukhande06f492020-04-09 00:19:31 -070019432 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019433 TEST_REQUIRES_X86_AVX512F;
19434 for (uint32_t channels = 33; channels < 64; channels++) {
19435 DWConvMicrokernelTester()
19436 .cr(32)
19437 .kr(9)
19438 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019439 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019440 }
19441 }
19442
Marat Dukhande06f492020-04-09 00:19:31 -070019443 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019444 TEST_REQUIRES_X86_AVX512F;
19445 for (uint32_t channels = 33; channels < 64; channels++) {
19446 DWConvMicrokernelTester()
19447 .cr(32)
19448 .kr(9)
19449 .channels(channels)
19450 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019451 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019452 }
19453 }
19454
Marat Dukhande06f492020-04-09 00:19:31 -070019455 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019456 TEST_REQUIRES_X86_AVX512F;
19457 for (uint32_t channels = 33; channels < 64; channels++) {
19458 DWConvMicrokernelTester()
19459 .cr(32)
19460 .kr(9)
19461 .channels(channels)
19462 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019463 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019464 }
19465 }
19466
Marat Dukhande06f492020-04-09 00:19:31 -070019467 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019468 TEST_REQUIRES_X86_AVX512F;
19469 for (size_t channels = 1; channels <= 160; channels += 31) {
19470 DWConvMicrokernelTester()
19471 .cr(32)
19472 .kr(9)
19473 .channels(channels)
19474 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019475 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019476 }
19477 }
19478
Marat Dukhande06f492020-04-09 00:19:31 -070019479 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019480 TEST_REQUIRES_X86_AVX512F;
19481 for (size_t channels = 1; channels <= 160; channels += 31) {
19482 for (size_t step = 2; step <= 9; step++) {
19483 DWConvMicrokernelTester()
19484 .cr(32)
19485 .kr(9)
19486 .channels(channels)
19487 .width(3)
19488 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019489 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019490 }
19491 }
19492 }
19493
Marat Dukhande06f492020-04-09 00:19:31 -070019494 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019495 TEST_REQUIRES_X86_AVX512F;
19496 for (size_t channels = 1; channels <= 160; channels += 31) {
19497 DWConvMicrokernelTester()
19498 .cr(32)
19499 .kr(9)
19500 .channels(32)
19501 .width(5)
19502 .output_stride(163)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019503 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019504 }
19505 }
19506
Marat Dukhande06f492020-04-09 00:19:31 -070019507 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019508 TEST_REQUIRES_X86_AVX512F;
19509 for (size_t channels = 1; channels <= 160; channels += 31) {
19510 DWConvMicrokernelTester()
19511 .cr(32)
19512 .kr(9)
19513 .channels(channels)
19514 .width(3)
19515 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019516 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019517 }
19518 }
19519
Marat Dukhande06f492020-04-09 00:19:31 -070019520 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019521 TEST_REQUIRES_X86_AVX512F;
19522 for (size_t channels = 1; channels <= 160; channels += 31) {
19523 DWConvMicrokernelTester()
19524 .cr(32)
19525 .kr(9)
19526 .channels(channels)
19527 .width(3)
19528 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019529 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019530 }
19531 }
Frank Barchardd5360722020-05-17 16:10:36 -070019532
19533 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, input_offset) {
19534 TEST_REQUIRES_X86_AVX512F;
19535 for (uint32_t channels = 64; channels < 512; channels += 96) {
19536 DWConvMicrokernelTester()
19537 .cr(32)
19538 .kr(9)
19539 .channels(channels)
19540 .input_offset(592)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019541 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070019542 }
19543 }
19544
19545 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, zero) {
19546 TEST_REQUIRES_X86_AVX512F;
19547 for (uint32_t mz = 0; mz < 9; mz++) {
19548 for (uint32_t channels = 64; channels < 512; channels += 96) {
19549 DWConvMicrokernelTester()
19550 .cr(32)
19551 .kr(9)
19552 .channels(channels)
19553 .input_offset(592)
19554 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019555 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070019556 }
19557 }
19558 }
Marat Dukhan1c587112020-04-08 20:04:28 -070019559#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
19560
19561
19562#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070019563 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019564 TEST_REQUIRES_X86_AVX512F;
19565 DWConvMicrokernelTester()
19566 .cr(32)
19567 .kr(9)
19568 .channels(32)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019569 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019570 }
19571
Marat Dukhande06f492020-04-09 00:19:31 -070019572 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019573 TEST_REQUIRES_X86_AVX512F;
19574 for (uint32_t channels = 64; channels < 512; channels += 96) {
19575 DWConvMicrokernelTester()
19576 .cr(32)
19577 .kr(9)
19578 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019579 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019580 }
19581 }
19582
Marat Dukhande06f492020-04-09 00:19:31 -070019583 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019584 TEST_REQUIRES_X86_AVX512F;
19585 for (uint32_t channels = 64; channels < 512; channels += 96) {
19586 DWConvMicrokernelTester()
19587 .cr(32)
19588 .kr(9)
19589 .channels(channels)
19590 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019591 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019592 }
19593 }
19594
Marat Dukhande06f492020-04-09 00:19:31 -070019595 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019596 TEST_REQUIRES_X86_AVX512F;
19597 for (uint32_t channels = 64; channels < 512; channels += 96) {
19598 DWConvMicrokernelTester()
19599 .cr(32)
19600 .kr(9)
19601 .channels(channels)
19602 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019603 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019604 }
19605 }
19606
Marat Dukhande06f492020-04-09 00:19:31 -070019607 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019608 TEST_REQUIRES_X86_AVX512F;
19609 for (uint32_t channels = 1; channels < 32; channels++) {
19610 DWConvMicrokernelTester()
19611 .cr(32)
19612 .kr(9)
19613 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019614 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019615 }
19616 }
19617
Marat Dukhande06f492020-04-09 00:19:31 -070019618 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019619 TEST_REQUIRES_X86_AVX512F;
19620 for (uint32_t channels = 33; channels < 64; channels++) {
19621 DWConvMicrokernelTester()
19622 .cr(32)
19623 .kr(9)
19624 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019625 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019626 }
19627 }
19628
Marat Dukhande06f492020-04-09 00:19:31 -070019629 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019630 TEST_REQUIRES_X86_AVX512F;
19631 for (uint32_t channels = 33; channels < 64; channels++) {
19632 DWConvMicrokernelTester()
19633 .cr(32)
19634 .kr(9)
19635 .channels(channels)
19636 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019637 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019638 }
19639 }
19640
Marat Dukhande06f492020-04-09 00:19:31 -070019641 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019642 TEST_REQUIRES_X86_AVX512F;
19643 for (uint32_t channels = 33; channels < 64; channels++) {
19644 DWConvMicrokernelTester()
19645 .cr(32)
19646 .kr(9)
19647 .channels(channels)
19648 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019649 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019650 }
19651 }
19652
Marat Dukhande06f492020-04-09 00:19:31 -070019653 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019654 TEST_REQUIRES_X86_AVX512F;
19655 for (size_t channels = 1; channels <= 160; channels += 31) {
19656 DWConvMicrokernelTester()
19657 .cr(32)
19658 .kr(9)
19659 .channels(channels)
19660 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019661 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019662 }
19663 }
19664
Marat Dukhande06f492020-04-09 00:19:31 -070019665 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019666 TEST_REQUIRES_X86_AVX512F;
19667 for (size_t channels = 1; channels <= 160; channels += 31) {
19668 for (size_t step = 2; step <= 9; step++) {
19669 DWConvMicrokernelTester()
19670 .cr(32)
19671 .kr(9)
19672 .channels(channels)
19673 .width(3)
19674 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019675 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019676 }
19677 }
19678 }
19679
Marat Dukhande06f492020-04-09 00:19:31 -070019680 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019681 TEST_REQUIRES_X86_AVX512F;
19682 for (size_t channels = 1; channels <= 160; channels += 31) {
19683 DWConvMicrokernelTester()
19684 .cr(32)
19685 .kr(9)
19686 .channels(32)
19687 .width(5)
19688 .output_stride(163)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019689 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019690 }
19691 }
19692
Marat Dukhande06f492020-04-09 00:19:31 -070019693 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019694 TEST_REQUIRES_X86_AVX512F;
19695 for (size_t channels = 1; channels <= 160; channels += 31) {
19696 DWConvMicrokernelTester()
19697 .cr(32)
19698 .kr(9)
19699 .channels(channels)
19700 .width(3)
19701 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019702 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019703 }
19704 }
19705
Marat Dukhande06f492020-04-09 00:19:31 -070019706 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070019707 TEST_REQUIRES_X86_AVX512F;
19708 for (size_t channels = 1; channels <= 160; channels += 31) {
19709 DWConvMicrokernelTester()
19710 .cr(32)
19711 .kr(9)
19712 .channels(channels)
19713 .width(3)
19714 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019715 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070019716 }
19717 }
Frank Barchardd5360722020-05-17 16:10:36 -070019718
19719 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, input_offset) {
19720 TEST_REQUIRES_X86_AVX512F;
19721 for (uint32_t channels = 64; channels < 512; channels += 96) {
19722 DWConvMicrokernelTester()
19723 .cr(32)
19724 .kr(9)
19725 .channels(channels)
19726 .input_offset(592)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019727 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070019728 }
19729 }
19730
19731 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, zero) {
19732 TEST_REQUIRES_X86_AVX512F;
19733 for (uint32_t mz = 0; mz < 9; mz++) {
19734 for (uint32_t channels = 64; channels < 512; channels += 96) {
19735 DWConvMicrokernelTester()
19736 .cr(32)
19737 .kr(9)
19738 .channels(channels)
19739 .input_offset(592)
19740 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070019741 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070019742 }
19743 }
19744 }
Marat Dukhan1c587112020-04-08 20:04:28 -070019745#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
19746
19747
19748#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070019749 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_eq_16) {
19750 TEST_REQUIRES_X86_AVX512F;
19751 DWConvMicrokernelTester()
19752 .cr(16)
19753 .kr(3)
19754 .channels(16)
19755 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19756 }
19757
19758 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_div_16) {
19759 TEST_REQUIRES_X86_AVX512F;
19760 for (uint32_t channels = 32; channels < 256; channels += 48) {
19761 DWConvMicrokernelTester()
19762 .cr(16)
19763 .kr(3)
19764 .channels(channels)
19765 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19766 }
19767 }
19768
19769 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_div_16_with_qmin) {
19770 TEST_REQUIRES_X86_AVX512F;
19771 for (uint32_t channels = 32; channels < 256; channels += 48) {
19772 DWConvMicrokernelTester()
19773 .cr(16)
19774 .kr(3)
19775 .channels(channels)
19776 .qmin(128)
19777 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19778 }
19779 }
19780
19781 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_div_16_with_qmax) {
19782 TEST_REQUIRES_X86_AVX512F;
19783 for (uint32_t channels = 32; channels < 256; channels += 48) {
19784 DWConvMicrokernelTester()
19785 .cr(16)
19786 .kr(3)
19787 .channels(channels)
19788 .qmax(128)
19789 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19790 }
19791 }
19792
19793 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_lt_16) {
19794 TEST_REQUIRES_X86_AVX512F;
19795 for (uint32_t channels = 1; channels < 16; channels++) {
19796 DWConvMicrokernelTester()
19797 .cr(16)
19798 .kr(3)
19799 .channels(channels)
19800 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19801 }
19802 }
19803
19804 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_gt_16) {
19805 TEST_REQUIRES_X86_AVX512F;
19806 for (uint32_t channels = 17; channels < 32; channels++) {
19807 DWConvMicrokernelTester()
19808 .cr(16)
19809 .kr(3)
19810 .channels(channels)
19811 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19812 }
19813 }
19814
19815 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_gt_16_with_qmin) {
19816 TEST_REQUIRES_X86_AVX512F;
19817 for (uint32_t channels = 17; channels < 32; channels++) {
19818 DWConvMicrokernelTester()
19819 .cr(16)
19820 .kr(3)
19821 .channels(channels)
19822 .qmin(128)
19823 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19824 }
19825 }
19826
19827 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, c_gt_16_with_qmax) {
19828 TEST_REQUIRES_X86_AVX512F;
19829 for (uint32_t channels = 17; channels < 32; channels++) {
19830 DWConvMicrokernelTester()
19831 .cr(16)
19832 .kr(3)
19833 .channels(channels)
19834 .qmax(128)
19835 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19836 }
19837 }
19838
19839 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, multipixel) {
19840 TEST_REQUIRES_X86_AVX512F;
19841 for (size_t channels = 1; channels <= 80; channels += 15) {
19842 DWConvMicrokernelTester()
19843 .cr(16)
19844 .kr(3)
19845 .channels(channels)
19846 .width(3)
19847 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19848 }
19849 }
19850
19851 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, multipixel_with_step) {
19852 TEST_REQUIRES_X86_AVX512F;
19853 for (size_t channels = 1; channels <= 80; channels += 15) {
19854 for (size_t step = 2; step <= 3; step++) {
19855 DWConvMicrokernelTester()
19856 .cr(16)
19857 .kr(3)
19858 .channels(channels)
19859 .width(3)
19860 .step(step)
19861 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19862 }
19863 }
19864 }
19865
19866 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, multipixel_with_output_stride) {
19867 TEST_REQUIRES_X86_AVX512F;
19868 for (size_t channels = 1; channels <= 80; channels += 15) {
19869 DWConvMicrokernelTester()
19870 .cr(16)
19871 .kr(3)
19872 .channels(16)
19873 .width(5)
19874 .output_stride(83)
19875 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19876 }
19877 }
19878
19879 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, multipixel_with_qmin) {
19880 TEST_REQUIRES_X86_AVX512F;
19881 for (size_t channels = 1; channels <= 80; channels += 15) {
19882 DWConvMicrokernelTester()
19883 .cr(16)
19884 .kr(3)
19885 .channels(channels)
19886 .width(3)
19887 .qmin(128)
19888 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19889 }
19890 }
19891
19892 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, multipixel_with_qmax) {
19893 TEST_REQUIRES_X86_AVX512F;
19894 for (size_t channels = 1; channels <= 80; channels += 15) {
19895 DWConvMicrokernelTester()
19896 .cr(16)
19897 .kr(3)
19898 .channels(channels)
19899 .width(3)
19900 .qmax(128)
19901 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19902 }
19903 }
19904
19905 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, input_offset) {
19906 TEST_REQUIRES_X86_AVX512F;
19907 for (uint32_t channels = 32; channels < 256; channels += 48) {
19908 DWConvMicrokernelTester()
19909 .cr(16)
19910 .kr(3)
19911 .channels(channels)
19912 .input_offset(304)
19913 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f, xnn_init_f32_minmax_scalar_params);
19914 }
19915 }
19916
19917 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F, zero) {
19918 TEST_REQUIRES_X86_AVX512F;
19919 for (uint32_t mz = 0; mz < 3; mz++) {
19920 for (uint32_t channels = 32; channels < 256; channels += 48) {
19921 DWConvMicrokernelTester()
19922 .cr(16)
19923 .kr(3)
19924 .channels(channels)
19925 .input_offset(304)
19926 .zero_index(mz)
19927 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__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
19935 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_eq_16) {
19936 TEST_REQUIRES_X86_AVX512F;
19937 DWConvMicrokernelTester()
19938 .cr(16)
19939 .kr(3)
19940 .channels(16)
19941 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19942 }
19943
19944 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_div_16) {
19945 TEST_REQUIRES_X86_AVX512F;
19946 for (uint32_t channels = 32; channels < 256; channels += 48) {
19947 DWConvMicrokernelTester()
19948 .cr(16)
19949 .kr(3)
19950 .channels(channels)
19951 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19952 }
19953 }
19954
19955 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_div_16_with_qmin) {
19956 TEST_REQUIRES_X86_AVX512F;
19957 for (uint32_t channels = 32; channels < 256; channels += 48) {
19958 DWConvMicrokernelTester()
19959 .cr(16)
19960 .kr(3)
19961 .channels(channels)
19962 .qmin(128)
19963 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19964 }
19965 }
19966
19967 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_div_16_with_qmax) {
19968 TEST_REQUIRES_X86_AVX512F;
19969 for (uint32_t channels = 32; channels < 256; channels += 48) {
19970 DWConvMicrokernelTester()
19971 .cr(16)
19972 .kr(3)
19973 .channels(channels)
19974 .qmax(128)
19975 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19976 }
19977 }
19978
19979 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_lt_16) {
19980 TEST_REQUIRES_X86_AVX512F;
19981 for (uint32_t channels = 1; channels < 16; channels++) {
19982 DWConvMicrokernelTester()
19983 .cr(16)
19984 .kr(3)
19985 .channels(channels)
19986 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19987 }
19988 }
19989
19990 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_gt_16) {
19991 TEST_REQUIRES_X86_AVX512F;
19992 for (uint32_t channels = 17; channels < 32; channels++) {
19993 DWConvMicrokernelTester()
19994 .cr(16)
19995 .kr(3)
19996 .channels(channels)
19997 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
19998 }
19999 }
20000
20001 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_gt_16_with_qmin) {
20002 TEST_REQUIRES_X86_AVX512F;
20003 for (uint32_t channels = 17; channels < 32; channels++) {
20004 DWConvMicrokernelTester()
20005 .cr(16)
20006 .kr(3)
20007 .channels(channels)
20008 .qmin(128)
20009 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20010 }
20011 }
20012
20013 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, c_gt_16_with_qmax) {
20014 TEST_REQUIRES_X86_AVX512F;
20015 for (uint32_t channels = 17; channels < 32; channels++) {
20016 DWConvMicrokernelTester()
20017 .cr(16)
20018 .kr(3)
20019 .channels(channels)
20020 .qmax(128)
20021 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20022 }
20023 }
20024
20025 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, multipixel) {
20026 TEST_REQUIRES_X86_AVX512F;
20027 for (size_t channels = 1; channels <= 80; channels += 15) {
20028 DWConvMicrokernelTester()
20029 .cr(16)
20030 .kr(3)
20031 .channels(channels)
20032 .width(3)
20033 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20034 }
20035 }
20036
20037 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, multipixel_with_step) {
20038 TEST_REQUIRES_X86_AVX512F;
20039 for (size_t channels = 1; channels <= 80; channels += 15) {
20040 for (size_t step = 2; step <= 3; step++) {
20041 DWConvMicrokernelTester()
20042 .cr(16)
20043 .kr(3)
20044 .channels(channels)
20045 .width(3)
20046 .step(step)
20047 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20048 }
20049 }
20050 }
20051
20052 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, multipixel_with_output_stride) {
20053 TEST_REQUIRES_X86_AVX512F;
20054 for (size_t channels = 1; channels <= 80; channels += 15) {
20055 DWConvMicrokernelTester()
20056 .cr(16)
20057 .kr(3)
20058 .channels(16)
20059 .width(5)
20060 .output_stride(83)
20061 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20062 }
20063 }
20064
20065 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, multipixel_with_qmin) {
20066 TEST_REQUIRES_X86_AVX512F;
20067 for (size_t channels = 1; channels <= 80; channels += 15) {
20068 DWConvMicrokernelTester()
20069 .cr(16)
20070 .kr(3)
20071 .channels(channels)
20072 .width(3)
20073 .qmin(128)
20074 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20075 }
20076 }
20077
20078 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, multipixel_with_qmax) {
20079 TEST_REQUIRES_X86_AVX512F;
20080 for (size_t channels = 1; channels <= 80; channels += 15) {
20081 DWConvMicrokernelTester()
20082 .cr(16)
20083 .kr(3)
20084 .channels(channels)
20085 .width(3)
20086 .qmax(128)
20087 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20088 }
20089 }
20090
20091 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, input_offset) {
20092 TEST_REQUIRES_X86_AVX512F;
20093 for (uint32_t channels = 32; channels < 256; channels += 48) {
20094 DWConvMicrokernelTester()
20095 .cr(16)
20096 .kr(3)
20097 .channels(channels)
20098 .input_offset(304)
20099 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20100 }
20101 }
20102
20103 TEST(F32_DWCONV_MINMAX_UP16X3__AVX512F_ACC2, zero) {
20104 TEST_REQUIRES_X86_AVX512F;
20105 for (uint32_t mz = 0; mz < 3; mz++) {
20106 for (uint32_t channels = 32; channels < 256; channels += 48) {
20107 DWConvMicrokernelTester()
20108 .cr(16)
20109 .kr(3)
20110 .channels(channels)
20111 .input_offset(304)
20112 .zero_index(mz)
20113 .Test(xnn_f32_dwconv_minmax_ukernel_up16x3__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
Marat Dukhande06f492020-04-09 00:19:31 -070020121 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020122 TEST_REQUIRES_X86_AVX512F;
20123 DWConvMicrokernelTester()
20124 .cr(16)
20125 .kr(4)
20126 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020127 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020128 }
20129
Marat Dukhande06f492020-04-09 00:19:31 -070020130 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020131 TEST_REQUIRES_X86_AVX512F;
20132 for (uint32_t channels = 32; channels < 256; channels += 48) {
20133 DWConvMicrokernelTester()
20134 .cr(16)
20135 .kr(4)
20136 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020137 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020138 }
20139 }
20140
Marat Dukhande06f492020-04-09 00:19:31 -070020141 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020142 TEST_REQUIRES_X86_AVX512F;
20143 for (uint32_t channels = 32; channels < 256; channels += 48) {
20144 DWConvMicrokernelTester()
20145 .cr(16)
20146 .kr(4)
20147 .channels(channels)
20148 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020149 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020150 }
20151 }
20152
Marat Dukhande06f492020-04-09 00:19:31 -070020153 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020154 TEST_REQUIRES_X86_AVX512F;
20155 for (uint32_t channels = 32; channels < 256; channels += 48) {
20156 DWConvMicrokernelTester()
20157 .cr(16)
20158 .kr(4)
20159 .channels(channels)
20160 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020161 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020162 }
20163 }
20164
Marat Dukhande06f492020-04-09 00:19:31 -070020165 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020166 TEST_REQUIRES_X86_AVX512F;
20167 for (uint32_t channels = 1; channels < 16; channels++) {
20168 DWConvMicrokernelTester()
20169 .cr(16)
20170 .kr(4)
20171 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020172 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020173 }
20174 }
20175
Marat Dukhande06f492020-04-09 00:19:31 -070020176 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020177 TEST_REQUIRES_X86_AVX512F;
20178 for (uint32_t channels = 17; channels < 32; channels++) {
20179 DWConvMicrokernelTester()
20180 .cr(16)
20181 .kr(4)
20182 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020183 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020184 }
20185 }
20186
Marat Dukhande06f492020-04-09 00:19:31 -070020187 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020188 TEST_REQUIRES_X86_AVX512F;
20189 for (uint32_t channels = 17; channels < 32; channels++) {
20190 DWConvMicrokernelTester()
20191 .cr(16)
20192 .kr(4)
20193 .channels(channels)
20194 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020195 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020196 }
20197 }
20198
Marat Dukhande06f492020-04-09 00:19:31 -070020199 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020200 TEST_REQUIRES_X86_AVX512F;
20201 for (uint32_t channels = 17; channels < 32; channels++) {
20202 DWConvMicrokernelTester()
20203 .cr(16)
20204 .kr(4)
20205 .channels(channels)
20206 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020207 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020208 }
20209 }
20210
Marat Dukhande06f492020-04-09 00:19:31 -070020211 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020212 TEST_REQUIRES_X86_AVX512F;
20213 for (size_t channels = 1; channels <= 80; channels += 15) {
20214 DWConvMicrokernelTester()
20215 .cr(16)
20216 .kr(4)
20217 .channels(channels)
20218 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020219 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020220 }
20221 }
20222
Marat Dukhande06f492020-04-09 00:19:31 -070020223 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020224 TEST_REQUIRES_X86_AVX512F;
20225 for (size_t channels = 1; channels <= 80; channels += 15) {
20226 for (size_t step = 2; step <= 4; step++) {
20227 DWConvMicrokernelTester()
20228 .cr(16)
20229 .kr(4)
20230 .channels(channels)
20231 .width(3)
20232 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020233 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020234 }
20235 }
20236 }
20237
Marat Dukhande06f492020-04-09 00:19:31 -070020238 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020239 TEST_REQUIRES_X86_AVX512F;
20240 for (size_t channels = 1; channels <= 80; channels += 15) {
20241 DWConvMicrokernelTester()
20242 .cr(16)
20243 .kr(4)
20244 .channels(16)
20245 .width(5)
20246 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020247 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020248 }
20249 }
20250
Marat Dukhande06f492020-04-09 00:19:31 -070020251 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020252 TEST_REQUIRES_X86_AVX512F;
20253 for (size_t channels = 1; channels <= 80; channels += 15) {
20254 DWConvMicrokernelTester()
20255 .cr(16)
20256 .kr(4)
20257 .channels(channels)
20258 .width(3)
20259 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020260 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020261 }
20262 }
20263
Marat Dukhande06f492020-04-09 00:19:31 -070020264 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020265 TEST_REQUIRES_X86_AVX512F;
20266 for (size_t channels = 1; channels <= 80; channels += 15) {
20267 DWConvMicrokernelTester()
20268 .cr(16)
20269 .kr(4)
20270 .channels(channels)
20271 .width(3)
20272 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020273 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020274 }
20275 }
Frank Barchardd5360722020-05-17 16:10:36 -070020276
20277 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, input_offset) {
20278 TEST_REQUIRES_X86_AVX512F;
20279 for (uint32_t channels = 32; channels < 256; channels += 48) {
20280 DWConvMicrokernelTester()
20281 .cr(16)
20282 .kr(4)
20283 .channels(channels)
20284 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020285 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070020286 }
20287 }
20288
20289 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, zero) {
20290 TEST_REQUIRES_X86_AVX512F;
20291 for (uint32_t mz = 0; mz < 4; mz++) {
20292 for (uint32_t channels = 32; channels < 256; channels += 48) {
20293 DWConvMicrokernelTester()
20294 .cr(16)
20295 .kr(4)
20296 .channels(channels)
20297 .input_offset(304)
20298 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020299 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070020300 }
20301 }
20302 }
Marat Dukhan1c587112020-04-08 20:04:28 -070020303#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
20304
20305
20306#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070020307 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020308 TEST_REQUIRES_X86_AVX512F;
20309 DWConvMicrokernelTester()
20310 .cr(16)
20311 .kr(4)
20312 .channels(16)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020313 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020314 }
20315
Marat Dukhande06f492020-04-09 00:19:31 -070020316 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020317 TEST_REQUIRES_X86_AVX512F;
20318 for (uint32_t channels = 32; channels < 256; channels += 48) {
20319 DWConvMicrokernelTester()
20320 .cr(16)
20321 .kr(4)
20322 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020323 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020324 }
20325 }
20326
Marat Dukhande06f492020-04-09 00:19:31 -070020327 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020328 TEST_REQUIRES_X86_AVX512F;
20329 for (uint32_t channels = 32; channels < 256; channels += 48) {
20330 DWConvMicrokernelTester()
20331 .cr(16)
20332 .kr(4)
20333 .channels(channels)
20334 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020335 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020336 }
20337 }
20338
Marat Dukhande06f492020-04-09 00:19:31 -070020339 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020340 TEST_REQUIRES_X86_AVX512F;
20341 for (uint32_t channels = 32; channels < 256; channels += 48) {
20342 DWConvMicrokernelTester()
20343 .cr(16)
20344 .kr(4)
20345 .channels(channels)
20346 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020347 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020348 }
20349 }
20350
Marat Dukhande06f492020-04-09 00:19:31 -070020351 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020352 TEST_REQUIRES_X86_AVX512F;
20353 for (uint32_t channels = 1; channels < 16; channels++) {
20354 DWConvMicrokernelTester()
20355 .cr(16)
20356 .kr(4)
20357 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020358 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020359 }
20360 }
20361
Marat Dukhande06f492020-04-09 00:19:31 -070020362 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020363 TEST_REQUIRES_X86_AVX512F;
20364 for (uint32_t channels = 17; channels < 32; channels++) {
20365 DWConvMicrokernelTester()
20366 .cr(16)
20367 .kr(4)
20368 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020369 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020370 }
20371 }
20372
Marat Dukhande06f492020-04-09 00:19:31 -070020373 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020374 TEST_REQUIRES_X86_AVX512F;
20375 for (uint32_t channels = 17; channels < 32; channels++) {
20376 DWConvMicrokernelTester()
20377 .cr(16)
20378 .kr(4)
20379 .channels(channels)
20380 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020381 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020382 }
20383 }
20384
Marat Dukhande06f492020-04-09 00:19:31 -070020385 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020386 TEST_REQUIRES_X86_AVX512F;
20387 for (uint32_t channels = 17; channels < 32; channels++) {
20388 DWConvMicrokernelTester()
20389 .cr(16)
20390 .kr(4)
20391 .channels(channels)
20392 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020393 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020394 }
20395 }
20396
Marat Dukhande06f492020-04-09 00:19:31 -070020397 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020398 TEST_REQUIRES_X86_AVX512F;
20399 for (size_t channels = 1; channels <= 80; channels += 15) {
20400 DWConvMicrokernelTester()
20401 .cr(16)
20402 .kr(4)
20403 .channels(channels)
20404 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020405 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020406 }
20407 }
20408
Marat Dukhande06f492020-04-09 00:19:31 -070020409 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020410 TEST_REQUIRES_X86_AVX512F;
20411 for (size_t channels = 1; channels <= 80; channels += 15) {
20412 for (size_t step = 2; step <= 4; step++) {
20413 DWConvMicrokernelTester()
20414 .cr(16)
20415 .kr(4)
20416 .channels(channels)
20417 .width(3)
20418 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020419 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020420 }
20421 }
20422 }
20423
Marat Dukhande06f492020-04-09 00:19:31 -070020424 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020425 TEST_REQUIRES_X86_AVX512F;
20426 for (size_t channels = 1; channels <= 80; channels += 15) {
20427 DWConvMicrokernelTester()
20428 .cr(16)
20429 .kr(4)
20430 .channels(16)
20431 .width(5)
20432 .output_stride(83)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020433 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020434 }
20435 }
20436
Marat Dukhande06f492020-04-09 00:19:31 -070020437 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020438 TEST_REQUIRES_X86_AVX512F;
20439 for (size_t channels = 1; channels <= 80; channels += 15) {
20440 DWConvMicrokernelTester()
20441 .cr(16)
20442 .kr(4)
20443 .channels(channels)
20444 .width(3)
20445 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020446 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020447 }
20448 }
20449
Marat Dukhande06f492020-04-09 00:19:31 -070020450 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020451 TEST_REQUIRES_X86_AVX512F;
20452 for (size_t channels = 1; channels <= 80; channels += 15) {
20453 DWConvMicrokernelTester()
20454 .cr(16)
20455 .kr(4)
20456 .channels(channels)
20457 .width(3)
20458 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020459 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020460 }
20461 }
Frank Barchardd5360722020-05-17 16:10:36 -070020462
20463 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, input_offset) {
20464 TEST_REQUIRES_X86_AVX512F;
20465 for (uint32_t channels = 32; channels < 256; channels += 48) {
20466 DWConvMicrokernelTester()
20467 .cr(16)
20468 .kr(4)
20469 .channels(channels)
20470 .input_offset(304)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020471 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070020472 }
20473 }
20474
20475 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, zero) {
20476 TEST_REQUIRES_X86_AVX512F;
20477 for (uint32_t mz = 0; mz < 4; mz++) {
20478 for (uint32_t channels = 32; channels < 256; channels += 48) {
20479 DWConvMicrokernelTester()
20480 .cr(16)
20481 .kr(4)
20482 .channels(channels)
20483 .input_offset(304)
20484 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020485 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070020486 }
20487 }
20488 }
Marat Dukhan1c587112020-04-08 20:04:28 -070020489#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
20490
20491
20492#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070020493 TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, c_eq_32) {
20494 TEST_REQUIRES_X86_AVX512F;
20495 DWConvMicrokernelTester()
20496 .cr(32)
20497 .kr(3)
20498 .channels(32)
20499 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20500 }
20501
20502 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20508 .channels(channels)
20509 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20510 }
20511 }
20512
20513 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20519 .channels(channels)
20520 .qmin(128)
20521 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20522 }
20523 }
20524
20525 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20531 .channels(channels)
20532 .qmax(128)
20533 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20534 }
20535 }
20536
20537 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20543 .channels(channels)
20544 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20545 }
20546 }
20547
20548 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20554 .channels(channels)
20555 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20556 }
20557 }
20558
20559 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20565 .channels(channels)
20566 .qmin(128)
20567 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20568 }
20569 }
20570
20571 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20577 .channels(channels)
20578 .qmax(128)
20579 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20580 }
20581 }
20582
20583 TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, multipixel) {
20584 TEST_REQUIRES_X86_AVX512F;
20585 for (size_t channels = 1; channels <= 160; channels += 31) {
20586 DWConvMicrokernelTester()
20587 .cr(32)
20588 .kr(3)
20589 .channels(channels)
20590 .width(3)
20591 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20592 }
20593 }
20594
20595 TEST(F32_DWCONV_MINMAX_UP32X3__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 <= 3; step++) {
20599 DWConvMicrokernelTester()
20600 .cr(32)
20601 .kr(3)
20602 .channels(channels)
20603 .width(3)
20604 .step(step)
20605 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20606 }
20607 }
20608 }
20609
20610 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20616 .channels(32)
20617 .width(5)
20618 .output_stride(163)
20619 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20620 }
20621 }
20622
20623 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20629 .channels(channels)
20630 .width(3)
20631 .qmin(128)
20632 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20633 }
20634 }
20635
20636 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20642 .channels(channels)
20643 .width(3)
20644 .qmax(128)
20645 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20646 }
20647 }
20648
20649 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20655 .channels(channels)
20656 .input_offset(592)
20657 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f, xnn_init_f32_minmax_scalar_params);
20658 }
20659 }
20660
20661 TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F, zero) {
20662 TEST_REQUIRES_X86_AVX512F;
20663 for (uint32_t mz = 0; mz < 3; mz++) {
20664 for (uint32_t channels = 64; channels < 512; channels += 96) {
20665 DWConvMicrokernelTester()
20666 .cr(32)
20667 .kr(3)
20668 .channels(channels)
20669 .input_offset(592)
20670 .zero_index(mz)
20671 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__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
20679 TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, c_eq_32) {
20680 TEST_REQUIRES_X86_AVX512F;
20681 DWConvMicrokernelTester()
20682 .cr(32)
20683 .kr(3)
20684 .channels(32)
20685 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20686 }
20687
20688 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20694 .channels(channels)
20695 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20696 }
20697 }
20698
20699 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20705 .channels(channels)
20706 .qmin(128)
20707 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20708 }
20709 }
20710
20711 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20717 .channels(channels)
20718 .qmax(128)
20719 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20720 }
20721 }
20722
20723 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20729 .channels(channels)
20730 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20731 }
20732 }
20733
20734 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20740 .channels(channels)
20741 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20742 }
20743 }
20744
20745 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20751 .channels(channels)
20752 .qmin(128)
20753 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20754 }
20755 }
20756
20757 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20763 .channels(channels)
20764 .qmax(128)
20765 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20766 }
20767 }
20768
20769 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20775 .channels(channels)
20776 .width(3)
20777 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20778 }
20779 }
20780
20781 TEST(F32_DWCONV_MINMAX_UP32X3__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 <= 3; step++) {
20785 DWConvMicrokernelTester()
20786 .cr(32)
20787 .kr(3)
20788 .channels(channels)
20789 .width(3)
20790 .step(step)
20791 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20792 }
20793 }
20794 }
20795
20796 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20802 .channels(32)
20803 .width(5)
20804 .output_stride(163)
20805 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20806 }
20807 }
20808
20809 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20815 .channels(channels)
20816 .width(3)
20817 .qmin(128)
20818 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20819 }
20820 }
20821
20822 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20828 .channels(channels)
20829 .width(3)
20830 .qmax(128)
20831 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20832 }
20833 }
20834
20835 TEST(F32_DWCONV_MINMAX_UP32X3__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(3)
20841 .channels(channels)
20842 .input_offset(592)
20843 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
20844 }
20845 }
20846
20847 TEST(F32_DWCONV_MINMAX_UP32X3__AVX512F_ACC2, zero) {
20848 TEST_REQUIRES_X86_AVX512F;
20849 for (uint32_t mz = 0; mz < 3; mz++) {
20850 for (uint32_t channels = 64; channels < 512; channels += 96) {
20851 DWConvMicrokernelTester()
20852 .cr(32)
20853 .kr(3)
20854 .channels(channels)
20855 .input_offset(592)
20856 .zero_index(mz)
20857 .Test(xnn_f32_dwconv_minmax_ukernel_up32x3__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
Marat Dukhande06f492020-04-09 00:19:31 -070020865 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020866 TEST_REQUIRES_X86_AVX512F;
20867 DWConvMicrokernelTester()
20868 .cr(32)
20869 .kr(4)
20870 .channels(32)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020871 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020872 }
20873
Marat Dukhande06f492020-04-09 00:19:31 -070020874 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020875 TEST_REQUIRES_X86_AVX512F;
20876 for (uint32_t channels = 64; channels < 512; channels += 96) {
20877 DWConvMicrokernelTester()
20878 .cr(32)
20879 .kr(4)
20880 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020881 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020882 }
20883 }
20884
Marat Dukhande06f492020-04-09 00:19:31 -070020885 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020886 TEST_REQUIRES_X86_AVX512F;
20887 for (uint32_t channels = 64; channels < 512; channels += 96) {
20888 DWConvMicrokernelTester()
20889 .cr(32)
20890 .kr(4)
20891 .channels(channels)
20892 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020893 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020894 }
20895 }
20896
Marat Dukhande06f492020-04-09 00:19:31 -070020897 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020898 TEST_REQUIRES_X86_AVX512F;
20899 for (uint32_t channels = 64; channels < 512; channels += 96) {
20900 DWConvMicrokernelTester()
20901 .cr(32)
20902 .kr(4)
20903 .channels(channels)
20904 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020905 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020906 }
20907 }
20908
Marat Dukhande06f492020-04-09 00:19:31 -070020909 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020910 TEST_REQUIRES_X86_AVX512F;
20911 for (uint32_t channels = 1; channels < 32; channels++) {
20912 DWConvMicrokernelTester()
20913 .cr(32)
20914 .kr(4)
20915 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020916 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020917 }
20918 }
20919
Marat Dukhande06f492020-04-09 00:19:31 -070020920 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020921 TEST_REQUIRES_X86_AVX512F;
20922 for (uint32_t channels = 33; channels < 64; channels++) {
20923 DWConvMicrokernelTester()
20924 .cr(32)
20925 .kr(4)
20926 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020927 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020928 }
20929 }
20930
Marat Dukhande06f492020-04-09 00:19:31 -070020931 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020932 TEST_REQUIRES_X86_AVX512F;
20933 for (uint32_t channels = 33; channels < 64; channels++) {
20934 DWConvMicrokernelTester()
20935 .cr(32)
20936 .kr(4)
20937 .channels(channels)
20938 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020939 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020940 }
20941 }
20942
Marat Dukhande06f492020-04-09 00:19:31 -070020943 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020944 TEST_REQUIRES_X86_AVX512F;
20945 for (uint32_t channels = 33; channels < 64; channels++) {
20946 DWConvMicrokernelTester()
20947 .cr(32)
20948 .kr(4)
20949 .channels(channels)
20950 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020951 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020952 }
20953 }
20954
Marat Dukhande06f492020-04-09 00:19:31 -070020955 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020956 TEST_REQUIRES_X86_AVX512F;
20957 for (size_t channels = 1; channels <= 160; channels += 31) {
20958 DWConvMicrokernelTester()
20959 .cr(32)
20960 .kr(4)
20961 .channels(channels)
20962 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020963 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020964 }
20965 }
20966
Marat Dukhande06f492020-04-09 00:19:31 -070020967 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020968 TEST_REQUIRES_X86_AVX512F;
20969 for (size_t channels = 1; channels <= 160; channels += 31) {
20970 for (size_t step = 2; step <= 4; step++) {
20971 DWConvMicrokernelTester()
20972 .cr(32)
20973 .kr(4)
20974 .channels(channels)
20975 .width(3)
20976 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020977 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020978 }
20979 }
20980 }
20981
Marat Dukhande06f492020-04-09 00:19:31 -070020982 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020983 TEST_REQUIRES_X86_AVX512F;
20984 for (size_t channels = 1; channels <= 160; channels += 31) {
20985 DWConvMicrokernelTester()
20986 .cr(32)
20987 .kr(4)
20988 .channels(32)
20989 .width(5)
20990 .output_stride(163)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070020991 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070020992 }
20993 }
20994
Marat Dukhande06f492020-04-09 00:19:31 -070020995 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020996 TEST_REQUIRES_X86_AVX512F;
20997 for (size_t channels = 1; channels <= 160; channels += 31) {
20998 DWConvMicrokernelTester()
20999 .cr(32)
21000 .kr(4)
21001 .channels(channels)
21002 .width(3)
21003 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021004 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021005 }
21006 }
21007
Marat Dukhande06f492020-04-09 00:19:31 -070021008 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021009 TEST_REQUIRES_X86_AVX512F;
21010 for (size_t channels = 1; channels <= 160; channels += 31) {
21011 DWConvMicrokernelTester()
21012 .cr(32)
21013 .kr(4)
21014 .channels(channels)
21015 .width(3)
21016 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021017 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021018 }
21019 }
Frank Barchardd5360722020-05-17 16:10:36 -070021020
21021 TEST(F32_DWCONV_MINMAX_UP32X4__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(4)
21027 .channels(channels)
21028 .input_offset(592)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021029 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070021030 }
21031 }
21032
21033 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, zero) {
21034 TEST_REQUIRES_X86_AVX512F;
21035 for (uint32_t mz = 0; mz < 4; mz++) {
21036 for (uint32_t channels = 64; channels < 512; channels += 96) {
21037 DWConvMicrokernelTester()
21038 .cr(32)
21039 .kr(4)
21040 .channels(channels)
21041 .input_offset(592)
21042 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021043 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070021044 }
21045 }
21046 }
Marat Dukhan1c587112020-04-08 20:04:28 -070021047#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
21048
21049
21050#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070021051 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021052 TEST_REQUIRES_X86_AVX512F;
21053 DWConvMicrokernelTester()
21054 .cr(32)
21055 .kr(4)
21056 .channels(32)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021057 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021058 }
21059
Marat Dukhande06f492020-04-09 00:19:31 -070021060 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021061 TEST_REQUIRES_X86_AVX512F;
21062 for (uint32_t channels = 64; channels < 512; channels += 96) {
21063 DWConvMicrokernelTester()
21064 .cr(32)
21065 .kr(4)
21066 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021067 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021068 }
21069 }
21070
Marat Dukhande06f492020-04-09 00:19:31 -070021071 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021072 TEST_REQUIRES_X86_AVX512F;
21073 for (uint32_t channels = 64; channels < 512; channels += 96) {
21074 DWConvMicrokernelTester()
21075 .cr(32)
21076 .kr(4)
21077 .channels(channels)
21078 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021079 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021080 }
21081 }
21082
Marat Dukhande06f492020-04-09 00:19:31 -070021083 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021084 TEST_REQUIRES_X86_AVX512F;
21085 for (uint32_t channels = 64; channels < 512; channels += 96) {
21086 DWConvMicrokernelTester()
21087 .cr(32)
21088 .kr(4)
21089 .channels(channels)
21090 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021091 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021092 }
21093 }
21094
Marat Dukhande06f492020-04-09 00:19:31 -070021095 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021096 TEST_REQUIRES_X86_AVX512F;
21097 for (uint32_t channels = 1; channels < 32; channels++) {
21098 DWConvMicrokernelTester()
21099 .cr(32)
21100 .kr(4)
21101 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021102 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021103 }
21104 }
21105
Marat Dukhande06f492020-04-09 00:19:31 -070021106 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021107 TEST_REQUIRES_X86_AVX512F;
21108 for (uint32_t channels = 33; channels < 64; channels++) {
21109 DWConvMicrokernelTester()
21110 .cr(32)
21111 .kr(4)
21112 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021113 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021114 }
21115 }
21116
Marat Dukhande06f492020-04-09 00:19:31 -070021117 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021118 TEST_REQUIRES_X86_AVX512F;
21119 for (uint32_t channels = 33; channels < 64; channels++) {
21120 DWConvMicrokernelTester()
21121 .cr(32)
21122 .kr(4)
21123 .channels(channels)
21124 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021125 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021126 }
21127 }
21128
Marat Dukhande06f492020-04-09 00:19:31 -070021129 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021130 TEST_REQUIRES_X86_AVX512F;
21131 for (uint32_t channels = 33; channels < 64; channels++) {
21132 DWConvMicrokernelTester()
21133 .cr(32)
21134 .kr(4)
21135 .channels(channels)
21136 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021137 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021138 }
21139 }
21140
Marat Dukhande06f492020-04-09 00:19:31 -070021141 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021142 TEST_REQUIRES_X86_AVX512F;
21143 for (size_t channels = 1; channels <= 160; channels += 31) {
21144 DWConvMicrokernelTester()
21145 .cr(32)
21146 .kr(4)
21147 .channels(channels)
21148 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021149 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021150 }
21151 }
21152
Marat Dukhande06f492020-04-09 00:19:31 -070021153 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021154 TEST_REQUIRES_X86_AVX512F;
21155 for (size_t channels = 1; channels <= 160; channels += 31) {
21156 for (size_t step = 2; step <= 4; step++) {
21157 DWConvMicrokernelTester()
21158 .cr(32)
21159 .kr(4)
21160 .channels(channels)
21161 .width(3)
21162 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021163 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021164 }
21165 }
21166 }
21167
Marat Dukhande06f492020-04-09 00:19:31 -070021168 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021169 TEST_REQUIRES_X86_AVX512F;
21170 for (size_t channels = 1; channels <= 160; channels += 31) {
21171 DWConvMicrokernelTester()
21172 .cr(32)
21173 .kr(4)
21174 .channels(32)
21175 .width(5)
21176 .output_stride(163)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021177 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021178 }
21179 }
21180
Marat Dukhande06f492020-04-09 00:19:31 -070021181 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021182 TEST_REQUIRES_X86_AVX512F;
21183 for (size_t channels = 1; channels <= 160; channels += 31) {
21184 DWConvMicrokernelTester()
21185 .cr(32)
21186 .kr(4)
21187 .channels(channels)
21188 .width(3)
21189 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021190 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021191 }
21192 }
21193
Marat Dukhande06f492020-04-09 00:19:31 -070021194 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021195 TEST_REQUIRES_X86_AVX512F;
21196 for (size_t channels = 1; channels <= 160; channels += 31) {
21197 DWConvMicrokernelTester()
21198 .cr(32)
21199 .kr(4)
21200 .channels(channels)
21201 .width(3)
21202 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021203 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070021204 }
21205 }
Frank Barchardd5360722020-05-17 16:10:36 -070021206
21207 TEST(F32_DWCONV_MINMAX_UP32X4__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(4)
21213 .channels(channels)
21214 .input_offset(592)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021215 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070021216 }
21217 }
21218
21219 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, zero) {
21220 TEST_REQUIRES_X86_AVX512F;
21221 for (uint32_t mz = 0; mz < 4; mz++) {
21222 for (uint32_t channels = 64; channels < 512; channels += 96) {
21223 DWConvMicrokernelTester()
21224 .cr(32)
21225 .kr(4)
21226 .channels(channels)
21227 .input_offset(592)
21228 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070021229 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070021230 }
21231 }
21232 }
Marat Dukhan1c587112020-04-08 20:04:28 -070021233#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
21234
21235
Marat Dukhan4c617792021-12-21 15:47:58 -080021236#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070021237 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_eq_4) {
21238 DWConvMicrokernelTester()
21239 .cr(4)
21240 .kr(25)
21241 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021242 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021243 }
21244
21245 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_div_4) {
21246 for (uint32_t channels = 8; channels < 64; channels += 12) {
21247 DWConvMicrokernelTester()
21248 .cr(4)
21249 .kr(25)
21250 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021251 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021252 }
21253 }
21254
21255 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_div_4_with_qmin) {
21256 for (uint32_t channels = 8; channels < 64; channels += 12) {
21257 DWConvMicrokernelTester()
21258 .cr(4)
21259 .kr(25)
21260 .channels(channels)
21261 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021262 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021263 }
21264 }
21265
21266 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_div_4_with_qmax) {
21267 for (uint32_t channels = 8; channels < 64; channels += 12) {
21268 DWConvMicrokernelTester()
21269 .cr(4)
21270 .kr(25)
21271 .channels(channels)
21272 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021273 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021274 }
21275 }
21276
21277 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_lt_4) {
21278 for (uint32_t channels = 1; channels < 4; channels++) {
21279 DWConvMicrokernelTester()
21280 .cr(4)
21281 .kr(25)
21282 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021283 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021284 }
21285 }
21286
21287 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_gt_4) {
21288 for (uint32_t channels = 5; channels < 8; channels++) {
21289 DWConvMicrokernelTester()
21290 .cr(4)
21291 .kr(25)
21292 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021293 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021294 }
21295 }
21296
21297 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_gt_4_with_qmin) {
21298 for (uint32_t channels = 5; channels < 8; channels++) {
21299 DWConvMicrokernelTester()
21300 .cr(4)
21301 .kr(25)
21302 .channels(channels)
21303 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021304 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021305 }
21306 }
21307
21308 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_gt_4_with_qmax) {
21309 for (uint32_t channels = 5; channels < 8; channels++) {
21310 DWConvMicrokernelTester()
21311 .cr(4)
21312 .kr(25)
21313 .channels(channels)
21314 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021315 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021316 }
21317 }
21318
21319 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel) {
21320 for (size_t channels = 1; channels <= 20; channels += 3) {
21321 DWConvMicrokernelTester()
21322 .cr(4)
21323 .kr(25)
21324 .channels(channels)
21325 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021326 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021327 }
21328 }
21329
21330 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_step) {
21331 for (size_t channels = 1; channels <= 20; channels += 3) {
21332 for (size_t step = 2; step <= 25; step++) {
21333 DWConvMicrokernelTester()
21334 .cr(4)
21335 .kr(25)
21336 .channels(channels)
21337 .width(3)
21338 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021339 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021340 }
21341 }
21342 }
21343
21344 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_output_stride) {
21345 for (size_t channels = 1; channels <= 20; channels += 3) {
21346 DWConvMicrokernelTester()
21347 .cr(4)
21348 .kr(25)
21349 .channels(4)
21350 .width(5)
21351 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021352 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021353 }
21354 }
21355
21356 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_qmin) {
21357 for (size_t channels = 1; channels <= 20; channels += 3) {
21358 DWConvMicrokernelTester()
21359 .cr(4)
21360 .kr(25)
21361 .channels(channels)
21362 .width(3)
21363 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021364 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021365 }
21366 }
21367
21368 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_qmax) {
21369 for (size_t channels = 1; channels <= 20; channels += 3) {
21370 DWConvMicrokernelTester()
21371 .cr(4)
21372 .kr(25)
21373 .channels(channels)
21374 .width(3)
21375 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021376 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021377 }
21378 }
21379
21380 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, input_offset) {
21381 for (uint32_t channels = 8; channels < 64; channels += 12) {
21382 DWConvMicrokernelTester()
21383 .cr(4)
21384 .kr(25)
21385 .channels(channels)
21386 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021387 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021388 }
21389 }
21390
21391 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, zero) {
21392 for (uint32_t mz = 0; mz < 25; mz++) {
21393 for (uint32_t channels = 8; channels < 64; channels += 12) {
21394 DWConvMicrokernelTester()
21395 .cr(4)
21396 .kr(25)
21397 .channels(channels)
21398 .input_offset(112)
21399 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021400 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021401 }
21402 }
21403 }
Marat Dukhan4c617792021-12-21 15:47:58 -080021404#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070021405
21406
Marat Dukhan4c617792021-12-21 15:47:58 -080021407#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Frank Barchard0725b8d2020-12-07 11:07:35 -080021408 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_eq_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021409 DWConvMicrokernelTester()
21410 .cr(4)
21411 .kr(25)
21412 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021413 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021414 }
21415
Frank Barchard0725b8d2020-12-07 11:07:35 -080021416 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_div_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021417 for (uint32_t channels = 8; channels < 64; channels += 12) {
21418 DWConvMicrokernelTester()
21419 .cr(4)
21420 .kr(25)
21421 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021422 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021423 }
21424 }
21425
Frank Barchard0725b8d2020-12-07 11:07:35 -080021426 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_div_4_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021427 for (uint32_t channels = 8; channels < 64; channels += 12) {
21428 DWConvMicrokernelTester()
21429 .cr(4)
21430 .kr(25)
21431 .channels(channels)
21432 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021433 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021434 }
21435 }
21436
Frank Barchard0725b8d2020-12-07 11:07:35 -080021437 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_div_4_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021438 for (uint32_t channels = 8; channels < 64; channels += 12) {
21439 DWConvMicrokernelTester()
21440 .cr(4)
21441 .kr(25)
21442 .channels(channels)
21443 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021444 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021445 }
21446 }
21447
Frank Barchard0725b8d2020-12-07 11:07:35 -080021448 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_lt_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021449 for (uint32_t channels = 1; channels < 4; channels++) {
21450 DWConvMicrokernelTester()
21451 .cr(4)
21452 .kr(25)
21453 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021454 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021455 }
21456 }
21457
Frank Barchard0725b8d2020-12-07 11:07:35 -080021458 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_gt_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021459 for (uint32_t channels = 5; channels < 8; channels++) {
21460 DWConvMicrokernelTester()
21461 .cr(4)
21462 .kr(25)
21463 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021464 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021465 }
21466 }
21467
Frank Barchard0725b8d2020-12-07 11:07:35 -080021468 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_gt_4_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021469 for (uint32_t channels = 5; channels < 8; channels++) {
21470 DWConvMicrokernelTester()
21471 .cr(4)
21472 .kr(25)
21473 .channels(channels)
21474 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021475 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021476 }
21477 }
21478
Frank Barchard0725b8d2020-12-07 11:07:35 -080021479 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, c_gt_4_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021480 for (uint32_t channels = 5; channels < 8; channels++) {
21481 DWConvMicrokernelTester()
21482 .cr(4)
21483 .kr(25)
21484 .channels(channels)
21485 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021486 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021487 }
21488 }
21489
Frank Barchard0725b8d2020-12-07 11:07:35 -080021490 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, multipixel) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021491 for (size_t channels = 1; channels <= 20; channels += 3) {
21492 DWConvMicrokernelTester()
21493 .cr(4)
21494 .kr(25)
21495 .channels(channels)
21496 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021497 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021498 }
21499 }
21500
Frank Barchard0725b8d2020-12-07 11:07:35 -080021501 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, multipixel_with_step) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021502 for (size_t channels = 1; channels <= 20; channels += 3) {
21503 for (size_t step = 2; step <= 25; step++) {
21504 DWConvMicrokernelTester()
21505 .cr(4)
21506 .kr(25)
21507 .channels(channels)
21508 .width(3)
21509 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021510 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021511 }
21512 }
21513 }
21514
Frank Barchard0725b8d2020-12-07 11:07:35 -080021515 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021516 for (size_t channels = 1; channels <= 20; channels += 3) {
21517 DWConvMicrokernelTester()
21518 .cr(4)
21519 .kr(25)
21520 .channels(4)
21521 .width(5)
21522 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021523 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021524 }
21525 }
21526
Frank Barchard0725b8d2020-12-07 11:07:35 -080021527 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021528 for (size_t channels = 1; channels <= 20; channels += 3) {
21529 DWConvMicrokernelTester()
21530 .cr(4)
21531 .kr(25)
21532 .channels(channels)
21533 .width(3)
21534 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021535 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021536 }
21537 }
21538
Frank Barchard0725b8d2020-12-07 11:07:35 -080021539 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021540 for (size_t channels = 1; channels <= 20; channels += 3) {
21541 DWConvMicrokernelTester()
21542 .cr(4)
21543 .kr(25)
21544 .channels(channels)
21545 .width(3)
21546 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021547 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021548 }
21549 }
21550
Frank Barchard0725b8d2020-12-07 11:07:35 -080021551 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, input_offset) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021552 for (uint32_t channels = 8; channels < 64; channels += 12) {
21553 DWConvMicrokernelTester()
21554 .cr(4)
21555 .kr(25)
21556 .channels(channels)
21557 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021558 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021559 }
21560 }
21561
Frank Barchard0725b8d2020-12-07 11:07:35 -080021562 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM_ACC2, zero) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021563 for (uint32_t mz = 0; mz < 25; mz++) {
21564 for (uint32_t channels = 8; channels < 64; channels += 12) {
21565 DWConvMicrokernelTester()
21566 .cr(4)
21567 .kr(25)
21568 .channels(channels)
21569 .input_offset(112)
21570 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021571 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021572 }
21573 }
21574 }
Marat Dukhan4c617792021-12-21 15:47:58 -080021575#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070021576
21577
Marat Dukhan4c617792021-12-21 15:47:58 -080021578#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070021579 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_eq_8) {
21580 DWConvMicrokernelTester()
21581 .cr(8)
21582 .kr(25)
21583 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021584 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021585 }
21586
21587 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_div_8) {
21588 for (uint32_t channels = 16; channels < 128; channels += 24) {
21589 DWConvMicrokernelTester()
21590 .cr(8)
21591 .kr(25)
21592 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021593 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021594 }
21595 }
21596
21597 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_div_8_with_qmin) {
21598 for (uint32_t channels = 16; channels < 128; channels += 24) {
21599 DWConvMicrokernelTester()
21600 .cr(8)
21601 .kr(25)
21602 .channels(channels)
21603 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021604 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021605 }
21606 }
21607
21608 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_div_8_with_qmax) {
21609 for (uint32_t channels = 16; channels < 128; channels += 24) {
21610 DWConvMicrokernelTester()
21611 .cr(8)
21612 .kr(25)
21613 .channels(channels)
21614 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021615 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021616 }
21617 }
21618
21619 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_lt_8) {
21620 for (uint32_t channels = 1; channels < 8; channels++) {
21621 DWConvMicrokernelTester()
21622 .cr(8)
21623 .kr(25)
21624 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021625 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021626 }
21627 }
21628
21629 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_gt_8) {
21630 for (uint32_t channels = 9; channels < 16; channels++) {
21631 DWConvMicrokernelTester()
21632 .cr(8)
21633 .kr(25)
21634 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021635 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021636 }
21637 }
21638
21639 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_gt_8_with_qmin) {
21640 for (uint32_t channels = 9; channels < 16; channels++) {
21641 DWConvMicrokernelTester()
21642 .cr(8)
21643 .kr(25)
21644 .channels(channels)
21645 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021646 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021647 }
21648 }
21649
21650 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_gt_8_with_qmax) {
21651 for (uint32_t channels = 9; channels < 16; channels++) {
21652 DWConvMicrokernelTester()
21653 .cr(8)
21654 .kr(25)
21655 .channels(channels)
21656 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021657 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021658 }
21659 }
21660
21661 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel) {
21662 for (size_t channels = 1; channels <= 40; channels += 7) {
21663 DWConvMicrokernelTester()
21664 .cr(8)
21665 .kr(25)
21666 .channels(channels)
21667 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021668 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021669 }
21670 }
21671
21672 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_step) {
21673 for (size_t channels = 1; channels <= 40; channels += 7) {
21674 for (size_t step = 2; step <= 25; step++) {
21675 DWConvMicrokernelTester()
21676 .cr(8)
21677 .kr(25)
21678 .channels(channels)
21679 .width(3)
21680 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021681 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021682 }
21683 }
21684 }
21685
21686 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_output_stride) {
21687 for (size_t channels = 1; channels <= 40; channels += 7) {
21688 DWConvMicrokernelTester()
21689 .cr(8)
21690 .kr(25)
21691 .channels(8)
21692 .width(5)
21693 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021694 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021695 }
21696 }
21697
21698 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_qmin) {
21699 for (size_t channels = 1; channels <= 40; channels += 7) {
21700 DWConvMicrokernelTester()
21701 .cr(8)
21702 .kr(25)
21703 .channels(channels)
21704 .width(3)
21705 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021706 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021707 }
21708 }
21709
21710 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_qmax) {
21711 for (size_t channels = 1; channels <= 40; channels += 7) {
21712 DWConvMicrokernelTester()
21713 .cr(8)
21714 .kr(25)
21715 .channels(channels)
21716 .width(3)
21717 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021718 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021719 }
21720 }
21721
21722 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, input_offset) {
21723 for (uint32_t channels = 16; channels < 128; channels += 24) {
21724 DWConvMicrokernelTester()
21725 .cr(8)
21726 .kr(25)
21727 .channels(channels)
21728 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021729 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021730 }
21731 }
21732
21733 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, zero) {
21734 for (uint32_t mz = 0; mz < 25; mz++) {
21735 for (uint32_t channels = 16; channels < 128; channels += 24) {
21736 DWConvMicrokernelTester()
21737 .cr(8)
21738 .kr(25)
21739 .channels(channels)
21740 .input_offset(176)
21741 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021742 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021743 }
21744 }
21745 }
Marat Dukhan4c617792021-12-21 15:47:58 -080021746#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070021747
21748
Marat Dukhan4c617792021-12-21 15:47:58 -080021749#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Frank Barchard0725b8d2020-12-07 11:07:35 -080021750 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_eq_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021751 DWConvMicrokernelTester()
21752 .cr(8)
21753 .kr(25)
21754 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021755 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021756 }
21757
Frank Barchard0725b8d2020-12-07 11:07:35 -080021758 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_div_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021759 for (uint32_t channels = 16; channels < 128; channels += 24) {
21760 DWConvMicrokernelTester()
21761 .cr(8)
21762 .kr(25)
21763 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021764 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021765 }
21766 }
21767
Frank Barchard0725b8d2020-12-07 11:07:35 -080021768 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_div_8_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021769 for (uint32_t channels = 16; channels < 128; channels += 24) {
21770 DWConvMicrokernelTester()
21771 .cr(8)
21772 .kr(25)
21773 .channels(channels)
21774 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021775 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021776 }
21777 }
21778
Frank Barchard0725b8d2020-12-07 11:07:35 -080021779 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_div_8_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021780 for (uint32_t channels = 16; channels < 128; channels += 24) {
21781 DWConvMicrokernelTester()
21782 .cr(8)
21783 .kr(25)
21784 .channels(channels)
21785 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021786 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021787 }
21788 }
21789
Frank Barchard0725b8d2020-12-07 11:07:35 -080021790 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_lt_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021791 for (uint32_t channels = 1; channels < 8; channels++) {
21792 DWConvMicrokernelTester()
21793 .cr(8)
21794 .kr(25)
21795 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021796 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021797 }
21798 }
21799
Frank Barchard0725b8d2020-12-07 11:07:35 -080021800 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_gt_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021801 for (uint32_t channels = 9; channels < 16; channels++) {
21802 DWConvMicrokernelTester()
21803 .cr(8)
21804 .kr(25)
21805 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021806 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021807 }
21808 }
21809
Frank Barchard0725b8d2020-12-07 11:07:35 -080021810 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_gt_8_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021811 for (uint32_t channels = 9; channels < 16; channels++) {
21812 DWConvMicrokernelTester()
21813 .cr(8)
21814 .kr(25)
21815 .channels(channels)
21816 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021817 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021818 }
21819 }
21820
Frank Barchard0725b8d2020-12-07 11:07:35 -080021821 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, c_gt_8_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021822 for (uint32_t channels = 9; channels < 16; channels++) {
21823 DWConvMicrokernelTester()
21824 .cr(8)
21825 .kr(25)
21826 .channels(channels)
21827 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021828 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021829 }
21830 }
21831
Frank Barchard0725b8d2020-12-07 11:07:35 -080021832 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, multipixel) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021833 for (size_t channels = 1; channels <= 40; channels += 7) {
21834 DWConvMicrokernelTester()
21835 .cr(8)
21836 .kr(25)
21837 .channels(channels)
21838 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021839 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021840 }
21841 }
21842
Frank Barchard0725b8d2020-12-07 11:07:35 -080021843 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, multipixel_with_step) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021844 for (size_t channels = 1; channels <= 40; channels += 7) {
21845 for (size_t step = 2; step <= 25; step++) {
21846 DWConvMicrokernelTester()
21847 .cr(8)
21848 .kr(25)
21849 .channels(channels)
21850 .width(3)
21851 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021852 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021853 }
21854 }
21855 }
21856
Frank Barchard0725b8d2020-12-07 11:07:35 -080021857 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021858 for (size_t channels = 1; channels <= 40; channels += 7) {
21859 DWConvMicrokernelTester()
21860 .cr(8)
21861 .kr(25)
21862 .channels(8)
21863 .width(5)
21864 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021865 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021866 }
21867 }
21868
Frank Barchard0725b8d2020-12-07 11:07:35 -080021869 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021870 for (size_t channels = 1; channels <= 40; channels += 7) {
21871 DWConvMicrokernelTester()
21872 .cr(8)
21873 .kr(25)
21874 .channels(channels)
21875 .width(3)
21876 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021877 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021878 }
21879 }
21880
Frank Barchard0725b8d2020-12-07 11:07:35 -080021881 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021882 for (size_t channels = 1; channels <= 40; channels += 7) {
21883 DWConvMicrokernelTester()
21884 .cr(8)
21885 .kr(25)
21886 .channels(channels)
21887 .width(3)
21888 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021889 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021890 }
21891 }
21892
Frank Barchard0725b8d2020-12-07 11:07:35 -080021893 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, input_offset) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021894 for (uint32_t channels = 16; channels < 128; channels += 24) {
21895 DWConvMicrokernelTester()
21896 .cr(8)
21897 .kr(25)
21898 .channels(channels)
21899 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021900 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021901 }
21902 }
21903
Frank Barchard0725b8d2020-12-07 11:07:35 -080021904 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM_ACC2, zero) {
Marat Dukhanac014d72020-06-16 08:36:47 -070021905 for (uint32_t mz = 0; mz < 25; mz++) {
21906 for (uint32_t channels = 16; channels < 128; channels += 24) {
21907 DWConvMicrokernelTester()
21908 .cr(8)
21909 .kr(25)
21910 .channels(channels)
21911 .input_offset(176)
21912 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021913 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021914 }
21915 }
21916 }
Marat Dukhan4c617792021-12-21 15:47:58 -080021917#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070021918
21919
Marat Dukhan4c617792021-12-21 15:47:58 -080021920#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070021921 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_eq_4) {
21922 DWConvMicrokernelTester()
21923 .cr(4)
21924 .kr(25)
21925 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021926 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021927 }
21928
21929 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_div_4) {
21930 for (uint32_t channels = 8; channels < 64; channels += 12) {
21931 DWConvMicrokernelTester()
21932 .cr(4)
21933 .kr(25)
21934 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021935 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021936 }
21937 }
21938
21939 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_div_4_with_qmin) {
21940 for (uint32_t channels = 8; channels < 64; channels += 12) {
21941 DWConvMicrokernelTester()
21942 .cr(4)
21943 .kr(25)
21944 .channels(channels)
21945 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021946 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021947 }
21948 }
21949
21950 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_div_4_with_qmax) {
21951 for (uint32_t channels = 8; channels < 64; channels += 12) {
21952 DWConvMicrokernelTester()
21953 .cr(4)
21954 .kr(25)
21955 .channels(channels)
21956 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021957 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021958 }
21959 }
21960
21961 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_lt_4) {
21962 for (uint32_t channels = 1; channels < 4; channels++) {
21963 DWConvMicrokernelTester()
21964 .cr(4)
21965 .kr(25)
21966 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021967 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021968 }
21969 }
21970
21971 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_gt_4) {
21972 for (uint32_t channels = 5; channels < 8; channels++) {
21973 DWConvMicrokernelTester()
21974 .cr(4)
21975 .kr(25)
21976 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021977 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021978 }
21979 }
21980
21981 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_gt_4_with_qmin) {
21982 for (uint32_t channels = 5; channels < 8; channels++) {
21983 DWConvMicrokernelTester()
21984 .cr(4)
21985 .kr(25)
21986 .channels(channels)
21987 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021988 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070021989 }
21990 }
21991
21992 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_gt_4_with_qmax) {
21993 for (uint32_t channels = 5; channels < 8; channels++) {
21994 DWConvMicrokernelTester()
21995 .cr(4)
21996 .kr(25)
21997 .channels(channels)
21998 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080021999 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022000 }
22001 }
22002
22003 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel) {
22004 for (size_t channels = 1; channels <= 20; channels += 3) {
22005 DWConvMicrokernelTester()
22006 .cr(4)
22007 .kr(25)
22008 .channels(channels)
22009 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022010 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022011 }
22012 }
22013
22014 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_step) {
22015 for (size_t channels = 1; channels <= 20; channels += 3) {
22016 for (size_t step = 2; step <= 25; step++) {
22017 DWConvMicrokernelTester()
22018 .cr(4)
22019 .kr(25)
22020 .channels(channels)
22021 .width(3)
22022 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022023 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022024 }
22025 }
22026 }
22027
22028 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_output_stride) {
22029 for (size_t channels = 1; channels <= 20; channels += 3) {
22030 DWConvMicrokernelTester()
22031 .cr(4)
22032 .kr(25)
22033 .channels(4)
22034 .width(5)
22035 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022036 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022037 }
22038 }
22039
22040 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_qmin) {
22041 for (size_t channels = 1; channels <= 20; channels += 3) {
22042 DWConvMicrokernelTester()
22043 .cr(4)
22044 .kr(25)
22045 .channels(channels)
22046 .width(3)
22047 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022048 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022049 }
22050 }
22051
22052 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_qmax) {
22053 for (size_t channels = 1; channels <= 20; channels += 3) {
22054 DWConvMicrokernelTester()
22055 .cr(4)
22056 .kr(25)
22057 .channels(channels)
22058 .width(3)
22059 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022060 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022061 }
22062 }
22063
22064 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, input_offset) {
22065 for (uint32_t channels = 8; channels < 64; channels += 12) {
22066 DWConvMicrokernelTester()
22067 .cr(4)
22068 .kr(25)
22069 .channels(channels)
22070 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022071 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022072 }
22073 }
22074
22075 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, zero) {
22076 for (uint32_t mz = 0; mz < 25; mz++) {
22077 for (uint32_t channels = 8; channels < 64; channels += 12) {
22078 DWConvMicrokernelTester()
22079 .cr(4)
22080 .kr(25)
22081 .channels(channels)
22082 .input_offset(112)
22083 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022084 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022085 }
22086 }
22087 }
Marat Dukhan4c617792021-12-21 15:47:58 -080022088#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070022089
22090
Marat Dukhan4c617792021-12-21 15:47:58 -080022091#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Frank Barchard0725b8d2020-12-07 11:07:35 -080022092 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_eq_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022093 DWConvMicrokernelTester()
22094 .cr(4)
22095 .kr(25)
22096 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022097 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022098 }
22099
Frank Barchard0725b8d2020-12-07 11:07:35 -080022100 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_div_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022101 for (uint32_t channels = 8; channels < 64; channels += 12) {
22102 DWConvMicrokernelTester()
22103 .cr(4)
22104 .kr(25)
22105 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022106 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022107 }
22108 }
22109
Frank Barchard0725b8d2020-12-07 11:07:35 -080022110 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_div_4_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022111 for (uint32_t channels = 8; channels < 64; channels += 12) {
22112 DWConvMicrokernelTester()
22113 .cr(4)
22114 .kr(25)
22115 .channels(channels)
22116 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022117 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022118 }
22119 }
22120
Frank Barchard0725b8d2020-12-07 11:07:35 -080022121 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_div_4_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022122 for (uint32_t channels = 8; channels < 64; channels += 12) {
22123 DWConvMicrokernelTester()
22124 .cr(4)
22125 .kr(25)
22126 .channels(channels)
22127 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022128 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022129 }
22130 }
22131
Frank Barchard0725b8d2020-12-07 11:07:35 -080022132 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_lt_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022133 for (uint32_t channels = 1; channels < 4; channels++) {
22134 DWConvMicrokernelTester()
22135 .cr(4)
22136 .kr(25)
22137 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022138 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022139 }
22140 }
22141
Frank Barchard0725b8d2020-12-07 11:07:35 -080022142 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_gt_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022143 for (uint32_t channels = 5; channels < 8; channels++) {
22144 DWConvMicrokernelTester()
22145 .cr(4)
22146 .kr(25)
22147 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022148 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022149 }
22150 }
22151
Frank Barchard0725b8d2020-12-07 11:07:35 -080022152 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_gt_4_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022153 for (uint32_t channels = 5; channels < 8; channels++) {
22154 DWConvMicrokernelTester()
22155 .cr(4)
22156 .kr(25)
22157 .channels(channels)
22158 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022159 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022160 }
22161 }
22162
Frank Barchard0725b8d2020-12-07 11:07:35 -080022163 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, c_gt_4_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022164 for (uint32_t channels = 5; channels < 8; channels++) {
22165 DWConvMicrokernelTester()
22166 .cr(4)
22167 .kr(25)
22168 .channels(channels)
22169 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022170 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022171 }
22172 }
22173
Frank Barchard0725b8d2020-12-07 11:07:35 -080022174 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, multipixel) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022175 for (size_t channels = 1; channels <= 20; channels += 3) {
22176 DWConvMicrokernelTester()
22177 .cr(4)
22178 .kr(25)
22179 .channels(channels)
22180 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022181 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022182 }
22183 }
22184
Frank Barchard0725b8d2020-12-07 11:07:35 -080022185 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, multipixel_with_step) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022186 for (size_t channels = 1; channels <= 20; channels += 3) {
22187 for (size_t step = 2; step <= 25; step++) {
22188 DWConvMicrokernelTester()
22189 .cr(4)
22190 .kr(25)
22191 .channels(channels)
22192 .width(3)
22193 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022194 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022195 }
22196 }
22197 }
22198
Frank Barchard0725b8d2020-12-07 11:07:35 -080022199 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022200 for (size_t channels = 1; channels <= 20; channels += 3) {
22201 DWConvMicrokernelTester()
22202 .cr(4)
22203 .kr(25)
22204 .channels(4)
22205 .width(5)
22206 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022207 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022208 }
22209 }
22210
Frank Barchard0725b8d2020-12-07 11:07:35 -080022211 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022212 for (size_t channels = 1; channels <= 20; channels += 3) {
22213 DWConvMicrokernelTester()
22214 .cr(4)
22215 .kr(25)
22216 .channels(channels)
22217 .width(3)
22218 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022219 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022220 }
22221 }
22222
Frank Barchard0725b8d2020-12-07 11:07:35 -080022223 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022224 for (size_t channels = 1; channels <= 20; channels += 3) {
22225 DWConvMicrokernelTester()
22226 .cr(4)
22227 .kr(25)
22228 .channels(channels)
22229 .width(3)
22230 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022231 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022232 }
22233 }
22234
Frank Barchard0725b8d2020-12-07 11:07:35 -080022235 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, input_offset) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022236 for (uint32_t channels = 8; channels < 64; channels += 12) {
22237 DWConvMicrokernelTester()
22238 .cr(4)
22239 .kr(25)
22240 .channels(channels)
22241 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022242 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022243 }
22244 }
22245
Frank Barchard0725b8d2020-12-07 11:07:35 -080022246 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86_ACC2, zero) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022247 for (uint32_t mz = 0; mz < 25; mz++) {
22248 for (uint32_t channels = 8; channels < 64; channels += 12) {
22249 DWConvMicrokernelTester()
22250 .cr(4)
22251 .kr(25)
22252 .channels(channels)
22253 .input_offset(112)
22254 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022255 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022256 }
22257 }
22258 }
Marat Dukhan4c617792021-12-21 15:47:58 -080022259#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070022260
22261
Marat Dukhan4c617792021-12-21 15:47:58 -080022262#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070022263 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_eq_8) {
22264 DWConvMicrokernelTester()
22265 .cr(8)
22266 .kr(25)
22267 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022268 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022269 }
22270
22271 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_div_8) {
22272 for (uint32_t channels = 16; channels < 128; channels += 24) {
22273 DWConvMicrokernelTester()
22274 .cr(8)
22275 .kr(25)
22276 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022277 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022278 }
22279 }
22280
22281 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_div_8_with_qmin) {
22282 for (uint32_t channels = 16; channels < 128; channels += 24) {
22283 DWConvMicrokernelTester()
22284 .cr(8)
22285 .kr(25)
22286 .channels(channels)
22287 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022288 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022289 }
22290 }
22291
22292 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_div_8_with_qmax) {
22293 for (uint32_t channels = 16; channels < 128; channels += 24) {
22294 DWConvMicrokernelTester()
22295 .cr(8)
22296 .kr(25)
22297 .channels(channels)
22298 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022299 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022300 }
22301 }
22302
22303 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_lt_8) {
22304 for (uint32_t channels = 1; channels < 8; channels++) {
22305 DWConvMicrokernelTester()
22306 .cr(8)
22307 .kr(25)
22308 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022309 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022310 }
22311 }
22312
22313 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_gt_8) {
22314 for (uint32_t channels = 9; channels < 16; channels++) {
22315 DWConvMicrokernelTester()
22316 .cr(8)
22317 .kr(25)
22318 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022319 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022320 }
22321 }
22322
22323 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_gt_8_with_qmin) {
22324 for (uint32_t channels = 9; channels < 16; channels++) {
22325 DWConvMicrokernelTester()
22326 .cr(8)
22327 .kr(25)
22328 .channels(channels)
22329 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022330 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022331 }
22332 }
22333
22334 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_gt_8_with_qmax) {
22335 for (uint32_t channels = 9; channels < 16; channels++) {
22336 DWConvMicrokernelTester()
22337 .cr(8)
22338 .kr(25)
22339 .channels(channels)
22340 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022341 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022342 }
22343 }
22344
22345 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel) {
22346 for (size_t channels = 1; channels <= 40; channels += 7) {
22347 DWConvMicrokernelTester()
22348 .cr(8)
22349 .kr(25)
22350 .channels(channels)
22351 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022352 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022353 }
22354 }
22355
22356 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_step) {
22357 for (size_t channels = 1; channels <= 40; channels += 7) {
22358 for (size_t step = 2; step <= 25; step++) {
22359 DWConvMicrokernelTester()
22360 .cr(8)
22361 .kr(25)
22362 .channels(channels)
22363 .width(3)
22364 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022365 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022366 }
22367 }
22368 }
22369
22370 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_output_stride) {
22371 for (size_t channels = 1; channels <= 40; channels += 7) {
22372 DWConvMicrokernelTester()
22373 .cr(8)
22374 .kr(25)
22375 .channels(8)
22376 .width(5)
22377 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022378 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022379 }
22380 }
22381
22382 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_qmin) {
22383 for (size_t channels = 1; channels <= 40; channels += 7) {
22384 DWConvMicrokernelTester()
22385 .cr(8)
22386 .kr(25)
22387 .channels(channels)
22388 .width(3)
22389 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022390 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022391 }
22392 }
22393
22394 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_qmax) {
22395 for (size_t channels = 1; channels <= 40; channels += 7) {
22396 DWConvMicrokernelTester()
22397 .cr(8)
22398 .kr(25)
22399 .channels(channels)
22400 .width(3)
22401 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022402 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022403 }
22404 }
22405
22406 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, input_offset) {
22407 for (uint32_t channels = 16; channels < 128; channels += 24) {
22408 DWConvMicrokernelTester()
22409 .cr(8)
22410 .kr(25)
22411 .channels(channels)
22412 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022413 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022414 }
22415 }
22416
22417 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, zero) {
22418 for (uint32_t mz = 0; mz < 25; mz++) {
22419 for (uint32_t channels = 16; channels < 128; channels += 24) {
22420 DWConvMicrokernelTester()
22421 .cr(8)
22422 .kr(25)
22423 .channels(channels)
22424 .input_offset(176)
22425 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022426 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022427 }
22428 }
22429 }
Marat Dukhan4c617792021-12-21 15:47:58 -080022430#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070022431
22432
Marat Dukhan4c617792021-12-21 15:47:58 -080022433#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Frank Barchard0725b8d2020-12-07 11:07:35 -080022434 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_eq_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022435 DWConvMicrokernelTester()
22436 .cr(8)
22437 .kr(25)
22438 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022439 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022440 }
22441
Frank Barchard0725b8d2020-12-07 11:07:35 -080022442 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_div_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022443 for (uint32_t channels = 16; channels < 128; channels += 24) {
22444 DWConvMicrokernelTester()
22445 .cr(8)
22446 .kr(25)
22447 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022448 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022449 }
22450 }
22451
Frank Barchard0725b8d2020-12-07 11:07:35 -080022452 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_div_8_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022453 for (uint32_t channels = 16; channels < 128; channels += 24) {
22454 DWConvMicrokernelTester()
22455 .cr(8)
22456 .kr(25)
22457 .channels(channels)
22458 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022459 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022460 }
22461 }
22462
Frank Barchard0725b8d2020-12-07 11:07:35 -080022463 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_div_8_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022464 for (uint32_t channels = 16; channels < 128; channels += 24) {
22465 DWConvMicrokernelTester()
22466 .cr(8)
22467 .kr(25)
22468 .channels(channels)
22469 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022470 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022471 }
22472 }
22473
Frank Barchard0725b8d2020-12-07 11:07:35 -080022474 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_lt_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022475 for (uint32_t channels = 1; channels < 8; channels++) {
22476 DWConvMicrokernelTester()
22477 .cr(8)
22478 .kr(25)
22479 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022480 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022481 }
22482 }
22483
Frank Barchard0725b8d2020-12-07 11:07:35 -080022484 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_gt_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022485 for (uint32_t channels = 9; channels < 16; channels++) {
22486 DWConvMicrokernelTester()
22487 .cr(8)
22488 .kr(25)
22489 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022490 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022491 }
22492 }
22493
Frank Barchard0725b8d2020-12-07 11:07:35 -080022494 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_gt_8_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022495 for (uint32_t channels = 9; channels < 16; channels++) {
22496 DWConvMicrokernelTester()
22497 .cr(8)
22498 .kr(25)
22499 .channels(channels)
22500 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022501 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022502 }
22503 }
22504
Frank Barchard0725b8d2020-12-07 11:07:35 -080022505 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, c_gt_8_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022506 for (uint32_t channels = 9; channels < 16; channels++) {
22507 DWConvMicrokernelTester()
22508 .cr(8)
22509 .kr(25)
22510 .channels(channels)
22511 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022512 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022513 }
22514 }
22515
Frank Barchard0725b8d2020-12-07 11:07:35 -080022516 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, multipixel) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022517 for (size_t channels = 1; channels <= 40; channels += 7) {
22518 DWConvMicrokernelTester()
22519 .cr(8)
22520 .kr(25)
22521 .channels(channels)
22522 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022523 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022524 }
22525 }
22526
Frank Barchard0725b8d2020-12-07 11:07:35 -080022527 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, multipixel_with_step) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022528 for (size_t channels = 1; channels <= 40; channels += 7) {
22529 for (size_t step = 2; step <= 25; step++) {
22530 DWConvMicrokernelTester()
22531 .cr(8)
22532 .kr(25)
22533 .channels(channels)
22534 .width(3)
22535 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022536 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022537 }
22538 }
22539 }
22540
Frank Barchard0725b8d2020-12-07 11:07:35 -080022541 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022542 for (size_t channels = 1; channels <= 40; channels += 7) {
22543 DWConvMicrokernelTester()
22544 .cr(8)
22545 .kr(25)
22546 .channels(8)
22547 .width(5)
22548 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022549 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022550 }
22551 }
22552
Frank Barchard0725b8d2020-12-07 11:07:35 -080022553 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022554 for (size_t channels = 1; channels <= 40; channels += 7) {
22555 DWConvMicrokernelTester()
22556 .cr(8)
22557 .kr(25)
22558 .channels(channels)
22559 .width(3)
22560 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022561 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022562 }
22563 }
22564
Frank Barchard0725b8d2020-12-07 11:07:35 -080022565 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022566 for (size_t channels = 1; channels <= 40; channels += 7) {
22567 DWConvMicrokernelTester()
22568 .cr(8)
22569 .kr(25)
22570 .channels(channels)
22571 .width(3)
22572 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022573 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022574 }
22575 }
22576
Frank Barchard0725b8d2020-12-07 11:07:35 -080022577 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, input_offset) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022578 for (uint32_t channels = 16; channels < 128; channels += 24) {
22579 DWConvMicrokernelTester()
22580 .cr(8)
22581 .kr(25)
22582 .channels(channels)
22583 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022584 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022585 }
22586 }
22587
Frank Barchard0725b8d2020-12-07 11:07:35 -080022588 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86_ACC2, zero) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022589 for (uint32_t mz = 0; mz < 25; mz++) {
22590 for (uint32_t channels = 16; channels < 128; channels += 24) {
22591 DWConvMicrokernelTester()
22592 .cr(8)
22593 .kr(25)
22594 .channels(channels)
22595 .input_offset(176)
22596 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022597 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022598 }
22599 }
22600 }
Marat Dukhan4c617792021-12-21 15:47:58 -080022601#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070022602
22603
Marat Dukhan4c617792021-12-21 15:47:58 -080022604#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070022605 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_eq_4) {
22606 DWConvMicrokernelTester()
22607 .cr(4)
22608 .kr(9)
22609 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022610 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022611 }
22612
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022619 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022620 }
22621 }
22622
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022630 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022631 }
22632 }
22633
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022641 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022642 }
22643 }
22644
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022651 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022652 }
22653 }
22654
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022661 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022662 }
22663 }
22664
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022672 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022673 }
22674 }
22675
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022683 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022684 }
22685 }
22686
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022694 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022695 }
22696 }
22697
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022707 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022708 }
22709 }
22710 }
22711
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022720 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022721 }
22722 }
22723
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022732 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022733 }
22734 }
22735
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022744 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022745 }
22746 }
22747
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022755 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022756 }
22757 }
22758
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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022768 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022769 }
22770 }
22771 }
Marat Dukhan4c617792021-12-21 15:47:58 -080022772#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070022773
22774
Marat Dukhan4c617792021-12-21 15:47:58 -080022775#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Frank Barchard0725b8d2020-12-07 11:07:35 -080022776 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_eq_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022777 DWConvMicrokernelTester()
22778 .cr(4)
22779 .kr(9)
22780 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022781 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022782 }
22783
Frank Barchard0725b8d2020-12-07 11:07:35 -080022784 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_div_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022785 for (uint32_t channels = 8; channels < 64; channels += 12) {
22786 DWConvMicrokernelTester()
22787 .cr(4)
22788 .kr(9)
22789 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022790 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022791 }
22792 }
22793
Frank Barchard0725b8d2020-12-07 11:07:35 -080022794 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_div_4_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022795 for (uint32_t channels = 8; channels < 64; channels += 12) {
22796 DWConvMicrokernelTester()
22797 .cr(4)
22798 .kr(9)
22799 .channels(channels)
22800 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022801 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022802 }
22803 }
22804
Frank Barchard0725b8d2020-12-07 11:07:35 -080022805 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_div_4_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022806 for (uint32_t channels = 8; channels < 64; channels += 12) {
22807 DWConvMicrokernelTester()
22808 .cr(4)
22809 .kr(9)
22810 .channels(channels)
22811 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022812 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022813 }
22814 }
22815
Frank Barchard0725b8d2020-12-07 11:07:35 -080022816 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_lt_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022817 for (uint32_t channels = 1; channels < 4; channels++) {
22818 DWConvMicrokernelTester()
22819 .cr(4)
22820 .kr(9)
22821 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022822 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022823 }
22824 }
22825
Frank Barchard0725b8d2020-12-07 11:07:35 -080022826 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_gt_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022827 for (uint32_t channels = 5; channels < 8; channels++) {
22828 DWConvMicrokernelTester()
22829 .cr(4)
22830 .kr(9)
22831 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022832 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022833 }
22834 }
22835
Frank Barchard0725b8d2020-12-07 11:07:35 -080022836 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_gt_4_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022837 for (uint32_t channels = 5; channels < 8; channels++) {
22838 DWConvMicrokernelTester()
22839 .cr(4)
22840 .kr(9)
22841 .channels(channels)
22842 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022843 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022844 }
22845 }
22846
Frank Barchard0725b8d2020-12-07 11:07:35 -080022847 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, c_gt_4_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022848 for (uint32_t channels = 5; channels < 8; channels++) {
22849 DWConvMicrokernelTester()
22850 .cr(4)
22851 .kr(9)
22852 .channels(channels)
22853 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022854 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022855 }
22856 }
22857
Frank Barchard0725b8d2020-12-07 11:07:35 -080022858 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, multipixel) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022859 for (size_t channels = 1; channels <= 20; channels += 3) {
22860 DWConvMicrokernelTester()
22861 .cr(4)
22862 .kr(9)
22863 .channels(channels)
22864 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022865 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022866 }
22867 }
22868
Frank Barchard0725b8d2020-12-07 11:07:35 -080022869 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, multipixel_with_step) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022870 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022878 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022879 }
22880 }
22881 }
22882
Frank Barchard0725b8d2020-12-07 11:07:35 -080022883 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022884 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022891 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022892 }
22893 }
22894
Frank Barchard0725b8d2020-12-07 11:07:35 -080022895 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022896 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022903 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022904 }
22905 }
22906
Frank Barchard0725b8d2020-12-07 11:07:35 -080022907 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022908 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022915 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022916 }
22917 }
22918
Frank Barchard0725b8d2020-12-07 11:07:35 -080022919 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, input_offset) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022920 for (uint32_t channels = 8; channels < 64; channels += 12) {
22921 DWConvMicrokernelTester()
22922 .cr(4)
22923 .kr(9)
22924 .channels(channels)
22925 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022926 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022927 }
22928 }
22929
Frank Barchard0725b8d2020-12-07 11:07:35 -080022930 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM_ACC2, zero) {
Marat Dukhanac014d72020-06-16 08:36:47 -070022931 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022939 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022940 }
22941 }
22942 }
Marat Dukhan4c617792021-12-21 15:47:58 -080022943#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070022944
22945
Marat Dukhan4c617792021-12-21 15:47:58 -080022946#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070022947 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_eq_8) {
22948 DWConvMicrokernelTester()
22949 .cr(8)
22950 .kr(9)
22951 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022952 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022953 }
22954
22955 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_div_8) {
22956 for (uint32_t channels = 16; channels < 128; channels += 24) {
22957 DWConvMicrokernelTester()
22958 .cr(8)
22959 .kr(9)
22960 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022961 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022962 }
22963 }
22964
22965 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_div_8_with_qmin) {
22966 for (uint32_t channels = 16; channels < 128; channels += 24) {
22967 DWConvMicrokernelTester()
22968 .cr(8)
22969 .kr(9)
22970 .channels(channels)
22971 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022972 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022973 }
22974 }
22975
22976 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_div_8_with_qmax) {
22977 for (uint32_t channels = 16; channels < 128; channels += 24) {
22978 DWConvMicrokernelTester()
22979 .cr(8)
22980 .kr(9)
22981 .channels(channels)
22982 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022983 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022984 }
22985 }
22986
22987 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_lt_8) {
22988 for (uint32_t channels = 1; channels < 8; channels++) {
22989 DWConvMicrokernelTester()
22990 .cr(8)
22991 .kr(9)
22992 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080022993 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070022994 }
22995 }
22996
22997 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_gt_8) {
22998 for (uint32_t channels = 9; channels < 16; channels++) {
22999 DWConvMicrokernelTester()
23000 .cr(8)
23001 .kr(9)
23002 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023003 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023004 }
23005 }
23006
23007 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_gt_8_with_qmin) {
23008 for (uint32_t channels = 9; channels < 16; channels++) {
23009 DWConvMicrokernelTester()
23010 .cr(8)
23011 .kr(9)
23012 .channels(channels)
23013 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023014 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023015 }
23016 }
23017
23018 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_gt_8_with_qmax) {
23019 for (uint32_t channels = 9; channels < 16; channels++) {
23020 DWConvMicrokernelTester()
23021 .cr(8)
23022 .kr(9)
23023 .channels(channels)
23024 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023025 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023026 }
23027 }
23028
23029 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel) {
23030 for (size_t channels = 1; channels <= 40; channels += 7) {
23031 DWConvMicrokernelTester()
23032 .cr(8)
23033 .kr(9)
23034 .channels(channels)
23035 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023036 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023037 }
23038 }
23039
23040 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_step) {
23041 for (size_t channels = 1; channels <= 40; channels += 7) {
23042 for (size_t step = 2; step <= 9; step++) {
23043 DWConvMicrokernelTester()
23044 .cr(8)
23045 .kr(9)
23046 .channels(channels)
23047 .width(3)
23048 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023049 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023050 }
23051 }
23052 }
23053
23054 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_output_stride) {
23055 for (size_t channels = 1; channels <= 40; channels += 7) {
23056 DWConvMicrokernelTester()
23057 .cr(8)
23058 .kr(9)
23059 .channels(8)
23060 .width(5)
23061 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023062 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023063 }
23064 }
23065
23066 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_qmin) {
23067 for (size_t channels = 1; channels <= 40; channels += 7) {
23068 DWConvMicrokernelTester()
23069 .cr(8)
23070 .kr(9)
23071 .channels(channels)
23072 .width(3)
23073 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023074 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023075 }
23076 }
23077
23078 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_qmax) {
23079 for (size_t channels = 1; channels <= 40; channels += 7) {
23080 DWConvMicrokernelTester()
23081 .cr(8)
23082 .kr(9)
23083 .channels(channels)
23084 .width(3)
23085 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023086 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023087 }
23088 }
23089
23090 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, input_offset) {
23091 for (uint32_t channels = 16; channels < 128; channels += 24) {
23092 DWConvMicrokernelTester()
23093 .cr(8)
23094 .kr(9)
23095 .channels(channels)
23096 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023097 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023098 }
23099 }
23100
23101 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, zero) {
23102 for (uint32_t mz = 0; mz < 9; mz++) {
23103 for (uint32_t channels = 16; channels < 128; channels += 24) {
23104 DWConvMicrokernelTester()
23105 .cr(8)
23106 .kr(9)
23107 .channels(channels)
23108 .input_offset(176)
23109 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023110 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023111 }
23112 }
23113 }
Marat Dukhan4c617792021-12-21 15:47:58 -080023114#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070023115
23116
Marat Dukhan4c617792021-12-21 15:47:58 -080023117#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Frank Barchard0725b8d2020-12-07 11:07:35 -080023118 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_eq_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023119 DWConvMicrokernelTester()
23120 .cr(8)
23121 .kr(9)
23122 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023123 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023124 }
23125
Frank Barchard0725b8d2020-12-07 11:07:35 -080023126 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_div_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023127 for (uint32_t channels = 16; channels < 128; channels += 24) {
23128 DWConvMicrokernelTester()
23129 .cr(8)
23130 .kr(9)
23131 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023132 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023133 }
23134 }
23135
Frank Barchard0725b8d2020-12-07 11:07:35 -080023136 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_div_8_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023137 for (uint32_t channels = 16; channels < 128; channels += 24) {
23138 DWConvMicrokernelTester()
23139 .cr(8)
23140 .kr(9)
23141 .channels(channels)
23142 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023143 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023144 }
23145 }
23146
Frank Barchard0725b8d2020-12-07 11:07:35 -080023147 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_div_8_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023148 for (uint32_t channels = 16; channels < 128; channels += 24) {
23149 DWConvMicrokernelTester()
23150 .cr(8)
23151 .kr(9)
23152 .channels(channels)
23153 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023154 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023155 }
23156 }
23157
Frank Barchard0725b8d2020-12-07 11:07:35 -080023158 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_lt_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023159 for (uint32_t channels = 1; channels < 8; channels++) {
23160 DWConvMicrokernelTester()
23161 .cr(8)
23162 .kr(9)
23163 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023164 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023165 }
23166 }
23167
Frank Barchard0725b8d2020-12-07 11:07:35 -080023168 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_gt_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023169 for (uint32_t channels = 9; channels < 16; channels++) {
23170 DWConvMicrokernelTester()
23171 .cr(8)
23172 .kr(9)
23173 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023174 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023175 }
23176 }
23177
Frank Barchard0725b8d2020-12-07 11:07:35 -080023178 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_gt_8_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023179 for (uint32_t channels = 9; channels < 16; channels++) {
23180 DWConvMicrokernelTester()
23181 .cr(8)
23182 .kr(9)
23183 .channels(channels)
23184 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023185 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023186 }
23187 }
23188
Frank Barchard0725b8d2020-12-07 11:07:35 -080023189 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, c_gt_8_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023190 for (uint32_t channels = 9; channels < 16; channels++) {
23191 DWConvMicrokernelTester()
23192 .cr(8)
23193 .kr(9)
23194 .channels(channels)
23195 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023196 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023197 }
23198 }
23199
Frank Barchard0725b8d2020-12-07 11:07:35 -080023200 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, multipixel) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023201 for (size_t channels = 1; channels <= 40; channels += 7) {
23202 DWConvMicrokernelTester()
23203 .cr(8)
23204 .kr(9)
23205 .channels(channels)
23206 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023207 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023208 }
23209 }
23210
Frank Barchard0725b8d2020-12-07 11:07:35 -080023211 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, multipixel_with_step) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023212 for (size_t channels = 1; channels <= 40; channels += 7) {
23213 for (size_t step = 2; step <= 9; step++) {
23214 DWConvMicrokernelTester()
23215 .cr(8)
23216 .kr(9)
23217 .channels(channels)
23218 .width(3)
23219 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023220 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023221 }
23222 }
23223 }
23224
Frank Barchard0725b8d2020-12-07 11:07:35 -080023225 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023226 for (size_t channels = 1; channels <= 40; channels += 7) {
23227 DWConvMicrokernelTester()
23228 .cr(8)
23229 .kr(9)
23230 .channels(8)
23231 .width(5)
23232 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023233 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023234 }
23235 }
23236
Frank Barchard0725b8d2020-12-07 11:07:35 -080023237 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023238 for (size_t channels = 1; channels <= 40; channels += 7) {
23239 DWConvMicrokernelTester()
23240 .cr(8)
23241 .kr(9)
23242 .channels(channels)
23243 .width(3)
23244 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023245 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023246 }
23247 }
23248
Frank Barchard0725b8d2020-12-07 11:07:35 -080023249 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023250 for (size_t channels = 1; channels <= 40; channels += 7) {
23251 DWConvMicrokernelTester()
23252 .cr(8)
23253 .kr(9)
23254 .channels(channels)
23255 .width(3)
23256 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023257 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023258 }
23259 }
23260
Frank Barchard0725b8d2020-12-07 11:07:35 -080023261 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, input_offset) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023262 for (uint32_t channels = 16; channels < 128; channels += 24) {
23263 DWConvMicrokernelTester()
23264 .cr(8)
23265 .kr(9)
23266 .channels(channels)
23267 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023268 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023269 }
23270 }
23271
Frank Barchard0725b8d2020-12-07 11:07:35 -080023272 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM_ACC2, zero) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023273 for (uint32_t mz = 0; mz < 9; mz++) {
23274 for (uint32_t channels = 16; channels < 128; channels += 24) {
23275 DWConvMicrokernelTester()
23276 .cr(8)
23277 .kr(9)
23278 .channels(channels)
23279 .input_offset(176)
23280 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023281 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023282 }
23283 }
23284 }
Marat Dukhan4c617792021-12-21 15:47:58 -080023285#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070023286
23287
Marat Dukhan4c617792021-12-21 15:47:58 -080023288#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070023289 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_eq_4) {
23290 DWConvMicrokernelTester()
23291 .cr(4)
23292 .kr(9)
23293 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023294 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023295 }
23296
23297 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_div_4) {
23298 for (uint32_t channels = 8; channels < 64; channels += 12) {
23299 DWConvMicrokernelTester()
23300 .cr(4)
23301 .kr(9)
23302 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023303 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023304 }
23305 }
23306
23307 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_div_4_with_qmin) {
23308 for (uint32_t channels = 8; channels < 64; channels += 12) {
23309 DWConvMicrokernelTester()
23310 .cr(4)
23311 .kr(9)
23312 .channels(channels)
23313 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023314 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023315 }
23316 }
23317
23318 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_div_4_with_qmax) {
23319 for (uint32_t channels = 8; channels < 64; channels += 12) {
23320 DWConvMicrokernelTester()
23321 .cr(4)
23322 .kr(9)
23323 .channels(channels)
23324 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023325 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023326 }
23327 }
23328
23329 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_lt_4) {
23330 for (uint32_t channels = 1; channels < 4; channels++) {
23331 DWConvMicrokernelTester()
23332 .cr(4)
23333 .kr(9)
23334 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023335 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023336 }
23337 }
23338
23339 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_gt_4) {
23340 for (uint32_t channels = 5; channels < 8; channels++) {
23341 DWConvMicrokernelTester()
23342 .cr(4)
23343 .kr(9)
23344 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023345 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023346 }
23347 }
23348
23349 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_gt_4_with_qmin) {
23350 for (uint32_t channels = 5; channels < 8; channels++) {
23351 DWConvMicrokernelTester()
23352 .cr(4)
23353 .kr(9)
23354 .channels(channels)
23355 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023356 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023357 }
23358 }
23359
23360 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_gt_4_with_qmax) {
23361 for (uint32_t channels = 5; channels < 8; channels++) {
23362 DWConvMicrokernelTester()
23363 .cr(4)
23364 .kr(9)
23365 .channels(channels)
23366 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023367 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023368 }
23369 }
23370
23371 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel) {
23372 for (size_t channels = 1; channels <= 20; channels += 3) {
23373 DWConvMicrokernelTester()
23374 .cr(4)
23375 .kr(9)
23376 .channels(channels)
23377 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023378 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023379 }
23380 }
23381
23382 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_step) {
23383 for (size_t channels = 1; channels <= 20; channels += 3) {
23384 for (size_t step = 2; step <= 9; step++) {
23385 DWConvMicrokernelTester()
23386 .cr(4)
23387 .kr(9)
23388 .channels(channels)
23389 .width(3)
23390 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023391 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023392 }
23393 }
23394 }
23395
23396 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_output_stride) {
23397 for (size_t channels = 1; channels <= 20; channels += 3) {
23398 DWConvMicrokernelTester()
23399 .cr(4)
23400 .kr(9)
23401 .channels(4)
23402 .width(5)
23403 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023404 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023405 }
23406 }
23407
23408 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_qmin) {
23409 for (size_t channels = 1; channels <= 20; channels += 3) {
23410 DWConvMicrokernelTester()
23411 .cr(4)
23412 .kr(9)
23413 .channels(channels)
23414 .width(3)
23415 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023416 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023417 }
23418 }
23419
23420 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_qmax) {
23421 for (size_t channels = 1; channels <= 20; channels += 3) {
23422 DWConvMicrokernelTester()
23423 .cr(4)
23424 .kr(9)
23425 .channels(channels)
23426 .width(3)
23427 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023428 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023429 }
23430 }
23431
23432 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, input_offset) {
23433 for (uint32_t channels = 8; channels < 64; channels += 12) {
23434 DWConvMicrokernelTester()
23435 .cr(4)
23436 .kr(9)
23437 .channels(channels)
23438 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023439 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023440 }
23441 }
23442
23443 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, zero) {
23444 for (uint32_t mz = 0; mz < 9; mz++) {
23445 for (uint32_t channels = 8; channels < 64; channels += 12) {
23446 DWConvMicrokernelTester()
23447 .cr(4)
23448 .kr(9)
23449 .channels(channels)
23450 .input_offset(112)
23451 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023452 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023453 }
23454 }
23455 }
Marat Dukhan4c617792021-12-21 15:47:58 -080023456#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070023457
23458
Marat Dukhan4c617792021-12-21 15:47:58 -080023459#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Frank Barchard0725b8d2020-12-07 11:07:35 -080023460 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_eq_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023461 DWConvMicrokernelTester()
23462 .cr(4)
23463 .kr(9)
23464 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023465 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023466 }
23467
Frank Barchard0725b8d2020-12-07 11:07:35 -080023468 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_div_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023469 for (uint32_t channels = 8; channels < 64; channels += 12) {
23470 DWConvMicrokernelTester()
23471 .cr(4)
23472 .kr(9)
23473 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023474 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023475 }
23476 }
23477
Frank Barchard0725b8d2020-12-07 11:07:35 -080023478 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_div_4_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023479 for (uint32_t channels = 8; channels < 64; channels += 12) {
23480 DWConvMicrokernelTester()
23481 .cr(4)
23482 .kr(9)
23483 .channels(channels)
23484 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023485 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023486 }
23487 }
23488
Frank Barchard0725b8d2020-12-07 11:07:35 -080023489 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_div_4_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023490 for (uint32_t channels = 8; channels < 64; channels += 12) {
23491 DWConvMicrokernelTester()
23492 .cr(4)
23493 .kr(9)
23494 .channels(channels)
23495 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023496 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023497 }
23498 }
23499
Frank Barchard0725b8d2020-12-07 11:07:35 -080023500 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_lt_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023501 for (uint32_t channels = 1; channels < 4; channels++) {
23502 DWConvMicrokernelTester()
23503 .cr(4)
23504 .kr(9)
23505 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023506 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023507 }
23508 }
23509
Frank Barchard0725b8d2020-12-07 11:07:35 -080023510 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_gt_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023511 for (uint32_t channels = 5; channels < 8; channels++) {
23512 DWConvMicrokernelTester()
23513 .cr(4)
23514 .kr(9)
23515 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023516 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023517 }
23518 }
23519
Frank Barchard0725b8d2020-12-07 11:07:35 -080023520 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_gt_4_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023521 for (uint32_t channels = 5; channels < 8; channels++) {
23522 DWConvMicrokernelTester()
23523 .cr(4)
23524 .kr(9)
23525 .channels(channels)
23526 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023527 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023528 }
23529 }
23530
Frank Barchard0725b8d2020-12-07 11:07:35 -080023531 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, c_gt_4_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023532 for (uint32_t channels = 5; channels < 8; channels++) {
23533 DWConvMicrokernelTester()
23534 .cr(4)
23535 .kr(9)
23536 .channels(channels)
23537 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023538 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023539 }
23540 }
23541
Frank Barchard0725b8d2020-12-07 11:07:35 -080023542 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, multipixel) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023543 for (size_t channels = 1; channels <= 20; channels += 3) {
23544 DWConvMicrokernelTester()
23545 .cr(4)
23546 .kr(9)
23547 .channels(channels)
23548 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023549 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023550 }
23551 }
23552
Frank Barchard0725b8d2020-12-07 11:07:35 -080023553 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, multipixel_with_step) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023554 for (size_t channels = 1; channels <= 20; channels += 3) {
23555 for (size_t step = 2; step <= 9; step++) {
23556 DWConvMicrokernelTester()
23557 .cr(4)
23558 .kr(9)
23559 .channels(channels)
23560 .width(3)
23561 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023562 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023563 }
23564 }
23565 }
23566
Frank Barchard0725b8d2020-12-07 11:07:35 -080023567 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023568 for (size_t channels = 1; channels <= 20; channels += 3) {
23569 DWConvMicrokernelTester()
23570 .cr(4)
23571 .kr(9)
23572 .channels(4)
23573 .width(5)
23574 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023575 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023576 }
23577 }
23578
Frank Barchard0725b8d2020-12-07 11:07:35 -080023579 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023580 for (size_t channels = 1; channels <= 20; channels += 3) {
23581 DWConvMicrokernelTester()
23582 .cr(4)
23583 .kr(9)
23584 .channels(channels)
23585 .width(3)
23586 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023587 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023588 }
23589 }
23590
Frank Barchard0725b8d2020-12-07 11:07:35 -080023591 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023592 for (size_t channels = 1; channels <= 20; channels += 3) {
23593 DWConvMicrokernelTester()
23594 .cr(4)
23595 .kr(9)
23596 .channels(channels)
23597 .width(3)
23598 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023599 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023600 }
23601 }
23602
Frank Barchard0725b8d2020-12-07 11:07:35 -080023603 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, input_offset) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023604 for (uint32_t channels = 8; channels < 64; channels += 12) {
23605 DWConvMicrokernelTester()
23606 .cr(4)
23607 .kr(9)
23608 .channels(channels)
23609 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023610 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023611 }
23612 }
23613
Frank Barchard0725b8d2020-12-07 11:07:35 -080023614 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86_ACC2, zero) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023615 for (uint32_t mz = 0; mz < 9; mz++) {
23616 for (uint32_t channels = 8; channels < 64; channels += 12) {
23617 DWConvMicrokernelTester()
23618 .cr(4)
23619 .kr(9)
23620 .channels(channels)
23621 .input_offset(112)
23622 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023623 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023624 }
23625 }
23626 }
Marat Dukhan4c617792021-12-21 15:47:58 -080023627#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070023628
23629
Marat Dukhan4c617792021-12-21 15:47:58 -080023630#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070023631 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_eq_8) {
23632 DWConvMicrokernelTester()
23633 .cr(8)
23634 .kr(9)
23635 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023636 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023637 }
23638
23639 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_div_8) {
23640 for (uint32_t channels = 16; channels < 128; channels += 24) {
23641 DWConvMicrokernelTester()
23642 .cr(8)
23643 .kr(9)
23644 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023645 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023646 }
23647 }
23648
23649 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_div_8_with_qmin) {
23650 for (uint32_t channels = 16; channels < 128; channels += 24) {
23651 DWConvMicrokernelTester()
23652 .cr(8)
23653 .kr(9)
23654 .channels(channels)
23655 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023656 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023657 }
23658 }
23659
23660 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_div_8_with_qmax) {
23661 for (uint32_t channels = 16; channels < 128; channels += 24) {
23662 DWConvMicrokernelTester()
23663 .cr(8)
23664 .kr(9)
23665 .channels(channels)
23666 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023667 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023668 }
23669 }
23670
23671 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_lt_8) {
23672 for (uint32_t channels = 1; channels < 8; channels++) {
23673 DWConvMicrokernelTester()
23674 .cr(8)
23675 .kr(9)
23676 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023677 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023678 }
23679 }
23680
23681 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_gt_8) {
23682 for (uint32_t channels = 9; channels < 16; channels++) {
23683 DWConvMicrokernelTester()
23684 .cr(8)
23685 .kr(9)
23686 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023687 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023688 }
23689 }
23690
23691 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_gt_8_with_qmin) {
23692 for (uint32_t channels = 9; channels < 16; channels++) {
23693 DWConvMicrokernelTester()
23694 .cr(8)
23695 .kr(9)
23696 .channels(channels)
23697 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023698 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023699 }
23700 }
23701
23702 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_gt_8_with_qmax) {
23703 for (uint32_t channels = 9; channels < 16; channels++) {
23704 DWConvMicrokernelTester()
23705 .cr(8)
23706 .kr(9)
23707 .channels(channels)
23708 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023709 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023710 }
23711 }
23712
23713 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel) {
23714 for (size_t channels = 1; channels <= 40; channels += 7) {
23715 DWConvMicrokernelTester()
23716 .cr(8)
23717 .kr(9)
23718 .channels(channels)
23719 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023720 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023721 }
23722 }
23723
23724 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_step) {
23725 for (size_t channels = 1; channels <= 40; channels += 7) {
23726 for (size_t step = 2; step <= 9; step++) {
23727 DWConvMicrokernelTester()
23728 .cr(8)
23729 .kr(9)
23730 .channels(channels)
23731 .width(3)
23732 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023733 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023734 }
23735 }
23736 }
23737
23738 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_output_stride) {
23739 for (size_t channels = 1; channels <= 40; channels += 7) {
23740 DWConvMicrokernelTester()
23741 .cr(8)
23742 .kr(9)
23743 .channels(8)
23744 .width(5)
23745 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023746 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023747 }
23748 }
23749
23750 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_qmin) {
23751 for (size_t channels = 1; channels <= 40; channels += 7) {
23752 DWConvMicrokernelTester()
23753 .cr(8)
23754 .kr(9)
23755 .channels(channels)
23756 .width(3)
23757 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023758 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023759 }
23760 }
23761
23762 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_qmax) {
23763 for (size_t channels = 1; channels <= 40; channels += 7) {
23764 DWConvMicrokernelTester()
23765 .cr(8)
23766 .kr(9)
23767 .channels(channels)
23768 .width(3)
23769 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023770 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023771 }
23772 }
23773
23774 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, input_offset) {
23775 for (uint32_t channels = 16; channels < 128; channels += 24) {
23776 DWConvMicrokernelTester()
23777 .cr(8)
23778 .kr(9)
23779 .channels(channels)
23780 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023781 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023782 }
23783 }
23784
23785 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, zero) {
23786 for (uint32_t mz = 0; mz < 9; mz++) {
23787 for (uint32_t channels = 16; channels < 128; channels += 24) {
23788 DWConvMicrokernelTester()
23789 .cr(8)
23790 .kr(9)
23791 .channels(channels)
23792 .input_offset(176)
23793 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023794 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023795 }
23796 }
23797 }
Marat Dukhan4c617792021-12-21 15:47:58 -080023798#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070023799
23800
Marat Dukhan4c617792021-12-21 15:47:58 -080023801#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Frank Barchard0725b8d2020-12-07 11:07:35 -080023802 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_eq_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023803 DWConvMicrokernelTester()
23804 .cr(8)
23805 .kr(9)
23806 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023807 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023808 }
23809
Frank Barchard0725b8d2020-12-07 11:07:35 -080023810 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_div_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023811 for (uint32_t channels = 16; channels < 128; channels += 24) {
23812 DWConvMicrokernelTester()
23813 .cr(8)
23814 .kr(9)
23815 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023816 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023817 }
23818 }
23819
Frank Barchard0725b8d2020-12-07 11:07:35 -080023820 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_div_8_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023821 for (uint32_t channels = 16; channels < 128; channels += 24) {
23822 DWConvMicrokernelTester()
23823 .cr(8)
23824 .kr(9)
23825 .channels(channels)
23826 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023827 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023828 }
23829 }
23830
Frank Barchard0725b8d2020-12-07 11:07:35 -080023831 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_div_8_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023832 for (uint32_t channels = 16; channels < 128; channels += 24) {
23833 DWConvMicrokernelTester()
23834 .cr(8)
23835 .kr(9)
23836 .channels(channels)
23837 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023838 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023839 }
23840 }
23841
Frank Barchard0725b8d2020-12-07 11:07:35 -080023842 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_lt_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023843 for (uint32_t channels = 1; channels < 8; channels++) {
23844 DWConvMicrokernelTester()
23845 .cr(8)
23846 .kr(9)
23847 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023848 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023849 }
23850 }
23851
Frank Barchard0725b8d2020-12-07 11:07:35 -080023852 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_gt_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023853 for (uint32_t channels = 9; channels < 16; channels++) {
23854 DWConvMicrokernelTester()
23855 .cr(8)
23856 .kr(9)
23857 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023858 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023859 }
23860 }
23861
Frank Barchard0725b8d2020-12-07 11:07:35 -080023862 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_gt_8_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023863 for (uint32_t channels = 9; channels < 16; channels++) {
23864 DWConvMicrokernelTester()
23865 .cr(8)
23866 .kr(9)
23867 .channels(channels)
23868 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023869 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023870 }
23871 }
23872
Frank Barchard0725b8d2020-12-07 11:07:35 -080023873 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, c_gt_8_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023874 for (uint32_t channels = 9; channels < 16; channels++) {
23875 DWConvMicrokernelTester()
23876 .cr(8)
23877 .kr(9)
23878 .channels(channels)
23879 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023880 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023881 }
23882 }
23883
Frank Barchard0725b8d2020-12-07 11:07:35 -080023884 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, multipixel) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023885 for (size_t channels = 1; channels <= 40; channels += 7) {
23886 DWConvMicrokernelTester()
23887 .cr(8)
23888 .kr(9)
23889 .channels(channels)
23890 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023891 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023892 }
23893 }
23894
Frank Barchard0725b8d2020-12-07 11:07:35 -080023895 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, multipixel_with_step) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023896 for (size_t channels = 1; channels <= 40; channels += 7) {
23897 for (size_t step = 2; step <= 9; step++) {
23898 DWConvMicrokernelTester()
23899 .cr(8)
23900 .kr(9)
23901 .channels(channels)
23902 .width(3)
23903 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023904 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023905 }
23906 }
23907 }
23908
Frank Barchard0725b8d2020-12-07 11:07:35 -080023909 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023910 for (size_t channels = 1; channels <= 40; channels += 7) {
23911 DWConvMicrokernelTester()
23912 .cr(8)
23913 .kr(9)
23914 .channels(8)
23915 .width(5)
23916 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023917 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023918 }
23919 }
23920
Frank Barchard0725b8d2020-12-07 11:07:35 -080023921 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023922 for (size_t channels = 1; channels <= 40; channels += 7) {
23923 DWConvMicrokernelTester()
23924 .cr(8)
23925 .kr(9)
23926 .channels(channels)
23927 .width(3)
23928 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023929 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023930 }
23931 }
23932
Frank Barchard0725b8d2020-12-07 11:07:35 -080023933 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023934 for (size_t channels = 1; channels <= 40; channels += 7) {
23935 DWConvMicrokernelTester()
23936 .cr(8)
23937 .kr(9)
23938 .channels(channels)
23939 .width(3)
23940 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023941 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023942 }
23943 }
23944
Frank Barchard0725b8d2020-12-07 11:07:35 -080023945 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, input_offset) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023946 for (uint32_t channels = 16; channels < 128; channels += 24) {
23947 DWConvMicrokernelTester()
23948 .cr(8)
23949 .kr(9)
23950 .channels(channels)
23951 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023952 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023953 }
23954 }
23955
Frank Barchard0725b8d2020-12-07 11:07:35 -080023956 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86_ACC2, zero) {
Marat Dukhanac014d72020-06-16 08:36:47 -070023957 for (uint32_t mz = 0; mz < 9; mz++) {
23958 for (uint32_t channels = 16; channels < 128; channels += 24) {
23959 DWConvMicrokernelTester()
23960 .cr(8)
23961 .kr(9)
23962 .channels(channels)
23963 .input_offset(176)
23964 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023965 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070023966 }
23967 }
23968 }
Marat Dukhan4c617792021-12-21 15:47:58 -080023969#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070023970
23971
Marat Dukhan4c617792021-12-21 15:47:58 -080023972#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070023973 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_eq_4) {
23974 DWConvMicrokernelTester()
23975 .cr(4)
23976 .kr(3)
23977 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023978 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070023979 }
23980
23981 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_div_4) {
23982 for (uint32_t channels = 8; channels < 64; channels += 12) {
23983 DWConvMicrokernelTester()
23984 .cr(4)
23985 .kr(3)
23986 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023987 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070023988 }
23989 }
23990
23991 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_div_4_with_qmin) {
23992 for (uint32_t channels = 8; channels < 64; channels += 12) {
23993 DWConvMicrokernelTester()
23994 .cr(4)
23995 .kr(3)
23996 .channels(channels)
23997 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080023998 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070023999 }
24000 }
24001
24002 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_div_4_with_qmax) {
24003 for (uint32_t channels = 8; channels < 64; channels += 12) {
24004 DWConvMicrokernelTester()
24005 .cr(4)
24006 .kr(3)
24007 .channels(channels)
24008 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024009 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024010 }
24011 }
24012
24013 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_lt_4) {
24014 for (uint32_t channels = 1; channels < 4; channels++) {
24015 DWConvMicrokernelTester()
24016 .cr(4)
24017 .kr(3)
24018 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024019 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024020 }
24021 }
24022
24023 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_gt_4) {
24024 for (uint32_t channels = 5; channels < 8; channels++) {
24025 DWConvMicrokernelTester()
24026 .cr(4)
24027 .kr(3)
24028 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024029 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024030 }
24031 }
24032
24033 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_gt_4_with_qmin) {
24034 for (uint32_t channels = 5; channels < 8; channels++) {
24035 DWConvMicrokernelTester()
24036 .cr(4)
24037 .kr(3)
24038 .channels(channels)
24039 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024040 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024041 }
24042 }
24043
24044 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, c_gt_4_with_qmax) {
24045 for (uint32_t channels = 5; channels < 8; channels++) {
24046 DWConvMicrokernelTester()
24047 .cr(4)
24048 .kr(3)
24049 .channels(channels)
24050 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024051 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024052 }
24053 }
24054
24055 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, multipixel) {
24056 for (size_t channels = 1; channels <= 20; channels += 3) {
24057 DWConvMicrokernelTester()
24058 .cr(4)
24059 .kr(3)
24060 .channels(channels)
24061 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024062 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024063 }
24064 }
24065
24066 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, multipixel_with_step) {
24067 for (size_t channels = 1; channels <= 20; channels += 3) {
24068 for (size_t step = 2; step <= 3; step++) {
24069 DWConvMicrokernelTester()
24070 .cr(4)
24071 .kr(3)
24072 .channels(channels)
24073 .width(3)
24074 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024075 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024076 }
24077 }
24078 }
24079
24080 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, multipixel_with_output_stride) {
24081 for (size_t channels = 1; channels <= 20; channels += 3) {
24082 DWConvMicrokernelTester()
24083 .cr(4)
24084 .kr(3)
24085 .channels(4)
24086 .width(5)
24087 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024088 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024089 }
24090 }
24091
24092 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, multipixel_with_qmin) {
24093 for (size_t channels = 1; channels <= 20; channels += 3) {
24094 DWConvMicrokernelTester()
24095 .cr(4)
24096 .kr(3)
24097 .channels(channels)
24098 .width(3)
24099 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024100 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024101 }
24102 }
24103
24104 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, multipixel_with_qmax) {
24105 for (size_t channels = 1; channels <= 20; channels += 3) {
24106 DWConvMicrokernelTester()
24107 .cr(4)
24108 .kr(3)
24109 .channels(channels)
24110 .width(3)
24111 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024112 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024113 }
24114 }
24115
24116 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, input_offset) {
24117 for (uint32_t channels = 8; channels < 64; channels += 12) {
24118 DWConvMicrokernelTester()
24119 .cr(4)
24120 .kr(3)
24121 .channels(channels)
24122 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024123 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024124 }
24125 }
24126
24127 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM, zero) {
24128 for (uint32_t mz = 0; mz < 3; mz++) {
24129 for (uint32_t channels = 8; channels < 64; channels += 12) {
24130 DWConvMicrokernelTester()
24131 .cr(4)
24132 .kr(3)
24133 .channels(channels)
24134 .input_offset(112)
24135 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024136 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024137 }
24138 }
24139 }
Marat Dukhan4c617792021-12-21 15:47:58 -080024140#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024141
24142
Marat Dukhan4c617792021-12-21 15:47:58 -080024143#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024144 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_eq_4) {
24145 DWConvMicrokernelTester()
24146 .cr(4)
24147 .kr(3)
24148 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024149 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024150 }
24151
24152 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_div_4) {
24153 for (uint32_t channels = 8; channels < 64; channels += 12) {
24154 DWConvMicrokernelTester()
24155 .cr(4)
24156 .kr(3)
24157 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024158 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024159 }
24160 }
24161
24162 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_div_4_with_qmin) {
24163 for (uint32_t channels = 8; channels < 64; channels += 12) {
24164 DWConvMicrokernelTester()
24165 .cr(4)
24166 .kr(3)
24167 .channels(channels)
24168 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024169 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024170 }
24171 }
24172
24173 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_div_4_with_qmax) {
24174 for (uint32_t channels = 8; channels < 64; channels += 12) {
24175 DWConvMicrokernelTester()
24176 .cr(4)
24177 .kr(3)
24178 .channels(channels)
24179 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024180 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024181 }
24182 }
24183
24184 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_lt_4) {
24185 for (uint32_t channels = 1; channels < 4; channels++) {
24186 DWConvMicrokernelTester()
24187 .cr(4)
24188 .kr(3)
24189 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024190 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024191 }
24192 }
24193
24194 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_gt_4) {
24195 for (uint32_t channels = 5; channels < 8; channels++) {
24196 DWConvMicrokernelTester()
24197 .cr(4)
24198 .kr(3)
24199 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024200 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024201 }
24202 }
24203
24204 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_gt_4_with_qmin) {
24205 for (uint32_t channels = 5; channels < 8; channels++) {
24206 DWConvMicrokernelTester()
24207 .cr(4)
24208 .kr(3)
24209 .channels(channels)
24210 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024211 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024212 }
24213 }
24214
24215 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, c_gt_4_with_qmax) {
24216 for (uint32_t channels = 5; channels < 8; channels++) {
24217 DWConvMicrokernelTester()
24218 .cr(4)
24219 .kr(3)
24220 .channels(channels)
24221 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024222 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024223 }
24224 }
24225
24226 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, multipixel) {
24227 for (size_t channels = 1; channels <= 20; channels += 3) {
24228 DWConvMicrokernelTester()
24229 .cr(4)
24230 .kr(3)
24231 .channels(channels)
24232 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024233 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024234 }
24235 }
24236
24237 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, multipixel_with_step) {
24238 for (size_t channels = 1; channels <= 20; channels += 3) {
24239 for (size_t step = 2; step <= 3; step++) {
24240 DWConvMicrokernelTester()
24241 .cr(4)
24242 .kr(3)
24243 .channels(channels)
24244 .width(3)
24245 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024246 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024247 }
24248 }
24249 }
24250
24251 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
24252 for (size_t channels = 1; channels <= 20; channels += 3) {
24253 DWConvMicrokernelTester()
24254 .cr(4)
24255 .kr(3)
24256 .channels(4)
24257 .width(5)
24258 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024259 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024260 }
24261 }
24262
24263 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
24264 for (size_t channels = 1; channels <= 20; channels += 3) {
24265 DWConvMicrokernelTester()
24266 .cr(4)
24267 .kr(3)
24268 .channels(channels)
24269 .width(3)
24270 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024271 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024272 }
24273 }
24274
24275 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
24276 for (size_t channels = 1; channels <= 20; channels += 3) {
24277 DWConvMicrokernelTester()
24278 .cr(4)
24279 .kr(3)
24280 .channels(channels)
24281 .width(3)
24282 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024283 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024284 }
24285 }
24286
24287 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, input_offset) {
24288 for (uint32_t channels = 8; channels < 64; channels += 12) {
24289 DWConvMicrokernelTester()
24290 .cr(4)
24291 .kr(3)
24292 .channels(channels)
24293 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024294 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024295 }
24296 }
24297
24298 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_ARM_ACC2, zero) {
24299 for (uint32_t mz = 0; mz < 3; mz++) {
24300 for (uint32_t channels = 8; channels < 64; channels += 12) {
24301 DWConvMicrokernelTester()
24302 .cr(4)
24303 .kr(3)
24304 .channels(channels)
24305 .input_offset(112)
24306 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024307 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024308 }
24309 }
24310 }
Marat Dukhan4c617792021-12-21 15:47:58 -080024311#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024312
24313
Marat Dukhan4c617792021-12-21 15:47:58 -080024314#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070024315 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_eq_4) {
24316 DWConvMicrokernelTester()
24317 .cr(4)
24318 .kr(4)
24319 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024320 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024321 }
24322
24323 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_div_4) {
24324 for (uint32_t channels = 8; channels < 64; channels += 12) {
24325 DWConvMicrokernelTester()
24326 .cr(4)
24327 .kr(4)
24328 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024329 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024330 }
24331 }
24332
24333 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_div_4_with_qmin) {
24334 for (uint32_t channels = 8; channels < 64; channels += 12) {
24335 DWConvMicrokernelTester()
24336 .cr(4)
24337 .kr(4)
24338 .channels(channels)
24339 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024340 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024341 }
24342 }
24343
24344 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_div_4_with_qmax) {
24345 for (uint32_t channels = 8; channels < 64; channels += 12) {
24346 DWConvMicrokernelTester()
24347 .cr(4)
24348 .kr(4)
24349 .channels(channels)
24350 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024351 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024352 }
24353 }
24354
24355 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_lt_4) {
24356 for (uint32_t channels = 1; channels < 4; channels++) {
24357 DWConvMicrokernelTester()
24358 .cr(4)
24359 .kr(4)
24360 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024361 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024362 }
24363 }
24364
24365 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_gt_4) {
24366 for (uint32_t channels = 5; channels < 8; channels++) {
24367 DWConvMicrokernelTester()
24368 .cr(4)
24369 .kr(4)
24370 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024371 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024372 }
24373 }
24374
24375 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_gt_4_with_qmin) {
24376 for (uint32_t channels = 5; channels < 8; channels++) {
24377 DWConvMicrokernelTester()
24378 .cr(4)
24379 .kr(4)
24380 .channels(channels)
24381 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024382 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024383 }
24384 }
24385
24386 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_gt_4_with_qmax) {
24387 for (uint32_t channels = 5; channels < 8; channels++) {
24388 DWConvMicrokernelTester()
24389 .cr(4)
24390 .kr(4)
24391 .channels(channels)
24392 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024393 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024394 }
24395 }
24396
24397 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel) {
24398 for (size_t channels = 1; channels <= 20; channels += 3) {
24399 DWConvMicrokernelTester()
24400 .cr(4)
24401 .kr(4)
24402 .channels(channels)
24403 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024404 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024405 }
24406 }
24407
24408 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_step) {
24409 for (size_t channels = 1; channels <= 20; channels += 3) {
24410 for (size_t step = 2; step <= 4; step++) {
24411 DWConvMicrokernelTester()
24412 .cr(4)
24413 .kr(4)
24414 .channels(channels)
24415 .width(3)
24416 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024417 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024418 }
24419 }
24420 }
24421
24422 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_output_stride) {
24423 for (size_t channels = 1; channels <= 20; channels += 3) {
24424 DWConvMicrokernelTester()
24425 .cr(4)
24426 .kr(4)
24427 .channels(4)
24428 .width(5)
24429 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024430 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024431 }
24432 }
24433
24434 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_qmin) {
24435 for (size_t channels = 1; channels <= 20; channels += 3) {
24436 DWConvMicrokernelTester()
24437 .cr(4)
24438 .kr(4)
24439 .channels(channels)
24440 .width(3)
24441 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024442 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024443 }
24444 }
24445
24446 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_qmax) {
24447 for (size_t channels = 1; channels <= 20; channels += 3) {
24448 DWConvMicrokernelTester()
24449 .cr(4)
24450 .kr(4)
24451 .channels(channels)
24452 .width(3)
24453 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024454 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024455 }
24456 }
24457
24458 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, input_offset) {
24459 for (uint32_t channels = 8; channels < 64; channels += 12) {
24460 DWConvMicrokernelTester()
24461 .cr(4)
24462 .kr(4)
24463 .channels(channels)
24464 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024465 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024466 }
24467 }
24468
24469 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, zero) {
24470 for (uint32_t mz = 0; mz < 4; mz++) {
24471 for (uint32_t channels = 8; channels < 64; channels += 12) {
24472 DWConvMicrokernelTester()
24473 .cr(4)
24474 .kr(4)
24475 .channels(channels)
24476 .input_offset(112)
24477 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024478 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024479 }
24480 }
24481 }
Marat Dukhan4c617792021-12-21 15:47:58 -080024482#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070024483
24484
Marat Dukhan4c617792021-12-21 15:47:58 -080024485#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Frank Barchard0725b8d2020-12-07 11:07:35 -080024486 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_eq_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024487 DWConvMicrokernelTester()
24488 .cr(4)
24489 .kr(4)
24490 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024491 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024492 }
24493
Frank Barchard0725b8d2020-12-07 11:07:35 -080024494 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_div_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024495 for (uint32_t channels = 8; channels < 64; channels += 12) {
24496 DWConvMicrokernelTester()
24497 .cr(4)
24498 .kr(4)
24499 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024500 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024501 }
24502 }
24503
Frank Barchard0725b8d2020-12-07 11:07:35 -080024504 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_div_4_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024505 for (uint32_t channels = 8; channels < 64; channels += 12) {
24506 DWConvMicrokernelTester()
24507 .cr(4)
24508 .kr(4)
24509 .channels(channels)
24510 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024511 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024512 }
24513 }
24514
Frank Barchard0725b8d2020-12-07 11:07:35 -080024515 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_div_4_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024516 for (uint32_t channels = 8; channels < 64; channels += 12) {
24517 DWConvMicrokernelTester()
24518 .cr(4)
24519 .kr(4)
24520 .channels(channels)
24521 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024522 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024523 }
24524 }
24525
Frank Barchard0725b8d2020-12-07 11:07:35 -080024526 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_lt_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024527 for (uint32_t channels = 1; channels < 4; channels++) {
24528 DWConvMicrokernelTester()
24529 .cr(4)
24530 .kr(4)
24531 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024532 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024533 }
24534 }
24535
Frank Barchard0725b8d2020-12-07 11:07:35 -080024536 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_gt_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024537 for (uint32_t channels = 5; channels < 8; channels++) {
24538 DWConvMicrokernelTester()
24539 .cr(4)
24540 .kr(4)
24541 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024542 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024543 }
24544 }
24545
Frank Barchard0725b8d2020-12-07 11:07:35 -080024546 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_gt_4_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024547 for (uint32_t channels = 5; channels < 8; channels++) {
24548 DWConvMicrokernelTester()
24549 .cr(4)
24550 .kr(4)
24551 .channels(channels)
24552 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024553 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024554 }
24555 }
24556
Frank Barchard0725b8d2020-12-07 11:07:35 -080024557 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, c_gt_4_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024558 for (uint32_t channels = 5; channels < 8; channels++) {
24559 DWConvMicrokernelTester()
24560 .cr(4)
24561 .kr(4)
24562 .channels(channels)
24563 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024564 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024565 }
24566 }
24567
Frank Barchard0725b8d2020-12-07 11:07:35 -080024568 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, multipixel) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024569 for (size_t channels = 1; channels <= 20; channels += 3) {
24570 DWConvMicrokernelTester()
24571 .cr(4)
24572 .kr(4)
24573 .channels(channels)
24574 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024575 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024576 }
24577 }
24578
Frank Barchard0725b8d2020-12-07 11:07:35 -080024579 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, multipixel_with_step) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024580 for (size_t channels = 1; channels <= 20; channels += 3) {
24581 for (size_t step = 2; step <= 4; step++) {
24582 DWConvMicrokernelTester()
24583 .cr(4)
24584 .kr(4)
24585 .channels(channels)
24586 .width(3)
24587 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024588 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024589 }
24590 }
24591 }
24592
Frank Barchard0725b8d2020-12-07 11:07:35 -080024593 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024594 for (size_t channels = 1; channels <= 20; channels += 3) {
24595 DWConvMicrokernelTester()
24596 .cr(4)
24597 .kr(4)
24598 .channels(4)
24599 .width(5)
24600 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024601 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024602 }
24603 }
24604
Frank Barchard0725b8d2020-12-07 11:07:35 -080024605 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024606 for (size_t channels = 1; channels <= 20; channels += 3) {
24607 DWConvMicrokernelTester()
24608 .cr(4)
24609 .kr(4)
24610 .channels(channels)
24611 .width(3)
24612 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024613 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024614 }
24615 }
24616
Frank Barchard0725b8d2020-12-07 11:07:35 -080024617 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024618 for (size_t channels = 1; channels <= 20; channels += 3) {
24619 DWConvMicrokernelTester()
24620 .cr(4)
24621 .kr(4)
24622 .channels(channels)
24623 .width(3)
24624 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024625 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024626 }
24627 }
24628
Frank Barchard0725b8d2020-12-07 11:07:35 -080024629 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, input_offset) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024630 for (uint32_t channels = 8; channels < 64; channels += 12) {
24631 DWConvMicrokernelTester()
24632 .cr(4)
24633 .kr(4)
24634 .channels(channels)
24635 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024636 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024637 }
24638 }
24639
Frank Barchard0725b8d2020-12-07 11:07:35 -080024640 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM_ACC2, zero) {
Marat Dukhanac014d72020-06-16 08:36:47 -070024641 for (uint32_t mz = 0; mz < 4; mz++) {
24642 for (uint32_t channels = 8; channels < 64; channels += 12) {
24643 DWConvMicrokernelTester()
24644 .cr(4)
24645 .kr(4)
24646 .channels(channels)
24647 .input_offset(112)
24648 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024649 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070024650 }
24651 }
24652 }
Marat Dukhan4c617792021-12-21 15:47:58 -080024653#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070024654
24655
Marat Dukhan4c617792021-12-21 15:47:58 -080024656#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024657 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_eq_8) {
24658 DWConvMicrokernelTester()
24659 .cr(8)
24660 .kr(3)
24661 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024662 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024663 }
24664
24665 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_div_8) {
24666 for (uint32_t channels = 16; channels < 128; channels += 24) {
24667 DWConvMicrokernelTester()
24668 .cr(8)
24669 .kr(3)
24670 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024671 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024672 }
24673 }
24674
24675 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_div_8_with_qmin) {
24676 for (uint32_t channels = 16; channels < 128; channels += 24) {
24677 DWConvMicrokernelTester()
24678 .cr(8)
24679 .kr(3)
24680 .channels(channels)
24681 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024682 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024683 }
24684 }
24685
24686 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_div_8_with_qmax) {
24687 for (uint32_t channels = 16; channels < 128; channels += 24) {
24688 DWConvMicrokernelTester()
24689 .cr(8)
24690 .kr(3)
24691 .channels(channels)
24692 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024693 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024694 }
24695 }
24696
24697 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_lt_8) {
24698 for (uint32_t channels = 1; channels < 8; channels++) {
24699 DWConvMicrokernelTester()
24700 .cr(8)
24701 .kr(3)
24702 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024703 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024704 }
24705 }
24706
24707 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_gt_8) {
24708 for (uint32_t channels = 9; channels < 16; channels++) {
24709 DWConvMicrokernelTester()
24710 .cr(8)
24711 .kr(3)
24712 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024713 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024714 }
24715 }
24716
24717 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_gt_8_with_qmin) {
24718 for (uint32_t channels = 9; channels < 16; channels++) {
24719 DWConvMicrokernelTester()
24720 .cr(8)
24721 .kr(3)
24722 .channels(channels)
24723 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024724 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024725 }
24726 }
24727
24728 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, c_gt_8_with_qmax) {
24729 for (uint32_t channels = 9; channels < 16; channels++) {
24730 DWConvMicrokernelTester()
24731 .cr(8)
24732 .kr(3)
24733 .channels(channels)
24734 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024735 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024736 }
24737 }
24738
24739 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, multipixel) {
24740 for (size_t channels = 1; channels <= 40; channels += 7) {
24741 DWConvMicrokernelTester()
24742 .cr(8)
24743 .kr(3)
24744 .channels(channels)
24745 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024746 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024747 }
24748 }
24749
24750 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, multipixel_with_step) {
24751 for (size_t channels = 1; channels <= 40; channels += 7) {
24752 for (size_t step = 2; step <= 3; step++) {
24753 DWConvMicrokernelTester()
24754 .cr(8)
24755 .kr(3)
24756 .channels(channels)
24757 .width(3)
24758 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024759 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024760 }
24761 }
24762 }
24763
24764 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, multipixel_with_output_stride) {
24765 for (size_t channels = 1; channels <= 40; channels += 7) {
24766 DWConvMicrokernelTester()
24767 .cr(8)
24768 .kr(3)
24769 .channels(8)
24770 .width(5)
24771 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024772 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024773 }
24774 }
24775
24776 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, multipixel_with_qmin) {
24777 for (size_t channels = 1; channels <= 40; channels += 7) {
24778 DWConvMicrokernelTester()
24779 .cr(8)
24780 .kr(3)
24781 .channels(channels)
24782 .width(3)
24783 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024784 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024785 }
24786 }
24787
24788 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, multipixel_with_qmax) {
24789 for (size_t channels = 1; channels <= 40; channels += 7) {
24790 DWConvMicrokernelTester()
24791 .cr(8)
24792 .kr(3)
24793 .channels(channels)
24794 .width(3)
24795 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024796 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024797 }
24798 }
24799
24800 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, input_offset) {
24801 for (uint32_t channels = 16; channels < 128; channels += 24) {
24802 DWConvMicrokernelTester()
24803 .cr(8)
24804 .kr(3)
24805 .channels(channels)
24806 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024807 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024808 }
24809 }
24810
24811 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM, zero) {
24812 for (uint32_t mz = 0; mz < 3; mz++) {
24813 for (uint32_t channels = 16; channels < 128; channels += 24) {
24814 DWConvMicrokernelTester()
24815 .cr(8)
24816 .kr(3)
24817 .channels(channels)
24818 .input_offset(176)
24819 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024820 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024821 }
24822 }
24823 }
Marat Dukhan4c617792021-12-21 15:47:58 -080024824#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024825
24826
Marat Dukhan4c617792021-12-21 15:47:58 -080024827#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024828 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_eq_8) {
24829 DWConvMicrokernelTester()
24830 .cr(8)
24831 .kr(3)
24832 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024833 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024834 }
24835
24836 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_div_8) {
24837 for (uint32_t channels = 16; channels < 128; channels += 24) {
24838 DWConvMicrokernelTester()
24839 .cr(8)
24840 .kr(3)
24841 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024842 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024843 }
24844 }
24845
24846 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
24851 .channels(channels)
24852 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024853 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024854 }
24855 }
24856
24857 TEST(F32_DWCONV_MINMAX_UP8X3__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(3)
24862 .channels(channels)
24863 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024864 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024865 }
24866 }
24867
24868 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_lt_8) {
24869 for (uint32_t channels = 1; channels < 8; channels++) {
24870 DWConvMicrokernelTester()
24871 .cr(8)
24872 .kr(3)
24873 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024874 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024875 }
24876 }
24877
24878 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_gt_8) {
24879 for (uint32_t channels = 9; channels < 16; channels++) {
24880 DWConvMicrokernelTester()
24881 .cr(8)
24882 .kr(3)
24883 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024884 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024885 }
24886 }
24887
24888 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_gt_8_with_qmin) {
24889 for (uint32_t channels = 9; channels < 16; channels++) {
24890 DWConvMicrokernelTester()
24891 .cr(8)
24892 .kr(3)
24893 .channels(channels)
24894 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024895 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024896 }
24897 }
24898
24899 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, c_gt_8_with_qmax) {
24900 for (uint32_t channels = 9; channels < 16; channels++) {
24901 DWConvMicrokernelTester()
24902 .cr(8)
24903 .kr(3)
24904 .channels(channels)
24905 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024906 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024907 }
24908 }
24909
24910 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, multipixel) {
24911 for (size_t channels = 1; channels <= 40; channels += 7) {
24912 DWConvMicrokernelTester()
24913 .cr(8)
24914 .kr(3)
24915 .channels(channels)
24916 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024917 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024918 }
24919 }
24920
24921 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, multipixel_with_step) {
24922 for (size_t channels = 1; channels <= 40; channels += 7) {
24923 for (size_t step = 2; step <= 3; step++) {
24924 DWConvMicrokernelTester()
24925 .cr(8)
24926 .kr(3)
24927 .channels(channels)
24928 .width(3)
24929 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024930 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024931 }
24932 }
24933 }
24934
24935 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
24936 for (size_t channels = 1; channels <= 40; channels += 7) {
24937 DWConvMicrokernelTester()
24938 .cr(8)
24939 .kr(3)
24940 .channels(8)
24941 .width(5)
24942 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024943 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024944 }
24945 }
24946
24947 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
24948 for (size_t channels = 1; channels <= 40; channels += 7) {
24949 DWConvMicrokernelTester()
24950 .cr(8)
24951 .kr(3)
24952 .channels(channels)
24953 .width(3)
24954 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024955 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024956 }
24957 }
24958
24959 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
24960 for (size_t channels = 1; channels <= 40; channels += 7) {
24961 DWConvMicrokernelTester()
24962 .cr(8)
24963 .kr(3)
24964 .channels(channels)
24965 .width(3)
24966 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024967 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024968 }
24969 }
24970
24971 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, input_offset) {
24972 for (uint32_t channels = 16; channels < 128; channels += 24) {
24973 DWConvMicrokernelTester()
24974 .cr(8)
24975 .kr(3)
24976 .channels(channels)
24977 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024978 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024979 }
24980 }
24981
24982 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_ARM_ACC2, zero) {
24983 for (uint32_t mz = 0; mz < 3; mz++) {
24984 for (uint32_t channels = 16; channels < 128; channels += 24) {
24985 DWConvMicrokernelTester()
24986 .cr(8)
24987 .kr(3)
24988 .channels(channels)
24989 .input_offset(176)
24990 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080024991 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024992 }
24993 }
24994 }
Marat Dukhan4c617792021-12-21 15:47:58 -080024995#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070024996
24997
Marat Dukhan4c617792021-12-21 15:47:58 -080024998#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070024999 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_eq_8) {
25000 DWConvMicrokernelTester()
25001 .cr(8)
25002 .kr(4)
25003 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025004 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025005 }
25006
25007 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_div_8) {
25008 for (uint32_t channels = 16; channels < 128; channels += 24) {
25009 DWConvMicrokernelTester()
25010 .cr(8)
25011 .kr(4)
25012 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025013 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025014 }
25015 }
25016
25017 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025024 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025025 }
25026 }
25027
25028 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025035 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025036 }
25037 }
25038
25039 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_lt_8) {
25040 for (uint32_t channels = 1; channels < 8; channels++) {
25041 DWConvMicrokernelTester()
25042 .cr(8)
25043 .kr(4)
25044 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025045 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025046 }
25047 }
25048
25049 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_gt_8) {
25050 for (uint32_t channels = 9; channels < 16; channels++) {
25051 DWConvMicrokernelTester()
25052 .cr(8)
25053 .kr(4)
25054 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025055 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025056 }
25057 }
25058
25059 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025066 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025067 }
25068 }
25069
25070 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025077 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025078 }
25079 }
25080
25081 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025088 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025089 }
25090 }
25091
25092 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025101 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025102 }
25103 }
25104 }
25105
25106 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025114 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025115 }
25116 }
25117
25118 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025126 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025127 }
25128 }
25129
25130 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025138 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025139 }
25140 }
25141
25142 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025149 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025150 }
25151 }
25152
25153 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025162 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025163 }
25164 }
25165 }
Marat Dukhan4c617792021-12-21 15:47:58 -080025166#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070025167
25168
Marat Dukhan4c617792021-12-21 15:47:58 -080025169#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Frank Barchard0725b8d2020-12-07 11:07:35 -080025170 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_eq_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025171 DWConvMicrokernelTester()
25172 .cr(8)
25173 .kr(4)
25174 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025175 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025176 }
25177
Frank Barchard0725b8d2020-12-07 11:07:35 -080025178 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_div_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025179 for (uint32_t channels = 16; channels < 128; channels += 24) {
25180 DWConvMicrokernelTester()
25181 .cr(8)
25182 .kr(4)
25183 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025184 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025185 }
25186 }
25187
Frank Barchard0725b8d2020-12-07 11:07:35 -080025188 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_div_8_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025189 for (uint32_t channels = 16; channels < 128; channels += 24) {
25190 DWConvMicrokernelTester()
25191 .cr(8)
25192 .kr(4)
25193 .channels(channels)
25194 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025195 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025196 }
25197 }
25198
Frank Barchard0725b8d2020-12-07 11:07:35 -080025199 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_div_8_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025200 for (uint32_t channels = 16; channels < 128; channels += 24) {
25201 DWConvMicrokernelTester()
25202 .cr(8)
25203 .kr(4)
25204 .channels(channels)
25205 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025206 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025207 }
25208 }
25209
Frank Barchard0725b8d2020-12-07 11:07:35 -080025210 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_lt_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025211 for (uint32_t channels = 1; channels < 8; channels++) {
25212 DWConvMicrokernelTester()
25213 .cr(8)
25214 .kr(4)
25215 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025216 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025217 }
25218 }
25219
Frank Barchard0725b8d2020-12-07 11:07:35 -080025220 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_gt_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025221 for (uint32_t channels = 9; channels < 16; channels++) {
25222 DWConvMicrokernelTester()
25223 .cr(8)
25224 .kr(4)
25225 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025226 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025227 }
25228 }
25229
Frank Barchard0725b8d2020-12-07 11:07:35 -080025230 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_gt_8_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025231 for (uint32_t channels = 9; channels < 16; channels++) {
25232 DWConvMicrokernelTester()
25233 .cr(8)
25234 .kr(4)
25235 .channels(channels)
25236 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025237 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025238 }
25239 }
25240
Frank Barchard0725b8d2020-12-07 11:07:35 -080025241 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, c_gt_8_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025242 for (uint32_t channels = 9; channels < 16; channels++) {
25243 DWConvMicrokernelTester()
25244 .cr(8)
25245 .kr(4)
25246 .channels(channels)
25247 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025248 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025249 }
25250 }
25251
Frank Barchard0725b8d2020-12-07 11:07:35 -080025252 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, multipixel) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025253 for (size_t channels = 1; channels <= 40; channels += 7) {
25254 DWConvMicrokernelTester()
25255 .cr(8)
25256 .kr(4)
25257 .channels(channels)
25258 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025259 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025260 }
25261 }
25262
Frank Barchard0725b8d2020-12-07 11:07:35 -080025263 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, multipixel_with_step) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025264 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025272 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025273 }
25274 }
25275 }
25276
Frank Barchard0725b8d2020-12-07 11:07:35 -080025277 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, multipixel_with_output_stride) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025278 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025285 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025286 }
25287 }
25288
Frank Barchard0725b8d2020-12-07 11:07:35 -080025289 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, multipixel_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025290 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025297 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025298 }
25299 }
25300
Frank Barchard0725b8d2020-12-07 11:07:35 -080025301 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, multipixel_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025302 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025309 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025310 }
25311 }
25312
Frank Barchard0725b8d2020-12-07 11:07:35 -080025313 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, input_offset) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025314 for (uint32_t channels = 16; channels < 128; channels += 24) {
25315 DWConvMicrokernelTester()
25316 .cr(8)
25317 .kr(4)
25318 .channels(channels)
25319 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025320 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025321 }
25322 }
25323
Frank Barchard0725b8d2020-12-07 11:07:35 -080025324 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM_ACC2, zero) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025325 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)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025333 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025334 }
25335 }
25336 }
Marat Dukhan4c617792021-12-21 15:47:58 -080025337#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070025338
25339
Marat Dukhan4c617792021-12-21 15:47:58 -080025340#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025341 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_eq_4) {
25342 DWConvMicrokernelTester()
25343 .cr(4)
25344 .kr(3)
25345 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025346 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025347 }
25348
25349 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_div_4) {
25350 for (uint32_t channels = 8; channels < 64; channels += 12) {
25351 DWConvMicrokernelTester()
25352 .cr(4)
25353 .kr(3)
25354 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025355 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025356 }
25357 }
25358
25359 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_div_4_with_qmin) {
25360 for (uint32_t channels = 8; channels < 64; channels += 12) {
25361 DWConvMicrokernelTester()
25362 .cr(4)
25363 .kr(3)
25364 .channels(channels)
25365 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025366 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025367 }
25368 }
25369
25370 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_div_4_with_qmax) {
25371 for (uint32_t channels = 8; channels < 64; channels += 12) {
25372 DWConvMicrokernelTester()
25373 .cr(4)
25374 .kr(3)
25375 .channels(channels)
25376 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025377 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025378 }
25379 }
25380
25381 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_lt_4) {
25382 for (uint32_t channels = 1; channels < 4; channels++) {
25383 DWConvMicrokernelTester()
25384 .cr(4)
25385 .kr(3)
25386 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025387 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025388 }
25389 }
25390
25391 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_gt_4) {
25392 for (uint32_t channels = 5; channels < 8; channels++) {
25393 DWConvMicrokernelTester()
25394 .cr(4)
25395 .kr(3)
25396 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025397 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025398 }
25399 }
25400
25401 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_gt_4_with_qmin) {
25402 for (uint32_t channels = 5; channels < 8; channels++) {
25403 DWConvMicrokernelTester()
25404 .cr(4)
25405 .kr(3)
25406 .channels(channels)
25407 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025408 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025409 }
25410 }
25411
25412 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, c_gt_4_with_qmax) {
25413 for (uint32_t channels = 5; channels < 8; channels++) {
25414 DWConvMicrokernelTester()
25415 .cr(4)
25416 .kr(3)
25417 .channels(channels)
25418 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025419 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025420 }
25421 }
25422
25423 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, multipixel) {
25424 for (size_t channels = 1; channels <= 20; channels += 3) {
25425 DWConvMicrokernelTester()
25426 .cr(4)
25427 .kr(3)
25428 .channels(channels)
25429 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025430 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025431 }
25432 }
25433
25434 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, multipixel_with_step) {
25435 for (size_t channels = 1; channels <= 20; channels += 3) {
25436 for (size_t step = 2; step <= 3; step++) {
25437 DWConvMicrokernelTester()
25438 .cr(4)
25439 .kr(3)
25440 .channels(channels)
25441 .width(3)
25442 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025443 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025444 }
25445 }
25446 }
25447
25448 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, multipixel_with_output_stride) {
25449 for (size_t channels = 1; channels <= 20; channels += 3) {
25450 DWConvMicrokernelTester()
25451 .cr(4)
25452 .kr(3)
25453 .channels(4)
25454 .width(5)
25455 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025456 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025457 }
25458 }
25459
25460 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, multipixel_with_qmin) {
25461 for (size_t channels = 1; channels <= 20; channels += 3) {
25462 DWConvMicrokernelTester()
25463 .cr(4)
25464 .kr(3)
25465 .channels(channels)
25466 .width(3)
25467 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025468 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025469 }
25470 }
25471
25472 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, multipixel_with_qmax) {
25473 for (size_t channels = 1; channels <= 20; channels += 3) {
25474 DWConvMicrokernelTester()
25475 .cr(4)
25476 .kr(3)
25477 .channels(channels)
25478 .width(3)
25479 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025480 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025481 }
25482 }
25483
25484 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, input_offset) {
25485 for (uint32_t channels = 8; channels < 64; channels += 12) {
25486 DWConvMicrokernelTester()
25487 .cr(4)
25488 .kr(3)
25489 .channels(channels)
25490 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025491 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025492 }
25493 }
25494
25495 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86, zero) {
25496 for (uint32_t mz = 0; mz < 3; mz++) {
25497 for (uint32_t channels = 8; channels < 64; channels += 12) {
25498 DWConvMicrokernelTester()
25499 .cr(4)
25500 .kr(3)
25501 .channels(channels)
25502 .input_offset(112)
25503 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025504 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025505 }
25506 }
25507 }
Marat Dukhan4c617792021-12-21 15:47:58 -080025508#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025509
25510
Marat Dukhan4c617792021-12-21 15:47:58 -080025511#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025512 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_eq_4) {
25513 DWConvMicrokernelTester()
25514 .cr(4)
25515 .kr(3)
25516 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025517 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025518 }
25519
25520 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_div_4) {
25521 for (uint32_t channels = 8; channels < 64; channels += 12) {
25522 DWConvMicrokernelTester()
25523 .cr(4)
25524 .kr(3)
25525 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025526 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025527 }
25528 }
25529
25530 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_div_4_with_qmin) {
25531 for (uint32_t channels = 8; channels < 64; channels += 12) {
25532 DWConvMicrokernelTester()
25533 .cr(4)
25534 .kr(3)
25535 .channels(channels)
25536 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025537 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025538 }
25539 }
25540
25541 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_div_4_with_qmax) {
25542 for (uint32_t channels = 8; channels < 64; channels += 12) {
25543 DWConvMicrokernelTester()
25544 .cr(4)
25545 .kr(3)
25546 .channels(channels)
25547 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025548 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025549 }
25550 }
25551
25552 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_lt_4) {
25553 for (uint32_t channels = 1; channels < 4; channels++) {
25554 DWConvMicrokernelTester()
25555 .cr(4)
25556 .kr(3)
25557 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025558 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025559 }
25560 }
25561
25562 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_gt_4) {
25563 for (uint32_t channels = 5; channels < 8; channels++) {
25564 DWConvMicrokernelTester()
25565 .cr(4)
25566 .kr(3)
25567 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025568 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025569 }
25570 }
25571
25572 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_gt_4_with_qmin) {
25573 for (uint32_t channels = 5; channels < 8; channels++) {
25574 DWConvMicrokernelTester()
25575 .cr(4)
25576 .kr(3)
25577 .channels(channels)
25578 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025579 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025580 }
25581 }
25582
25583 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, c_gt_4_with_qmax) {
25584 for (uint32_t channels = 5; channels < 8; channels++) {
25585 DWConvMicrokernelTester()
25586 .cr(4)
25587 .kr(3)
25588 .channels(channels)
25589 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025590 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025591 }
25592 }
25593
25594 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, multipixel) {
25595 for (size_t channels = 1; channels <= 20; channels += 3) {
25596 DWConvMicrokernelTester()
25597 .cr(4)
25598 .kr(3)
25599 .channels(channels)
25600 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025601 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025602 }
25603 }
25604
25605 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, multipixel_with_step) {
25606 for (size_t channels = 1; channels <= 20; channels += 3) {
25607 for (size_t step = 2; step <= 3; step++) {
25608 DWConvMicrokernelTester()
25609 .cr(4)
25610 .kr(3)
25611 .channels(channels)
25612 .width(3)
25613 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025614 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025615 }
25616 }
25617 }
25618
25619 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
25620 for (size_t channels = 1; channels <= 20; channels += 3) {
25621 DWConvMicrokernelTester()
25622 .cr(4)
25623 .kr(3)
25624 .channels(4)
25625 .width(5)
25626 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025627 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025628 }
25629 }
25630
25631 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
25632 for (size_t channels = 1; channels <= 20; channels += 3) {
25633 DWConvMicrokernelTester()
25634 .cr(4)
25635 .kr(3)
25636 .channels(channels)
25637 .width(3)
25638 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025639 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025640 }
25641 }
25642
25643 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
25644 for (size_t channels = 1; channels <= 20; channels += 3) {
25645 DWConvMicrokernelTester()
25646 .cr(4)
25647 .kr(3)
25648 .channels(channels)
25649 .width(3)
25650 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025651 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025652 }
25653 }
25654
25655 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, input_offset) {
25656 for (uint32_t channels = 8; channels < 64; channels += 12) {
25657 DWConvMicrokernelTester()
25658 .cr(4)
25659 .kr(3)
25660 .channels(channels)
25661 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025662 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025663 }
25664 }
25665
25666 TEST(F32_DWCONV_MINMAX_UP4X3__WASMSIMD_X86_ACC2, zero) {
25667 for (uint32_t mz = 0; mz < 3; mz++) {
25668 for (uint32_t channels = 8; channels < 64; channels += 12) {
25669 DWConvMicrokernelTester()
25670 .cr(4)
25671 .kr(3)
25672 .channels(channels)
25673 .input_offset(112)
25674 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025675 .Test(xnn_f32_dwconv_minmax_ukernel_up4x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025676 }
25677 }
25678 }
Marat Dukhan4c617792021-12-21 15:47:58 -080025679#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070025680
25681
Marat Dukhan4c617792021-12-21 15:47:58 -080025682#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070025683 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_eq_4) {
25684 DWConvMicrokernelTester()
25685 .cr(4)
25686 .kr(4)
25687 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025688 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025689 }
25690
25691 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_div_4) {
25692 for (uint32_t channels = 8; channels < 64; channels += 12) {
25693 DWConvMicrokernelTester()
25694 .cr(4)
25695 .kr(4)
25696 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025697 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025698 }
25699 }
25700
25701 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_div_4_with_qmin) {
25702 for (uint32_t channels = 8; channels < 64; channels += 12) {
25703 DWConvMicrokernelTester()
25704 .cr(4)
25705 .kr(4)
25706 .channels(channels)
25707 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025708 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025709 }
25710 }
25711
25712 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_div_4_with_qmax) {
25713 for (uint32_t channels = 8; channels < 64; channels += 12) {
25714 DWConvMicrokernelTester()
25715 .cr(4)
25716 .kr(4)
25717 .channels(channels)
25718 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025719 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025720 }
25721 }
25722
25723 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_lt_4) {
25724 for (uint32_t channels = 1; channels < 4; channels++) {
25725 DWConvMicrokernelTester()
25726 .cr(4)
25727 .kr(4)
25728 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025729 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025730 }
25731 }
25732
25733 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_gt_4) {
25734 for (uint32_t channels = 5; channels < 8; channels++) {
25735 DWConvMicrokernelTester()
25736 .cr(4)
25737 .kr(4)
25738 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025739 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025740 }
25741 }
25742
25743 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_gt_4_with_qmin) {
25744 for (uint32_t channels = 5; channels < 8; channels++) {
25745 DWConvMicrokernelTester()
25746 .cr(4)
25747 .kr(4)
25748 .channels(channels)
25749 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025750 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025751 }
25752 }
25753
25754 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_gt_4_with_qmax) {
25755 for (uint32_t channels = 5; channels < 8; channels++) {
25756 DWConvMicrokernelTester()
25757 .cr(4)
25758 .kr(4)
25759 .channels(channels)
25760 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025761 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025762 }
25763 }
25764
25765 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel) {
25766 for (size_t channels = 1; channels <= 20; channels += 3) {
25767 DWConvMicrokernelTester()
25768 .cr(4)
25769 .kr(4)
25770 .channels(channels)
25771 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025772 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025773 }
25774 }
25775
25776 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_step) {
25777 for (size_t channels = 1; channels <= 20; channels += 3) {
25778 for (size_t step = 2; step <= 4; step++) {
25779 DWConvMicrokernelTester()
25780 .cr(4)
25781 .kr(4)
25782 .channels(channels)
25783 .width(3)
25784 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025785 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025786 }
25787 }
25788 }
25789
25790 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_output_stride) {
25791 for (size_t channels = 1; channels <= 20; channels += 3) {
25792 DWConvMicrokernelTester()
25793 .cr(4)
25794 .kr(4)
25795 .channels(4)
25796 .width(5)
25797 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025798 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025799 }
25800 }
25801
25802 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_qmin) {
25803 for (size_t channels = 1; channels <= 20; channels += 3) {
25804 DWConvMicrokernelTester()
25805 .cr(4)
25806 .kr(4)
25807 .channels(channels)
25808 .width(3)
25809 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025810 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025811 }
25812 }
25813
25814 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_qmax) {
25815 for (size_t channels = 1; channels <= 20; channels += 3) {
25816 DWConvMicrokernelTester()
25817 .cr(4)
25818 .kr(4)
25819 .channels(channels)
25820 .width(3)
25821 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025822 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025823 }
25824 }
25825
25826 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, input_offset) {
25827 for (uint32_t channels = 8; channels < 64; channels += 12) {
25828 DWConvMicrokernelTester()
25829 .cr(4)
25830 .kr(4)
25831 .channels(channels)
25832 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025833 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025834 }
25835 }
25836
25837 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, zero) {
25838 for (uint32_t mz = 0; mz < 4; mz++) {
25839 for (uint32_t channels = 8; channels < 64; channels += 12) {
25840 DWConvMicrokernelTester()
25841 .cr(4)
25842 .kr(4)
25843 .channels(channels)
25844 .input_offset(112)
25845 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025846 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025847 }
25848 }
25849 }
Marat Dukhan4c617792021-12-21 15:47:58 -080025850#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070025851
25852
Marat Dukhan4c617792021-12-21 15:47:58 -080025853#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Frank Barchard0725b8d2020-12-07 11:07:35 -080025854 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_eq_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025855 DWConvMicrokernelTester()
25856 .cr(4)
25857 .kr(4)
25858 .channels(4)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025859 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025860 }
25861
Frank Barchard0725b8d2020-12-07 11:07:35 -080025862 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_div_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025863 for (uint32_t channels = 8; channels < 64; channels += 12) {
25864 DWConvMicrokernelTester()
25865 .cr(4)
25866 .kr(4)
25867 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025868 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025869 }
25870 }
25871
Frank Barchard0725b8d2020-12-07 11:07:35 -080025872 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_div_4_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025873 for (uint32_t channels = 8; channels < 64; channels += 12) {
25874 DWConvMicrokernelTester()
25875 .cr(4)
25876 .kr(4)
25877 .channels(channels)
25878 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025879 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025880 }
25881 }
25882
Frank Barchard0725b8d2020-12-07 11:07:35 -080025883 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_div_4_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025884 for (uint32_t channels = 8; channels < 64; channels += 12) {
25885 DWConvMicrokernelTester()
25886 .cr(4)
25887 .kr(4)
25888 .channels(channels)
25889 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025890 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025891 }
25892 }
25893
Frank Barchard0725b8d2020-12-07 11:07:35 -080025894 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_lt_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025895 for (uint32_t channels = 1; channels < 4; channels++) {
25896 DWConvMicrokernelTester()
25897 .cr(4)
25898 .kr(4)
25899 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025900 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025901 }
25902 }
25903
Frank Barchard0725b8d2020-12-07 11:07:35 -080025904 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_gt_4) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025905 for (uint32_t channels = 5; channels < 8; channels++) {
25906 DWConvMicrokernelTester()
25907 .cr(4)
25908 .kr(4)
25909 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025910 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025911 }
25912 }
25913
Frank Barchard0725b8d2020-12-07 11:07:35 -080025914 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_gt_4_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025915 for (uint32_t channels = 5; channels < 8; channels++) {
25916 DWConvMicrokernelTester()
25917 .cr(4)
25918 .kr(4)
25919 .channels(channels)
25920 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025921 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025922 }
25923 }
25924
Frank Barchard0725b8d2020-12-07 11:07:35 -080025925 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, c_gt_4_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025926 for (uint32_t channels = 5; channels < 8; channels++) {
25927 DWConvMicrokernelTester()
25928 .cr(4)
25929 .kr(4)
25930 .channels(channels)
25931 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025932 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025933 }
25934 }
25935
Frank Barchard0725b8d2020-12-07 11:07:35 -080025936 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, multipixel) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025937 for (size_t channels = 1; channels <= 20; channels += 3) {
25938 DWConvMicrokernelTester()
25939 .cr(4)
25940 .kr(4)
25941 .channels(channels)
25942 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025943 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025944 }
25945 }
25946
Frank Barchard0725b8d2020-12-07 11:07:35 -080025947 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, multipixel_with_step) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025948 for (size_t channels = 1; channels <= 20; channels += 3) {
25949 for (size_t step = 2; step <= 4; step++) {
25950 DWConvMicrokernelTester()
25951 .cr(4)
25952 .kr(4)
25953 .channels(channels)
25954 .width(3)
25955 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025956 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025957 }
25958 }
25959 }
25960
Frank Barchard0725b8d2020-12-07 11:07:35 -080025961 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025962 for (size_t channels = 1; channels <= 20; channels += 3) {
25963 DWConvMicrokernelTester()
25964 .cr(4)
25965 .kr(4)
25966 .channels(4)
25967 .width(5)
25968 .output_stride(23)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025969 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025970 }
25971 }
25972
Frank Barchard0725b8d2020-12-07 11:07:35 -080025973 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025974 for (size_t channels = 1; channels <= 20; channels += 3) {
25975 DWConvMicrokernelTester()
25976 .cr(4)
25977 .kr(4)
25978 .channels(channels)
25979 .width(3)
25980 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025981 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025982 }
25983 }
25984
Frank Barchard0725b8d2020-12-07 11:07:35 -080025985 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025986 for (size_t channels = 1; channels <= 20; channels += 3) {
25987 DWConvMicrokernelTester()
25988 .cr(4)
25989 .kr(4)
25990 .channels(channels)
25991 .width(3)
25992 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080025993 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070025994 }
25995 }
25996
Frank Barchard0725b8d2020-12-07 11:07:35 -080025997 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, input_offset) {
Marat Dukhanac014d72020-06-16 08:36:47 -070025998 for (uint32_t channels = 8; channels < 64; channels += 12) {
25999 DWConvMicrokernelTester()
26000 .cr(4)
26001 .kr(4)
26002 .channels(channels)
26003 .input_offset(112)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026004 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026005 }
26006 }
26007
Frank Barchard0725b8d2020-12-07 11:07:35 -080026008 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86_ACC2, zero) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026009 for (uint32_t mz = 0; mz < 4; mz++) {
26010 for (uint32_t channels = 8; channels < 64; channels += 12) {
26011 DWConvMicrokernelTester()
26012 .cr(4)
26013 .kr(4)
26014 .channels(channels)
26015 .input_offset(112)
26016 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026017 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026018 }
26019 }
26020 }
Marat Dukhan4c617792021-12-21 15:47:58 -080026021#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070026022
26023
Marat Dukhan4c617792021-12-21 15:47:58 -080026024#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026025 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_eq_8) {
26026 DWConvMicrokernelTester()
26027 .cr(8)
26028 .kr(3)
26029 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026030 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026031 }
26032
26033 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_div_8) {
26034 for (uint32_t channels = 16; channels < 128; channels += 24) {
26035 DWConvMicrokernelTester()
26036 .cr(8)
26037 .kr(3)
26038 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026039 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026040 }
26041 }
26042
26043 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_div_8_with_qmin) {
26044 for (uint32_t channels = 16; channels < 128; channels += 24) {
26045 DWConvMicrokernelTester()
26046 .cr(8)
26047 .kr(3)
26048 .channels(channels)
26049 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026050 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026051 }
26052 }
26053
26054 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_div_8_with_qmax) {
26055 for (uint32_t channels = 16; channels < 128; channels += 24) {
26056 DWConvMicrokernelTester()
26057 .cr(8)
26058 .kr(3)
26059 .channels(channels)
26060 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026061 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026062 }
26063 }
26064
26065 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_lt_8) {
26066 for (uint32_t channels = 1; channels < 8; channels++) {
26067 DWConvMicrokernelTester()
26068 .cr(8)
26069 .kr(3)
26070 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026071 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026072 }
26073 }
26074
26075 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_gt_8) {
26076 for (uint32_t channels = 9; channels < 16; channels++) {
26077 DWConvMicrokernelTester()
26078 .cr(8)
26079 .kr(3)
26080 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026081 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026082 }
26083 }
26084
26085 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_gt_8_with_qmin) {
26086 for (uint32_t channels = 9; channels < 16; channels++) {
26087 DWConvMicrokernelTester()
26088 .cr(8)
26089 .kr(3)
26090 .channels(channels)
26091 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026092 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026093 }
26094 }
26095
26096 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, c_gt_8_with_qmax) {
26097 for (uint32_t channels = 9; channels < 16; channels++) {
26098 DWConvMicrokernelTester()
26099 .cr(8)
26100 .kr(3)
26101 .channels(channels)
26102 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026103 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026104 }
26105 }
26106
26107 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, multipixel) {
26108 for (size_t channels = 1; channels <= 40; channels += 7) {
26109 DWConvMicrokernelTester()
26110 .cr(8)
26111 .kr(3)
26112 .channels(channels)
26113 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026114 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026115 }
26116 }
26117
26118 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, multipixel_with_step) {
26119 for (size_t channels = 1; channels <= 40; channels += 7) {
26120 for (size_t step = 2; step <= 3; step++) {
26121 DWConvMicrokernelTester()
26122 .cr(8)
26123 .kr(3)
26124 .channels(channels)
26125 .width(3)
26126 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026127 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026128 }
26129 }
26130 }
26131
26132 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, multipixel_with_output_stride) {
26133 for (size_t channels = 1; channels <= 40; channels += 7) {
26134 DWConvMicrokernelTester()
26135 .cr(8)
26136 .kr(3)
26137 .channels(8)
26138 .width(5)
26139 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026140 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026141 }
26142 }
26143
26144 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, multipixel_with_qmin) {
26145 for (size_t channels = 1; channels <= 40; channels += 7) {
26146 DWConvMicrokernelTester()
26147 .cr(8)
26148 .kr(3)
26149 .channels(channels)
26150 .width(3)
26151 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026152 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026153 }
26154 }
26155
26156 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, multipixel_with_qmax) {
26157 for (size_t channels = 1; channels <= 40; channels += 7) {
26158 DWConvMicrokernelTester()
26159 .cr(8)
26160 .kr(3)
26161 .channels(channels)
26162 .width(3)
26163 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026164 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026165 }
26166 }
26167
26168 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, input_offset) {
26169 for (uint32_t channels = 16; channels < 128; channels += 24) {
26170 DWConvMicrokernelTester()
26171 .cr(8)
26172 .kr(3)
26173 .channels(channels)
26174 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026175 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026176 }
26177 }
26178
26179 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86, zero) {
26180 for (uint32_t mz = 0; mz < 3; mz++) {
26181 for (uint32_t channels = 16; channels < 128; channels += 24) {
26182 DWConvMicrokernelTester()
26183 .cr(8)
26184 .kr(3)
26185 .channels(channels)
26186 .input_offset(176)
26187 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026188 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026189 }
26190 }
26191 }
Marat Dukhan4c617792021-12-21 15:47:58 -080026192#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026193
26194
Marat Dukhan4c617792021-12-21 15:47:58 -080026195#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026196 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_eq_8) {
26197 DWConvMicrokernelTester()
26198 .cr(8)
26199 .kr(3)
26200 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026201 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026202 }
26203
26204 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_div_8) {
26205 for (uint32_t channels = 16; channels < 128; channels += 24) {
26206 DWConvMicrokernelTester()
26207 .cr(8)
26208 .kr(3)
26209 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026210 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026211 }
26212 }
26213
26214 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_div_8_with_qmin) {
26215 for (uint32_t channels = 16; channels < 128; channels += 24) {
26216 DWConvMicrokernelTester()
26217 .cr(8)
26218 .kr(3)
26219 .channels(channels)
26220 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026221 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026222 }
26223 }
26224
26225 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_div_8_with_qmax) {
26226 for (uint32_t channels = 16; channels < 128; channels += 24) {
26227 DWConvMicrokernelTester()
26228 .cr(8)
26229 .kr(3)
26230 .channels(channels)
26231 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026232 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026233 }
26234 }
26235
26236 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_lt_8) {
26237 for (uint32_t channels = 1; channels < 8; channels++) {
26238 DWConvMicrokernelTester()
26239 .cr(8)
26240 .kr(3)
26241 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026242 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026243 }
26244 }
26245
26246 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_gt_8) {
26247 for (uint32_t channels = 9; channels < 16; channels++) {
26248 DWConvMicrokernelTester()
26249 .cr(8)
26250 .kr(3)
26251 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026252 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026253 }
26254 }
26255
26256 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_gt_8_with_qmin) {
26257 for (uint32_t channels = 9; channels < 16; channels++) {
26258 DWConvMicrokernelTester()
26259 .cr(8)
26260 .kr(3)
26261 .channels(channels)
26262 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026263 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026264 }
26265 }
26266
26267 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, c_gt_8_with_qmax) {
26268 for (uint32_t channels = 9; channels < 16; channels++) {
26269 DWConvMicrokernelTester()
26270 .cr(8)
26271 .kr(3)
26272 .channels(channels)
26273 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026274 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026275 }
26276 }
26277
26278 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, multipixel) {
26279 for (size_t channels = 1; channels <= 40; channels += 7) {
26280 DWConvMicrokernelTester()
26281 .cr(8)
26282 .kr(3)
26283 .channels(channels)
26284 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026285 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026286 }
26287 }
26288
26289 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, multipixel_with_step) {
26290 for (size_t channels = 1; channels <= 40; channels += 7) {
26291 for (size_t step = 2; step <= 3; step++) {
26292 DWConvMicrokernelTester()
26293 .cr(8)
26294 .kr(3)
26295 .channels(channels)
26296 .width(3)
26297 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026298 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026299 }
26300 }
26301 }
26302
26303 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
26304 for (size_t channels = 1; channels <= 40; channels += 7) {
26305 DWConvMicrokernelTester()
26306 .cr(8)
26307 .kr(3)
26308 .channels(8)
26309 .width(5)
26310 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026311 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026312 }
26313 }
26314
26315 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
26316 for (size_t channels = 1; channels <= 40; channels += 7) {
26317 DWConvMicrokernelTester()
26318 .cr(8)
26319 .kr(3)
26320 .channels(channels)
26321 .width(3)
26322 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026323 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026324 }
26325 }
26326
26327 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
26328 for (size_t channels = 1; channels <= 40; channels += 7) {
26329 DWConvMicrokernelTester()
26330 .cr(8)
26331 .kr(3)
26332 .channels(channels)
26333 .width(3)
26334 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026335 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026336 }
26337 }
26338
26339 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, input_offset) {
26340 for (uint32_t channels = 16; channels < 128; channels += 24) {
26341 DWConvMicrokernelTester()
26342 .cr(8)
26343 .kr(3)
26344 .channels(channels)
26345 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026346 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026347 }
26348 }
26349
26350 TEST(F32_DWCONV_MINMAX_UP8X3__WASMSIMD_X86_ACC2, zero) {
26351 for (uint32_t mz = 0; mz < 3; mz++) {
26352 for (uint32_t channels = 16; channels < 128; channels += 24) {
26353 DWConvMicrokernelTester()
26354 .cr(8)
26355 .kr(3)
26356 .channels(channels)
26357 .input_offset(176)
26358 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026359 .Test(xnn_f32_dwconv_minmax_ukernel_up8x3__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026360 }
26361 }
26362 }
Marat Dukhan4c617792021-12-21 15:47:58 -080026363#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026364
26365
Marat Dukhan4c617792021-12-21 15:47:58 -080026366#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070026367 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_eq_8) {
26368 DWConvMicrokernelTester()
26369 .cr(8)
26370 .kr(4)
26371 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026372 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026373 }
26374
26375 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_div_8) {
26376 for (uint32_t channels = 16; channels < 128; channels += 24) {
26377 DWConvMicrokernelTester()
26378 .cr(8)
26379 .kr(4)
26380 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026381 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026382 }
26383 }
26384
26385 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_div_8_with_qmin) {
26386 for (uint32_t channels = 16; channels < 128; channels += 24) {
26387 DWConvMicrokernelTester()
26388 .cr(8)
26389 .kr(4)
26390 .channels(channels)
26391 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026392 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026393 }
26394 }
26395
26396 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_div_8_with_qmax) {
26397 for (uint32_t channels = 16; channels < 128; channels += 24) {
26398 DWConvMicrokernelTester()
26399 .cr(8)
26400 .kr(4)
26401 .channels(channels)
26402 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026403 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026404 }
26405 }
26406
26407 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_lt_8) {
26408 for (uint32_t channels = 1; channels < 8; channels++) {
26409 DWConvMicrokernelTester()
26410 .cr(8)
26411 .kr(4)
26412 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026413 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026414 }
26415 }
26416
26417 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_gt_8) {
26418 for (uint32_t channels = 9; channels < 16; channels++) {
26419 DWConvMicrokernelTester()
26420 .cr(8)
26421 .kr(4)
26422 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026423 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026424 }
26425 }
26426
26427 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_gt_8_with_qmin) {
26428 for (uint32_t channels = 9; channels < 16; channels++) {
26429 DWConvMicrokernelTester()
26430 .cr(8)
26431 .kr(4)
26432 .channels(channels)
26433 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026434 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026435 }
26436 }
26437
26438 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_gt_8_with_qmax) {
26439 for (uint32_t channels = 9; channels < 16; channels++) {
26440 DWConvMicrokernelTester()
26441 .cr(8)
26442 .kr(4)
26443 .channels(channels)
26444 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026445 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026446 }
26447 }
26448
26449 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel) {
26450 for (size_t channels = 1; channels <= 40; channels += 7) {
26451 DWConvMicrokernelTester()
26452 .cr(8)
26453 .kr(4)
26454 .channels(channels)
26455 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026456 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026457 }
26458 }
26459
26460 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_step) {
26461 for (size_t channels = 1; channels <= 40; channels += 7) {
26462 for (size_t step = 2; step <= 4; step++) {
26463 DWConvMicrokernelTester()
26464 .cr(8)
26465 .kr(4)
26466 .channels(channels)
26467 .width(3)
26468 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026469 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026470 }
26471 }
26472 }
26473
26474 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_output_stride) {
26475 for (size_t channels = 1; channels <= 40; channels += 7) {
26476 DWConvMicrokernelTester()
26477 .cr(8)
26478 .kr(4)
26479 .channels(8)
26480 .width(5)
26481 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026482 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026483 }
26484 }
26485
26486 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_qmin) {
26487 for (size_t channels = 1; channels <= 40; channels += 7) {
26488 DWConvMicrokernelTester()
26489 .cr(8)
26490 .kr(4)
26491 .channels(channels)
26492 .width(3)
26493 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026494 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026495 }
26496 }
26497
26498 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_qmax) {
26499 for (size_t channels = 1; channels <= 40; channels += 7) {
26500 DWConvMicrokernelTester()
26501 .cr(8)
26502 .kr(4)
26503 .channels(channels)
26504 .width(3)
26505 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026506 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026507 }
26508 }
26509
26510 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, input_offset) {
26511 for (uint32_t channels = 16; channels < 128; channels += 24) {
26512 DWConvMicrokernelTester()
26513 .cr(8)
26514 .kr(4)
26515 .channels(channels)
26516 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026517 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026518 }
26519 }
26520
26521 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, zero) {
26522 for (uint32_t mz = 0; mz < 4; mz++) {
26523 for (uint32_t channels = 16; channels < 128; channels += 24) {
26524 DWConvMicrokernelTester()
26525 .cr(8)
26526 .kr(4)
26527 .channels(channels)
26528 .input_offset(176)
26529 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026530 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026531 }
26532 }
26533 }
Marat Dukhan4c617792021-12-21 15:47:58 -080026534#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070026535
26536
Marat Dukhan4c617792021-12-21 15:47:58 -080026537#if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Frank Barchard0725b8d2020-12-07 11:07:35 -080026538 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_eq_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026539 DWConvMicrokernelTester()
26540 .cr(8)
26541 .kr(4)
26542 .channels(8)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026543 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026544 }
26545
Frank Barchard0725b8d2020-12-07 11:07:35 -080026546 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_div_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026547 for (uint32_t channels = 16; channels < 128; channels += 24) {
26548 DWConvMicrokernelTester()
26549 .cr(8)
26550 .kr(4)
26551 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026552 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026553 }
26554 }
26555
Frank Barchard0725b8d2020-12-07 11:07:35 -080026556 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_div_8_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026557 for (uint32_t channels = 16; channels < 128; channels += 24) {
26558 DWConvMicrokernelTester()
26559 .cr(8)
26560 .kr(4)
26561 .channels(channels)
26562 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026563 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026564 }
26565 }
26566
Frank Barchard0725b8d2020-12-07 11:07:35 -080026567 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_div_8_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026568 for (uint32_t channels = 16; channels < 128; channels += 24) {
26569 DWConvMicrokernelTester()
26570 .cr(8)
26571 .kr(4)
26572 .channels(channels)
26573 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026574 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026575 }
26576 }
26577
Frank Barchard0725b8d2020-12-07 11:07:35 -080026578 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_lt_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026579 for (uint32_t channels = 1; channels < 8; channels++) {
26580 DWConvMicrokernelTester()
26581 .cr(8)
26582 .kr(4)
26583 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026584 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026585 }
26586 }
26587
Frank Barchard0725b8d2020-12-07 11:07:35 -080026588 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_gt_8) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026589 for (uint32_t channels = 9; channels < 16; channels++) {
26590 DWConvMicrokernelTester()
26591 .cr(8)
26592 .kr(4)
26593 .channels(channels)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026594 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026595 }
26596 }
26597
Frank Barchard0725b8d2020-12-07 11:07:35 -080026598 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_gt_8_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026599 for (uint32_t channels = 9; channels < 16; channels++) {
26600 DWConvMicrokernelTester()
26601 .cr(8)
26602 .kr(4)
26603 .channels(channels)
26604 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026605 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026606 }
26607 }
26608
Frank Barchard0725b8d2020-12-07 11:07:35 -080026609 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, c_gt_8_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026610 for (uint32_t channels = 9; channels < 16; channels++) {
26611 DWConvMicrokernelTester()
26612 .cr(8)
26613 .kr(4)
26614 .channels(channels)
26615 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026616 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026617 }
26618 }
26619
Frank Barchard0725b8d2020-12-07 11:07:35 -080026620 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, multipixel) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026621 for (size_t channels = 1; channels <= 40; channels += 7) {
26622 DWConvMicrokernelTester()
26623 .cr(8)
26624 .kr(4)
26625 .channels(channels)
26626 .width(3)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026627 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026628 }
26629 }
26630
Frank Barchard0725b8d2020-12-07 11:07:35 -080026631 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, multipixel_with_step) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026632 for (size_t channels = 1; channels <= 40; channels += 7) {
26633 for (size_t step = 2; step <= 4; step++) {
26634 DWConvMicrokernelTester()
26635 .cr(8)
26636 .kr(4)
26637 .channels(channels)
26638 .width(3)
26639 .step(step)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026640 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026641 }
26642 }
26643 }
26644
Frank Barchard0725b8d2020-12-07 11:07:35 -080026645 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, multipixel_with_output_stride) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026646 for (size_t channels = 1; channels <= 40; channels += 7) {
26647 DWConvMicrokernelTester()
26648 .cr(8)
26649 .kr(4)
26650 .channels(8)
26651 .width(5)
26652 .output_stride(43)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026653 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026654 }
26655 }
26656
Frank Barchard0725b8d2020-12-07 11:07:35 -080026657 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, multipixel_with_qmin) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026658 for (size_t channels = 1; channels <= 40; channels += 7) {
26659 DWConvMicrokernelTester()
26660 .cr(8)
26661 .kr(4)
26662 .channels(channels)
26663 .width(3)
26664 .qmin(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026665 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026666 }
26667 }
26668
Frank Barchard0725b8d2020-12-07 11:07:35 -080026669 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, multipixel_with_qmax) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026670 for (size_t channels = 1; channels <= 40; channels += 7) {
26671 DWConvMicrokernelTester()
26672 .cr(8)
26673 .kr(4)
26674 .channels(channels)
26675 .width(3)
26676 .qmax(128)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026677 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026678 }
26679 }
26680
Frank Barchard0725b8d2020-12-07 11:07:35 -080026681 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, input_offset) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026682 for (uint32_t channels = 16; channels < 128; channels += 24) {
26683 DWConvMicrokernelTester()
26684 .cr(8)
26685 .kr(4)
26686 .channels(channels)
26687 .input_offset(176)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026688 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026689 }
26690 }
26691
Frank Barchard0725b8d2020-12-07 11:07:35 -080026692 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86_ACC2, zero) {
Marat Dukhanac014d72020-06-16 08:36:47 -070026693 for (uint32_t mz = 0; mz < 4; mz++) {
26694 for (uint32_t channels = 16; channels < 128; channels += 24) {
26695 DWConvMicrokernelTester()
26696 .cr(8)
26697 .kr(4)
26698 .channels(channels)
26699 .input_offset(176)
26700 .zero_index(mz)
Marat Dukhanc83ef3b2021-12-30 09:47:07 -080026701 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86_acc2, xnn_init_f32_minmax_wasmsimd_params);
Marat Dukhanac014d72020-06-16 08:36:47 -070026702 }
26703 }
26704 }
Marat Dukhan4c617792021-12-21 15:47:58 -080026705#endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhanac014d72020-06-16 08:36:47 -070026706
26707
Marat Dukhan4c617792021-12-21 15:47:58 -080026708#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026709 TEST(F32_DWCONV_MINMAX_UP1X3__WASM, c_eq_1) {
26710 DWConvMicrokernelTester()
26711 .cr(1)
26712 .kr(3)
26713 .channels(1)
26714 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
26715 }
26716
26717 TEST(F32_DWCONV_MINMAX_UP1X3__WASM, c_gt_1) {
26718 for (uint32_t channels = 2; channels < 10; channels++) {
26719 DWConvMicrokernelTester()
26720 .cr(1)
26721 .kr(3)
26722 .channels(channels)
26723 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
26724 }
26725 }
26726
26727 TEST(F32_DWCONV_MINMAX_UP1X3__WASM, c_gt_1_with_qmin) {
26728 for (uint32_t channels = 2; channels < 10; channels++) {
26729 DWConvMicrokernelTester()
26730 .cr(1)
26731 .kr(3)
26732 .channels(channels)
26733 .qmin(128)
26734 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
26735 }
26736 }
26737
26738 TEST(F32_DWCONV_MINMAX_UP1X3__WASM, c_gt_1_with_qmax) {
26739 for (uint32_t channels = 2; channels < 10; channels++) {
26740 DWConvMicrokernelTester()
26741 .cr(1)
26742 .kr(3)
26743 .channels(channels)
26744 .qmax(128)
26745 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
26746 }
26747 }
26748
26749 TEST(F32_DWCONV_MINMAX_UP1X3__WASM, multipixel) {
26750 for (size_t channels = 1; channels <= 5; channels += 1) {
26751 DWConvMicrokernelTester()
26752 .cr(1)
26753 .kr(3)
26754 .channels(channels)
26755 .width(3)
26756 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
26757 }
26758 }
26759
26760 TEST(F32_DWCONV_MINMAX_UP1X3__WASM, multipixel_with_step) {
26761 for (size_t channels = 1; channels <= 5; channels += 1) {
26762 for (size_t step = 2; step <= 3; step++) {
26763 DWConvMicrokernelTester()
26764 .cr(1)
26765 .kr(3)
26766 .channels(channels)
26767 .width(3)
26768 .step(step)
26769 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
26770 }
26771 }
26772 }
26773
26774 TEST(F32_DWCONV_MINMAX_UP1X3__WASM, multipixel_with_output_stride) {
26775 for (size_t channels = 1; channels <= 5; channels += 1) {
26776 DWConvMicrokernelTester()
26777 .cr(1)
26778 .kr(3)
26779 .channels(1)
26780 .width(5)
26781 .output_stride(7)
26782 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
26783 }
26784 }
26785
26786 TEST(F32_DWCONV_MINMAX_UP1X3__WASM, multipixel_with_qmin) {
26787 for (size_t channels = 1; channels <= 5; channels += 1) {
26788 DWConvMicrokernelTester()
26789 .cr(1)
26790 .kr(3)
26791 .channels(channels)
26792 .width(3)
26793 .qmin(128)
26794 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
26795 }
26796 }
26797
26798 TEST(F32_DWCONV_MINMAX_UP1X3__WASM, multipixel_with_qmax) {
26799 for (size_t channels = 1; channels <= 5; channels += 1) {
26800 DWConvMicrokernelTester()
26801 .cr(1)
26802 .kr(3)
26803 .channels(channels)
26804 .width(3)
26805 .qmax(128)
26806 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
26807 }
26808 }
26809
26810 TEST(F32_DWCONV_MINMAX_UP1X3__WASM, input_offset) {
26811 for (uint32_t channels = 2; channels < 16; channels += 3) {
26812 DWConvMicrokernelTester()
26813 .cr(1)
26814 .kr(3)
26815 .channels(channels)
26816 .input_offset(48)
26817 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
26818 }
26819 }
26820
26821 TEST(F32_DWCONV_MINMAX_UP1X3__WASM, zero) {
26822 for (uint32_t mz = 0; mz < 3; mz++) {
26823 for (uint32_t channels = 2; channels < 16; channels += 3) {
26824 DWConvMicrokernelTester()
26825 .cr(1)
26826 .kr(3)
26827 .channels(channels)
26828 .input_offset(48)
26829 .zero_index(mz)
26830 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm, xnn_init_f32_minmax_scalar_params);
26831 }
26832 }
26833 }
Marat Dukhan4c617792021-12-21 15:47:58 -080026834#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026835
26836
Marat Dukhan4c617792021-12-21 15:47:58 -080026837#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026838 TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, c_eq_1) {
26839 DWConvMicrokernelTester()
26840 .cr(1)
26841 .kr(3)
26842 .channels(1)
26843 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
26844 }
26845
26846 TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, c_gt_1) {
26847 for (uint32_t channels = 2; channels < 10; channels++) {
26848 DWConvMicrokernelTester()
26849 .cr(1)
26850 .kr(3)
26851 .channels(channels)
26852 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
26853 }
26854 }
26855
26856 TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, c_gt_1_with_qmin) {
26857 for (uint32_t channels = 2; channels < 10; channels++) {
26858 DWConvMicrokernelTester()
26859 .cr(1)
26860 .kr(3)
26861 .channels(channels)
26862 .qmin(128)
26863 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
26864 }
26865 }
26866
26867 TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, c_gt_1_with_qmax) {
26868 for (uint32_t channels = 2; channels < 10; channels++) {
26869 DWConvMicrokernelTester()
26870 .cr(1)
26871 .kr(3)
26872 .channels(channels)
26873 .qmax(128)
26874 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
26875 }
26876 }
26877
26878 TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, multipixel) {
26879 for (size_t channels = 1; channels <= 5; channels += 1) {
26880 DWConvMicrokernelTester()
26881 .cr(1)
26882 .kr(3)
26883 .channels(channels)
26884 .width(3)
26885 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
26886 }
26887 }
26888
26889 TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, multipixel_with_step) {
26890 for (size_t channels = 1; channels <= 5; channels += 1) {
26891 for (size_t step = 2; step <= 3; step++) {
26892 DWConvMicrokernelTester()
26893 .cr(1)
26894 .kr(3)
26895 .channels(channels)
26896 .width(3)
26897 .step(step)
26898 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
26899 }
26900 }
26901 }
26902
26903 TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, multipixel_with_output_stride) {
26904 for (size_t channels = 1; channels <= 5; channels += 1) {
26905 DWConvMicrokernelTester()
26906 .cr(1)
26907 .kr(3)
26908 .channels(1)
26909 .width(5)
26910 .output_stride(7)
26911 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
26912 }
26913 }
26914
26915 TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, multipixel_with_qmin) {
26916 for (size_t channels = 1; channels <= 5; channels += 1) {
26917 DWConvMicrokernelTester()
26918 .cr(1)
26919 .kr(3)
26920 .channels(channels)
26921 .width(3)
26922 .qmin(128)
26923 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
26924 }
26925 }
26926
26927 TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, multipixel_with_qmax) {
26928 for (size_t channels = 1; channels <= 5; channels += 1) {
26929 DWConvMicrokernelTester()
26930 .cr(1)
26931 .kr(3)
26932 .channels(channels)
26933 .width(3)
26934 .qmax(128)
26935 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
26936 }
26937 }
26938
26939 TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, input_offset) {
26940 for (uint32_t channels = 2; channels < 16; channels += 3) {
26941 DWConvMicrokernelTester()
26942 .cr(1)
26943 .kr(3)
26944 .channels(channels)
26945 .input_offset(48)
26946 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
26947 }
26948 }
26949
26950 TEST(F32_DWCONV_MINMAX_UP1X3__WASM_ACC2, zero) {
26951 for (uint32_t mz = 0; mz < 3; mz++) {
26952 for (uint32_t channels = 2; channels < 16; channels += 3) {
26953 DWConvMicrokernelTester()
26954 .cr(1)
26955 .kr(3)
26956 .channels(channels)
26957 .input_offset(48)
26958 .zero_index(mz)
26959 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
26960 }
26961 }
26962 }
Marat Dukhan4c617792021-12-21 15:47:58 -080026963#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070026964
26965
Marat Dukhan4c617792021-12-21 15:47:58 -080026966#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070026967 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070026968 DWConvMicrokernelTester()
26969 .cr(1)
26970 .kr(4)
26971 .channels(1)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070026972 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070026973 }
26974
Marat Dukhande06f492020-04-09 00:19:31 -070026975 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070026976 for (uint32_t channels = 2; channels < 10; channels++) {
26977 DWConvMicrokernelTester()
26978 .cr(1)
26979 .kr(4)
26980 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070026981 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070026982 }
26983 }
26984
Marat Dukhande06f492020-04-09 00:19:31 -070026985 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070026986 for (uint32_t channels = 2; channels < 10; channels++) {
26987 DWConvMicrokernelTester()
26988 .cr(1)
26989 .kr(4)
26990 .channels(channels)
26991 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070026992 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070026993 }
26994 }
26995
Marat Dukhande06f492020-04-09 00:19:31 -070026996 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070026997 for (uint32_t channels = 2; channels < 10; channels++) {
26998 DWConvMicrokernelTester()
26999 .cr(1)
27000 .kr(4)
27001 .channels(channels)
27002 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027003 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027004 }
27005 }
27006
Marat Dukhande06f492020-04-09 00:19:31 -070027007 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027008 for (size_t channels = 1; channels <= 5; channels += 1) {
27009 DWConvMicrokernelTester()
27010 .cr(1)
27011 .kr(4)
27012 .channels(channels)
27013 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027014 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027015 }
27016 }
27017
Marat Dukhande06f492020-04-09 00:19:31 -070027018 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027019 for (size_t channels = 1; channels <= 5; channels += 1) {
27020 for (size_t step = 2; step <= 4; step++) {
27021 DWConvMicrokernelTester()
27022 .cr(1)
27023 .kr(4)
27024 .channels(channels)
27025 .width(3)
27026 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027027 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027028 }
27029 }
27030 }
27031
Marat Dukhande06f492020-04-09 00:19:31 -070027032 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027033 for (size_t channels = 1; channels <= 5; channels += 1) {
27034 DWConvMicrokernelTester()
27035 .cr(1)
27036 .kr(4)
27037 .channels(1)
27038 .width(5)
27039 .output_stride(7)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027040 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027041 }
27042 }
27043
Marat Dukhande06f492020-04-09 00:19:31 -070027044 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027045 for (size_t channels = 1; channels <= 5; channels += 1) {
27046 DWConvMicrokernelTester()
27047 .cr(1)
27048 .kr(4)
27049 .channels(channels)
27050 .width(3)
27051 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027052 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027053 }
27054 }
27055
Marat Dukhande06f492020-04-09 00:19:31 -070027056 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027057 for (size_t channels = 1; channels <= 5; channels += 1) {
27058 DWConvMicrokernelTester()
27059 .cr(1)
27060 .kr(4)
27061 .channels(channels)
27062 .width(3)
27063 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027064 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027065 }
27066 }
Frank Barchardd5360722020-05-17 16:10:36 -070027067
27068 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, input_offset) {
27069 for (uint32_t channels = 2; channels < 16; channels += 3) {
27070 DWConvMicrokernelTester()
27071 .cr(1)
27072 .kr(4)
27073 .channels(channels)
27074 .input_offset(48)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027075 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070027076 }
27077 }
27078
27079 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, zero) {
27080 for (uint32_t mz = 0; mz < 4; mz++) {
27081 for (uint32_t channels = 2; channels < 16; channels += 3) {
27082 DWConvMicrokernelTester()
27083 .cr(1)
27084 .kr(4)
27085 .channels(channels)
27086 .input_offset(48)
27087 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027088 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070027089 }
27090 }
27091 }
Marat Dukhan4c617792021-12-21 15:47:58 -080027092#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070027093
27094
Marat Dukhan4c617792021-12-21 15:47:58 -080027095#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070027096 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027097 DWConvMicrokernelTester()
27098 .cr(1)
27099 .kr(4)
27100 .channels(1)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027101 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027102 }
27103
Marat Dukhande06f492020-04-09 00:19:31 -070027104 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027105 for (uint32_t channels = 2; channels < 10; channels++) {
27106 DWConvMicrokernelTester()
27107 .cr(1)
27108 .kr(4)
27109 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027110 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027111 }
27112 }
27113
Marat Dukhande06f492020-04-09 00:19:31 -070027114 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027115 for (uint32_t channels = 2; channels < 10; channels++) {
27116 DWConvMicrokernelTester()
27117 .cr(1)
27118 .kr(4)
27119 .channels(channels)
27120 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027121 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027122 }
27123 }
27124
Marat Dukhande06f492020-04-09 00:19:31 -070027125 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027126 for (uint32_t channels = 2; channels < 10; channels++) {
27127 DWConvMicrokernelTester()
27128 .cr(1)
27129 .kr(4)
27130 .channels(channels)
27131 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027132 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027133 }
27134 }
27135
Marat Dukhande06f492020-04-09 00:19:31 -070027136 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027137 for (size_t channels = 1; channels <= 5; channels += 1) {
27138 DWConvMicrokernelTester()
27139 .cr(1)
27140 .kr(4)
27141 .channels(channels)
27142 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027143 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027144 }
27145 }
27146
Marat Dukhande06f492020-04-09 00:19:31 -070027147 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027148 for (size_t channels = 1; channels <= 5; channels += 1) {
27149 for (size_t step = 2; step <= 4; step++) {
27150 DWConvMicrokernelTester()
27151 .cr(1)
27152 .kr(4)
27153 .channels(channels)
27154 .width(3)
27155 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027156 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027157 }
27158 }
27159 }
27160
Marat Dukhande06f492020-04-09 00:19:31 -070027161 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027162 for (size_t channels = 1; channels <= 5; channels += 1) {
27163 DWConvMicrokernelTester()
27164 .cr(1)
27165 .kr(4)
27166 .channels(1)
27167 .width(5)
27168 .output_stride(7)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027169 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027170 }
27171 }
27172
Marat Dukhande06f492020-04-09 00:19:31 -070027173 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027174 for (size_t channels = 1; channels <= 5; channels += 1) {
27175 DWConvMicrokernelTester()
27176 .cr(1)
27177 .kr(4)
27178 .channels(channels)
27179 .width(3)
27180 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027181 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027182 }
27183 }
27184
Marat Dukhande06f492020-04-09 00:19:31 -070027185 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027186 for (size_t channels = 1; channels <= 5; channels += 1) {
27187 DWConvMicrokernelTester()
27188 .cr(1)
27189 .kr(4)
27190 .channels(channels)
27191 .width(3)
27192 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027193 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027194 }
27195 }
Frank Barchardd5360722020-05-17 16:10:36 -070027196
27197 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, input_offset) {
27198 for (uint32_t channels = 2; channels < 16; channels += 3) {
27199 DWConvMicrokernelTester()
27200 .cr(1)
27201 .kr(4)
27202 .channels(channels)
27203 .input_offset(48)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027204 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070027205 }
27206 }
27207
27208 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, zero) {
27209 for (uint32_t mz = 0; mz < 4; mz++) {
27210 for (uint32_t channels = 2; channels < 16; channels += 3) {
27211 DWConvMicrokernelTester()
27212 .cr(1)
27213 .kr(4)
27214 .channels(channels)
27215 .input_offset(48)
27216 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027217 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070027218 }
27219 }
27220 }
Marat Dukhan4c617792021-12-21 15:47:58 -080027221#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070027222
27223
Marat Dukhan4c617792021-12-21 15:47:58 -080027224#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070027225 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_eq_2) {
27226 DWConvMicrokernelTester()
27227 .cr(2)
27228 .kr(3)
27229 .channels(2)
27230 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27231 }
27232
27233 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_div_2) {
27234 for (uint32_t channels = 4; channels < 32; channels += 6) {
27235 DWConvMicrokernelTester()
27236 .cr(2)
27237 .kr(3)
27238 .channels(channels)
27239 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27240 }
27241 }
27242
27243 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_div_2_with_qmin) {
27244 for (uint32_t channels = 4; channels < 32; channels += 6) {
27245 DWConvMicrokernelTester()
27246 .cr(2)
27247 .kr(3)
27248 .channels(channels)
27249 .qmin(128)
27250 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27251 }
27252 }
27253
27254 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_div_2_with_qmax) {
27255 for (uint32_t channels = 4; channels < 32; channels += 6) {
27256 DWConvMicrokernelTester()
27257 .cr(2)
27258 .kr(3)
27259 .channels(channels)
27260 .qmax(128)
27261 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27262 }
27263 }
27264
27265 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_lt_2) {
27266 for (uint32_t channels = 1; channels < 2; channels++) {
27267 DWConvMicrokernelTester()
27268 .cr(2)
27269 .kr(3)
27270 .channels(channels)
27271 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27272 }
27273 }
27274
27275 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_gt_2) {
27276 for (uint32_t channels = 3; channels < 4; channels++) {
27277 DWConvMicrokernelTester()
27278 .cr(2)
27279 .kr(3)
27280 .channels(channels)
27281 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27282 }
27283 }
27284
27285 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_gt_2_with_qmin) {
27286 for (uint32_t channels = 3; channels < 4; channels++) {
27287 DWConvMicrokernelTester()
27288 .cr(2)
27289 .kr(3)
27290 .channels(channels)
27291 .qmin(128)
27292 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27293 }
27294 }
27295
27296 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, c_gt_2_with_qmax) {
27297 for (uint32_t channels = 3; channels < 4; channels++) {
27298 DWConvMicrokernelTester()
27299 .cr(2)
27300 .kr(3)
27301 .channels(channels)
27302 .qmax(128)
27303 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27304 }
27305 }
27306
27307 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, multipixel) {
27308 for (size_t channels = 1; channels <= 10; channels += 1) {
27309 DWConvMicrokernelTester()
27310 .cr(2)
27311 .kr(3)
27312 .channels(channels)
27313 .width(3)
27314 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27315 }
27316 }
27317
27318 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, multipixel_with_step) {
27319 for (size_t channels = 1; channels <= 10; channels += 1) {
27320 for (size_t step = 2; step <= 3; step++) {
27321 DWConvMicrokernelTester()
27322 .cr(2)
27323 .kr(3)
27324 .channels(channels)
27325 .width(3)
27326 .step(step)
27327 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27328 }
27329 }
27330 }
27331
27332 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, multipixel_with_output_stride) {
27333 for (size_t channels = 1; channels <= 10; channels += 1) {
27334 DWConvMicrokernelTester()
27335 .cr(2)
27336 .kr(3)
27337 .channels(2)
27338 .width(5)
27339 .output_stride(13)
27340 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27341 }
27342 }
27343
27344 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, multipixel_with_qmin) {
27345 for (size_t channels = 1; channels <= 10; channels += 1) {
27346 DWConvMicrokernelTester()
27347 .cr(2)
27348 .kr(3)
27349 .channels(channels)
27350 .width(3)
27351 .qmin(128)
27352 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27353 }
27354 }
27355
27356 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, multipixel_with_qmax) {
27357 for (size_t channels = 1; channels <= 10; channels += 1) {
27358 DWConvMicrokernelTester()
27359 .cr(2)
27360 .kr(3)
27361 .channels(channels)
27362 .width(3)
27363 .qmax(128)
27364 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27365 }
27366 }
27367
27368 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, input_offset) {
27369 for (uint32_t channels = 4; channels < 32; channels += 6) {
27370 DWConvMicrokernelTester()
27371 .cr(2)
27372 .kr(3)
27373 .channels(channels)
27374 .input_offset(80)
27375 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27376 }
27377 }
27378
27379 TEST(F32_DWCONV_MINMAX_UP2X3__WASM, zero) {
27380 for (uint32_t mz = 0; mz < 3; mz++) {
27381 for (uint32_t channels = 4; channels < 32; channels += 6) {
27382 DWConvMicrokernelTester()
27383 .cr(2)
27384 .kr(3)
27385 .channels(channels)
27386 .input_offset(80)
27387 .zero_index(mz)
27388 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm, xnn_init_f32_minmax_scalar_params);
27389 }
27390 }
27391 }
Marat Dukhan4c617792021-12-21 15:47:58 -080027392#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070027393
27394
Marat Dukhan4c617792021-12-21 15:47:58 -080027395#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070027396 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_eq_2) {
27397 DWConvMicrokernelTester()
27398 .cr(2)
27399 .kr(3)
27400 .channels(2)
27401 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27402 }
27403
27404 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_div_2) {
27405 for (uint32_t channels = 4; channels < 32; channels += 6) {
27406 DWConvMicrokernelTester()
27407 .cr(2)
27408 .kr(3)
27409 .channels(channels)
27410 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27411 }
27412 }
27413
27414 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_div_2_with_qmin) {
27415 for (uint32_t channels = 4; channels < 32; channels += 6) {
27416 DWConvMicrokernelTester()
27417 .cr(2)
27418 .kr(3)
27419 .channels(channels)
27420 .qmin(128)
27421 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27422 }
27423 }
27424
27425 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_div_2_with_qmax) {
27426 for (uint32_t channels = 4; channels < 32; channels += 6) {
27427 DWConvMicrokernelTester()
27428 .cr(2)
27429 .kr(3)
27430 .channels(channels)
27431 .qmax(128)
27432 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27433 }
27434 }
27435
27436 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_lt_2) {
27437 for (uint32_t channels = 1; channels < 2; channels++) {
27438 DWConvMicrokernelTester()
27439 .cr(2)
27440 .kr(3)
27441 .channels(channels)
27442 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27443 }
27444 }
27445
27446 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_gt_2) {
27447 for (uint32_t channels = 3; channels < 4; channels++) {
27448 DWConvMicrokernelTester()
27449 .cr(2)
27450 .kr(3)
27451 .channels(channels)
27452 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27453 }
27454 }
27455
27456 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_gt_2_with_qmin) {
27457 for (uint32_t channels = 3; channels < 4; channels++) {
27458 DWConvMicrokernelTester()
27459 .cr(2)
27460 .kr(3)
27461 .channels(channels)
27462 .qmin(128)
27463 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27464 }
27465 }
27466
27467 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, c_gt_2_with_qmax) {
27468 for (uint32_t channels = 3; channels < 4; channels++) {
27469 DWConvMicrokernelTester()
27470 .cr(2)
27471 .kr(3)
27472 .channels(channels)
27473 .qmax(128)
27474 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27475 }
27476 }
27477
27478 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, multipixel) {
27479 for (size_t channels = 1; channels <= 10; channels += 1) {
27480 DWConvMicrokernelTester()
27481 .cr(2)
27482 .kr(3)
27483 .channels(channels)
27484 .width(3)
27485 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27486 }
27487 }
27488
27489 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, multipixel_with_step) {
27490 for (size_t channels = 1; channels <= 10; channels += 1) {
27491 for (size_t step = 2; step <= 3; step++) {
27492 DWConvMicrokernelTester()
27493 .cr(2)
27494 .kr(3)
27495 .channels(channels)
27496 .width(3)
27497 .step(step)
27498 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27499 }
27500 }
27501 }
27502
27503 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, multipixel_with_output_stride) {
27504 for (size_t channels = 1; channels <= 10; channels += 1) {
27505 DWConvMicrokernelTester()
27506 .cr(2)
27507 .kr(3)
27508 .channels(2)
27509 .width(5)
27510 .output_stride(13)
27511 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27512 }
27513 }
27514
27515 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, multipixel_with_qmin) {
27516 for (size_t channels = 1; channels <= 10; channels += 1) {
27517 DWConvMicrokernelTester()
27518 .cr(2)
27519 .kr(3)
27520 .channels(channels)
27521 .width(3)
27522 .qmin(128)
27523 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27524 }
27525 }
27526
27527 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, multipixel_with_qmax) {
27528 for (size_t channels = 1; channels <= 10; channels += 1) {
27529 DWConvMicrokernelTester()
27530 .cr(2)
27531 .kr(3)
27532 .channels(channels)
27533 .width(3)
27534 .qmax(128)
27535 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27536 }
27537 }
27538
27539 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, input_offset) {
27540 for (uint32_t channels = 4; channels < 32; channels += 6) {
27541 DWConvMicrokernelTester()
27542 .cr(2)
27543 .kr(3)
27544 .channels(channels)
27545 .input_offset(80)
27546 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27547 }
27548 }
27549
27550 TEST(F32_DWCONV_MINMAX_UP2X3__WASM_ACC2, zero) {
27551 for (uint32_t mz = 0; mz < 3; mz++) {
27552 for (uint32_t channels = 4; channels < 32; channels += 6) {
27553 DWConvMicrokernelTester()
27554 .cr(2)
27555 .kr(3)
27556 .channels(channels)
27557 .input_offset(80)
27558 .zero_index(mz)
27559 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__wasm_acc2, xnn_init_f32_minmax_scalar_params);
27560 }
27561 }
27562 }
Marat Dukhan4c617792021-12-21 15:47:58 -080027563#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070027564
27565
Marat Dukhan4c617792021-12-21 15:47:58 -080027566#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070027567 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027568 DWConvMicrokernelTester()
27569 .cr(2)
27570 .kr(4)
27571 .channels(2)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027572 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027573 }
27574
Marat Dukhande06f492020-04-09 00:19:31 -070027575 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027576 for (uint32_t channels = 4; channels < 32; channels += 6) {
27577 DWConvMicrokernelTester()
27578 .cr(2)
27579 .kr(4)
27580 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027581 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027582 }
27583 }
27584
Marat Dukhande06f492020-04-09 00:19:31 -070027585 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027586 for (uint32_t channels = 4; channels < 32; channels += 6) {
27587 DWConvMicrokernelTester()
27588 .cr(2)
27589 .kr(4)
27590 .channels(channels)
27591 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027592 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027593 }
27594 }
27595
Marat Dukhande06f492020-04-09 00:19:31 -070027596 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027597 for (uint32_t channels = 4; channels < 32; channels += 6) {
27598 DWConvMicrokernelTester()
27599 .cr(2)
27600 .kr(4)
27601 .channels(channels)
27602 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027603 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027604 }
27605 }
27606
Marat Dukhande06f492020-04-09 00:19:31 -070027607 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027608 for (uint32_t channels = 1; channels < 2; channels++) {
27609 DWConvMicrokernelTester()
27610 .cr(2)
27611 .kr(4)
27612 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027613 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027614 }
27615 }
27616
Marat Dukhande06f492020-04-09 00:19:31 -070027617 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027618 for (uint32_t channels = 3; channels < 4; channels++) {
27619 DWConvMicrokernelTester()
27620 .cr(2)
27621 .kr(4)
27622 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027623 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027624 }
27625 }
27626
Marat Dukhande06f492020-04-09 00:19:31 -070027627 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027628 for (uint32_t channels = 3; channels < 4; channels++) {
27629 DWConvMicrokernelTester()
27630 .cr(2)
27631 .kr(4)
27632 .channels(channels)
27633 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027634 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027635 }
27636 }
27637
Marat Dukhande06f492020-04-09 00:19:31 -070027638 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027639 for (uint32_t channels = 3; channels < 4; channels++) {
27640 DWConvMicrokernelTester()
27641 .cr(2)
27642 .kr(4)
27643 .channels(channels)
27644 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027645 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027646 }
27647 }
27648
Marat Dukhande06f492020-04-09 00:19:31 -070027649 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027650 for (size_t channels = 1; channels <= 10; channels += 1) {
27651 DWConvMicrokernelTester()
27652 .cr(2)
27653 .kr(4)
27654 .channels(channels)
27655 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027656 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027657 }
27658 }
27659
Marat Dukhande06f492020-04-09 00:19:31 -070027660 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027661 for (size_t channels = 1; channels <= 10; channels += 1) {
27662 for (size_t step = 2; step <= 4; step++) {
27663 DWConvMicrokernelTester()
27664 .cr(2)
27665 .kr(4)
27666 .channels(channels)
27667 .width(3)
27668 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027669 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027670 }
27671 }
27672 }
27673
Marat Dukhande06f492020-04-09 00:19:31 -070027674 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027675 for (size_t channels = 1; channels <= 10; channels += 1) {
27676 DWConvMicrokernelTester()
27677 .cr(2)
27678 .kr(4)
27679 .channels(2)
27680 .width(5)
27681 .output_stride(13)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027682 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027683 }
27684 }
27685
Marat Dukhande06f492020-04-09 00:19:31 -070027686 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027687 for (size_t channels = 1; channels <= 10; channels += 1) {
27688 DWConvMicrokernelTester()
27689 .cr(2)
27690 .kr(4)
27691 .channels(channels)
27692 .width(3)
27693 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027694 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027695 }
27696 }
27697
Marat Dukhande06f492020-04-09 00:19:31 -070027698 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027699 for (size_t channels = 1; channels <= 10; channels += 1) {
27700 DWConvMicrokernelTester()
27701 .cr(2)
27702 .kr(4)
27703 .channels(channels)
27704 .width(3)
27705 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027706 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027707 }
27708 }
Frank Barchardd5360722020-05-17 16:10:36 -070027709
27710 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, input_offset) {
27711 for (uint32_t channels = 4; channels < 32; channels += 6) {
27712 DWConvMicrokernelTester()
27713 .cr(2)
27714 .kr(4)
27715 .channels(channels)
27716 .input_offset(80)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027717 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070027718 }
27719 }
27720
27721 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, zero) {
27722 for (uint32_t mz = 0; mz < 4; mz++) {
27723 for (uint32_t channels = 4; channels < 32; channels += 6) {
27724 DWConvMicrokernelTester()
27725 .cr(2)
27726 .kr(4)
27727 .channels(channels)
27728 .input_offset(80)
27729 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027730 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070027731 }
27732 }
27733 }
Marat Dukhan4c617792021-12-21 15:47:58 -080027734#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070027735
27736
Marat Dukhan4c617792021-12-21 15:47:58 -080027737#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070027738 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027739 DWConvMicrokernelTester()
27740 .cr(2)
27741 .kr(4)
27742 .channels(2)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027743 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027744 }
27745
Marat Dukhande06f492020-04-09 00:19:31 -070027746 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027747 for (uint32_t channels = 4; channels < 32; channels += 6) {
27748 DWConvMicrokernelTester()
27749 .cr(2)
27750 .kr(4)
27751 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027752 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027753 }
27754 }
27755
Marat Dukhande06f492020-04-09 00:19:31 -070027756 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027757 for (uint32_t channels = 4; channels < 32; channels += 6) {
27758 DWConvMicrokernelTester()
27759 .cr(2)
27760 .kr(4)
27761 .channels(channels)
27762 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027763 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027764 }
27765 }
27766
Marat Dukhande06f492020-04-09 00:19:31 -070027767 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027768 for (uint32_t channels = 4; channels < 32; channels += 6) {
27769 DWConvMicrokernelTester()
27770 .cr(2)
27771 .kr(4)
27772 .channels(channels)
27773 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027774 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027775 }
27776 }
27777
Marat Dukhande06f492020-04-09 00:19:31 -070027778 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027779 for (uint32_t channels = 1; channels < 2; channels++) {
27780 DWConvMicrokernelTester()
27781 .cr(2)
27782 .kr(4)
27783 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027784 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027785 }
27786 }
27787
Marat Dukhande06f492020-04-09 00:19:31 -070027788 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027789 for (uint32_t channels = 3; channels < 4; channels++) {
27790 DWConvMicrokernelTester()
27791 .cr(2)
27792 .kr(4)
27793 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027794 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027795 }
27796 }
27797
Marat Dukhande06f492020-04-09 00:19:31 -070027798 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027799 for (uint32_t channels = 3; channels < 4; channels++) {
27800 DWConvMicrokernelTester()
27801 .cr(2)
27802 .kr(4)
27803 .channels(channels)
27804 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027805 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027806 }
27807 }
27808
Marat Dukhande06f492020-04-09 00:19:31 -070027809 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027810 for (uint32_t channels = 3; channels < 4; channels++) {
27811 DWConvMicrokernelTester()
27812 .cr(2)
27813 .kr(4)
27814 .channels(channels)
27815 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027816 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027817 }
27818 }
27819
Marat Dukhande06f492020-04-09 00:19:31 -070027820 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027821 for (size_t channels = 1; channels <= 10; channels += 1) {
27822 DWConvMicrokernelTester()
27823 .cr(2)
27824 .kr(4)
27825 .channels(channels)
27826 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027827 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027828 }
27829 }
27830
Marat Dukhande06f492020-04-09 00:19:31 -070027831 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027832 for (size_t channels = 1; channels <= 10; channels += 1) {
27833 for (size_t step = 2; step <= 4; step++) {
27834 DWConvMicrokernelTester()
27835 .cr(2)
27836 .kr(4)
27837 .channels(channels)
27838 .width(3)
27839 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027840 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027841 }
27842 }
27843 }
27844
Marat Dukhande06f492020-04-09 00:19:31 -070027845 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027846 for (size_t channels = 1; channels <= 10; channels += 1) {
27847 DWConvMicrokernelTester()
27848 .cr(2)
27849 .kr(4)
27850 .channels(2)
27851 .width(5)
27852 .output_stride(13)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027853 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027854 }
27855 }
27856
Marat Dukhande06f492020-04-09 00:19:31 -070027857 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027858 for (size_t channels = 1; channels <= 10; channels += 1) {
27859 DWConvMicrokernelTester()
27860 .cr(2)
27861 .kr(4)
27862 .channels(channels)
27863 .width(3)
27864 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027865 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027866 }
27867 }
27868
Marat Dukhande06f492020-04-09 00:19:31 -070027869 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027870 for (size_t channels = 1; channels <= 10; channels += 1) {
27871 DWConvMicrokernelTester()
27872 .cr(2)
27873 .kr(4)
27874 .channels(channels)
27875 .width(3)
27876 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027877 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027878 }
27879 }
Frank Barchardd5360722020-05-17 16:10:36 -070027880
27881 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, input_offset) {
27882 for (uint32_t channels = 4; channels < 32; channels += 6) {
27883 DWConvMicrokernelTester()
27884 .cr(2)
27885 .kr(4)
27886 .channels(channels)
27887 .input_offset(80)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027888 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070027889 }
27890 }
27891
27892 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, zero) {
27893 for (uint32_t mz = 0; mz < 4; mz++) {
27894 for (uint32_t channels = 4; channels < 32; channels += 6) {
27895 DWConvMicrokernelTester()
27896 .cr(2)
27897 .kr(4)
27898 .channels(channels)
27899 .input_offset(80)
27900 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027901 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070027902 }
27903 }
27904 }
Marat Dukhan4c617792021-12-21 15:47:58 -080027905#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070027906
27907
Marat Dukhan4c617792021-12-21 15:47:58 -080027908#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070027909 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027910 DWConvMicrokernelTester()
27911 .cr(1)
27912 .kr(9)
27913 .channels(1)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027914 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027915 }
27916
Marat Dukhande06f492020-04-09 00:19:31 -070027917 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027918 for (uint32_t channels = 2; channels < 10; channels++) {
27919 DWConvMicrokernelTester()
27920 .cr(1)
27921 .kr(9)
27922 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027923 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027924 }
27925 }
27926
Marat Dukhande06f492020-04-09 00:19:31 -070027927 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027928 for (uint32_t channels = 2; channels < 10; channels++) {
27929 DWConvMicrokernelTester()
27930 .cr(1)
27931 .kr(9)
27932 .channels(channels)
27933 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027934 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027935 }
27936 }
27937
Marat Dukhande06f492020-04-09 00:19:31 -070027938 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027939 for (uint32_t channels = 2; channels < 10; channels++) {
27940 DWConvMicrokernelTester()
27941 .cr(1)
27942 .kr(9)
27943 .channels(channels)
27944 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027945 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027946 }
27947 }
27948
Marat Dukhande06f492020-04-09 00:19:31 -070027949 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027950 for (size_t channels = 1; channels <= 5; channels += 1) {
27951 DWConvMicrokernelTester()
27952 .cr(1)
27953 .kr(9)
27954 .channels(channels)
27955 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027956 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027957 }
27958 }
27959
Marat Dukhande06f492020-04-09 00:19:31 -070027960 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027961 for (size_t channels = 1; channels <= 5; channels += 1) {
27962 for (size_t step = 2; step <= 9; step++) {
27963 DWConvMicrokernelTester()
27964 .cr(1)
27965 .kr(9)
27966 .channels(channels)
27967 .width(3)
27968 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027969 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027970 }
27971 }
27972 }
27973
Marat Dukhande06f492020-04-09 00:19:31 -070027974 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027975 for (size_t channels = 1; channels <= 5; channels += 1) {
27976 DWConvMicrokernelTester()
27977 .cr(1)
27978 .kr(9)
27979 .channels(1)
27980 .width(5)
27981 .output_stride(7)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027982 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027983 }
27984 }
27985
Marat Dukhande06f492020-04-09 00:19:31 -070027986 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027987 for (size_t channels = 1; channels <= 5; channels += 1) {
27988 DWConvMicrokernelTester()
27989 .cr(1)
27990 .kr(9)
27991 .channels(channels)
27992 .width(3)
27993 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070027994 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070027995 }
27996 }
27997
Marat Dukhande06f492020-04-09 00:19:31 -070027998 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070027999 for (size_t channels = 1; channels <= 5; channels += 1) {
28000 DWConvMicrokernelTester()
28001 .cr(1)
28002 .kr(9)
28003 .channels(channels)
28004 .width(3)
28005 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028006 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028007 }
28008 }
Frank Barchardd5360722020-05-17 16:10:36 -070028009
28010 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, input_offset) {
28011 for (uint32_t channels = 2; channels < 16; channels += 3) {
28012 DWConvMicrokernelTester()
28013 .cr(1)
28014 .kr(9)
28015 .channels(channels)
28016 .input_offset(48)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028017 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028018 }
28019 }
28020
28021 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, zero) {
28022 for (uint32_t mz = 0; mz < 9; mz++) {
28023 for (uint32_t channels = 2; channels < 16; channels += 3) {
28024 DWConvMicrokernelTester()
28025 .cr(1)
28026 .kr(9)
28027 .channels(channels)
28028 .input_offset(48)
28029 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028030 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028031 }
28032 }
28033 }
Marat Dukhan4c617792021-12-21 15:47:58 -080028034#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070028035
28036
Marat Dukhan4c617792021-12-21 15:47:58 -080028037#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070028038 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028039 DWConvMicrokernelTester()
28040 .cr(1)
28041 .kr(9)
28042 .channels(1)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028043 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028044 }
28045
Marat Dukhande06f492020-04-09 00:19:31 -070028046 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028047 for (uint32_t channels = 2; channels < 10; channels++) {
28048 DWConvMicrokernelTester()
28049 .cr(1)
28050 .kr(9)
28051 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028052 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028053 }
28054 }
28055
Marat Dukhande06f492020-04-09 00:19:31 -070028056 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028057 for (uint32_t channels = 2; channels < 10; channels++) {
28058 DWConvMicrokernelTester()
28059 .cr(1)
28060 .kr(9)
28061 .channels(channels)
28062 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028063 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028064 }
28065 }
28066
Marat Dukhande06f492020-04-09 00:19:31 -070028067 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028068 for (uint32_t channels = 2; channels < 10; channels++) {
28069 DWConvMicrokernelTester()
28070 .cr(1)
28071 .kr(9)
28072 .channels(channels)
28073 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028074 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028075 }
28076 }
28077
Marat Dukhande06f492020-04-09 00:19:31 -070028078 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028079 for (size_t channels = 1; channels <= 5; channels += 1) {
28080 DWConvMicrokernelTester()
28081 .cr(1)
28082 .kr(9)
28083 .channels(channels)
28084 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028085 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028086 }
28087 }
28088
Marat Dukhande06f492020-04-09 00:19:31 -070028089 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028090 for (size_t channels = 1; channels <= 5; channels += 1) {
28091 for (size_t step = 2; step <= 9; step++) {
28092 DWConvMicrokernelTester()
28093 .cr(1)
28094 .kr(9)
28095 .channels(channels)
28096 .width(3)
28097 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028098 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028099 }
28100 }
28101 }
28102
Marat Dukhande06f492020-04-09 00:19:31 -070028103 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028104 for (size_t channels = 1; channels <= 5; channels += 1) {
28105 DWConvMicrokernelTester()
28106 .cr(1)
28107 .kr(9)
28108 .channels(1)
28109 .width(5)
28110 .output_stride(7)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028111 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028112 }
28113 }
28114
Marat Dukhande06f492020-04-09 00:19:31 -070028115 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028116 for (size_t channels = 1; channels <= 5; channels += 1) {
28117 DWConvMicrokernelTester()
28118 .cr(1)
28119 .kr(9)
28120 .channels(channels)
28121 .width(3)
28122 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028123 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028124 }
28125 }
28126
Marat Dukhande06f492020-04-09 00:19:31 -070028127 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028128 for (size_t channels = 1; channels <= 5; channels += 1) {
28129 DWConvMicrokernelTester()
28130 .cr(1)
28131 .kr(9)
28132 .channels(channels)
28133 .width(3)
28134 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028135 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028136 }
28137 }
Frank Barchardd5360722020-05-17 16:10:36 -070028138
28139 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, input_offset) {
28140 for (uint32_t channels = 2; channels < 16; channels += 3) {
28141 DWConvMicrokernelTester()
28142 .cr(1)
28143 .kr(9)
28144 .channels(channels)
28145 .input_offset(48)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028146 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028147 }
28148 }
28149
28150 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, zero) {
28151 for (uint32_t mz = 0; mz < 9; mz++) {
28152 for (uint32_t channels = 2; channels < 16; channels += 3) {
28153 DWConvMicrokernelTester()
28154 .cr(1)
28155 .kr(9)
28156 .channels(channels)
28157 .input_offset(48)
28158 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028159 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028160 }
28161 }
28162 }
Marat Dukhan4c617792021-12-21 15:47:58 -080028163#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070028164
28165
Marat Dukhan4c617792021-12-21 15:47:58 -080028166#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070028167 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028168 DWConvMicrokernelTester()
28169 .cr(2)
28170 .kr(9)
28171 .channels(2)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028172 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028173 }
28174
Marat Dukhande06f492020-04-09 00:19:31 -070028175 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028176 for (uint32_t channels = 4; channels < 32; channels += 6) {
28177 DWConvMicrokernelTester()
28178 .cr(2)
28179 .kr(9)
28180 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028181 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028182 }
28183 }
28184
Marat Dukhande06f492020-04-09 00:19:31 -070028185 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028186 for (uint32_t channels = 4; channels < 32; channels += 6) {
28187 DWConvMicrokernelTester()
28188 .cr(2)
28189 .kr(9)
28190 .channels(channels)
28191 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028192 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028193 }
28194 }
28195
Marat Dukhande06f492020-04-09 00:19:31 -070028196 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028197 for (uint32_t channels = 4; channels < 32; channels += 6) {
28198 DWConvMicrokernelTester()
28199 .cr(2)
28200 .kr(9)
28201 .channels(channels)
28202 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028203 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028204 }
28205 }
28206
Marat Dukhande06f492020-04-09 00:19:31 -070028207 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028208 for (uint32_t channels = 1; channels < 2; channels++) {
28209 DWConvMicrokernelTester()
28210 .cr(2)
28211 .kr(9)
28212 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028213 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028214 }
28215 }
28216
Marat Dukhande06f492020-04-09 00:19:31 -070028217 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028218 for (uint32_t channels = 3; channels < 4; channels++) {
28219 DWConvMicrokernelTester()
28220 .cr(2)
28221 .kr(9)
28222 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028223 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028224 }
28225 }
28226
Marat Dukhande06f492020-04-09 00:19:31 -070028227 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028228 for (uint32_t channels = 3; channels < 4; channels++) {
28229 DWConvMicrokernelTester()
28230 .cr(2)
28231 .kr(9)
28232 .channels(channels)
28233 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028234 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028235 }
28236 }
28237
Marat Dukhande06f492020-04-09 00:19:31 -070028238 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028239 for (uint32_t channels = 3; channels < 4; channels++) {
28240 DWConvMicrokernelTester()
28241 .cr(2)
28242 .kr(9)
28243 .channels(channels)
28244 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028245 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028246 }
28247 }
28248
Marat Dukhande06f492020-04-09 00:19:31 -070028249 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028250 for (size_t channels = 1; channels <= 10; channels += 1) {
28251 DWConvMicrokernelTester()
28252 .cr(2)
28253 .kr(9)
28254 .channels(channels)
28255 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028256 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028257 }
28258 }
28259
Marat Dukhande06f492020-04-09 00:19:31 -070028260 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028261 for (size_t channels = 1; channels <= 10; channels += 1) {
28262 for (size_t step = 2; step <= 9; step++) {
28263 DWConvMicrokernelTester()
28264 .cr(2)
28265 .kr(9)
28266 .channels(channels)
28267 .width(3)
28268 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028269 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028270 }
28271 }
28272 }
28273
Marat Dukhande06f492020-04-09 00:19:31 -070028274 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028275 for (size_t channels = 1; channels <= 10; channels += 1) {
28276 DWConvMicrokernelTester()
28277 .cr(2)
28278 .kr(9)
28279 .channels(2)
28280 .width(5)
28281 .output_stride(13)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028282 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028283 }
28284 }
28285
Marat Dukhande06f492020-04-09 00:19:31 -070028286 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028287 for (size_t channels = 1; channels <= 10; channels += 1) {
28288 DWConvMicrokernelTester()
28289 .cr(2)
28290 .kr(9)
28291 .channels(channels)
28292 .width(3)
28293 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028294 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028295 }
28296 }
28297
Marat Dukhande06f492020-04-09 00:19:31 -070028298 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028299 for (size_t channels = 1; channels <= 10; channels += 1) {
28300 DWConvMicrokernelTester()
28301 .cr(2)
28302 .kr(9)
28303 .channels(channels)
28304 .width(3)
28305 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028306 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028307 }
28308 }
Frank Barchardd5360722020-05-17 16:10:36 -070028309
28310 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, input_offset) {
28311 for (uint32_t channels = 4; channels < 32; channels += 6) {
28312 DWConvMicrokernelTester()
28313 .cr(2)
28314 .kr(9)
28315 .channels(channels)
28316 .input_offset(80)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028317 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028318 }
28319 }
28320
28321 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, zero) {
28322 for (uint32_t mz = 0; mz < 9; mz++) {
28323 for (uint32_t channels = 4; channels < 32; channels += 6) {
28324 DWConvMicrokernelTester()
28325 .cr(2)
28326 .kr(9)
28327 .channels(channels)
28328 .input_offset(80)
28329 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028330 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028331 }
28332 }
28333 }
Marat Dukhan4c617792021-12-21 15:47:58 -080028334#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070028335
28336
Marat Dukhan4c617792021-12-21 15:47:58 -080028337#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070028338 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028339 DWConvMicrokernelTester()
28340 .cr(2)
28341 .kr(9)
28342 .channels(2)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028343 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028344 }
28345
Marat Dukhande06f492020-04-09 00:19:31 -070028346 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028347 for (uint32_t channels = 4; channels < 32; channels += 6) {
28348 DWConvMicrokernelTester()
28349 .cr(2)
28350 .kr(9)
28351 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028352 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028353 }
28354 }
28355
Marat Dukhande06f492020-04-09 00:19:31 -070028356 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028357 for (uint32_t channels = 4; channels < 32; channels += 6) {
28358 DWConvMicrokernelTester()
28359 .cr(2)
28360 .kr(9)
28361 .channels(channels)
28362 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028363 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028364 }
28365 }
28366
Marat Dukhande06f492020-04-09 00:19:31 -070028367 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028368 for (uint32_t channels = 4; channels < 32; channels += 6) {
28369 DWConvMicrokernelTester()
28370 .cr(2)
28371 .kr(9)
28372 .channels(channels)
28373 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028374 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028375 }
28376 }
28377
Marat Dukhande06f492020-04-09 00:19:31 -070028378 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028379 for (uint32_t channels = 1; channels < 2; channels++) {
28380 DWConvMicrokernelTester()
28381 .cr(2)
28382 .kr(9)
28383 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028384 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028385 }
28386 }
28387
Marat Dukhande06f492020-04-09 00:19:31 -070028388 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028389 for (uint32_t channels = 3; channels < 4; channels++) {
28390 DWConvMicrokernelTester()
28391 .cr(2)
28392 .kr(9)
28393 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028394 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028395 }
28396 }
28397
Marat Dukhande06f492020-04-09 00:19:31 -070028398 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028399 for (uint32_t channels = 3; channels < 4; channels++) {
28400 DWConvMicrokernelTester()
28401 .cr(2)
28402 .kr(9)
28403 .channels(channels)
28404 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028405 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028406 }
28407 }
28408
Marat Dukhande06f492020-04-09 00:19:31 -070028409 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028410 for (uint32_t channels = 3; channels < 4; channels++) {
28411 DWConvMicrokernelTester()
28412 .cr(2)
28413 .kr(9)
28414 .channels(channels)
28415 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028416 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028417 }
28418 }
28419
Marat Dukhande06f492020-04-09 00:19:31 -070028420 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028421 for (size_t channels = 1; channels <= 10; channels += 1) {
28422 DWConvMicrokernelTester()
28423 .cr(2)
28424 .kr(9)
28425 .channels(channels)
28426 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028427 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028428 }
28429 }
28430
Marat Dukhande06f492020-04-09 00:19:31 -070028431 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028432 for (size_t channels = 1; channels <= 10; channels += 1) {
28433 for (size_t step = 2; step <= 9; step++) {
28434 DWConvMicrokernelTester()
28435 .cr(2)
28436 .kr(9)
28437 .channels(channels)
28438 .width(3)
28439 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028440 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028441 }
28442 }
28443 }
28444
Marat Dukhande06f492020-04-09 00:19:31 -070028445 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028446 for (size_t channels = 1; channels <= 10; channels += 1) {
28447 DWConvMicrokernelTester()
28448 .cr(2)
28449 .kr(9)
28450 .channels(2)
28451 .width(5)
28452 .output_stride(13)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028453 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028454 }
28455 }
28456
Marat Dukhande06f492020-04-09 00:19:31 -070028457 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028458 for (size_t channels = 1; channels <= 10; channels += 1) {
28459 DWConvMicrokernelTester()
28460 .cr(2)
28461 .kr(9)
28462 .channels(channels)
28463 .width(3)
28464 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028465 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028466 }
28467 }
28468
Marat Dukhande06f492020-04-09 00:19:31 -070028469 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028470 for (size_t channels = 1; channels <= 10; channels += 1) {
28471 DWConvMicrokernelTester()
28472 .cr(2)
28473 .kr(9)
28474 .channels(channels)
28475 .width(3)
28476 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028477 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028478 }
28479 }
Frank Barchardd5360722020-05-17 16:10:36 -070028480
28481 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, input_offset) {
28482 for (uint32_t channels = 4; channels < 32; channels += 6) {
28483 DWConvMicrokernelTester()
28484 .cr(2)
28485 .kr(9)
28486 .channels(channels)
28487 .input_offset(80)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028488 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028489 }
28490 }
28491
28492 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, zero) {
28493 for (uint32_t mz = 0; mz < 9; mz++) {
28494 for (uint32_t channels = 4; channels < 32; channels += 6) {
28495 DWConvMicrokernelTester()
28496 .cr(2)
28497 .kr(9)
28498 .channels(channels)
28499 .input_offset(80)
28500 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028501 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028502 }
28503 }
28504 }
Marat Dukhan4c617792021-12-21 15:47:58 -080028505#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070028506
28507
Marat Dukhan4c617792021-12-21 15:47:58 -080028508#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070028509 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028510 DWConvMicrokernelTester()
28511 .cr(1)
28512 .kr(25)
28513 .channels(1)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028514 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028515 }
28516
Marat Dukhande06f492020-04-09 00:19:31 -070028517 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028518 for (uint32_t channels = 2; channels < 10; channels++) {
28519 DWConvMicrokernelTester()
28520 .cr(1)
28521 .kr(25)
28522 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028523 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028524 }
28525 }
28526
Marat Dukhande06f492020-04-09 00:19:31 -070028527 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028528 for (uint32_t channels = 2; channels < 10; channels++) {
28529 DWConvMicrokernelTester()
28530 .cr(1)
28531 .kr(25)
28532 .channels(channels)
28533 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028534 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028535 }
28536 }
28537
Marat Dukhande06f492020-04-09 00:19:31 -070028538 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028539 for (uint32_t channels = 2; channels < 10; channels++) {
28540 DWConvMicrokernelTester()
28541 .cr(1)
28542 .kr(25)
28543 .channels(channels)
28544 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028545 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028546 }
28547 }
28548
Marat Dukhande06f492020-04-09 00:19:31 -070028549 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028550 for (size_t channels = 1; channels <= 5; channels += 1) {
28551 DWConvMicrokernelTester()
28552 .cr(1)
28553 .kr(25)
28554 .channels(channels)
28555 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028556 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028557 }
28558 }
28559
Marat Dukhande06f492020-04-09 00:19:31 -070028560 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028561 for (size_t channels = 1; channels <= 5; channels += 1) {
28562 for (size_t step = 2; step <= 25; step++) {
28563 DWConvMicrokernelTester()
28564 .cr(1)
28565 .kr(25)
28566 .channels(channels)
28567 .width(3)
28568 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028569 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028570 }
28571 }
28572 }
28573
Marat Dukhande06f492020-04-09 00:19:31 -070028574 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028575 for (size_t channels = 1; channels <= 5; channels += 1) {
28576 DWConvMicrokernelTester()
28577 .cr(1)
28578 .kr(25)
28579 .channels(1)
28580 .width(5)
28581 .output_stride(7)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028582 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028583 }
28584 }
28585
Marat Dukhande06f492020-04-09 00:19:31 -070028586 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028587 for (size_t channels = 1; channels <= 5; channels += 1) {
28588 DWConvMicrokernelTester()
28589 .cr(1)
28590 .kr(25)
28591 .channels(channels)
28592 .width(3)
28593 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028594 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028595 }
28596 }
28597
Marat Dukhande06f492020-04-09 00:19:31 -070028598 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028599 for (size_t channels = 1; channels <= 5; channels += 1) {
28600 DWConvMicrokernelTester()
28601 .cr(1)
28602 .kr(25)
28603 .channels(channels)
28604 .width(3)
28605 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028606 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028607 }
28608 }
Frank Barchardd5360722020-05-17 16:10:36 -070028609
28610 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, input_offset) {
28611 for (uint32_t channels = 2; channels < 16; channels += 3) {
28612 DWConvMicrokernelTester()
28613 .cr(1)
28614 .kr(25)
28615 .channels(channels)
28616 .input_offset(48)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028617 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028618 }
28619 }
28620
28621 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, zero) {
28622 for (uint32_t mz = 0; mz < 25; mz++) {
28623 for (uint32_t channels = 2; channels < 16; channels += 3) {
28624 DWConvMicrokernelTester()
28625 .cr(1)
28626 .kr(25)
28627 .channels(channels)
28628 .input_offset(48)
28629 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028630 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028631 }
28632 }
28633 }
Marat Dukhan4c617792021-12-21 15:47:58 -080028634#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070028635
28636
Marat Dukhan4c617792021-12-21 15:47:58 -080028637#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070028638 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028639 DWConvMicrokernelTester()
28640 .cr(1)
28641 .kr(25)
28642 .channels(1)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028643 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028644 }
28645
Marat Dukhande06f492020-04-09 00:19:31 -070028646 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028647 for (uint32_t channels = 2; channels < 10; channels++) {
28648 DWConvMicrokernelTester()
28649 .cr(1)
28650 .kr(25)
28651 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028652 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028653 }
28654 }
28655
Marat Dukhande06f492020-04-09 00:19:31 -070028656 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028657 for (uint32_t channels = 2; channels < 10; channels++) {
28658 DWConvMicrokernelTester()
28659 .cr(1)
28660 .kr(25)
28661 .channels(channels)
28662 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028663 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028664 }
28665 }
28666
Marat Dukhande06f492020-04-09 00:19:31 -070028667 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028668 for (uint32_t channels = 2; channels < 10; channels++) {
28669 DWConvMicrokernelTester()
28670 .cr(1)
28671 .kr(25)
28672 .channels(channels)
28673 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028674 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028675 }
28676 }
28677
Marat Dukhande06f492020-04-09 00:19:31 -070028678 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028679 for (size_t channels = 1; channels <= 5; channels += 1) {
28680 DWConvMicrokernelTester()
28681 .cr(1)
28682 .kr(25)
28683 .channels(channels)
28684 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028685 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028686 }
28687 }
28688
Marat Dukhande06f492020-04-09 00:19:31 -070028689 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028690 for (size_t channels = 1; channels <= 5; channels += 1) {
28691 for (size_t step = 2; step <= 25; step++) {
28692 DWConvMicrokernelTester()
28693 .cr(1)
28694 .kr(25)
28695 .channels(channels)
28696 .width(3)
28697 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028698 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028699 }
28700 }
28701 }
28702
Marat Dukhande06f492020-04-09 00:19:31 -070028703 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028704 for (size_t channels = 1; channels <= 5; channels += 1) {
28705 DWConvMicrokernelTester()
28706 .cr(1)
28707 .kr(25)
28708 .channels(1)
28709 .width(5)
28710 .output_stride(7)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028711 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028712 }
28713 }
28714
Marat Dukhande06f492020-04-09 00:19:31 -070028715 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028716 for (size_t channels = 1; channels <= 5; channels += 1) {
28717 DWConvMicrokernelTester()
28718 .cr(1)
28719 .kr(25)
28720 .channels(channels)
28721 .width(3)
28722 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028723 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028724 }
28725 }
28726
Marat Dukhande06f492020-04-09 00:19:31 -070028727 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028728 for (size_t channels = 1; channels <= 5; channels += 1) {
28729 DWConvMicrokernelTester()
28730 .cr(1)
28731 .kr(25)
28732 .channels(channels)
28733 .width(3)
28734 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028735 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028736 }
28737 }
Frank Barchardd5360722020-05-17 16:10:36 -070028738
28739 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, input_offset) {
28740 for (uint32_t channels = 2; channels < 16; channels += 3) {
28741 DWConvMicrokernelTester()
28742 .cr(1)
28743 .kr(25)
28744 .channels(channels)
28745 .input_offset(48)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028746 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028747 }
28748 }
28749
28750 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, zero) {
28751 for (uint32_t mz = 0; mz < 25; mz++) {
28752 for (uint32_t channels = 2; channels < 16; channels += 3) {
28753 DWConvMicrokernelTester()
28754 .cr(1)
28755 .kr(25)
28756 .channels(channels)
28757 .input_offset(48)
28758 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028759 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028760 }
28761 }
28762 }
Marat Dukhan4c617792021-12-21 15:47:58 -080028763#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070028764
28765
Marat Dukhan4c617792021-12-21 15:47:58 -080028766#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070028767 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028768 DWConvMicrokernelTester()
28769 .cr(2)
28770 .kr(25)
28771 .channels(2)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028772 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028773 }
28774
Marat Dukhande06f492020-04-09 00:19:31 -070028775 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028776 for (uint32_t channels = 4; channels < 32; channels += 6) {
28777 DWConvMicrokernelTester()
28778 .cr(2)
28779 .kr(25)
28780 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028781 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028782 }
28783 }
28784
Marat Dukhande06f492020-04-09 00:19:31 -070028785 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028786 for (uint32_t channels = 4; channels < 32; channels += 6) {
28787 DWConvMicrokernelTester()
28788 .cr(2)
28789 .kr(25)
28790 .channels(channels)
28791 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028792 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028793 }
28794 }
28795
Marat Dukhande06f492020-04-09 00:19:31 -070028796 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028797 for (uint32_t channels = 4; channels < 32; channels += 6) {
28798 DWConvMicrokernelTester()
28799 .cr(2)
28800 .kr(25)
28801 .channels(channels)
28802 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028803 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028804 }
28805 }
28806
Marat Dukhande06f492020-04-09 00:19:31 -070028807 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028808 for (uint32_t channels = 1; channels < 2; channels++) {
28809 DWConvMicrokernelTester()
28810 .cr(2)
28811 .kr(25)
28812 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028813 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028814 }
28815 }
28816
Marat Dukhande06f492020-04-09 00:19:31 -070028817 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028818 for (uint32_t channels = 3; channels < 4; channels++) {
28819 DWConvMicrokernelTester()
28820 .cr(2)
28821 .kr(25)
28822 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028823 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028824 }
28825 }
28826
Marat Dukhande06f492020-04-09 00:19:31 -070028827 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028828 for (uint32_t channels = 3; channels < 4; channels++) {
28829 DWConvMicrokernelTester()
28830 .cr(2)
28831 .kr(25)
28832 .channels(channels)
28833 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028834 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028835 }
28836 }
28837
Marat Dukhande06f492020-04-09 00:19:31 -070028838 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028839 for (uint32_t channels = 3; channels < 4; channels++) {
28840 DWConvMicrokernelTester()
28841 .cr(2)
28842 .kr(25)
28843 .channels(channels)
28844 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028845 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028846 }
28847 }
28848
Marat Dukhande06f492020-04-09 00:19:31 -070028849 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028850 for (size_t channels = 1; channels <= 10; channels += 1) {
28851 DWConvMicrokernelTester()
28852 .cr(2)
28853 .kr(25)
28854 .channels(channels)
28855 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028856 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028857 }
28858 }
28859
Marat Dukhande06f492020-04-09 00:19:31 -070028860 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028861 for (size_t channels = 1; channels <= 10; channels += 1) {
28862 for (size_t step = 2; step <= 25; step++) {
28863 DWConvMicrokernelTester()
28864 .cr(2)
28865 .kr(25)
28866 .channels(channels)
28867 .width(3)
28868 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028869 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028870 }
28871 }
28872 }
28873
Marat Dukhande06f492020-04-09 00:19:31 -070028874 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028875 for (size_t channels = 1; channels <= 10; channels += 1) {
28876 DWConvMicrokernelTester()
28877 .cr(2)
28878 .kr(25)
28879 .channels(2)
28880 .width(5)
28881 .output_stride(13)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028882 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028883 }
28884 }
28885
Marat Dukhande06f492020-04-09 00:19:31 -070028886 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028887 for (size_t channels = 1; channels <= 10; channels += 1) {
28888 DWConvMicrokernelTester()
28889 .cr(2)
28890 .kr(25)
28891 .channels(channels)
28892 .width(3)
28893 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028894 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028895 }
28896 }
28897
Marat Dukhande06f492020-04-09 00:19:31 -070028898 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028899 for (size_t channels = 1; channels <= 10; channels += 1) {
28900 DWConvMicrokernelTester()
28901 .cr(2)
28902 .kr(25)
28903 .channels(channels)
28904 .width(3)
28905 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028906 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028907 }
28908 }
Frank Barchardd5360722020-05-17 16:10:36 -070028909
28910 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, input_offset) {
28911 for (uint32_t channels = 4; channels < 32; channels += 6) {
28912 DWConvMicrokernelTester()
28913 .cr(2)
28914 .kr(25)
28915 .channels(channels)
28916 .input_offset(80)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028917 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028918 }
28919 }
28920
28921 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, zero) {
28922 for (uint32_t mz = 0; mz < 25; mz++) {
28923 for (uint32_t channels = 4; channels < 32; channels += 6) {
28924 DWConvMicrokernelTester()
28925 .cr(2)
28926 .kr(25)
28927 .channels(channels)
28928 .input_offset(80)
28929 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028930 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070028931 }
28932 }
28933 }
Marat Dukhan4c617792021-12-21 15:47:58 -080028934#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070028935
28936
Marat Dukhan4c617792021-12-21 15:47:58 -080028937#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070028938 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028939 DWConvMicrokernelTester()
28940 .cr(2)
28941 .kr(25)
28942 .channels(2)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028943 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028944 }
28945
Marat Dukhande06f492020-04-09 00:19:31 -070028946 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028947 for (uint32_t channels = 4; channels < 32; channels += 6) {
28948 DWConvMicrokernelTester()
28949 .cr(2)
28950 .kr(25)
28951 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028952 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028953 }
28954 }
28955
Marat Dukhande06f492020-04-09 00:19:31 -070028956 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028957 for (uint32_t channels = 4; channels < 32; channels += 6) {
28958 DWConvMicrokernelTester()
28959 .cr(2)
28960 .kr(25)
28961 .channels(channels)
28962 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028963 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028964 }
28965 }
28966
Marat Dukhande06f492020-04-09 00:19:31 -070028967 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028968 for (uint32_t channels = 4; channels < 32; channels += 6) {
28969 DWConvMicrokernelTester()
28970 .cr(2)
28971 .kr(25)
28972 .channels(channels)
28973 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028974 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028975 }
28976 }
28977
Marat Dukhande06f492020-04-09 00:19:31 -070028978 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028979 for (uint32_t channels = 1; channels < 2; channels++) {
28980 DWConvMicrokernelTester()
28981 .cr(2)
28982 .kr(25)
28983 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028984 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028985 }
28986 }
28987
Marat Dukhande06f492020-04-09 00:19:31 -070028988 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028989 for (uint32_t channels = 3; channels < 4; channels++) {
28990 DWConvMicrokernelTester()
28991 .cr(2)
28992 .kr(25)
28993 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070028994 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070028995 }
28996 }
28997
Marat Dukhande06f492020-04-09 00:19:31 -070028998 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070028999 for (uint32_t channels = 3; channels < 4; channels++) {
29000 DWConvMicrokernelTester()
29001 .cr(2)
29002 .kr(25)
29003 .channels(channels)
29004 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029005 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029006 }
29007 }
29008
Marat Dukhande06f492020-04-09 00:19:31 -070029009 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029010 for (uint32_t channels = 3; channels < 4; channels++) {
29011 DWConvMicrokernelTester()
29012 .cr(2)
29013 .kr(25)
29014 .channels(channels)
29015 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029016 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029017 }
29018 }
29019
Marat Dukhande06f492020-04-09 00:19:31 -070029020 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029021 for (size_t channels = 1; channels <= 10; channels += 1) {
29022 DWConvMicrokernelTester()
29023 .cr(2)
29024 .kr(25)
29025 .channels(channels)
29026 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029027 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029028 }
29029 }
29030
Marat Dukhande06f492020-04-09 00:19:31 -070029031 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029032 for (size_t channels = 1; channels <= 10; channels += 1) {
29033 for (size_t step = 2; step <= 25; step++) {
29034 DWConvMicrokernelTester()
29035 .cr(2)
29036 .kr(25)
29037 .channels(channels)
29038 .width(3)
29039 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029040 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029041 }
29042 }
29043 }
29044
Marat Dukhande06f492020-04-09 00:19:31 -070029045 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029046 for (size_t channels = 1; channels <= 10; channels += 1) {
29047 DWConvMicrokernelTester()
29048 .cr(2)
29049 .kr(25)
29050 .channels(2)
29051 .width(5)
29052 .output_stride(13)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029053 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029054 }
29055 }
29056
Marat Dukhande06f492020-04-09 00:19:31 -070029057 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029058 for (size_t channels = 1; channels <= 10; channels += 1) {
29059 DWConvMicrokernelTester()
29060 .cr(2)
29061 .kr(25)
29062 .channels(channels)
29063 .width(3)
29064 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029065 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029066 }
29067 }
29068
Marat Dukhande06f492020-04-09 00:19:31 -070029069 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029070 for (size_t channels = 1; channels <= 10; channels += 1) {
29071 DWConvMicrokernelTester()
29072 .cr(2)
29073 .kr(25)
29074 .channels(channels)
29075 .width(3)
29076 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029077 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029078 }
29079 }
Frank Barchardd5360722020-05-17 16:10:36 -070029080
29081 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, input_offset) {
29082 for (uint32_t channels = 4; channels < 32; channels += 6) {
29083 DWConvMicrokernelTester()
29084 .cr(2)
29085 .kr(25)
29086 .channels(channels)
29087 .input_offset(80)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029088 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070029089 }
29090 }
29091
29092 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, zero) {
29093 for (uint32_t mz = 0; mz < 25; mz++) {
29094 for (uint32_t channels = 4; channels < 32; channels += 6) {
29095 DWConvMicrokernelTester()
29096 .cr(2)
29097 .kr(25)
29098 .channels(channels)
29099 .input_offset(80)
29100 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029101 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070029102 }
29103 }
29104 }
Marat Dukhan4c617792021-12-21 15:47:58 -080029105#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070029106
29107
Artsiom Ablavatski47a74db2021-11-02 13:40:24 -070029108TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, c_eq_1) {
29109 DWConvMicrokernelTester()
29110 .cr(1)
29111 .kr(3)
29112 .channels(1)
29113 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
29114}
29115
29116TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, c_gt_1) {
29117 for (uint32_t channels = 2; channels < 10; channels++) {
29118 DWConvMicrokernelTester()
29119 .cr(1)
29120 .kr(3)
29121 .channels(channels)
29122 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
29123 }
29124}
29125
29126TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, c_gt_1_with_qmin) {
29127 for (uint32_t channels = 2; channels < 10; channels++) {
29128 DWConvMicrokernelTester()
29129 .cr(1)
29130 .kr(3)
29131 .channels(channels)
29132 .qmin(128)
29133 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
29134 }
29135}
29136
29137TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, c_gt_1_with_qmax) {
29138 for (uint32_t channels = 2; channels < 10; channels++) {
29139 DWConvMicrokernelTester()
29140 .cr(1)
29141 .kr(3)
29142 .channels(channels)
29143 .qmax(128)
29144 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
29145 }
29146}
29147
29148TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, multipixel) {
29149 for (size_t channels = 1; channels <= 5; channels += 1) {
29150 DWConvMicrokernelTester()
29151 .cr(1)
29152 .kr(3)
29153 .channels(channels)
29154 .width(3)
29155 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
29156 }
29157}
29158
29159TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, multipixel_with_step) {
29160 for (size_t channels = 1; channels <= 5; channels += 1) {
29161 for (size_t step = 2; step <= 3; step++) {
29162 DWConvMicrokernelTester()
29163 .cr(1)
29164 .kr(3)
29165 .channels(channels)
29166 .width(3)
29167 .step(step)
29168 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
29169 }
29170 }
29171}
29172
29173TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, multipixel_with_output_stride) {
29174 for (size_t channels = 1; channels <= 5; channels += 1) {
29175 DWConvMicrokernelTester()
29176 .cr(1)
29177 .kr(3)
29178 .channels(1)
29179 .width(5)
29180 .output_stride(7)
29181 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
29182 }
29183}
29184
29185TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, multipixel_with_qmin) {
29186 for (size_t channels = 1; channels <= 5; channels += 1) {
29187 DWConvMicrokernelTester()
29188 .cr(1)
29189 .kr(3)
29190 .channels(channels)
29191 .width(3)
29192 .qmin(128)
29193 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
29194 }
29195}
29196
29197TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, multipixel_with_qmax) {
29198 for (size_t channels = 1; channels <= 5; channels += 1) {
29199 DWConvMicrokernelTester()
29200 .cr(1)
29201 .kr(3)
29202 .channels(channels)
29203 .width(3)
29204 .qmax(128)
29205 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
29206 }
29207}
29208
29209TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, input_offset) {
29210 for (uint32_t channels = 2; channels < 16; channels += 3) {
29211 DWConvMicrokernelTester()
29212 .cr(1)
29213 .kr(3)
29214 .channels(channels)
29215 .input_offset(48)
29216 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
29217 }
29218}
29219
29220TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR, zero) {
29221 for (uint32_t mz = 0; mz < 3; mz++) {
29222 for (uint32_t channels = 2; channels < 16; channels += 3) {
29223 DWConvMicrokernelTester()
29224 .cr(1)
29225 .kr(3)
29226 .channels(channels)
29227 .input_offset(48)
29228 .zero_index(mz)
29229 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar, xnn_init_f32_minmax_scalar_params);
29230 }
29231 }
29232}
29233
29234TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, c_eq_1) {
29235 DWConvMicrokernelTester()
29236 .cr(1)
29237 .kr(3)
29238 .channels(1)
29239 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29240}
29241
29242TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, c_gt_1) {
29243 for (uint32_t channels = 2; channels < 10; channels++) {
29244 DWConvMicrokernelTester()
29245 .cr(1)
29246 .kr(3)
29247 .channels(channels)
29248 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29249 }
29250}
29251
29252TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, c_gt_1_with_qmin) {
29253 for (uint32_t channels = 2; channels < 10; channels++) {
29254 DWConvMicrokernelTester()
29255 .cr(1)
29256 .kr(3)
29257 .channels(channels)
29258 .qmin(128)
29259 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29260 }
29261}
29262
29263TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, c_gt_1_with_qmax) {
29264 for (uint32_t channels = 2; channels < 10; channels++) {
29265 DWConvMicrokernelTester()
29266 .cr(1)
29267 .kr(3)
29268 .channels(channels)
29269 .qmax(128)
29270 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29271 }
29272}
29273
29274TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, multipixel) {
29275 for (size_t channels = 1; channels <= 5; channels += 1) {
29276 DWConvMicrokernelTester()
29277 .cr(1)
29278 .kr(3)
29279 .channels(channels)
29280 .width(3)
29281 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29282 }
29283}
29284
29285TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, multipixel_with_step) {
29286 for (size_t channels = 1; channels <= 5; channels += 1) {
29287 for (size_t step = 2; step <= 3; step++) {
29288 DWConvMicrokernelTester()
29289 .cr(1)
29290 .kr(3)
29291 .channels(channels)
29292 .width(3)
29293 .step(step)
29294 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29295 }
29296 }
29297}
29298
29299TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, multipixel_with_output_stride) {
29300 for (size_t channels = 1; channels <= 5; channels += 1) {
29301 DWConvMicrokernelTester()
29302 .cr(1)
29303 .kr(3)
29304 .channels(1)
29305 .width(5)
29306 .output_stride(7)
29307 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29308 }
29309}
29310
29311TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, multipixel_with_qmin) {
29312 for (size_t channels = 1; channels <= 5; channels += 1) {
29313 DWConvMicrokernelTester()
29314 .cr(1)
29315 .kr(3)
29316 .channels(channels)
29317 .width(3)
29318 .qmin(128)
29319 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29320 }
29321}
29322
29323TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, multipixel_with_qmax) {
29324 for (size_t channels = 1; channels <= 5; channels += 1) {
29325 DWConvMicrokernelTester()
29326 .cr(1)
29327 .kr(3)
29328 .channels(channels)
29329 .width(3)
29330 .qmax(128)
29331 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29332 }
29333}
29334
29335TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, input_offset) {
29336 for (uint32_t channels = 2; channels < 16; channels += 3) {
29337 DWConvMicrokernelTester()
29338 .cr(1)
29339 .kr(3)
29340 .channels(channels)
29341 .input_offset(48)
29342 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29343 }
29344}
29345
29346TEST(F32_DWCONV_MINMAX_UP1X3__SCALAR_ACC2, zero) {
29347 for (uint32_t mz = 0; mz < 3; mz++) {
29348 for (uint32_t channels = 2; channels < 16; channels += 3) {
29349 DWConvMicrokernelTester()
29350 .cr(1)
29351 .kr(3)
29352 .channels(channels)
29353 .input_offset(48)
29354 .zero_index(mz)
29355 .Test(xnn_f32_dwconv_minmax_ukernel_up1x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29356 }
29357 }
29358}
29359
29360TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_eq_2) {
29361 DWConvMicrokernelTester()
29362 .cr(2)
29363 .kr(3)
29364 .channels(2)
29365 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29366}
29367
29368TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_div_2) {
29369 for (uint32_t channels = 4; channels < 32; channels += 6) {
29370 DWConvMicrokernelTester()
29371 .cr(2)
29372 .kr(3)
29373 .channels(channels)
29374 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29375 }
29376}
29377
29378TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_div_2_with_qmin) {
29379 for (uint32_t channels = 4; channels < 32; channels += 6) {
29380 DWConvMicrokernelTester()
29381 .cr(2)
29382 .kr(3)
29383 .channels(channels)
29384 .qmin(128)
29385 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29386 }
29387}
29388
29389TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_div_2_with_qmax) {
29390 for (uint32_t channels = 4; channels < 32; channels += 6) {
29391 DWConvMicrokernelTester()
29392 .cr(2)
29393 .kr(3)
29394 .channels(channels)
29395 .qmax(128)
29396 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29397 }
29398}
29399
29400TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_lt_2) {
29401 for (uint32_t channels = 1; channels < 2; channels++) {
29402 DWConvMicrokernelTester()
29403 .cr(2)
29404 .kr(3)
29405 .channels(channels)
29406 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29407 }
29408}
29409
29410TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_gt_2) {
29411 for (uint32_t channels = 3; channels < 4; channels++) {
29412 DWConvMicrokernelTester()
29413 .cr(2)
29414 .kr(3)
29415 .channels(channels)
29416 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29417 }
29418}
29419
29420TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_gt_2_with_qmin) {
29421 for (uint32_t channels = 3; channels < 4; channels++) {
29422 DWConvMicrokernelTester()
29423 .cr(2)
29424 .kr(3)
29425 .channels(channels)
29426 .qmin(128)
29427 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29428 }
29429}
29430
29431TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, c_gt_2_with_qmax) {
29432 for (uint32_t channels = 3; channels < 4; channels++) {
29433 DWConvMicrokernelTester()
29434 .cr(2)
29435 .kr(3)
29436 .channels(channels)
29437 .qmax(128)
29438 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29439 }
29440}
29441
29442TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, multipixel) {
29443 for (size_t channels = 1; channels <= 10; channels += 1) {
29444 DWConvMicrokernelTester()
29445 .cr(2)
29446 .kr(3)
29447 .channels(channels)
29448 .width(3)
29449 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29450 }
29451}
29452
29453TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, multipixel_with_step) {
29454 for (size_t channels = 1; channels <= 10; channels += 1) {
29455 for (size_t step = 2; step <= 3; step++) {
29456 DWConvMicrokernelTester()
29457 .cr(2)
29458 .kr(3)
29459 .channels(channels)
29460 .width(3)
29461 .step(step)
29462 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29463 }
29464 }
29465}
29466
29467TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, multipixel_with_output_stride) {
29468 for (size_t channels = 1; channels <= 10; channels += 1) {
29469 DWConvMicrokernelTester()
29470 .cr(2)
29471 .kr(3)
29472 .channels(2)
29473 .width(5)
29474 .output_stride(13)
29475 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29476 }
29477}
29478
29479TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, multipixel_with_qmin) {
29480 for (size_t channels = 1; channels <= 10; channels += 1) {
29481 DWConvMicrokernelTester()
29482 .cr(2)
29483 .kr(3)
29484 .channels(channels)
29485 .width(3)
29486 .qmin(128)
29487 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29488 }
29489}
29490
29491TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, multipixel_with_qmax) {
29492 for (size_t channels = 1; channels <= 10; channels += 1) {
29493 DWConvMicrokernelTester()
29494 .cr(2)
29495 .kr(3)
29496 .channels(channels)
29497 .width(3)
29498 .qmax(128)
29499 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29500 }
29501}
29502
29503TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, input_offset) {
29504 for (uint32_t channels = 4; channels < 32; channels += 6) {
29505 DWConvMicrokernelTester()
29506 .cr(2)
29507 .kr(3)
29508 .channels(channels)
29509 .input_offset(80)
29510 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29511 }
29512}
29513
29514TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR, zero) {
29515 for (uint32_t mz = 0; mz < 3; mz++) {
29516 for (uint32_t channels = 4; channels < 32; channels += 6) {
29517 DWConvMicrokernelTester()
29518 .cr(2)
29519 .kr(3)
29520 .channels(channels)
29521 .input_offset(80)
29522 .zero_index(mz)
29523 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar, xnn_init_f32_minmax_scalar_params);
29524 }
29525 }
29526}
29527
29528TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_eq_2) {
29529 DWConvMicrokernelTester()
29530 .cr(2)
29531 .kr(3)
29532 .channels(2)
29533 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29534}
29535
29536TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_div_2) {
29537 for (uint32_t channels = 4; channels < 32; channels += 6) {
29538 DWConvMicrokernelTester()
29539 .cr(2)
29540 .kr(3)
29541 .channels(channels)
29542 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29543 }
29544}
29545
29546TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_div_2_with_qmin) {
29547 for (uint32_t channels = 4; channels < 32; channels += 6) {
29548 DWConvMicrokernelTester()
29549 .cr(2)
29550 .kr(3)
29551 .channels(channels)
29552 .qmin(128)
29553 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29554 }
29555}
29556
29557TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_div_2_with_qmax) {
29558 for (uint32_t channels = 4; channels < 32; channels += 6) {
29559 DWConvMicrokernelTester()
29560 .cr(2)
29561 .kr(3)
29562 .channels(channels)
29563 .qmax(128)
29564 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29565 }
29566}
29567
29568TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_lt_2) {
29569 for (uint32_t channels = 1; channels < 2; channels++) {
29570 DWConvMicrokernelTester()
29571 .cr(2)
29572 .kr(3)
29573 .channels(channels)
29574 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29575 }
29576}
29577
29578TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_gt_2) {
29579 for (uint32_t channels = 3; channels < 4; channels++) {
29580 DWConvMicrokernelTester()
29581 .cr(2)
29582 .kr(3)
29583 .channels(channels)
29584 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29585 }
29586}
29587
29588TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_gt_2_with_qmin) {
29589 for (uint32_t channels = 3; channels < 4; channels++) {
29590 DWConvMicrokernelTester()
29591 .cr(2)
29592 .kr(3)
29593 .channels(channels)
29594 .qmin(128)
29595 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29596 }
29597}
29598
29599TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, c_gt_2_with_qmax) {
29600 for (uint32_t channels = 3; channels < 4; channels++) {
29601 DWConvMicrokernelTester()
29602 .cr(2)
29603 .kr(3)
29604 .channels(channels)
29605 .qmax(128)
29606 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29607 }
29608}
29609
29610TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, multipixel) {
29611 for (size_t channels = 1; channels <= 10; channels += 1) {
29612 DWConvMicrokernelTester()
29613 .cr(2)
29614 .kr(3)
29615 .channels(channels)
29616 .width(3)
29617 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29618 }
29619}
29620
29621TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, multipixel_with_step) {
29622 for (size_t channels = 1; channels <= 10; channels += 1) {
29623 for (size_t step = 2; step <= 3; step++) {
29624 DWConvMicrokernelTester()
29625 .cr(2)
29626 .kr(3)
29627 .channels(channels)
29628 .width(3)
29629 .step(step)
29630 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29631 }
29632 }
29633}
29634
29635TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, multipixel_with_output_stride) {
29636 for (size_t channels = 1; channels <= 10; channels += 1) {
29637 DWConvMicrokernelTester()
29638 .cr(2)
29639 .kr(3)
29640 .channels(2)
29641 .width(5)
29642 .output_stride(13)
29643 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29644 }
29645}
29646
29647TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, multipixel_with_qmin) {
29648 for (size_t channels = 1; channels <= 10; channels += 1) {
29649 DWConvMicrokernelTester()
29650 .cr(2)
29651 .kr(3)
29652 .channels(channels)
29653 .width(3)
29654 .qmin(128)
29655 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29656 }
29657}
29658
29659TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, multipixel_with_qmax) {
29660 for (size_t channels = 1; channels <= 10; channels += 1) {
29661 DWConvMicrokernelTester()
29662 .cr(2)
29663 .kr(3)
29664 .channels(channels)
29665 .width(3)
29666 .qmax(128)
29667 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29668 }
29669}
29670
29671TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, input_offset) {
29672 for (uint32_t channels = 4; channels < 32; channels += 6) {
29673 DWConvMicrokernelTester()
29674 .cr(2)
29675 .kr(3)
29676 .channels(channels)
29677 .input_offset(80)
29678 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29679 }
29680}
29681
29682TEST(F32_DWCONV_MINMAX_UP2X3__SCALAR_ACC2, zero) {
29683 for (uint32_t mz = 0; mz < 3; mz++) {
29684 for (uint32_t channels = 4; channels < 32; channels += 6) {
29685 DWConvMicrokernelTester()
29686 .cr(2)
29687 .kr(3)
29688 .channels(channels)
29689 .input_offset(80)
29690 .zero_index(mz)
29691 .Test(xnn_f32_dwconv_minmax_ukernel_up2x3__scalar_acc2, xnn_init_f32_minmax_scalar_params);
29692 }
29693 }
29694}
29695
Marat Dukhande06f492020-04-09 00:19:31 -070029696TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029697 DWConvMicrokernelTester()
29698 .cr(1)
29699 .kr(4)
29700 .channels(1)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029701 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029702}
29703
Marat Dukhande06f492020-04-09 00:19:31 -070029704TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029705 for (uint32_t channels = 2; channels < 10; channels++) {
29706 DWConvMicrokernelTester()
29707 .cr(1)
29708 .kr(4)
29709 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029710 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029711 }
29712}
29713
Marat Dukhande06f492020-04-09 00:19:31 -070029714TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029715 for (uint32_t channels = 2; channels < 10; channels++) {
29716 DWConvMicrokernelTester()
29717 .cr(1)
29718 .kr(4)
29719 .channels(channels)
29720 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029721 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029722 }
29723}
29724
Marat Dukhande06f492020-04-09 00:19:31 -070029725TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029726 for (uint32_t channels = 2; channels < 10; channels++) {
29727 DWConvMicrokernelTester()
29728 .cr(1)
29729 .kr(4)
29730 .channels(channels)
29731 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029732 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029733 }
29734}
29735
Marat Dukhande06f492020-04-09 00:19:31 -070029736TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029737 for (size_t channels = 1; channels <= 5; channels += 1) {
29738 DWConvMicrokernelTester()
29739 .cr(1)
29740 .kr(4)
29741 .channels(channels)
29742 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029743 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029744 }
29745}
29746
Marat Dukhande06f492020-04-09 00:19:31 -070029747TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029748 for (size_t channels = 1; channels <= 5; channels += 1) {
29749 for (size_t step = 2; step <= 4; step++) {
29750 DWConvMicrokernelTester()
29751 .cr(1)
29752 .kr(4)
29753 .channels(channels)
29754 .width(3)
29755 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029756 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029757 }
29758 }
29759}
29760
Marat Dukhande06f492020-04-09 00:19:31 -070029761TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029762 for (size_t channels = 1; channels <= 5; channels += 1) {
29763 DWConvMicrokernelTester()
29764 .cr(1)
29765 .kr(4)
29766 .channels(1)
29767 .width(5)
29768 .output_stride(7)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029769 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029770 }
29771}
29772
Marat Dukhande06f492020-04-09 00:19:31 -070029773TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029774 for (size_t channels = 1; channels <= 5; channels += 1) {
29775 DWConvMicrokernelTester()
29776 .cr(1)
29777 .kr(4)
29778 .channels(channels)
29779 .width(3)
29780 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029781 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029782 }
29783}
29784
Marat Dukhande06f492020-04-09 00:19:31 -070029785TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029786 for (size_t channels = 1; channels <= 5; channels += 1) {
29787 DWConvMicrokernelTester()
29788 .cr(1)
29789 .kr(4)
29790 .channels(channels)
29791 .width(3)
29792 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029793 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029794 }
29795}
29796
Frank Barchardd5360722020-05-17 16:10:36 -070029797TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, input_offset) {
29798 for (uint32_t channels = 2; channels < 16; channels += 3) {
29799 DWConvMicrokernelTester()
29800 .cr(1)
29801 .kr(4)
29802 .channels(channels)
29803 .input_offset(48)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029804 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070029805 }
29806}
29807
29808TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, zero) {
29809 for (uint32_t mz = 0; mz < 4; mz++) {
29810 for (uint32_t channels = 2; channels < 16; channels += 3) {
29811 DWConvMicrokernelTester()
29812 .cr(1)
29813 .kr(4)
29814 .channels(channels)
29815 .input_offset(48)
29816 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029817 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070029818 }
29819 }
29820}
Marat Dukhan1c587112020-04-08 20:04:28 -070029821
Marat Dukhande06f492020-04-09 00:19:31 -070029822TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029823 DWConvMicrokernelTester()
29824 .cr(1)
29825 .kr(4)
29826 .channels(1)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029827 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029828}
29829
Marat Dukhande06f492020-04-09 00:19:31 -070029830TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029831 for (uint32_t channels = 2; channels < 10; channels++) {
29832 DWConvMicrokernelTester()
29833 .cr(1)
29834 .kr(4)
29835 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029836 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029837 }
29838}
29839
Marat Dukhande06f492020-04-09 00:19:31 -070029840TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029841 for (uint32_t channels = 2; channels < 10; channels++) {
29842 DWConvMicrokernelTester()
29843 .cr(1)
29844 .kr(4)
29845 .channels(channels)
29846 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029847 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029848 }
29849}
29850
Marat Dukhande06f492020-04-09 00:19:31 -070029851TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029852 for (uint32_t channels = 2; channels < 10; channels++) {
29853 DWConvMicrokernelTester()
29854 .cr(1)
29855 .kr(4)
29856 .channels(channels)
29857 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029858 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029859 }
29860}
29861
Marat Dukhande06f492020-04-09 00:19:31 -070029862TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029863 for (size_t channels = 1; channels <= 5; channels += 1) {
29864 DWConvMicrokernelTester()
29865 .cr(1)
29866 .kr(4)
29867 .channels(channels)
29868 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029869 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029870 }
29871}
29872
Marat Dukhande06f492020-04-09 00:19:31 -070029873TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029874 for (size_t channels = 1; channels <= 5; channels += 1) {
29875 for (size_t step = 2; step <= 4; step++) {
29876 DWConvMicrokernelTester()
29877 .cr(1)
29878 .kr(4)
29879 .channels(channels)
29880 .width(3)
29881 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029882 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029883 }
29884 }
29885}
29886
Marat Dukhande06f492020-04-09 00:19:31 -070029887TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029888 for (size_t channels = 1; channels <= 5; channels += 1) {
29889 DWConvMicrokernelTester()
29890 .cr(1)
29891 .kr(4)
29892 .channels(1)
29893 .width(5)
29894 .output_stride(7)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029895 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029896 }
29897}
29898
Marat Dukhande06f492020-04-09 00:19:31 -070029899TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029900 for (size_t channels = 1; channels <= 5; channels += 1) {
29901 DWConvMicrokernelTester()
29902 .cr(1)
29903 .kr(4)
29904 .channels(channels)
29905 .width(3)
29906 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029907 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029908 }
29909}
29910
Marat Dukhande06f492020-04-09 00:19:31 -070029911TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029912 for (size_t channels = 1; channels <= 5; channels += 1) {
29913 DWConvMicrokernelTester()
29914 .cr(1)
29915 .kr(4)
29916 .channels(channels)
29917 .width(3)
29918 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029919 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029920 }
29921}
29922
Frank Barchardd5360722020-05-17 16:10:36 -070029923TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, input_offset) {
29924 for (uint32_t channels = 2; channels < 16; channels += 3) {
29925 DWConvMicrokernelTester()
29926 .cr(1)
29927 .kr(4)
29928 .channels(channels)
29929 .input_offset(48)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029930 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070029931 }
29932}
29933
29934TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, zero) {
29935 for (uint32_t mz = 0; mz < 4; mz++) {
29936 for (uint32_t channels = 2; channels < 16; channels += 3) {
29937 DWConvMicrokernelTester()
29938 .cr(1)
29939 .kr(4)
29940 .channels(channels)
29941 .input_offset(48)
29942 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029943 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070029944 }
29945 }
29946}
Marat Dukhan1c587112020-04-08 20:04:28 -070029947
Marat Dukhande06f492020-04-09 00:19:31 -070029948TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029949 DWConvMicrokernelTester()
29950 .cr(2)
29951 .kr(4)
29952 .channels(2)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029953 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029954}
29955
Marat Dukhande06f492020-04-09 00:19:31 -070029956TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029957 for (uint32_t channels = 4; channels < 32; channels += 6) {
29958 DWConvMicrokernelTester()
29959 .cr(2)
29960 .kr(4)
29961 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029962 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029963 }
29964}
29965
Marat Dukhande06f492020-04-09 00:19:31 -070029966TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029967 for (uint32_t channels = 4; channels < 32; channels += 6) {
29968 DWConvMicrokernelTester()
29969 .cr(2)
29970 .kr(4)
29971 .channels(channels)
29972 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029973 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029974 }
29975}
29976
Marat Dukhande06f492020-04-09 00:19:31 -070029977TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029978 for (uint32_t channels = 4; channels < 32; channels += 6) {
29979 DWConvMicrokernelTester()
29980 .cr(2)
29981 .kr(4)
29982 .channels(channels)
29983 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029984 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029985 }
29986}
29987
Marat Dukhande06f492020-04-09 00:19:31 -070029988TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029989 for (uint32_t channels = 1; channels < 2; channels++) {
29990 DWConvMicrokernelTester()
29991 .cr(2)
29992 .kr(4)
29993 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070029994 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070029995 }
29996}
29997
Marat Dukhande06f492020-04-09 00:19:31 -070029998TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070029999 for (uint32_t channels = 3; channels < 4; channels++) {
30000 DWConvMicrokernelTester()
30001 .cr(2)
30002 .kr(4)
30003 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030004 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030005 }
30006}
30007
Marat Dukhande06f492020-04-09 00:19:31 -070030008TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030009 for (uint32_t channels = 3; channels < 4; channels++) {
30010 DWConvMicrokernelTester()
30011 .cr(2)
30012 .kr(4)
30013 .channels(channels)
30014 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030015 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030016 }
30017}
30018
Marat Dukhande06f492020-04-09 00:19:31 -070030019TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030020 for (uint32_t channels = 3; channels < 4; channels++) {
30021 DWConvMicrokernelTester()
30022 .cr(2)
30023 .kr(4)
30024 .channels(channels)
30025 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030026 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030027 }
30028}
30029
Marat Dukhande06f492020-04-09 00:19:31 -070030030TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030031 for (size_t channels = 1; channels <= 10; channels += 1) {
30032 DWConvMicrokernelTester()
30033 .cr(2)
30034 .kr(4)
30035 .channels(channels)
30036 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030037 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030038 }
30039}
30040
Marat Dukhande06f492020-04-09 00:19:31 -070030041TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030042 for (size_t channels = 1; channels <= 10; channels += 1) {
30043 for (size_t step = 2; step <= 4; step++) {
30044 DWConvMicrokernelTester()
30045 .cr(2)
30046 .kr(4)
30047 .channels(channels)
30048 .width(3)
30049 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030050 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030051 }
30052 }
30053}
30054
Marat Dukhande06f492020-04-09 00:19:31 -070030055TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030056 for (size_t channels = 1; channels <= 10; channels += 1) {
30057 DWConvMicrokernelTester()
30058 .cr(2)
30059 .kr(4)
30060 .channels(2)
30061 .width(5)
30062 .output_stride(13)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030063 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030064 }
30065}
30066
Marat Dukhande06f492020-04-09 00:19:31 -070030067TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030068 for (size_t channels = 1; channels <= 10; channels += 1) {
30069 DWConvMicrokernelTester()
30070 .cr(2)
30071 .kr(4)
30072 .channels(channels)
30073 .width(3)
30074 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030075 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030076 }
30077}
30078
Marat Dukhande06f492020-04-09 00:19:31 -070030079TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030080 for (size_t channels = 1; channels <= 10; channels += 1) {
30081 DWConvMicrokernelTester()
30082 .cr(2)
30083 .kr(4)
30084 .channels(channels)
30085 .width(3)
30086 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030087 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030088 }
30089}
30090
Frank Barchardd5360722020-05-17 16:10:36 -070030091TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, input_offset) {
30092 for (uint32_t channels = 4; channels < 32; channels += 6) {
30093 DWConvMicrokernelTester()
30094 .cr(2)
30095 .kr(4)
30096 .channels(channels)
30097 .input_offset(80)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030098 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030099 }
30100}
30101
30102TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, zero) {
30103 for (uint32_t mz = 0; mz < 4; mz++) {
30104 for (uint32_t channels = 4; channels < 32; channels += 6) {
30105 DWConvMicrokernelTester()
30106 .cr(2)
30107 .kr(4)
30108 .channels(channels)
30109 .input_offset(80)
30110 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030111 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030112 }
30113 }
30114}
Marat Dukhan1c587112020-04-08 20:04:28 -070030115
Marat Dukhande06f492020-04-09 00:19:31 -070030116TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030117 DWConvMicrokernelTester()
30118 .cr(2)
30119 .kr(4)
30120 .channels(2)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030121 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030122}
30123
Marat Dukhande06f492020-04-09 00:19:31 -070030124TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030125 for (uint32_t channels = 4; channels < 32; channels += 6) {
30126 DWConvMicrokernelTester()
30127 .cr(2)
30128 .kr(4)
30129 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030130 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030131 }
30132}
30133
Marat Dukhande06f492020-04-09 00:19:31 -070030134TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030135 for (uint32_t channels = 4; channels < 32; channels += 6) {
30136 DWConvMicrokernelTester()
30137 .cr(2)
30138 .kr(4)
30139 .channels(channels)
30140 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030141 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030142 }
30143}
30144
Marat Dukhande06f492020-04-09 00:19:31 -070030145TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030146 for (uint32_t channels = 4; channels < 32; channels += 6) {
30147 DWConvMicrokernelTester()
30148 .cr(2)
30149 .kr(4)
30150 .channels(channels)
30151 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030152 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030153 }
30154}
30155
Marat Dukhande06f492020-04-09 00:19:31 -070030156TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030157 for (uint32_t channels = 1; channels < 2; channels++) {
30158 DWConvMicrokernelTester()
30159 .cr(2)
30160 .kr(4)
30161 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030162 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030163 }
30164}
30165
Marat Dukhande06f492020-04-09 00:19:31 -070030166TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030167 for (uint32_t channels = 3; channels < 4; channels++) {
30168 DWConvMicrokernelTester()
30169 .cr(2)
30170 .kr(4)
30171 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030172 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030173 }
30174}
30175
Marat Dukhande06f492020-04-09 00:19:31 -070030176TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030177 for (uint32_t channels = 3; channels < 4; channels++) {
30178 DWConvMicrokernelTester()
30179 .cr(2)
30180 .kr(4)
30181 .channels(channels)
30182 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030183 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030184 }
30185}
30186
Marat Dukhande06f492020-04-09 00:19:31 -070030187TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030188 for (uint32_t channels = 3; channels < 4; channels++) {
30189 DWConvMicrokernelTester()
30190 .cr(2)
30191 .kr(4)
30192 .channels(channels)
30193 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030194 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030195 }
30196}
30197
Marat Dukhande06f492020-04-09 00:19:31 -070030198TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030199 for (size_t channels = 1; channels <= 10; channels += 1) {
30200 DWConvMicrokernelTester()
30201 .cr(2)
30202 .kr(4)
30203 .channels(channels)
30204 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030205 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030206 }
30207}
30208
Marat Dukhande06f492020-04-09 00:19:31 -070030209TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030210 for (size_t channels = 1; channels <= 10; channels += 1) {
30211 for (size_t step = 2; step <= 4; step++) {
30212 DWConvMicrokernelTester()
30213 .cr(2)
30214 .kr(4)
30215 .channels(channels)
30216 .width(3)
30217 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030218 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030219 }
30220 }
30221}
30222
Marat Dukhande06f492020-04-09 00:19:31 -070030223TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030224 for (size_t channels = 1; channels <= 10; channels += 1) {
30225 DWConvMicrokernelTester()
30226 .cr(2)
30227 .kr(4)
30228 .channels(2)
30229 .width(5)
30230 .output_stride(13)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030231 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030232 }
30233}
30234
Marat Dukhande06f492020-04-09 00:19:31 -070030235TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030236 for (size_t channels = 1; channels <= 10; channels += 1) {
30237 DWConvMicrokernelTester()
30238 .cr(2)
30239 .kr(4)
30240 .channels(channels)
30241 .width(3)
30242 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030243 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030244 }
30245}
30246
Marat Dukhande06f492020-04-09 00:19:31 -070030247TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030248 for (size_t channels = 1; channels <= 10; channels += 1) {
30249 DWConvMicrokernelTester()
30250 .cr(2)
30251 .kr(4)
30252 .channels(channels)
30253 .width(3)
30254 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030255 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030256 }
30257}
30258
Frank Barchardd5360722020-05-17 16:10:36 -070030259TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, input_offset) {
30260 for (uint32_t channels = 4; channels < 32; channels += 6) {
30261 DWConvMicrokernelTester()
30262 .cr(2)
30263 .kr(4)
30264 .channels(channels)
30265 .input_offset(80)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030266 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030267 }
30268}
30269
30270TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, zero) {
30271 for (uint32_t mz = 0; mz < 4; mz++) {
30272 for (uint32_t channels = 4; channels < 32; channels += 6) {
30273 DWConvMicrokernelTester()
30274 .cr(2)
30275 .kr(4)
30276 .channels(channels)
30277 .input_offset(80)
30278 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030279 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030280 }
30281 }
30282}
Marat Dukhan1c587112020-04-08 20:04:28 -070030283
Marat Dukhande06f492020-04-09 00:19:31 -070030284TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030285 DWConvMicrokernelTester()
30286 .cr(1)
30287 .kr(9)
30288 .channels(1)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030289 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030290}
30291
Marat Dukhande06f492020-04-09 00:19:31 -070030292TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030293 for (uint32_t channels = 2; channels < 10; channels++) {
30294 DWConvMicrokernelTester()
30295 .cr(1)
30296 .kr(9)
30297 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030298 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030299 }
30300}
30301
Marat Dukhande06f492020-04-09 00:19:31 -070030302TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030303 for (uint32_t channels = 2; channels < 10; channels++) {
30304 DWConvMicrokernelTester()
30305 .cr(1)
30306 .kr(9)
30307 .channels(channels)
30308 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030309 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030310 }
30311}
30312
Marat Dukhande06f492020-04-09 00:19:31 -070030313TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030314 for (uint32_t channels = 2; channels < 10; channels++) {
30315 DWConvMicrokernelTester()
30316 .cr(1)
30317 .kr(9)
30318 .channels(channels)
30319 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030320 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030321 }
30322}
30323
Marat Dukhande06f492020-04-09 00:19:31 -070030324TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030325 for (size_t channels = 1; channels <= 5; channels += 1) {
30326 DWConvMicrokernelTester()
30327 .cr(1)
30328 .kr(9)
30329 .channels(channels)
30330 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030331 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030332 }
30333}
30334
Marat Dukhande06f492020-04-09 00:19:31 -070030335TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030336 for (size_t channels = 1; channels <= 5; channels += 1) {
30337 for (size_t step = 2; step <= 9; step++) {
30338 DWConvMicrokernelTester()
30339 .cr(1)
30340 .kr(9)
30341 .channels(channels)
30342 .width(3)
30343 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030344 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030345 }
30346 }
30347}
30348
Marat Dukhande06f492020-04-09 00:19:31 -070030349TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030350 for (size_t channels = 1; channels <= 5; channels += 1) {
30351 DWConvMicrokernelTester()
30352 .cr(1)
30353 .kr(9)
30354 .channels(1)
30355 .width(5)
30356 .output_stride(7)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030357 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030358 }
30359}
30360
Marat Dukhande06f492020-04-09 00:19:31 -070030361TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030362 for (size_t channels = 1; channels <= 5; channels += 1) {
30363 DWConvMicrokernelTester()
30364 .cr(1)
30365 .kr(9)
30366 .channels(channels)
30367 .width(3)
30368 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030369 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030370 }
30371}
30372
Marat Dukhande06f492020-04-09 00:19:31 -070030373TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030374 for (size_t channels = 1; channels <= 5; channels += 1) {
30375 DWConvMicrokernelTester()
30376 .cr(1)
30377 .kr(9)
30378 .channels(channels)
30379 .width(3)
30380 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030381 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030382 }
30383}
30384
Frank Barchardd5360722020-05-17 16:10:36 -070030385TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, input_offset) {
30386 for (uint32_t channels = 2; channels < 16; channels += 3) {
30387 DWConvMicrokernelTester()
30388 .cr(1)
30389 .kr(9)
30390 .channels(channels)
30391 .input_offset(48)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030392 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030393 }
30394}
30395
30396TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, zero) {
30397 for (uint32_t mz = 0; mz < 9; mz++) {
30398 for (uint32_t channels = 2; channels < 16; channels += 3) {
30399 DWConvMicrokernelTester()
30400 .cr(1)
30401 .kr(9)
30402 .channels(channels)
30403 .input_offset(48)
30404 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030405 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030406 }
30407 }
30408}
Marat Dukhan1c587112020-04-08 20:04:28 -070030409
Marat Dukhande06f492020-04-09 00:19:31 -070030410TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030411 DWConvMicrokernelTester()
30412 .cr(1)
30413 .kr(9)
30414 .channels(1)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030415 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030416}
30417
Marat Dukhande06f492020-04-09 00:19:31 -070030418TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030419 for (uint32_t channels = 2; channels < 10; channels++) {
30420 DWConvMicrokernelTester()
30421 .cr(1)
30422 .kr(9)
30423 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030424 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030425 }
30426}
30427
Marat Dukhande06f492020-04-09 00:19:31 -070030428TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030429 for (uint32_t channels = 2; channels < 10; channels++) {
30430 DWConvMicrokernelTester()
30431 .cr(1)
30432 .kr(9)
30433 .channels(channels)
30434 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030435 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030436 }
30437}
30438
Marat Dukhande06f492020-04-09 00:19:31 -070030439TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030440 for (uint32_t channels = 2; channels < 10; channels++) {
30441 DWConvMicrokernelTester()
30442 .cr(1)
30443 .kr(9)
30444 .channels(channels)
30445 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030446 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030447 }
30448}
30449
Marat Dukhande06f492020-04-09 00:19:31 -070030450TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030451 for (size_t channels = 1; channels <= 5; channels += 1) {
30452 DWConvMicrokernelTester()
30453 .cr(1)
30454 .kr(9)
30455 .channels(channels)
30456 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030457 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030458 }
30459}
30460
Marat Dukhande06f492020-04-09 00:19:31 -070030461TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030462 for (size_t channels = 1; channels <= 5; channels += 1) {
30463 for (size_t step = 2; step <= 9; step++) {
30464 DWConvMicrokernelTester()
30465 .cr(1)
30466 .kr(9)
30467 .channels(channels)
30468 .width(3)
30469 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030470 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030471 }
30472 }
30473}
30474
Marat Dukhande06f492020-04-09 00:19:31 -070030475TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030476 for (size_t channels = 1; channels <= 5; channels += 1) {
30477 DWConvMicrokernelTester()
30478 .cr(1)
30479 .kr(9)
30480 .channels(1)
30481 .width(5)
30482 .output_stride(7)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030483 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030484 }
30485}
30486
Marat Dukhande06f492020-04-09 00:19:31 -070030487TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030488 for (size_t channels = 1; channels <= 5; channels += 1) {
30489 DWConvMicrokernelTester()
30490 .cr(1)
30491 .kr(9)
30492 .channels(channels)
30493 .width(3)
30494 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030495 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030496 }
30497}
30498
Marat Dukhande06f492020-04-09 00:19:31 -070030499TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030500 for (size_t channels = 1; channels <= 5; channels += 1) {
30501 DWConvMicrokernelTester()
30502 .cr(1)
30503 .kr(9)
30504 .channels(channels)
30505 .width(3)
30506 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030507 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030508 }
30509}
30510
Frank Barchardd5360722020-05-17 16:10:36 -070030511TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, input_offset) {
30512 for (uint32_t channels = 2; channels < 16; channels += 3) {
30513 DWConvMicrokernelTester()
30514 .cr(1)
30515 .kr(9)
30516 .channels(channels)
30517 .input_offset(48)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030518 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030519 }
30520}
30521
30522TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, zero) {
30523 for (uint32_t mz = 0; mz < 9; mz++) {
30524 for (uint32_t channels = 2; channels < 16; channels += 3) {
30525 DWConvMicrokernelTester()
30526 .cr(1)
30527 .kr(9)
30528 .channels(channels)
30529 .input_offset(48)
30530 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030531 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030532 }
30533 }
30534}
Marat Dukhan1c587112020-04-08 20:04:28 -070030535
Marat Dukhande06f492020-04-09 00:19:31 -070030536TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030537 DWConvMicrokernelTester()
30538 .cr(2)
30539 .kr(9)
30540 .channels(2)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030541 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030542}
30543
Marat Dukhande06f492020-04-09 00:19:31 -070030544TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030545 for (uint32_t channels = 4; channels < 32; channels += 6) {
30546 DWConvMicrokernelTester()
30547 .cr(2)
30548 .kr(9)
30549 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030550 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030551 }
30552}
30553
Marat Dukhande06f492020-04-09 00:19:31 -070030554TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030555 for (uint32_t channels = 4; channels < 32; channels += 6) {
30556 DWConvMicrokernelTester()
30557 .cr(2)
30558 .kr(9)
30559 .channels(channels)
30560 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030561 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030562 }
30563}
30564
Marat Dukhande06f492020-04-09 00:19:31 -070030565TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030566 for (uint32_t channels = 4; channels < 32; channels += 6) {
30567 DWConvMicrokernelTester()
30568 .cr(2)
30569 .kr(9)
30570 .channels(channels)
30571 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030572 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030573 }
30574}
30575
Marat Dukhande06f492020-04-09 00:19:31 -070030576TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030577 for (uint32_t channels = 1; channels < 2; channels++) {
30578 DWConvMicrokernelTester()
30579 .cr(2)
30580 .kr(9)
30581 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030582 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030583 }
30584}
30585
Marat Dukhande06f492020-04-09 00:19:31 -070030586TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030587 for (uint32_t channels = 3; channels < 4; channels++) {
30588 DWConvMicrokernelTester()
30589 .cr(2)
30590 .kr(9)
30591 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030592 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030593 }
30594}
30595
Marat Dukhande06f492020-04-09 00:19:31 -070030596TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030597 for (uint32_t channels = 3; channels < 4; channels++) {
30598 DWConvMicrokernelTester()
30599 .cr(2)
30600 .kr(9)
30601 .channels(channels)
30602 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030603 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030604 }
30605}
30606
Marat Dukhande06f492020-04-09 00:19:31 -070030607TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030608 for (uint32_t channels = 3; channels < 4; channels++) {
30609 DWConvMicrokernelTester()
30610 .cr(2)
30611 .kr(9)
30612 .channels(channels)
30613 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030614 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030615 }
30616}
30617
Marat Dukhande06f492020-04-09 00:19:31 -070030618TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030619 for (size_t channels = 1; channels <= 10; channels += 1) {
30620 DWConvMicrokernelTester()
30621 .cr(2)
30622 .kr(9)
30623 .channels(channels)
30624 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030625 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030626 }
30627}
30628
Marat Dukhande06f492020-04-09 00:19:31 -070030629TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030630 for (size_t channels = 1; channels <= 10; channels += 1) {
30631 for (size_t step = 2; step <= 9; step++) {
30632 DWConvMicrokernelTester()
30633 .cr(2)
30634 .kr(9)
30635 .channels(channels)
30636 .width(3)
30637 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030638 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030639 }
30640 }
30641}
30642
Marat Dukhande06f492020-04-09 00:19:31 -070030643TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030644 for (size_t channels = 1; channels <= 10; channels += 1) {
30645 DWConvMicrokernelTester()
30646 .cr(2)
30647 .kr(9)
30648 .channels(2)
30649 .width(5)
30650 .output_stride(13)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030651 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030652 }
30653}
30654
Marat Dukhande06f492020-04-09 00:19:31 -070030655TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030656 for (size_t channels = 1; channels <= 10; channels += 1) {
30657 DWConvMicrokernelTester()
30658 .cr(2)
30659 .kr(9)
30660 .channels(channels)
30661 .width(3)
30662 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030663 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030664 }
30665}
30666
Marat Dukhande06f492020-04-09 00:19:31 -070030667TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030668 for (size_t channels = 1; channels <= 10; channels += 1) {
30669 DWConvMicrokernelTester()
30670 .cr(2)
30671 .kr(9)
30672 .channels(channels)
30673 .width(3)
30674 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030675 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030676 }
30677}
30678
Frank Barchardd5360722020-05-17 16:10:36 -070030679TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, input_offset) {
30680 for (uint32_t channels = 4; channels < 32; channels += 6) {
30681 DWConvMicrokernelTester()
30682 .cr(2)
30683 .kr(9)
30684 .channels(channels)
30685 .input_offset(80)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030686 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030687 }
30688}
30689
30690TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, zero) {
30691 for (uint32_t mz = 0; mz < 9; mz++) {
30692 for (uint32_t channels = 4; channels < 32; channels += 6) {
30693 DWConvMicrokernelTester()
30694 .cr(2)
30695 .kr(9)
30696 .channels(channels)
30697 .input_offset(80)
30698 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030699 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030700 }
30701 }
30702}
Marat Dukhan1c587112020-04-08 20:04:28 -070030703
Marat Dukhande06f492020-04-09 00:19:31 -070030704TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030705 DWConvMicrokernelTester()
30706 .cr(2)
30707 .kr(9)
30708 .channels(2)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030709 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030710}
30711
Marat Dukhande06f492020-04-09 00:19:31 -070030712TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030713 for (uint32_t channels = 4; channels < 32; channels += 6) {
30714 DWConvMicrokernelTester()
30715 .cr(2)
30716 .kr(9)
30717 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030718 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030719 }
30720}
30721
Marat Dukhande06f492020-04-09 00:19:31 -070030722TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030723 for (uint32_t channels = 4; channels < 32; channels += 6) {
30724 DWConvMicrokernelTester()
30725 .cr(2)
30726 .kr(9)
30727 .channels(channels)
30728 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030729 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030730 }
30731}
30732
Marat Dukhande06f492020-04-09 00:19:31 -070030733TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030734 for (uint32_t channels = 4; channels < 32; channels += 6) {
30735 DWConvMicrokernelTester()
30736 .cr(2)
30737 .kr(9)
30738 .channels(channels)
30739 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030740 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030741 }
30742}
30743
Marat Dukhande06f492020-04-09 00:19:31 -070030744TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030745 for (uint32_t channels = 1; channels < 2; channels++) {
30746 DWConvMicrokernelTester()
30747 .cr(2)
30748 .kr(9)
30749 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030750 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030751 }
30752}
30753
Marat Dukhande06f492020-04-09 00:19:31 -070030754TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030755 for (uint32_t channels = 3; channels < 4; channels++) {
30756 DWConvMicrokernelTester()
30757 .cr(2)
30758 .kr(9)
30759 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030760 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030761 }
30762}
30763
Marat Dukhande06f492020-04-09 00:19:31 -070030764TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030765 for (uint32_t channels = 3; channels < 4; channels++) {
30766 DWConvMicrokernelTester()
30767 .cr(2)
30768 .kr(9)
30769 .channels(channels)
30770 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030771 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030772 }
30773}
30774
Marat Dukhande06f492020-04-09 00:19:31 -070030775TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030776 for (uint32_t channels = 3; channels < 4; channels++) {
30777 DWConvMicrokernelTester()
30778 .cr(2)
30779 .kr(9)
30780 .channels(channels)
30781 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030782 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030783 }
30784}
30785
Marat Dukhande06f492020-04-09 00:19:31 -070030786TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030787 for (size_t channels = 1; channels <= 10; channels += 1) {
30788 DWConvMicrokernelTester()
30789 .cr(2)
30790 .kr(9)
30791 .channels(channels)
30792 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030793 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030794 }
30795}
30796
Marat Dukhande06f492020-04-09 00:19:31 -070030797TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030798 for (size_t channels = 1; channels <= 10; channels += 1) {
30799 for (size_t step = 2; step <= 9; step++) {
30800 DWConvMicrokernelTester()
30801 .cr(2)
30802 .kr(9)
30803 .channels(channels)
30804 .width(3)
30805 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030806 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030807 }
30808 }
30809}
30810
Marat Dukhande06f492020-04-09 00:19:31 -070030811TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030812 for (size_t channels = 1; channels <= 10; channels += 1) {
30813 DWConvMicrokernelTester()
30814 .cr(2)
30815 .kr(9)
30816 .channels(2)
30817 .width(5)
30818 .output_stride(13)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030819 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030820 }
30821}
30822
Marat Dukhande06f492020-04-09 00:19:31 -070030823TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030824 for (size_t channels = 1; channels <= 10; channels += 1) {
30825 DWConvMicrokernelTester()
30826 .cr(2)
30827 .kr(9)
30828 .channels(channels)
30829 .width(3)
30830 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030831 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030832 }
30833}
30834
Marat Dukhande06f492020-04-09 00:19:31 -070030835TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030836 for (size_t channels = 1; channels <= 10; channels += 1) {
30837 DWConvMicrokernelTester()
30838 .cr(2)
30839 .kr(9)
30840 .channels(channels)
30841 .width(3)
30842 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030843 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030844 }
30845}
30846
Frank Barchardd5360722020-05-17 16:10:36 -070030847TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, input_offset) {
30848 for (uint32_t channels = 4; channels < 32; channels += 6) {
30849 DWConvMicrokernelTester()
30850 .cr(2)
30851 .kr(9)
30852 .channels(channels)
30853 .input_offset(80)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030854 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030855 }
30856}
30857
30858TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, zero) {
30859 for (uint32_t mz = 0; mz < 9; mz++) {
30860 for (uint32_t channels = 4; channels < 32; channels += 6) {
30861 DWConvMicrokernelTester()
30862 .cr(2)
30863 .kr(9)
30864 .channels(channels)
30865 .input_offset(80)
30866 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030867 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030868 }
30869 }
30870}
Marat Dukhan1c587112020-04-08 20:04:28 -070030871
Marat Dukhande06f492020-04-09 00:19:31 -070030872TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030873 DWConvMicrokernelTester()
30874 .cr(1)
30875 .kr(25)
30876 .channels(1)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030877 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030878}
30879
Marat Dukhande06f492020-04-09 00:19:31 -070030880TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030881 for (uint32_t channels = 2; channels < 10; channels++) {
30882 DWConvMicrokernelTester()
30883 .cr(1)
30884 .kr(25)
30885 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030886 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030887 }
30888}
30889
Marat Dukhande06f492020-04-09 00:19:31 -070030890TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030891 for (uint32_t channels = 2; channels < 10; channels++) {
30892 DWConvMicrokernelTester()
30893 .cr(1)
30894 .kr(25)
30895 .channels(channels)
30896 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030897 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030898 }
30899}
30900
Marat Dukhande06f492020-04-09 00:19:31 -070030901TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030902 for (uint32_t channels = 2; channels < 10; channels++) {
30903 DWConvMicrokernelTester()
30904 .cr(1)
30905 .kr(25)
30906 .channels(channels)
30907 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030908 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030909 }
30910}
30911
Marat Dukhande06f492020-04-09 00:19:31 -070030912TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030913 for (size_t channels = 1; channels <= 5; channels += 1) {
30914 DWConvMicrokernelTester()
30915 .cr(1)
30916 .kr(25)
30917 .channels(channels)
30918 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030919 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030920 }
30921}
30922
Marat Dukhande06f492020-04-09 00:19:31 -070030923TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030924 for (size_t channels = 1; channels <= 5; channels += 1) {
30925 for (size_t step = 2; step <= 25; step++) {
30926 DWConvMicrokernelTester()
30927 .cr(1)
30928 .kr(25)
30929 .channels(channels)
30930 .width(3)
30931 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030932 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030933 }
30934 }
30935}
30936
Marat Dukhande06f492020-04-09 00:19:31 -070030937TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030938 for (size_t channels = 1; channels <= 5; channels += 1) {
30939 DWConvMicrokernelTester()
30940 .cr(1)
30941 .kr(25)
30942 .channels(1)
30943 .width(5)
30944 .output_stride(7)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030945 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030946 }
30947}
30948
Marat Dukhande06f492020-04-09 00:19:31 -070030949TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030950 for (size_t channels = 1; channels <= 5; channels += 1) {
30951 DWConvMicrokernelTester()
30952 .cr(1)
30953 .kr(25)
30954 .channels(channels)
30955 .width(3)
30956 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030957 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030958 }
30959}
30960
Marat Dukhande06f492020-04-09 00:19:31 -070030961TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030962 for (size_t channels = 1; channels <= 5; channels += 1) {
30963 DWConvMicrokernelTester()
30964 .cr(1)
30965 .kr(25)
30966 .channels(channels)
30967 .width(3)
30968 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030969 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070030970 }
30971}
30972
Frank Barchardd5360722020-05-17 16:10:36 -070030973TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, input_offset) {
30974 for (uint32_t channels = 2; channels < 16; channels += 3) {
30975 DWConvMicrokernelTester()
30976 .cr(1)
30977 .kr(25)
30978 .channels(channels)
30979 .input_offset(48)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030980 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030981 }
30982}
30983
30984TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, zero) {
30985 for (uint32_t mz = 0; mz < 25; mz++) {
30986 for (uint32_t channels = 2; channels < 16; channels += 3) {
30987 DWConvMicrokernelTester()
30988 .cr(1)
30989 .kr(25)
30990 .channels(channels)
30991 .input_offset(48)
30992 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070030993 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070030994 }
30995 }
30996}
Marat Dukhan1c587112020-04-08 20:04:28 -070030997
Marat Dukhande06f492020-04-09 00:19:31 -070030998TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070030999 DWConvMicrokernelTester()
31000 .cr(1)
31001 .kr(25)
31002 .channels(1)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031003 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031004}
31005
Marat Dukhande06f492020-04-09 00:19:31 -070031006TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031007 for (uint32_t channels = 2; channels < 10; channels++) {
31008 DWConvMicrokernelTester()
31009 .cr(1)
31010 .kr(25)
31011 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031012 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031013 }
31014}
31015
Marat Dukhande06f492020-04-09 00:19:31 -070031016TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031017 for (uint32_t channels = 2; channels < 10; channels++) {
31018 DWConvMicrokernelTester()
31019 .cr(1)
31020 .kr(25)
31021 .channels(channels)
31022 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031023 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031024 }
31025}
31026
Marat Dukhande06f492020-04-09 00:19:31 -070031027TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031028 for (uint32_t channels = 2; channels < 10; channels++) {
31029 DWConvMicrokernelTester()
31030 .cr(1)
31031 .kr(25)
31032 .channels(channels)
31033 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031034 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031035 }
31036}
31037
Marat Dukhande06f492020-04-09 00:19:31 -070031038TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031039 for (size_t channels = 1; channels <= 5; channels += 1) {
31040 DWConvMicrokernelTester()
31041 .cr(1)
31042 .kr(25)
31043 .channels(channels)
31044 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031045 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031046 }
31047}
31048
Marat Dukhande06f492020-04-09 00:19:31 -070031049TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031050 for (size_t channels = 1; channels <= 5; channels += 1) {
31051 for (size_t step = 2; step <= 25; step++) {
31052 DWConvMicrokernelTester()
31053 .cr(1)
31054 .kr(25)
31055 .channels(channels)
31056 .width(3)
31057 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031058 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031059 }
31060 }
31061}
31062
Marat Dukhande06f492020-04-09 00:19:31 -070031063TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031064 for (size_t channels = 1; channels <= 5; channels += 1) {
31065 DWConvMicrokernelTester()
31066 .cr(1)
31067 .kr(25)
31068 .channels(1)
31069 .width(5)
31070 .output_stride(7)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031071 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031072 }
31073}
31074
Marat Dukhande06f492020-04-09 00:19:31 -070031075TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031076 for (size_t channels = 1; channels <= 5; channels += 1) {
31077 DWConvMicrokernelTester()
31078 .cr(1)
31079 .kr(25)
31080 .channels(channels)
31081 .width(3)
31082 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031083 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031084 }
31085}
31086
Marat Dukhande06f492020-04-09 00:19:31 -070031087TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031088 for (size_t channels = 1; channels <= 5; channels += 1) {
31089 DWConvMicrokernelTester()
31090 .cr(1)
31091 .kr(25)
31092 .channels(channels)
31093 .width(3)
31094 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031095 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031096 }
31097}
31098
Frank Barchardd5360722020-05-17 16:10:36 -070031099TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, input_offset) {
31100 for (uint32_t channels = 2; channels < 16; channels += 3) {
31101 DWConvMicrokernelTester()
31102 .cr(1)
31103 .kr(25)
31104 .channels(channels)
31105 .input_offset(48)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031106 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070031107 }
31108}
31109
31110TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, zero) {
31111 for (uint32_t mz = 0; mz < 25; mz++) {
31112 for (uint32_t channels = 2; channels < 16; channels += 3) {
31113 DWConvMicrokernelTester()
31114 .cr(1)
31115 .kr(25)
31116 .channels(channels)
31117 .input_offset(48)
31118 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031119 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070031120 }
31121 }
31122}
Marat Dukhan1c587112020-04-08 20:04:28 -070031123
Marat Dukhande06f492020-04-09 00:19:31 -070031124TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031125 DWConvMicrokernelTester()
31126 .cr(2)
31127 .kr(25)
31128 .channels(2)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031129 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031130}
31131
Marat Dukhande06f492020-04-09 00:19:31 -070031132TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031133 for (uint32_t channels = 4; channels < 32; channels += 6) {
31134 DWConvMicrokernelTester()
31135 .cr(2)
31136 .kr(25)
31137 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031138 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031139 }
31140}
31141
Marat Dukhande06f492020-04-09 00:19:31 -070031142TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031143 for (uint32_t channels = 4; channels < 32; channels += 6) {
31144 DWConvMicrokernelTester()
31145 .cr(2)
31146 .kr(25)
31147 .channels(channels)
31148 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031149 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031150 }
31151}
31152
Marat Dukhande06f492020-04-09 00:19:31 -070031153TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031154 for (uint32_t channels = 4; channels < 32; channels += 6) {
31155 DWConvMicrokernelTester()
31156 .cr(2)
31157 .kr(25)
31158 .channels(channels)
31159 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031160 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031161 }
31162}
31163
Marat Dukhande06f492020-04-09 00:19:31 -070031164TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031165 for (uint32_t channels = 1; channels < 2; channels++) {
31166 DWConvMicrokernelTester()
31167 .cr(2)
31168 .kr(25)
31169 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031170 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031171 }
31172}
31173
Marat Dukhande06f492020-04-09 00:19:31 -070031174TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031175 for (uint32_t channels = 3; channels < 4; channels++) {
31176 DWConvMicrokernelTester()
31177 .cr(2)
31178 .kr(25)
31179 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031180 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031181 }
31182}
31183
Marat Dukhande06f492020-04-09 00:19:31 -070031184TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031185 for (uint32_t channels = 3; channels < 4; channels++) {
31186 DWConvMicrokernelTester()
31187 .cr(2)
31188 .kr(25)
31189 .channels(channels)
31190 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031191 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031192 }
31193}
31194
Marat Dukhande06f492020-04-09 00:19:31 -070031195TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031196 for (uint32_t channels = 3; channels < 4; channels++) {
31197 DWConvMicrokernelTester()
31198 .cr(2)
31199 .kr(25)
31200 .channels(channels)
31201 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031202 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031203 }
31204}
31205
Marat Dukhande06f492020-04-09 00:19:31 -070031206TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031207 for (size_t channels = 1; channels <= 10; channels += 1) {
31208 DWConvMicrokernelTester()
31209 .cr(2)
31210 .kr(25)
31211 .channels(channels)
31212 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031213 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031214 }
31215}
31216
Marat Dukhande06f492020-04-09 00:19:31 -070031217TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031218 for (size_t channels = 1; channels <= 10; channels += 1) {
31219 for (size_t step = 2; step <= 25; step++) {
31220 DWConvMicrokernelTester()
31221 .cr(2)
31222 .kr(25)
31223 .channels(channels)
31224 .width(3)
31225 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031226 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031227 }
31228 }
31229}
31230
Marat Dukhande06f492020-04-09 00:19:31 -070031231TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031232 for (size_t channels = 1; channels <= 10; channels += 1) {
31233 DWConvMicrokernelTester()
31234 .cr(2)
31235 .kr(25)
31236 .channels(2)
31237 .width(5)
31238 .output_stride(13)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031239 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031240 }
31241}
31242
Marat Dukhande06f492020-04-09 00:19:31 -070031243TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031244 for (size_t channels = 1; channels <= 10; channels += 1) {
31245 DWConvMicrokernelTester()
31246 .cr(2)
31247 .kr(25)
31248 .channels(channels)
31249 .width(3)
31250 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031251 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031252 }
31253}
31254
Marat Dukhande06f492020-04-09 00:19:31 -070031255TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031256 for (size_t channels = 1; channels <= 10; channels += 1) {
31257 DWConvMicrokernelTester()
31258 .cr(2)
31259 .kr(25)
31260 .channels(channels)
31261 .width(3)
31262 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031263 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031264 }
31265}
31266
Frank Barchardd5360722020-05-17 16:10:36 -070031267TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, input_offset) {
31268 for (uint32_t channels = 4; channels < 32; channels += 6) {
31269 DWConvMicrokernelTester()
31270 .cr(2)
31271 .kr(25)
31272 .channels(channels)
31273 .input_offset(80)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031274 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070031275 }
31276}
31277
31278TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, zero) {
31279 for (uint32_t mz = 0; mz < 25; mz++) {
31280 for (uint32_t channels = 4; channels < 32; channels += 6) {
31281 DWConvMicrokernelTester()
31282 .cr(2)
31283 .kr(25)
31284 .channels(channels)
31285 .input_offset(80)
31286 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031287 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070031288 }
31289 }
31290}
Marat Dukhan1c587112020-04-08 20:04:28 -070031291
Marat Dukhande06f492020-04-09 00:19:31 -070031292TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031293 DWConvMicrokernelTester()
31294 .cr(2)
31295 .kr(25)
31296 .channels(2)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031297 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031298}
31299
Marat Dukhande06f492020-04-09 00:19:31 -070031300TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031301 for (uint32_t channels = 4; channels < 32; channels += 6) {
31302 DWConvMicrokernelTester()
31303 .cr(2)
31304 .kr(25)
31305 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031306 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031307 }
31308}
31309
Marat Dukhande06f492020-04-09 00:19:31 -070031310TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031311 for (uint32_t channels = 4; channels < 32; channels += 6) {
31312 DWConvMicrokernelTester()
31313 .cr(2)
31314 .kr(25)
31315 .channels(channels)
31316 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031317 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031318 }
31319}
31320
Marat Dukhande06f492020-04-09 00:19:31 -070031321TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031322 for (uint32_t channels = 4; channels < 32; channels += 6) {
31323 DWConvMicrokernelTester()
31324 .cr(2)
31325 .kr(25)
31326 .channels(channels)
31327 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031328 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031329 }
31330}
31331
Marat Dukhande06f492020-04-09 00:19:31 -070031332TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031333 for (uint32_t channels = 1; channels < 2; channels++) {
31334 DWConvMicrokernelTester()
31335 .cr(2)
31336 .kr(25)
31337 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031338 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031339 }
31340}
31341
Marat Dukhande06f492020-04-09 00:19:31 -070031342TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031343 for (uint32_t channels = 3; channels < 4; channels++) {
31344 DWConvMicrokernelTester()
31345 .cr(2)
31346 .kr(25)
31347 .channels(channels)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031348 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031349 }
31350}
31351
Marat Dukhande06f492020-04-09 00:19:31 -070031352TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031353 for (uint32_t channels = 3; channels < 4; channels++) {
31354 DWConvMicrokernelTester()
31355 .cr(2)
31356 .kr(25)
31357 .channels(channels)
31358 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031359 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031360 }
31361}
31362
Marat Dukhande06f492020-04-09 00:19:31 -070031363TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031364 for (uint32_t channels = 3; channels < 4; channels++) {
31365 DWConvMicrokernelTester()
31366 .cr(2)
31367 .kr(25)
31368 .channels(channels)
31369 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031370 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031371 }
31372}
31373
Marat Dukhande06f492020-04-09 00:19:31 -070031374TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031375 for (size_t channels = 1; channels <= 10; channels += 1) {
31376 DWConvMicrokernelTester()
31377 .cr(2)
31378 .kr(25)
31379 .channels(channels)
31380 .width(3)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031381 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031382 }
31383}
31384
Marat Dukhande06f492020-04-09 00:19:31 -070031385TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031386 for (size_t channels = 1; channels <= 10; channels += 1) {
31387 for (size_t step = 2; step <= 25; step++) {
31388 DWConvMicrokernelTester()
31389 .cr(2)
31390 .kr(25)
31391 .channels(channels)
31392 .width(3)
31393 .step(step)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031394 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031395 }
31396 }
31397}
31398
Marat Dukhande06f492020-04-09 00:19:31 -070031399TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031400 for (size_t channels = 1; channels <= 10; channels += 1) {
31401 DWConvMicrokernelTester()
31402 .cr(2)
31403 .kr(25)
31404 .channels(2)
31405 .width(5)
31406 .output_stride(13)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031407 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031408 }
31409}
31410
Marat Dukhande06f492020-04-09 00:19:31 -070031411TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031412 for (size_t channels = 1; channels <= 10; channels += 1) {
31413 DWConvMicrokernelTester()
31414 .cr(2)
31415 .kr(25)
31416 .channels(channels)
31417 .width(3)
31418 .qmin(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031419 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031420 }
31421}
31422
Marat Dukhande06f492020-04-09 00:19:31 -070031423TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070031424 for (size_t channels = 1; channels <= 10; channels += 1) {
31425 DWConvMicrokernelTester()
31426 .cr(2)
31427 .kr(25)
31428 .channels(channels)
31429 .width(3)
31430 .qmax(128)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031431 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Marat Dukhan1c587112020-04-08 20:04:28 -070031432 }
31433}
Frank Barchardd5360722020-05-17 16:10:36 -070031434
31435TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, input_offset) {
31436 for (uint32_t channels = 4; channels < 32; channels += 6) {
31437 DWConvMicrokernelTester()
31438 .cr(2)
31439 .kr(25)
31440 .channels(channels)
31441 .input_offset(80)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031442 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070031443 }
31444}
31445
31446TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, zero) {
31447 for (uint32_t mz = 0; mz < 25; mz++) {
31448 for (uint32_t channels = 4; channels < 32; channels += 6) {
31449 DWConvMicrokernelTester()
31450 .cr(2)
31451 .kr(25)
31452 .channels(channels)
31453 .input_offset(80)
31454 .zero_index(mz)
Marat Dukhan104ae5e2021-05-24 13:41:57 -070031455 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, xnn_init_f32_minmax_scalar_params);
Frank Barchardd5360722020-05-17 16:10:36 -070031456 }
31457 }
31458}